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)