流程控制

Python
作者

yangjh

发布于

2022年11月22日

Python中的流程控制主要包括条件语句、循环语句以及异常处理。这些控制结构使得程序能够根据不同的条件执行不同的代码路径,从而提高程序的灵活性和效率。

分支控制

  1. if语句后面的条件判断表达式使用 : 结束。
  2. 可以使用elifelse进行组合判断。
  3. else后不能加判断条件。
  4. if语句可以嵌套。

if-else

Python 使用if-else进行控制声明。语法如下:

if boolean-expression:
   #statements
else:
   #statements

在每一个 if 程序块中,必须使用相同数量的缩进,否则会产生语法错误。这是 Python 和其他语言非常不同的一点。

现在我们看一个例子:

i = 11
if i % 2 == 0:
    print("偶数")
else:
    print("奇数")

运行结果将根据 i的值发生变化。

if-elif-else

当需要判断多个条件,可使用if-elif-else 控制声明。

today = "monday"

if today == "monday":
   print("this is monday")
elif today == "tuesday":
   print("this is tuesday")
elif today == "wednesday":
   print("this is wednesday")
elif today == "thursday":
   print("this is thursday")
elif today == "friday":
   print("this is friday")
elif today == "saturday":
   print("this is saturday")
elif today == "sunday":
   print("this is sunday")
else:
   print("something else")

我们可以根据实际需求,添加对应的多个 elif 条件。

分支嵌套

我们可以在 if 声明语句块中嵌套使用 if 声明。例如:

today = "holiday"
bank_balance = 25000
if today == "holiday":
    if bank_balance > 20000:
        print("Go for shopping")
    else:
        print("Watch TV")
else:
    print("normal working day")

三元运算符

true if condition else false

例如:

def b(a):
    return a+2 if a > 10 else 5

print(b(11), b(4))

上面的代码将输出13 5

循环语句

Python 有两种循环:for 循环和 while 循环。

for循环

for 循环语法

for iterating_var in sequence:
  statements
参数 描述
for for 循环使用的关键字
iterating_var for 循环每次迭代使用的变量
in for 循环使用的关键字
sequence for 循环需要遍历的变量
statements 每次循环执行的语句
  1. 所有在 for 循环或者 while 循环中的声明,必须使用相同的缩进值。否则会出现语法错误。
  2. for循环可以嵌套使用。

案例1:循环处理序列元素

mylist = [1, 2, 3, 4]
for i in mylist:
    print(i)

在第1次循环时,值 1 被传递给 i,第2次循环时,值 2 被传递给 i。循环一直到列表变量 mylist 没有更多元素时停止。运行结果为:

1
2
3
4

案例2: 循环处理字典内容

"""在字典中循环时,用 `items()` 方法可同时取出键和对应的值:"""
books = {'标题': 'Python一学就会', '作者': '小明'}
for k, v in books.items():
    print(k, v)
out:
标题 Python一学就会
作者 小明

案例3: 循环处理序列的索引和值

"""在序列中循环时,用enumerate()函数可以同时取出位置索引和对应的值:"""
for i, v in enumerate(['tic', 'tac', 'toe']):
    print(i, v)
...
0 tic
1 tac
2 toe

案例4: 循环处理多个序列

"""同时循环两个或多个序列时,用zip()函数可以将其内的元素一一匹配"""
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
   print('What is your {0}?  It is {1}.'.format(q, a))
"""结果:
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.
"""

案例5:在一定范围内循环

"""range()函数能够指定循环的起始值和结束值,从而让循环体在指定的范围内循环。例如:"""
for i in range(10):
    print(i)                    # 0-9
for i in range(1,10):
    print(i)                    # 1-9
for i in range(1,10,2):
    print(i)                    # 1,3,5,7

range() 函数只有 1 个参数时,表示从 0 开始循环;两个参数时,第一个参数是起始值,第二个参数是结束值;三个参数时,第三个参数表示循环步长。

while循环

While 循环会一直执行循环体内部的声明,直到条件变成 False。每次循环都会检查判断条件,如果为真,就继续循环。

while 循环语法

while condition:
    do something

例如:

count = 0

while count < 10:
    print(count)
    count += 1

这段代码将会打印出0-9,直到 count 等于 10。

中断循环

可以使用break 语句中断循环,还可以使用else进行判断。

break

使用 break 语句,配合if语句,可以在满足某个条件的时候中断循环。

count = 0
while count < 10:
    count += 1
    if count == 5:
        break
    print("inside loop", count)
print("out of while loop")

运行结果为:

inside loop 1
inside loop 2
inside loop 3
inside loop 4
out of while loop

for break else

for 循环若不是被 break 语句终止执行的,那么 else 的代码会正常执行

for i in range(3):
    print('i =', i)
else:
    print('Else')
print("Over")
for i in range(3):
    if i == 1:
        break
    print('i =', i)
else:
    print('Else')
print("Over")
"""输出:
i = 0
i = 1
i = 2
Else
Over
i = 0
Over
"""

继续循环

当循环体内部出现 continue 声明时,会结束本次循环,跳转到循环体开始位置,开始下一次循环。

count = 0

while count < 10:
    count += 1
    if count % 2 == 0:
        continue
    print(count)

运行结果将打印出 1,3,5,7,9

pass 语句

pass 语句不执行任何操作。语法上需要一个语句,但程序不实际执行任何动作时,可以使用该语句。

while True:
     pass  # Busy-wait for keyboard interrupt (Ctrl+C)

pass 还可以用作函数或条件子句的占位符,让开发者聚焦更抽象的层次。此时,程序直接忽略 pass

def initlog(*args):
    pass   # Remember to implement this!

流程控制案例

下面是一个使用Python编写的简单的小游戏的代码示例:

import random

print("猜数字游戏")

num = random.randint(1, 100)
guess = 0
count = 0

while guess != num:
    guess = int(input("请输入1到100之间的整数:"))
    count += 1
    if guess > num:
        print("猜大了")
    elif guess < num:
        print("猜小了")
    else:
        print("恭喜你,猜对了!")
        print("一共猜了%d次" % count)

这个小游戏是一个猜数字游戏,通过调用Python的random库来生成1到100之间的随机数。然后,使用一个while循环不断提示用户输入猜测的数字,直到猜对为止。每次猜测后,根据用户的猜测结果给出提示,告诉用户猜大了还是猜小了,直到猜对为止。当用户猜对后,程序会输出一条恭喜信息,告诉用户一共猜了多少次。

参考文献

  1. Compound statements — Python 3.10.6 documentation