[PYTHON学习]03条件语句 04循环语句
1条件语句
1.1 if语句
if expression:
expr_true_suite
- 只有if语句里的代码块为真时,才会执行代码。否则执行紧跟在后面的语句
- if后面的expression表达式可以有and,or或者nor等实现多重的判断
2.2 if-else语句
if expression:
expr_true_suite
else:
expr_false_suite
- python中if搭配使用的else,作为if语句条件表达结果为假是所要执行的语句。
- if语句是支持嵌套的。即if中还可以再加一个语句,从而构成层次上的选择结构。
- Python 使用缩进而不是大括号来标记代码块边界,因此要特别注意else的悬挂问题。
1.3 if-elif-else 语句
if expression1:
expr1_true_suite
elif expression2:
expr2_true_suite
.
.
elif expressionN:
exprN_true_suite
else:
expr_false_suite
- elif语句即为else if。这里可以有多个elif,来检查多个表达式是否为真。最后一个写else。
1.4 assert关键词
也叫断言语句。
my_list = ['lsgogroup']
my_list.pop(0)
assert len(my_list) > 0
# AssertionError
- assert这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError的异常。
- 在进行单元测试时,可以用来在程序中置入检查点,只有条件为 True 才能让程序正常工作。
2循环语句
2.1 while循环
while 布尔表达式:
代码块
布尔表达式来判断是否构成循环的条件。
如果一直符合,则会一直执行代码块中的内容。知道布尔表达式的值为假,会跳出循环
如果布尔表达式不带有<、>、==、!=、in、not in等运算符,仅仅给出数值之类的条件,也是可以的。
当while后写入一个非零整数时,视为真值,执行循环体;写入0时,视为假值,不执行循环体。也可以写入str、list或任何序列,长度非零则视为真值,执行循环体;否则视为假值,不执行循环体。
2.2 while-else 循环
while 布尔表达式:
代码块
else:
代码块
注意:当while循环正常执行完的情况下,执行else输出,如果while循环中执行了跳出循环的语句,比如 break,将不执行else代码块的内容。
2.3 for循环
for 迭代变量 in 可迭代对象:
代码块
- for循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如str、list、tuple等,也可以遍历任何可迭代对象,如dict
- 每次循环,迭代变量被设置为可迭代对象的当前元素,提供给代码块使用。
2.4 for-else 循环
for 迭代变量 in 可迭代对象:
代码块
else:
代码块
当for循环正常执行完的情况下,执行else输出,如果for循环中执行了跳出循环的语句,比如 break,将不执行else代码块的内容,与while - else语句一样。
2.5 range()函数
range([start,] stop[, step=1])
- 三个参数:中括号表示可选。
- step=1表示第三个参数的默认值=1
- 生成一个数字序列,从start参数值开始到stop参数值结束。注意:包括start的值但不包括stop的值。
- step表示步伐大小,比如step=2
for i in range(1, 10, 2):
print(i)
# 1
# 3
# 5
# 7
# 9
2.6 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
#-默认为0
for i, language in enumerate(languages):
print(i, 'I love', language)
print('Done!')
'''
0 I love Python
1 I love R
2 I love Matlab
3 I love C++
Done!
'''
#j=2
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!
'''
2.7 break语句和continue语句
- break语句可以跳出当前所在层的循环
- continue终止本轮循环并开始下一轮循环
count=1
while 0<count<3:
print("yes")
count+=1
if count==count:
print('here')
else:
print("no")
print('over')
#正常循环:yes here yes here no over
#continue语句
count=1
while 0<count<3:
print("yes")
count+=1
continue
if count==count:
print('here')
else:
print("no")
print('over')
#yes yes no over
#break语句
count=1
while 0<count<3:
print("yes")
count+=1
break
if count==count:
print('here')
else:
print("no")
print('over')
#yes over
2.8 pass语句
pass 语句的意思是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,而 pass 语句就是用来解决这些问题的。
def a_func():
# SyntaxError: unexpected EOF while parsing
##上面什么都不写会出错,pass是为了解决这个问题的,改为:
def a_func():
pass
pass是空语句,不做任何操作,只起到占位的作用,其作用是为了保持程序结构的完整性。尽管pass语句不做任何操作,但如果暂时不确定要在一个位置放上什么样的代码,可以先放置一个pass语句,让代码可以正常运行。
2.9推导式
- 列表推导式
[ 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之间
for i in range(1500,2701):
if i%7==0 and i%5==0:
print(i)
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”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。
第二行输出一个正整数:表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。
注:不太能写得来 有借鉴
data = list(map(int, input().split()))
Rabbit = data[0] # 兔子的速度v1
Turtle = data[1] # 乌龟的速度v2
excelDistance = data[2] # 兔子对应的t
sleepTime = data[3] # 兔子对应的s
objectDistance = data[4] #赛道的长度l
time = TL = RL = 0
while True:
if RL - TL >= excelDistance:
for i in range(sleepTime):
TL += Turtle
time += 1
if TL >= objectDistance > RL:
print("T")
print(time)
exit()
# RL += 0
else:
RL += Rabbit
TL += Turtle
time += 1
if RL >= objectDistance > TL:
print("R")
print(time)
break
elif TL >= objectDistance > RL:
print("T")
print(time)
break
elif RL == TL >= objectDistance:
print("D")
print(time)
break