条件循环结构
条件结构
if语句
if expression:
expr_true_suite
- 在第一行中,可包含任何条件测试,而在紧跟在测试后面的缩进代码块中,可执行任何操作,如果条件测试的结果为True,python会执行紧跟在if语句后面的代码,否则python将忽略这些代码。
- if 语句的 expr_true_suite 代码块只有当条件表达式 expression 结果为真时才执行,否则将继续执行紧跟在该代码块后面的语句。
- 单个 if 语句中的 expression 条件表达式可以通过布尔操作符 and,or和not 实现多重条件判断。
if-else语句
if expression:
expr_true_suite
else:
expr_false_suite
-
if-else语句块类似于简单的if语句,但其中的else语句能够构成指定条件测试未通过时要执行的操作。
-
如果 if 语句的条件表达式结果布尔值为假,那么程序将执行 else 语句后的代码。
if-elif-else语句
if expression1:
expr1_true_suite
elif expression2:
expr2_true_suite
.
.
elif expressionN:
exprN_true_suite
else:
expr_false_suite
-
经常需要检查超过两个以上的情形,可以使用if-elif-else结构。python只执行if-elif-else结构中的一个代码块,依次检查每个条件测试,直到遇到通过了的条件测试,测试通过后,python将执行,跟随它后面的代码并跳过余下的测试。
-
elif 语句即为 else if,用来检查多个表达式是否为真,并在为真时执行特定代码块中的代码。
assert 关键词
my_list = ['lsgogroup']
my_list.pop(0)
assert len(my_list) > 0
# AssertionError
- assert这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError的异常。
循环结构
while 循环
while 布尔表达式:
代码块
- 循环的代码块会一直循环执行,直到布尔表达式的值为布尔假。
- for循环用于针对集合中的每个元素的一个代码块,而while循环不断的进行,直到指定的条件不满足为止。
while - else 循环
while 布尔表达式:
代码块
else:
代码块
- 正常执行完循环,执行else。
- 若是由于break语句跳出循环,则不执行else。
for 循环
for 迭代变量 in 可迭代对象:
代码块
- for循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列。
- 每次循环,迭代变量被设置为可迭代对象的当前元素,提供给代码块使用。
- 可迭代对象:有序序列数据(str、list、tuple、dict、iter迭代器)。
其中dict迭代较为特殊。
for key, value in dict.items(): # items()返回键值对
for key in dict.key(): # keys()取出键
for value in dict.values(): # values()取出值
for - else 循环
for 迭代变量 in 可迭代对象:
代码块
else:
代码块
- 正常执行完循环,执行else。
- 若是由于break语句跳出循环,则不执行else。
range() 函数
range([start,] stop[, step=1])
- 这个BIF(Built-in functions)有三个参数,其中用中括号括起来的两个表示这两个参数是可选的。
- step=1 表示第三个参数的默认值是1。
- range 这个BIF的作用是生成一个从start参数的值开始到stop参数的值结束的数字序列,该序列包含start的值但不包含stop的值。
enumerate()函数
enumerate(sequence, [start=0])
- 返回一个迭代对象包含元素和新建的索引使用循坏可以查看。
- sequence为可迭代对象,start为开始的下标,返回一个可迭代的元组结构(index, sequence[index])。
- enumerate()与 for 循环的结合使用。
for i, a in enumerate(A)
do something with a
break 和 continue pass
- break语句可以跳出当前所在层的循环。
- continue终止本轮循环并开始下一轮循环。
- break会跳出整个循坏,continue是不进行本次循坏之后的操作。
- 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] }
练习
1、编写一个Python程序来查找那些既可以被7整除又可以被5整除的数字,介于1500和2700之间。
print([x for x in range(1500,2701) if x%7==0 and x%5==0])
#运行结果:[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、龟兔赛跑游戏
题目描述:
话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔 子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先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
- 将代码分为赛前数据准备部分,比赛中和判断结果。其中还需要统计兔子、乌龟实时路程和秒数,当实时路程小于预设路程时,则进入循环。经过运算得出比赛结果并输出。
# -*- coding: utf-8 -*-
#赛前数据准备部分:
v1, v2, t, s, l =map(int,input('输入v1, v2, t, s, l空格隔开:').split())
l1 = 0 #兔子实时路程
l2 = 0 #乌龟实时路程
Seconds = 0 #统计秒数
#比赛中:
while(l1 < l and l2 < l):
l1 += v1
l2 += v2
Seconds += 1
if l1 >= l or l2 >= l:
break
elif l1 >= l2 + t:
l2 += v2 * s
Seconds += s
#输出判断结果:
if l1 <l and l2 >=l:
print('T')
elif l1 >= l and l2 <l:
print('R')
else:
print('D')
print(Seconds)