>>> from env_helper import info; info()
页面更新时间: 2023-04-15 21:18:03
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-7-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

2.1. 控制流程

你已经知道了单条指令的基本知识。程序就是一系列指令。 但编程真正的力量不仅在于运行(或“执行”)一条接一条的指令,就像周末的任务清单那样。 根据表达式求值的结果, 程序可以决定跳过指令,重复指令,或从几条指令中选择一条运行。 实际上,你几乎永远不希望程序从第一行代码开始,简单地执行每行代码,直到最后一行。 “流程控制语句”可以决定在什么条件下执行哪些Python语句。

这些控制流语句直接对应于流程图中的符号,与流程图类似。 按照箭头构成的路径,从开始到结束。

在流程图中,通常有不止一种方法从开始走到结束。计算机程序中的代码行也是这样。 流程图用菱形表示这些分支节点,其他步骤用矩形表示。开始和结束步骤用带圆角的矩形表示。

但在学习流程控制语句之前,首先要学习如何表示这些 yesno 选项。 同时你也需要理解,如何将这些分支节点写成Python代码。 要做到这一点,让我们先看看布尔值、比较操作符和布尔操作符。

2.1.1. 循环

至此,你知道了如何在条件为真(或假)时执行操作,但如何重复操作多次呢? 例如,你可能想创建一个程序,每月都提醒支付房租。 如果只使用已介绍过的工具,必须像下面这样编写这 个程序(伪代码):

send mail
wait one month send mail
wait one month send mail
wait one month
(... and so on)

但是如果希望程序这样不断执行下去,直到人为停止,该如何办呢?基本上,你需要编写类 似于下面的代码(也是伪代码):

while we aren't stopped:
    send mail
    wait one month

再来看一个更简单的例子,假设要打印1~100的所有数。同样,你可采用笨办法。

print(1)
print(2)
print(3)
...
print(99)
print(100)

但如果你愿意使用笨办法,就不会求助于Python了,不是吗?

2.1.2. 布尔值

虽然整型、浮点型和字符串数据类型有无数种可能的值,但“布尔”数据类型 只有两种值: TrueFalse 。Boolean (布尔)的首字母大写,因为这个数据类型是 根据数学家George Boole命名的。在作为Python代码输入时,布尔值 TrueFalse 不像字符串,两边没有引号,它们总是以大写字母T或F开头,后面的字母小写。 在交互式环境中输入下面内容,其中有些指令是故意弄错的,它们将导致出错信息。

>>> spam = True
>>>
>>> spam
True
>>> True
True
>>> True == 2 + 2
False

2.1.3. if 嵌套

在嵌套 if 语句中,可以把 if…elif…else 结构放在另外一个 if…elif…else 结构中。

if 表达式1:
    语句

    if 表达式2:
        语句

    elif 表达式3:
        语句

    else:
        语句

elif 表达式4:
    语句

else:
    语句

如下代码:

>>> num=int(input("输入一个数字:"))
>>> if num%2==0:
>>>     if num%3==0:
>>>         print ("你输入的数字可以整除 2 和 3")
>>>     else:
>>>         print ("你输入的数字可以整除 2,但不能整除 3")
>>> else:
>>>     if num%3==0:
>>>         print ("你输入的数字可以整除 3,但不能整除 2")
>>>     else:
>>>         print  ("你输入的数字不能整除 2 和 3")
输入一个数字: 98
你输入的数字可以整除 2,但不能整除 3

打印多个参数

你知道, print 可用于打印一个表达式,这个表达式要么是字符串,要么将自动转换为字符 串。但实际上,你可同时打印多个表达式,条件是用逗号分隔它们:

>>> print('Age:', 42)
Age: 42

如你所见,在参数之间插入了一个空格字符。在你要合并文本和变量值,而又不想使用字符 串格式设置功能时,这种行为很有帮助。

>>> name = 'Gumby'
>>> salutation = 'Mr.'
>>> greeting = 'Hello,'
>>> print(greeting, salutation, name)
Hello, Mr. Gumby

如果字符串变量 greeting 不包含逗号,如何在结果中添加呢?你不能像下面这样做:

>>> print(greeting, ',', salutation, name)
Hello, , Mr. Gumby

因为这将在逗号前添加一个空格。下面是一种可行的解决方案:

>>> print(greeting + ',', salutation, name)
Hello,, Mr. Gumby

它将逗号和变量 greeting 相加。如果需要,可自定义分隔符:

>>> print("I", "wish", "to", "register", "a", "complaint", sep="_")
I_wish_to_register_a_complaint

你还可自定义结束字符串,以替换默认的换行符。例如,如果将结束字符串指定为空字符串, 以后就可继续打印到当前行。

>>> print('Hello,', end='')
>>> print('world!')
Hello,world!

2.1.4. 代码块:缩进的乐趣

代码块其实并不是一种语句,但要理解接下来两节的内容,你必须熟悉代码块。 代码块是一组语句,可在满足条件时执行( if 语句),可执行多次(循环),等等。代码块是 通过缩进代码(即在前面加空格)来创建的。

注意

也可使用制表符来缩进代码块。Python将制表符解释为移到下一个制表位(相邻制表位相距8个空格),但标准(也是更佳的)做法是只使用空格(而不使用制表符)来缩进,且每级缩进4个空格。

在同一个代码块中,各行代码的缩进量必须相同。下面的伪代码(并非真正的Python代码) 演示了如何缩进:

this is a line
this is another line:
    this is another block
    continuing the same block
    the last line of this block
phew, there we escaped the inner block

在Python中,使用冒号( : )指出接下来是一个代码块,并将该代码块中的每行代码都缩进相同的程度。 发现缩进量与之前相同时,你就知道当前代码块到此结束了。