Python 中的控制流
现在,让我们看一下 if 语句。
if 语句
Python 中的 if 语句与其他编程语言(如 Java)中的语句类似。 它是大多数程序的逻辑流的主干。 下面是一个示例:
y = 6
if y % 2 == 0:
print('Even')
输出为:
Even
了解 if 语句的控制逻辑
如果将 y 改为奇数,会出现什么情况?
你是否注意到 print 函数在 if 语句下有缩进? 这种缩进很重要,它是 Python 分隔控制流范围的方式。 它指示要临时运行或循环运行哪些内容。 Python 使用缩进,而不是在其他语言中使用的大括号 ({})。
若要涵盖更多的临时事件,而无需构造后续 if 语句,可添加 else 语句:
y = 7
if y % 2 == 0:
print('Even')
else:
print('Odd')
输出为:
Odd
使用 elif 向 if 语句中插入另一项逻辑测试:
y = 1
if y % 2 == 0:
print('Even')
elif y == 1:
print('One')
else:
print('Odd')
输出为:
One
请注意,在上述示例中,if 语句在找到第一个为 true 的逻辑测试后退出。
y 变量设置为 1,这实际上是一个奇数。 但是,在发现 if 后 y == 1 执行并退出,而不是在继续执行语句末尾的 else 子句后。
亲自试一试
尝试更改之前示例中 y 的值。 是否获得了期望的输出?
提示(展开以显示)
y = 3
if y % 2 == 0:
print('Even')
elif y == 1:
print('One')
else:
print('Odd')
Odd
y = 4
if y % 2 == 0:
print('Even')
elif y == 1:
print('One')
else:
print('Odd')
Even
for 循环:基本信息
在程序中,经常需要循环访问某个项集。
for 循环任务非常有用。 例如,它提供了一种方法来循环访问列表中的项:
colors = ['red', 'yellow', 'blue']
for color in colors:
print(color)
输出为:
red
yellow
blue
有时,你需要使用列表索引而不是该列表中的项来循环访问列表。 例如,你可能希望同时访问其他列表中的项目。 在这种情况下,可将列表对象方法和 for 循环结合使用:
comp_colors = ['green', 'purple', 'orange']
for i in range(len(comp_colors)):
print(colors[i], comp_colors[i])
输出为:
red green
yellow purple
blue orange
我们之前看到过 len(),而 range() 对我们来说是新内容。 最简单地说,range(stop) 会生成一个整数序列,从 0 开始直到你传入的数字减去 1 所得到的数字。 下面是一个示例:
for j in range(5):
print(j)
输出为:
0
1
2
3
4
range 函数最多可使用 3 个参数:range(start,stop[,step])。 这种看起来奇怪的表示法只是意味着,如果传入一个参数,range() 会将该参数作为 值stop。 它将两个参数解释为 start 和 stop 值,将三个参数解释为 star、stop 和 step。
了解 for 循环的控制流
如何使用 range 和 for 循环来打印从 10 到 20 的数字序列?
从 17 到 41 按三倍计数又怎么样?
有时需要中断 for 循环。 Python 会从 C 语言中借用 break 语句来实现此目的。 要查看 break 的实际运用情况,请考虑使用两个嵌套的 for 循环:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, 'equals', x, '*', n//x)
break
else:
print(n, 'is a prime number')
输出为:
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
注意
在前面的示例中,else 语句属于 for 循环,不属于 if 语句。
亲自试一试
尝试通过删除 break 语句来更改之前的代码示例。 它现在生成什么输出?
提示(展开以显示)
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, 'equals', x, '*', n//x)
else:
print(n, 'is a prime number')
2 is a prime number
3 is a prime number
4 equals 2 * 2
4 is a prime number
5 is a prime number
6 equals 2 * 3
6 equals 3 * 2
6 is a prime number
7 is a prime number
8 equals 2 * 4
8 equals 4 * 2
8 is a prime number
9 equals 3 * 3
9 is a prime number
for 循环:continue 语句
在程序控制流期间,你可能希望继续到 for 循环的下一次迭代。
continue 语句(也是从 C 中借用的)可帮助执行此操作:
for num in range(2, 10):
if num % 2 == 0:
print("Found an even number:", num)
continue
print("Found an odd number:", num)
输出为:
Found an even number: 2
Found an odd number: 3
Found an even number: 4
Found an odd number: 5
Found an even number: 6
Found an odd number: 7
Found an even number: 8
Found an odd number: 9
亲自试一试
将前面示例中的 continue 语句替换为 break 语句时,会发生什么情况?
提示(展开以显示)
for num in range(2, 10):
if num % 2 == 0:
print("Found an even number:", num)
break
print("Found an odd number:", num)
Found an even number: 2
while 循环
如果将 if 语句和 for 循环的功能组合在一起,会得到 while 循环。 只要某个逻辑条件保持为 true,while 循环就会迭代。 请考虑以下代码示例,它会计算斐波纳契数列的初始子数列。 (在斐波纳契数列中,两个元素的总和定义了下一个元素。)
a, b = 0, 1
while b < 100:
print(b, end=', ')
a, b = b, a+b
输出为:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,
继续操作,调整 while 循环的迭代次数。 请注意,此示例还对变量使用 Python 的多分配功能。
要点
控制流使程序成为程序而不是单个操作序列。 掌握 Python 中的信息逻辑流后,你就能自动执行手动操作时可能非常复杂或耗时的任务。