Python 基础 – 控制流
介绍
只分配变量并打印出字符串的程序很无聊!当你必须做出选择时,事情会变得更有趣,根据某些条件执行某个操作,根据另一个条件执行另一个操作。本指南将向您展示如何做出分支决策、如何有条件地执行代码以及如何使用常见的循环结构。
简单条件
最简单的分支决策是将一件事与另一件事进行比较。在 Python 中,if语句会评估条件,并且仅在满足条件时才执行其后面的代码块。
>>> if 1 == 1:
... print('1 is 1')
...
1 is 1
>>>
在上面的例子中,我们要求 Python在条件1 == 1为真时打印“1 is 1”。运行上述语句时,条件实际上得到满足,并且打印语句将执行。
if语句的一般形式为:
if [CONDITION]:
BLOCK
if关键字后面跟着一个条件,条件后面跟着一个冒号 ( :)和一个换行符,然后是当条件满足时要执行的缩进语句块。条件可以是任何逻辑条件,只要它可以被评估为真实性 - 稍后会详细介绍。
您可能已经注意到,条件是“裸露的”,没有被括号包围。Python 的设计简洁且没有杂乱之处 - 除非绝对必要,否则避免使用括号、圆括号和其他表达式的封闭符号。if 条件必须以冒号结尾,这是让 Python 解析器知道条件部分已结束的线索。
冒号后面是换行符和缩进块。Python 使用空格来区分代码块。您可以使用空格或制表符来创建块。当多个语句使用相同的缩进时,它们被视为一个块。事实上,Python 坚持要求块中的各个语句使用相同的缩进。如果您在需要块时忘记缩进,以及如果您使用不同的缩进,它会发出抱怨。此示例在if语句后无法缩进:
>>> if 1 == 1:
... print('not indented')
File "<stdin>", line 2
print('not indented')
^
IndentationError: expected an indented block
此示例对第二个打印语句进行了过度缩进:
>>> if 1 == 1:
... print('I am indented')
... print('I am too indented')
File "<stdin>", line 3
print('I am too indented')
^
IndentationError: unexpected indent
虽然此示例对第二个打印语句进行了缩进:
>>> if 1 == 1:
... print('3 spaces indent')
... print('2 spaces indent')
File "<stdin>", line 3
print('2 spaces indent')
^
IndentationError: unindent does not match any outer indentation level
>>>
大多数现代 IDE(集成开发环境)都可以帮助您使用制表符或空格保持缩进,但由于某些编辑器中看不到空格字符,因此您应该注意正确缩进块 - 这是导致太多编程错误的根源。
对于简短的语句,您也可以编写单行条件:
>>> if True: print('yes')
...
yes
真实性
当解释器评估条件并发现其为True或具有非None (在其他语言中为 null)值时,条件被视为真。以下条件均为真,并将产生打印响应:
>>> if 42: print('yes - number')
...
yes - number
>>> if 'Marklar': print('yes - string')
...
yes - string
>>> if 'fun' in 'function' : print('yes - logical test')
...
yes - logical test
>>>
当表达式计算结果为False或None时,Python 条件不满足。以下条件将不满足,并导致不打印任何内容:
>>> if False: print('no')
...
>>> x = None
>>> if x: print('no')
...
>>> if 1 == 2: print('no')
...
>>> if 'i' in 'team': print('no')
...
>>>
在某些语言(例如 JavaScript)中,您可以测试“变量”是否存在。Python 没有这样的内置概念。除非变量之前已创建,否则以下if语句将产生错误:
>>> if thing:
... print('Variable "thing" exists!')
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'thing' is not defined
>>>
这里产生的错误并不是if语句所特有的,但它确实说明了当条件产生错误而不是真值或假值时会发生什么。
If 和 Else
通过将else子句与if结合使用可以产生更复杂的分支:
>>> if 1 < 1:
... print('1 is less than 1')
... else:
... print('1 is NOT less than 1')
...
1 is NOT less than 1
>>>
上面的分支决策执行第二个块,打印出“1 不小于 1”,因为if条件不满足。请注意,else关键字的缩进与if关键字相同,后面跟着一个分号。当if条件不满足时,使用else可以补充if执行相应的代码块。
如果要在第一个条件不满足的情况下检查另一个条件,请使用elif关键字而不是else,后跟其自己的条件:
>>> if 1 < 1:
... print('1 is less than 1')
... elif 1 <= 1:
... print('1 is less than or equal to 1')
...
1 is less than or equal to 1
>>>
上面,我们看到第二个条件1 <= 1得到满足。仅当前面的条件都不满足时,才会评估elif。下面将打印"true",而不是"true too" ,因为第一个条件得到满足,因此跳过elif条件并且不进行评估:
>>> if 1 == 1:
... print('1 is 1')
... elif 1 <= 1:
... print('true too')
...
1 is 1
>>>
最后一个else:在if和elif链的末尾,将捕获任何先前评估未满足的剩余条件:
>>> if 1 < 1:
... print('1 is less than 1')
... elif 1 > 1:
... print('1 is greater 1')
... else:
... print('1 is 1')
...
1 is 1
>>>
使用 While 重复
有时我们希望重复执行代码直到满足某个条件,或者某个条件保持为真。
>>> while True:
... x = input()
... if x == 'q': break
...
b
b
q
>>>
input ()函数提示用户输入一些文本。上面的代码等待用户在终端中输入q +[ENTER]。输入任何其他字符都将导致它再次重复等待输入。这里的while条件始终为True,因此似乎会永远持续下去。但如果用户输入q,则if条件将得到满足,并且break将执行,退出while循环。break语句导致当前循环立即退出块并停止循环。
与之前一样,while结构要求在条件后有一个冒号:。只要条件满足,条件后面的代码块就会执行。它会继续执行,直到条件计算结果为非真值(False或None),或者在代码块中遇到break语句。
循环
需要循环一定次数并知道正在执行哪一轮是很常见的。例如,让我们数到三:
>>> x = 1
>>> while x < 4:
... print('X is ', x)
... x = x + 1
...
X is 1
X is 2
X is 3
>>>
代码首先将变量x赋值为 1,然后随着while循环的每次迭代,x 都会增加 1。当条件x < 4不再成立 - x为4 时 - 循环退出。
对于变量保存一个值,然后在每次迭代中递增的这种任务,有一种更简洁的语法:for循环。Python for循环最常用于为变量分配一系列值,直到该序列用完。这里再次进行计数 - 这次使用for循环:
>>> for x in range(1,4):
... print('X is ', x)
...
X is 1
X is 2
X is 3
>>>
这次,我们不需要每次迭代都明确增加x - for循环会为我们完成这一操作。range ()<font style="vertical-align:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~