第七章 用户输入和while循环
本章引言:
- 在程序中使用 input( ) 来让用户提供信息; 处理文本和数字输入,以及如何使用 while;
- 循环让程序按用户的要求不断地运行;
- 多种控制 while 循环流程的方式:设置活动标志、使用 break 语句以及使用 continue 语句;
- 使用 while 循环在列表之间移动元素,以及如何从列表中删除所有包含特定值的元素;
- 结合使用 while 循环和字典。
1. 用户输入 input( )函数
- 函数 input( ) 让程序暂停运行,等待用户输入一些文本。获取用户输入后, Python将其存储在一个变量中,以方便你使用。
message = input("Tell me something") print(message)
⚠️注意,Sublime Text 不能运行提示用户输入的程序。你可以使用Sublime Text 来编写提示用户输入的程序,但必须从终端运行它们。
- 使用函数input( ) 时,Python默认将用户输入解读为字符串。当需要数值输入时,可以使用函数int( ) 将数字的字符串表示转换为数值表示,但是int( )只能转换整数,当涉及到小数的时候可以使用float( )。
2. 求模运算
求模运算符( % ):将两个数相除并返回余数。
❗️大家可能会比较困惑求模运算和求余运算。
通常情况下取模运算(mod)和求余(rem)运算被混为一谈,因为在大多数的编程语言里,都用 % 表示取模或者求余运算。
在这里要提醒大家要十分注意当前环境下 % 运算符的具体意义,因为在有负数存在的情况下,两者的结果是不一样的。
对于整型数a,b来说,取模运算或者求余运算的方法都是:
1.求整数商: c = a/b;
2.计算模或者余数: r = a - c*b.
**求模运算和求余运算在第一步不同**:
求余运算在取c的值时,向 0 方向舍入(fix()函数);注:fix()函数是MATLAB中的一种取整函数、截断函数,直接截取数字的整数部分。
而取模运算在计算c的值时,向无穷小方向舍入(floor()函数)。注:对于正数,floor 的行为与 fix 相同。
fix(2.5)==2
floor(2.5)==2
floor(-2.5)==-3
因此,当a和b符号一致时,求模运算和求余运算所得的c的值一致,因此结果一致。但是当符号不一致的时候,结果不一样。
具体来说,求模运算结果的符号和b一致,求余运算结果的符号和a一致。
在C语言中,% 符号表示的是求余运算,在Python脚本中,%表示的是取模。
例:python中,%表示取模运算,5%(-2)==-1
5/(-2)在取模运算中采用floor函数,结果为c==-3,r = 5-(-3)*(-2)==-1
3. while循环
while 循环不断地运行,直到指定的条件不满足为止。while循环通常可以用于计数。
current_number = 1
while current_number <= 3:
print(current_number)
current_number +=1
>>output
1
2
3
使用标志
在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量被称为标志。通常设置一个变量为True或False作为标志。
使用 break 退出循环。
- break语句可以立即退出while 循环,不再运行循环中余下的代码,也不管条件测试的结果如何。
- 在任何python循环中都可以使用break语句,例如 for 循环中。
在循环中使用continue语句
continue 语句可以跳过本次循环,返回到循环开头,并根据条件测试结果决定是否继续执行循环。
避免无限循环
- 要避免编写无限循环,务必对每个while循环进行测试,确保它按预期那样结束。如果你希望程序在用户输入特定值时结束,可运行程序并输入这样的值;如果在这种情况下程序没有结束,请检查程序处理这个值的方式,确认程序至少有一个这样的地方能让循环条件为 False 或让break 语句得以执行。
- 如果程序陷入无限循环,可按 Ctrl + C,也可关闭显示程序输出的终端窗口。
4. 使用while循环来处理列表和字典
在遍历列表的同时对其进行修改,可使用 while 循环。通过将while 循环同列表和字典结合起来使用,可收集、存储并组织大量输入,供以后查看和显示。
在列表之间移动元素
unconfirmed_users = ['alice', 'brian', 'candace']
confirmed_users = []
# 验证每个用户,直到没有未验证用户为止 # 将每个经过验证的列表都移到已验证用户列表中
while unconfirmed_users: # 当unconfirmed_users为空时结束循环
current_user = unconfirmed_users.pop() # pop()函数的使用
print("Verifying user: " + current_user.title())
confirmed_users.append(current_user)
>>output
Verifying user: Candace
Verifying user: Brian
Verifying user: Alice
删除包含特定值的所有列表元素
remove( )函数可以删除列表中符合条件的第一个元素,要想删除所有符合条件的元素,可以使用while循环。
pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
while 'cat' in pets:
pets.remove('cat')
使用用户输入来填充字典
使用while循环提示用户输入任意数量的信息。
responses = {}
polling_active = True # 设置一个标志,指出调查是否继续
while polling_active:
name = input("\nWhat is your name? ") # 提示输入被调查者的名字和回答
response = input("Which mountain would you like to climb someday? ")
responses[name] = response # 将答卷存储在字典中
repeat = input("Would you like to let another person respond? (yes/ no) ") # 看看是否还有人要参与调查
if repeat == 'no':
polling_active = False # 修改标志