2.6 程序执行控制流语句if 语句else 语句while 循环语句

在第 1 章的 hello.py 程序中,Python 开始执行程序顶部的指令,然后一条接一
条往下执行。“程序执行”(或简称“执行”)这一术语是指当前被执行的指令。如果将源代码打印在纸上,在它执行时用手指指着每一行代码,你可以认为手指就是程序执行。
但是,并非所有的程序都是从上至下简单地执行。如果用手指追踪一个带有控制流语句的程序,可能会发现手指会根据条件跳过源代码,有可能跳过整个子句。

2.7    控制流语句
现在,让我们来看最重要的控制流部分:语句本身。语句代表了在图 2-1 的流程图中看到的菱形,它们是程序将做出的实际决定。

.7.1    if 语句


最常见的控制流语句是 if 语句。if 语句的子句(也就是紧跟 if 语句的语句块),

将在语句的条件为True 时执行。如果条件为 False,子句将跳过。
在英文中,if 语句念起来可能是:“如果条件为真,执行子句中的代码。”在 Python
中,if 语句包含以下部分:
•    if 关键字;
•    条件(即求值为 True 或 False 的表达式);
•    冒号;
•    在下一行开始,缩进的代码块(称为 if 子句)。
例如,假定有一些代码,检查某人的名字是否为 Alice(假设此前曾为 name
赋值)。

if  name  ==  'Alice': print('Hi,  Alice.')
所有控制流语句都以冒号结尾,后面跟着一个新的代码块(子句)。语句的 if
子句是代码块,包含 print('Hi, Alice.')。图 2-3 展示了这段代码的流程图。

2.7.2  else 语句
if 子句后面有时候也可以跟着 else 语句。只有 if 语句的条件为 False 时,else子句才会执行。在英语中,else  
语句读起来可能是:“如果条件为真,执行这段代码。否则,执行那段代码”。else  语句不包含条件,在代码中,else  语句中包含下面部分:
•    else 关键字;
•    冒号;
•    在下一行开始,缩进的代码块(称为 else 子句)。
回到 Alice  的例子,我们来看看使用 else  语句的一些代码,在名字不是 Alice
时,提供不一样的问候。

if  name  ==  'Alice': print('Hi,  Alice.')
else:
print('Hello,  stranger.')

图 2-4 展示了这段代码的流程图。

 

 2.7.3    elif 语句
虽然只有 if 或 else 子句会被执行,但有时候可能你希望,“许多”可能的子句
中有一个被执行。elif 语句是“否则如果”,总是跟在 if 或另一条 elif 语句后面。它提供了另一个条件,仅在前面的条件为 False 时才检查该条件。在代码中,elif 
语句总是包含以下部分:
•    elif 关键字;
•    条件(即求值为 True 或 False 的表达式);
•    冒号;
•    在下一行开始,缩进的代码块(称为 elif 子句)。
让我们在名字检查程序中添加 elif,看看这个语句的效果。
if  name  ==  'Alice': print('Hi,  Alice.')
elif  age  <  12:
print('You  are  not  Alice,  kiddo.')
这一次,检查此人的年龄。如果比 12 岁小,就告诉他一些不同的东西。可以
在图 2-5 中看到这段代码的流程图。
如果 age < 12 为 True 并且 name == 'Alice'为 False,elif 子句就会执行。但是,如果两个条件都为 
False,那么两个子句都会跳过。“不能”保证至少有一个子句会被执行。如果有一系列的 elif 语句,仅有一条或零条子句会被执行。一旦一个语句的条件为True,剩下的 elif 
子句会自动跳过。例如,打开一个新的文件编辑器窗口,输入以下代码,保存为 vampire.py。
if  name  ==  'Alice': print('Hi,  Alice.')
elif  age  <  12:
print('You  are  not  Alice,  kiddo.') elif  age  >  2000:
print('Unlike  you,  Alice  is  not  an  undead,  immortal  vampire.') elif  age  >  100:
print('You  are  not  Alice,  grannie.')

 

这里,我添加了另外两条 elif 语句,让名字检查程序根据 age 的不同答案而发出问候。图 2-6 展示了这段代码的流程图。
但是,elif 语句的次序确实重要。让我们重新排序,引入一个缺陷。回忆一下,一旦找到一个True 条件,剩余的子句就会自动跳过。所以如果交换 vampire.py 
中的一些子句,就会遇到问题。像下面这样改变代码,将它保存为 vampire2.py。

if  name  ==  'Alice': print('Hi,  Alice.')
elif  age  <  12:
print('You  are  not  Alice,  kiddo.')
➊  elif  age  >  100:
print('You  are  not  Alice,  grannie.') elif  age  >  2000:
print('Unlike  you,  Alice  is  not  an  undead,  immortal  vampire.')

 假设在这段代码执行之前,age 变量的值是 3000。你可能预计代码会打印出字
符串'Unlike you, Alice is not an undead, immortal vampire.'。但是,因为age > 100 条件为真(毕竟 3000 大于 
100)➊,字符串'You are not Alice, grannie.'被打印出来,剩
下的语句自动跳过。别忘了,最多只有一个子句会执行,对于 elif 语句,次序是很重要的。
图 2-7 展示了前面代码的流程图。请注意,菱形 age > 100 和 age > 2000 交换了位置。

 
你可以选择在最后的 elif 语句后面加上else 语句。在这种情况下,保证至少一个子句(且只有一个)会执行。如果每个 if 和elif 语句中的条件都为 False,就执行 else 
子句。例如,让我们使用 if、elif 和 else 子句重新编写 Alicee 程序。
if  name  ==  'Alice': print('Hi,  Alice.')
elif  age  <  12:
print('You  are  not  Alice,  kiddo.') else:
print('You  are  neither  Alice  nor  a  little  kid.')
图 2-8 展示了这段新代码的流程图,我们将它保存为littleKid.py。

 在英语中,这类控制流结构会使得:“如果第一个条件为真,做这个。否则,如果第二个条件为真,做那个。否则,做另外的事。”如果你同时使用这 3 个语句,要记住这些次序规则,避免图 2-7 中那样的缺陷。首先,总是只有一个 if 语句。所有需要的 elif 语句都应该跟在 if 语句之后。其次,如果希望确保至少一条子句被执行,在最后加上 else 语句。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大飞哥软件自习室

希望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值