if语句
if expression
expr_true_suite
1、if语句的expr_true_suite代码块只有当条件表达式expression结果为真时才执行,否则将继续执行紧跟在该代码块后面的语句。
2、单个if语句中的expression条件表达式可以通过布尔操作符and,or,not实现多重条件判断。
# example
if 2 > 1 and not 2 >3:
print('Correct Judgement!')
if-else语句
if expression:
expr_true_suite
else:
expr_false_suite
如果if语句的条件表达式结果布尔值为假,那么程序将执行else语句后的代码。
if语句支持嵌套,即在一个if语句中嵌入另一个if语句。Python使用缩进而不是大括号来标记代码块边界,因此要特别注意else的悬挂问题。
h = 6
if h > 2:
if h > 7:
print('Good')
else:
if h == 2:
print('h=2')
print('Bad')
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。
assert关键词
assert关键词我们称之为“断言”,当这个关键词后边的条件为False时,程序自动崩溃并抛出AssertionError的异常。
my_list = ['hahaha']
my_list.pop(0)
assert len(my_list) > 0 # AssertionError
因此在进行单元测试时,可以用来在程序中置入检查点,只有条件为True才能让程序正常工作。
while循环
while 布尔表达式:
代码块
当while后写入一个非零整数时,视为真值,执行循环体;写入0时,视为假值,不执行循环体。也可以写入str、list或任何序列,长度非零则视为真值;否则视为假值。
while - else循环
while 布尔表达式:
代码块
else:
代码块
当while循环正常执行完的情况下,执行else输出,如果while循环中执行了跳出循环的语句,比如break,将不执行else代码块的内容。
for循环
for循环是迭代循环,可以遍历任何有序序列,如str、list、tuple等,也可以遍历任何可迭代对象,如dict。
for 迭代变量 in 可迭代对象:
代码块
#example
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 key in dic.keys():
print(key,end=' ')
# a b c d
for - else循环
for 迭代变量 in 可迭代对象:
代码块
else:
代码块
作用和while-else一样。
range()函数
range(start,stop,step=1)
其中start和step是可选的。step默认值为1.得到的序列包含start的值但不包含stop的值,start没指定默认从0开始。
enumerate()函数
enumerate(sequence,start=0)
sequence:一个序列、迭代器或其他支持迭代对象。
start:下标起始位置,默认为0。
返回enumerate(枚举)对象
# example
seasons = ['Spring','Summer','Fall','Winter']
lst = list(enumerate(seasons))
print(lst)
# [(0,'Spring'),(1,'Summer'),(2,'Fall'),(3,'Winter')]
for i,a in enumerate(A)
do something with a
break语句、continue语句和pass语句
break语句可以跳出当前所在层的循环。
continue终止本轮循环并开始下一轮循环。
pass语句的意思是“不做任何事”,只起到占位的作用,其作用是为了保持程序结构的完整性。
# example
def a_func():
pass
# 如果不加pass会报错
推导式
列表推导式
[ expr for value in collection [if condition] ]
元组推导式
( expr for value in collection [if condition] )
# example
a = (x for x in range(10))
print(a)
# <generator object <genexpr> at 0x02809B50>
print(tuple(a))
# (0,1,2,3,4,5,6,7,8,9)
字典推导式
{ key_expr: value_expr for value in collection [if condition] }
集合推导式
{ expr for value in collection [if condition] }
其他注意
e = (i for i in range(10))
print(e)
# <generator object <genexpr> at 0x02809B50>
print(next(e)) # 0
print(next(e)) # 1
for each in e:
print(each,end=' ')
# 2 3 4 5 6 7 8 9
s = sum([i for i in range(101)])
print(s) # 5050
s = sum((i for i in range(101)))
print(s) # 5050
练习题
1、编写一个Python程序来查找那些既可以被7整除也可以被5整除的数字,介于1500和2700之间。
x = [i for i in range(1500,2700) if i%7 == 0 and i % 5 == 0]
print(x)
# [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、龟兔赛跑游戏
v1 = input("v1:")
v2 = input("v2:")
t = input("t:")
s = input("s:")
l = int(input("l:"))
r1 = 0
r2 = 0
stop = 0
temp1 = int(l)
temp2 = int(l)
time = 0
while temp1 > 0 and temp2 > 0:
time = time + 1
if r1 - r2 >= int(t):
stop = int(s)
if stop > 0:
r2 += int(v2)
temp2 = l - r2
else:
r1 += int(v1)
r2 += int(v2)
temp2 = l - r2
temp1 = l - r1
stop = stop - 1
print(r2,r1,sep=' ')
if r2 > r1:
print('T')
elif r2 == r1:
print('D')
else:
print('R')
print(time)