Python流程控制有条件选择和循环两种方式,其中条件选择部分的语法跟其他编程语法基本一致,而循环部分的语法则做了增添,例如在while循环中增加while–else,在for循环中增加for–else、for + zip、for + enumerate。在项目开发中利用好这些语法能使我们的代码更加精简直观。(注:本篇不是入门级教程,若有不明白的地方请先看一下书或者CSDN上的其他详细教程)
先放一下语法的思维导图。
1.条件表达式
运算 | 说明 |
---|---|
x or y | x和y至少一个为True,则结果为True;否则为False。 |
x and y | x和y都为True,则结果为True;否则为False。 |
not x | 对x的逻辑值取反。 |
x in s | 如果 s 中的某项等于 x 则结果为 True,否则为 False。 |
x not in s | 如果 s 中的某项等于 x 则结果为 False,否则为 True。 |
x is y | 对象标识。x是y,则返回True;否则返回False。 |
x is not y | 否定的对象标识。x不是y,则返回True;否则返回False。 |
x < y | 如果x小于y,返回True;否则返回False。 |
x <= y | 如果x小于或等于y,返回True;否则返回False。 |
x > y | 如果x大于y,返回True;否则返回False。 |
x >= y | 如果x大于或等于y,返回True;否则返回False。 |
x == y | 如果x等于y,返回True;否则返回False。 |
x != y | 如果x不等于y,返回True;否则返回False。 |
2.条件语句
语法
条件选择有三种语句,分别为if、if–else和if–elif–else语句。多重条件选择和嵌套都是基于这三种语句产生的。
if
if expression: # 如果expression为真,则执行statement的代码
statement
if–else
if expression: # 如果expression为真,则执行statement1的代码
statement1
else: # 否则,则执行statement2的代码
statement2
if–elif–else
if expresion1: # 如果expression1为真,则执行statement1的代码
statement1
elif expression2: # 否则,如果expression2为真,则执行statement2的代码
statement2
else: # 否则,则执行statement3的代码
statement3
代码演示
题目:判断输入的年是否是闰年?
程序分析:闰年。如果年份是百年,则能被400整除;如果不是百年,则能被4整除。
def isLeapYear(year):
if year <= 0:
print("error...year must be positive integer")
elif year % 100 == 0:
if year % 400 == 0:
print("{} is leap year".format(year))
else:
print("{} is not leap year".format(year))
else:
if year % 4 == 0:
print("{} is leap year".format(year))
else:
print("{} is not leap year".format(year))
if __name__ == "__main__":
year = int(input("Please input year:"))
isLeapYear(year)
"""
Please input year:-2029
error...year must be positive integer
Please input year:1000
1000 is not leap year
Please input year:2016
2016 is leap year
"""
3.循环语句
2.1 while循环
语法
while循环中有两种语句,while和while–else语句。
while
while expression: # 如果expression为真,则循环执行statement的代码
statement
# 循环打印每个字符
string = "Python"
i = 0
while i < len(string):
print(string[i])
i += 1
"""
P
y
t
h
o
n
"""
while–else
while expression: # 如果expression为真,则循环执行statement1的代码
statement1
else:
statement2
该语法用于希望循环结束之后还要执行一些附加操作。有三种用法:
(1) while循环不执行或正常执行结束后执行else语句;
(2) while循环执行完continue语句后结束,执行else语句;
(3) while循环执行break语句退出循环,则不执行else语句。
while False:
print("while循环不执行")
else:
print("执行else语句")
"""
执行else语句
"""
# 循环打印每个字符,当遇到"\n"时结束循环
string = "Python\nABC"
i = 0
while i < len(string):
if string[i] == "\n":
break
print(string[i],end=" ")
i += 1
else:
print("不执行else语句")
"""
P y t h o n
"""
# 循环打印每个字符,当遇到最后一个字符时,结束循环
print()
string = "Python"
i = 0
flag = True
while i <= len(string)-1:
if i == len(string) - 1:
i += 1
continue
print(string[i],end=" ")
i += 1
else:
print("执行else语句")
"""
P y t h o 执行else语句
"""
2.2 for循环
语法
for循环中有两种语句,分别为for和for–else语句。
for
for value in iterable: # 遍历可迭代对象iterable,循环执行loop_statement的代码
loop_statement
# 循环打印每个字符
string = "Python"
for s in string: # 按值遍历
print(s,end=" ")
"""
P y t h o n
"""
print()
for idx in range(len(string)): # 按索引遍历
print(string[idx],end=" ")
"""
P y t h o n
"""
for–else
for value in iterable: # iterable为可迭代对象
loop_statement # 循环执行的代码
else:
statement
该语法用于希望循环结束之后还要执行一些附加操作。跟while–else语句用法一样。有三种用法:
(1) for循环不执行或正常执行结束后执行else语句;
(2) for循环执行完continue语句后结束,执行else语句;
(3) for循环执行break语句退出循环,则不执行else语句。
list1 = [1,2,3,4,5]
# 用法1 for循环正常执行结束后,再执行else语句
for value in list1:
print(value)
else:
print("遍历完成")
"""
1
2
3
4
5
遍历完成
"""
# 用法2 for循环执行到break语句跳出循环后,不再执行else语句
for idx,value in enumerate(list1):
if idx == 3:
break
print(value)
else:
print("不再执行else语句")
"""
1
2
3
"""
# 用法3 for循环中的最后一次循环执行到continue时,再执行else语句
for idx,value in enumerate(list1):
if idx == len(list1) - 1:
continue
print(value)
else:
print("执行完continue后循环结束")
"""
1
2
3
4
执行完continue后循环结束
"""
for + zip
需要同时遍历多个对象时需要用到Python内置函数zip(*iterable),将多个对象打包成一个可迭代对象。
list1 = ["A","B","C","D","E"]
list2 = [1,2,3,4,5,6,7]
print(zip(list1,list2)) # <zip object at 0x000001D1904D3980>
for v in zip(list1,list2): # list2只取前len(list1)个数据
print(v)
"""
('A', 1)
('B', 2)
('C', 3)
('D', 4)
('E', 5)
"""
for v1,v2 in zip(list1,list2): # v1,v2同时分别遍历list1和list2
print(v1,v2)
"""
A 1
B 2
C 3
D 4
E 5
"""
for + enumerate
需要同时遍历可迭代对象的索引和值时需要用到Python内置函数enummerate(iterable)。enumerate
(iterable):把iterable序列化为枚举对象,可同时遍iterable的索引和值。
list1 = ["A","B","C","D","E"]
print(enumerate(list1)) # <enumerate object at 0x000001D18F2AECC0>
for v in enumerate(list1): #
print(v)
"""
(0, 'A')
(1, 'B')
(2, 'C')
(3, 'D')
(4, 'E')
"""
# 把list1序列化为枚举对象,可同时遍历索引和值
for idx,value in enumerate(list1):
print(idx,value)
"""
0 A
1 B
2 C
3 D
4 E
"""
2.3退出循环
break:在循环中执行到break语句时退出循环。(只能退出一层循环)
continue:在循环中执行到continue语句时,不再执行continue下方的代码,直接跳到下一次循环
list1 = [1,2,3,4,5,6,7,8]
# 循环输出list1,当输出完第5个数时退出循环
for idx,value in enumerate(list1):
print(value)
if idx == 5:
break
"""
1
2
3
4
5
6
"""
# 循环输出list1中的偶数
for value in list1:
if value % 2 == 1:
continue
print(value)
"""
2
4
6
8
"""