while 循环

介绍我们第一个控制结构。通常计算机从第一行开始,然后按顺序执行。控制结构改变了语句执行的顺序,或者决定是否执行某个语句。以下是一个使用 while 控制结构的程序示例:

a = 0            # 首先,将变量 a 的初始值设置为 0。
while a < 10:    # 当变量 a 的值小于 10 时,执行以下操作:
    a = a + 1    # 将变量 a 的值增加 1,类似于:a = a + 1!
    print(a)     # 打印变量 a 的当前值。
                 # 重复!直到变量 a 的值等于 9!?请看注释。 
                 
                 # 注释:
                 # 每次循环(或“while 语句块”)中,变量 a 的值会增加 1,
                 # 例如:a = 1,a = 2,a = 3,依此类推,直到 a = 9,然后...
                 # 程序将继续将 1 加到 a 上(此时 a = 10),打印结果,
                 # 然后退出“while 语句块”。 
                 #              --
                 # while a < 10: |
                 #     a = a + 1 |<--[ while 语句块 ]
                 #     print(a)  |
                 #              --

以下是非常激动人心的输出结果:

1
2
3
4
5
6
7
8
9
10
(你以为在把你的电脑变成五美元的计算器后,事情就不能再变得更糟了吗?)

那么,这个程序是如何工作的呢?首先,它看到 a = 0 并将 a 设置为零。然后,它看到 while a < 10:,于是计算机检查 a < 10。第一次检查时,a 是零,所以它小于 10。换句话说,只要 a 小于 10,计算机就会运行缩进的语句。这样,a 的值会一直增加,直到它等于 10(通过反复加 1),此时 while a < 10 不再成立,程序会停止执行这些缩进的行。

**注意:**始终记得在 while 语句的行末加上冒号 :

另一个 while 的例子:

a = 1
s = 0
print('Enter Numbers to add to the sum.')
print('Enter 0 to quit.')
while a != 0:                           
    print('Current Sum:', s)            
    a = float(input('Number? '))        
    s = s + a                            
print('Total Sum =', s)

运行示例:

Enter Numbers to add to the sum.
Enter 0 to quit.
Current Sum: 0
Number? 200
Current Sum: 200.0
Number? -15.25
Current Sum: 184.75
Number? -151.85
Current Sum: 32.9
Number? 10.00
Current Sum: 42.9
Number? 0
Total Sum = 42.9

注意,print('Total Sum =', s) 只有在最后执行。while 语句只影响缩进的语句。!= 表示“不等于”,因此 while a != 0: 表示只要 a 不等于零,就执行后面的缩进语句。

注意:a 是浮点数,并不是所有浮点数都能精确表示,所以有时使用 != 进行比较可能无法按预期工作。试试在交互模式下输入 1.1。

无限循环(Never Ending Loop)

现在我们已经掌握了 while 循环,它也可以用来创建一个永远执行的程序。一个简单的方法是编写如下程序:

while 1 == 1:
   print("Help, I'm stuck in a loop.")

== 操作符用于测试两个表达式是否相等,就像之前使用的 < 操作符表示“小于”。这个程序会一直输出 "Help, I'm stuck in a loop.",直到宇宙热寂,或者你手动停止它,因为 1 永远等于 1。停止方法是同时按下 Control(或 Ctrl)键和 C 键。这将结束程序。(注:有时你可能需要按回车键才能完全停止)。在某些系统中,只有杀死进程才能停止,所以要小心使用!

示例

斐波那契数列

Fibonacci-method1.py

# 这个程序计算斐波那契数列
a = 0
b = 1
count = 0
max_count = 20

while count < max_count:
    count = count + 1
    print(a, end=" ")  # 注意 print 函数的参数 end=" ",它防止打印新的一行。
    old_a = a    # 我们需要追踪 a 的值,因为它会发生变化。
    a = b
    b = old_a + b
print()  # 打印一个新的(空)行。

输出:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

注意输出在一行中,因为 print 函数中的 end=" " 参数确保它不会换行。

Fibonacci-method2.py

# 计算斐波那契数列的简化且更快速的方法
a = 0
b = 1
count = 0
max_count = 10

while count < max_count:
    count = count + 1
    print(a, b, end=" ")  # 注意 print 函数中的 end=" " 参数
    a = a + b    
    b = a + b
print()  # 打印一个新的(空)行。

输出:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

Fibonacci-method3.py

a = 0
b = 1
count = 0
maxcount = 20

# 一旦进入循环,就会一直待在里面
while count < maxcount:
    count += 1
    olda = a
    a = a + b
    b = olda
    print(olda, end=" ")
print()

输出:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

密码输入

Password.py

# 等待用户输入密码。使用 Control-C 可以中断程序运行。
# 注意,输入的密码必须不是正确密码,这样 while 循环才能至少执行一次。

password = str()

# 注意:!= 表示“不等于”
while password != "unicorn":
    password = input("Password: ")
print("Welcome in")

运行示例:

Password: auo
Password: y22
Password: password
Password: open sesame
Password: unicorn
Welcome in
Last modified: Sunday, 2 February 2025, 2:10 PM