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

使用 elifif 语句中插入另一项逻辑测试:

y = 1
if y % 2 == 0:
    print('Even')
elif y == 1:
    print('One')
else:
    print('Odd')

输出为:

One

请注意,在上述示例中,if 语句在找到第一个为 true 的逻辑测试后退出。 y 变量设置为 1,这实际上是一个奇数。 但是,在发现 ify == 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。 它将两个参数解释为 startstop 值,将三个参数解释为 starstopstep

了解 for 循环的控制流

如何使用 rangefor 循环来打印从 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 中的信息逻辑流后,你就能自动执行手动操作时可能非常复杂或耗时的任务。