1. assert 关键词
当进行数据挖掘的EDA时候经常会用到,判断当前的Dataframe是否正确,以免影响到后续模型训练。
assert
这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError
的异常。- 为True对时候就会继续执行。
【例子】
my_list = ['lsgogroup']
my_list.pop(0)
assert len(my_list) > 0
# AssertionError
- 在进行单元测试时,可以用来在程序中置入检查点,只有条件为 True 才能让程序正常工作。
【例子】
assert 3 > 7
# AssertionError
while 循环
while
语句最基本的形式包括一个位于顶部的布尔表达式,一个或多个属于while
代码块的缩进语句。
while 布尔表达式:
代码块
while
循环的代码块会一直循环执行,直到布尔表达式的值为布尔假。
如果布尔表达式不带有<、>、==、!=、in、not in
等运算符,仅仅给出数值之类的条件,也是可以的。当while
后写入一个非零整数时,视为真值,执行循环体;写入0
时,视为假值,不执行循环体。也可以写入str、list
或任何序列,长度非零则视为真值,执行循环体;否则视为假值,不执行循环体。
给一个牛客的题感受一下:
"""求两个正整数a和b的最小公倍数"""
#这里利用了欧几里得算法,最大公约数gcd(a,b)=gcd(b,a%b),这里是a对b的模
#牛客的编译器需要自己输入,用Input(),默认是字符串的类型,
#可以用map(int,Input())转化为整型
def gcd(a,b):
#求最大公约数,递归求法
if b==0:
return a
return gcd(b,a%b)
def lcm(a,b):
#求最小公倍数;最小公倍数与最大公约数乘积即为这两数乘积
return a*b // gcd(a,b)
while True:
try:
a, b = map(int, input().split())
print(lcm(a,b))
except:
break
for循环
for
循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如str、list、tuple
等,也可以遍历任何可迭代对象,如dict
。
for 迭代变量 in 可迭代对象:
代码块
每次循环,迭代变量被设置为可迭代对象的当前元素,提供给代码块使用。
for i in 'ILoveLSGO':
print(i, end=' ') # 不换行输出
# I L o v e L S G O
dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
for key, value in dic.items():
print(key, value, sep=':', end=' ')
# a:1 b:2 c:3 d:4
for i, value in enumerate(list):
#输出i为value的索引位置
enumerate()函数
enumerate(sequence, [start=0])
- sequence – 一个序列、迭代器或其他支持迭代对象。
- start – 下标起始位置。
- 返回 enumerate(枚举) 对象
【例子】
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
lst = list(enumerate(seasons))
print(lst)
# [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
lst = list(enumerate(seasons, start=1)) # 下标从 1 开始
print(lst)
# [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
enumerate()
与 for 循环的结合使用
for i, a in enumerate(A)
do something with a
用 enumerate(A)
不仅返回了 A
中的元素,还顺便给该元素一个索引值 (默认从 0 开始)。此外,用 enumerate(A, j)
还可以确定索引起始值为 j
。
【例子】
languages = ['Python', 'R', 'Matlab', 'C++']
for language in languages:
print('I love', language)
print('Done!')
'''
I love Python
I love R
I love Matlab
I love C++
Done!
'''
for i, language in enumerate(languages, 2):
print(i, 'I love', language)
print('Done!')
'''
2 I love Python
3 I love R
4 I love Matlab
5 I love C++
Done!
'''
break 语句
break
语句可以跳出当前所在层的循环。
【例子】
import random
secret = random.randint(1, 10) #[1,10]之间的随机数
while True:
temp = input("不妨猜一下小哥哥现在心里想的是那个数字:")
guess = int(temp)
if guess > secret:
print("大了,大了")
else:
if guess == secret:
print("你这样懂小哥哥的心思啊?")
print("哼,猜对也没有奖励!")
break
else:
print("小了,小了")
print("游戏结束,不玩儿啦!")
continue 语句
continue
终止本轮循环并开始下一轮循环。
【例子】
for i in range(10):
if i % 2 != 0:
print(i)
continue
i += 2
print(i)
# 2
# 1
# 4
# 3
# 6
# 5
# 8
# 7
# 10
# 9
综合例子
passwdList = ['123', '345', '890']
valid = False
count = 3
while count > 0:
password = input('enter password:')
for item in passwdList:
if password == item:
valid = True
break
if not valid:
print('invalid input')
count -= 1
continue
else:
break
练习题:
1、编写一个Python程序来查找那些既可以被7整除又可以被5整除的数字,介于1500和2700之间。
# your code here
num = map(int, input())
while num>1500 and num<2700:
if num % 5==0 and num % 7==0:
print(num)
else:
continue
2、龟兔赛跑游戏
题目描述:
话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔 子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以 上,它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。
然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1(表示每秒兔子能跑v1 米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找 到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。
输入:
输入只有一行,包含用空格隔开的五个正整数v1,v2,t,s,l,其中(v1,v2< =100;t< =300;s< =10;l< =10000且为v1,v2的公倍数)
输出:
输出包含两行,第一行输出比赛结果——一个大写字母“T”或“R”或“D”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。
第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。
样例输入:
10 5 5 2 20
样例输出
D
4
# your code here
data = list(map(int, input().split()))
Rabbit= data[0] # 兔子的速度v1
Turtle = data[1] # 乌龟的速度v2
R_D_T= data[2] # 兔子对应的t 领先t米
slep= data[3] # 兔子对应的休息时间s
sumD = data[4] #赛道的长度l
time = TL = RL = 0 TL RL分别为走过的距离
while True:
if RL - TL >= R_D_T:
for i in range(slep):
TL += Turtle
time += 1
if TL >= sumD > RL: 在兔子休息的时候 乌龟可能已经到达终点了,此时就要终止,而不
print("T") 是等兔子休息完
print(time)
exit()
# RL += 0
else:
RL += Rabbit
TL += Turtle
time += 1
if RL >= sumD > TL:
print("R")
print(time)
break
elif TL >= sumD > RL:
print("T")
print(time)
break
elif RL == TL >= sumD :
print("D")
print(time)
break