Python基础TASK2:条件语句与循环语句
1.条件语句
assert关键词
assert
这个关键词我们称之为“断言”,当这个关键词后边的条件为 False
时,程序自动崩溃并抛出AssertionError的异常。断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,例如我们的代码只能在 Linux 系统下运行,可以先判断当前系统是否符合条件。
语法格式如下:
assert expression
等价于:
if not expression:
raise AssertionError
assert 后面也可以紧跟参数:
assert expression [, arguments]
等价于:
if not expression:
raise AssertionError(arguments)
实例:判断当前系统是否为Linux,不满足直接不运行接下来的代码:
import sys
assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"
# 接下来要执行的代码
2.循环语句
while
如果布尔表达式不带有<、>、==、!=、in、not in等运算符,仅仅给出数值之类的条件,也是可以的。当while后写入一个非零整数时,视为真值,执行循环体;写入0时,视为假值,不执行循环体。也可以写入str、list或任何序列,长度非零则视为真值,执行循环体;否则视为假值,不执行循环体。
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(A, j)
还可以确定索引起始值为 j。
跳出循环的语句
break
:直接跳出当前所在层的循环,不继续进行该循环。
continue
:终止本轮循环并开始下一轮循环,不继续后面的循环内语句,直接开启下一轮循环。
推导式
列表推导式:
对列表内的元素进行函数运算,得到新的列表。
例:
x = [-4, -2, 0, 2, 4]
y = [a * 2 for a in x]
print(y)
# [-8, -4, 0, 4, 8]
元组推导式
对元组内元素进行函数运算,得到新的元组。
( expr for value in collection [if condition] )
此外还有字典推导式,集合推导式。
3.练习题
1.编写一个Python程序来查找那些既可以被7整除又可以被5整除的数字,介于1500和2700之间。
for i in range(1500,2701):
if i % 7 ==0 and i % 5 ==0:
print(i)
可得到结果:
1505
1540
1575
1610
1645
1680
1715
1750
1785
1820
1855
1890
1925
1960
1995
2030
2065
2100
2135
2170
2205
2240
2275
2310
2345
2380
2415
2450
2485
2520
2555
2590
2625
2660
2695
2.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”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。
第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。
def RandT(v1,v2,t,s,l):
T_t = l/v2
t_2 = 0
t_1 = 0
lu_1 = 0
flag = 1
while flag:
t_1 = t_1 + 1
t_2 = t_2 + 1
lu_1 = t_2 * v_1
if lu_1 >= l:
flag = 0
elif (lu_1 - t_2 * v_2) >= t:
t_1 = t_1 + s
if t_1 > T_t: # 根据时间判断输赢
print("T")
print(T_t,t_1)
elif t_1 < T_t:
print("R")
print(t_1)
else:
print("D")
print(t_1,T_t)
list_1=[]
v1,v2,t,s,l=input("请依次输入v1,v2,t,s,l(空格隔开)其中(v1,v2< =100;t< =300;s< =10;l< =10000且为v1,v2的公倍数):
").split(' ')
list=[v1,v2,t,s,l]
for i in list: #将输入的字符串转为正整数并读入新列表
data=int(i)
list_1.append(data)
v_1,v_2,add,ts,lu=list_1 #依次取出数据
RandT(v_1,v_2,add,ts,lu)
可得结果:
请依次输入v1,v2,t,s,l(空格隔开)其中(v1,v2< =100;t< =300;s< =10;l< =10000且为v1,v2的公倍数):
10 5 5 2 20
D
4 4.0