Python的非程序员教程3
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