学习目标:
回顾并巩固python知识
D2 条件与循环
学习内容:
条件语句
标准格式 if-[elif]-(else)
if expression1: expr1_true_suite
[elif] expression2: expr2_true_suite
…
[elif] expressionN: exprN_true_suite
(else:) expr_false_suite
- 注意:在条件语句中亦可嵌套条件语句
assert 关键词
assert这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError的异常。
循环语句
while循环
while True:
expr_true_suite
else:
expr_false_suite
for循环
for i in object:
do something
else:
do something else
- 注:else为循环结束时执行,只会执行一次
range()函数
range([start,] stop[, step=1])
这个BIF(Built-in functions)有三个参数,其中用中括号括起来的两个表示这两个参数是可选的。
step=1 表示第三个参数的默认值是1。
range 这个BIF的作用是生成一个从start参数的值开始到stop参数的值结束的数字序列,该序列包含start的值但不包含stop的值。
- for i in range(A):
do something with i
enumerate()函数
enumerate(sequence, [start=0])
sequence:一个序列、迭代器或其他支持迭代对象。
start:下标起始位置。
返回 enumerate(枚举) 对象
- 注:该函数会为序列生成对应的索引值,并且以(index,value)的形式保存
- for i, a in enumerate(A):
do something with a
break 语句
break语句可以跳出当前所在层的循环。
continue 语句
continue终止本轮循环并开始下一轮循环。
pass 语句
pass 语句的意思是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,而 pass 语句就是用来解决这些问题的。
推导式
列表推导式
[ expr for value in collection [if condition] ]
元组推导式
( expr for value in collection [if condition] )
字典推导式
{ key_expr: value_expr for value in collection [if condition] }
集合推导式
{ expr for value in collection [if condition] }
其它
next(iterator[, default])
指向对象下一位的指针
Return the next item from the iterator. If default is given and the iterator is exhausted, it is returned instead of raising StopIteration.
练习题
1. 编写一个Python程序来查找那些可以被7除以5的整数的数字,介于1500和2700之间。
x=[i for i in range(1500,2700) if (i % 7) == 5 ]
print(x)
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
def competition(v1,v2,t,s,l):
l1=v1;
l2=v2;
time=1
while (l1<l and l2<l):
if((l1-l2)>=t):
l2=l2+v2*s
time=time+s
else:
l1=l1+v1
l2=l2+v2
time=time+1
if(l1>l and l2>l):
print("D")
print(time)
elif l1<l:
print("R")
print(time)
else:
print("T")
print(time)