第7章 用户输入和 while 循环
系列第 7 篇:本文是《Python编程 从入门到实践》读书笔记系列的第 7 篇。
本文内容:input() 获取用户输入、int() 数值转换、while 循环基本结构、break/continue、标志(flag)、while 与列表/字典结合使用。
本章目标:这一篇主要解决一个问题:怎么让程序接收用户输入,并持续运行到用户主动退出。
开篇:这篇解决什么问题
前面的代码大多是写死数据,程序跑一遍就结束。但很多脚本需要用户输入参数,比如选择菜单、输入任务名、填写重试次数。input() 负责接收输入,while 循环负责让程序持续工作。
本篇你会学到什么
input()接收到的内容为什么总是字符串- 如何用
int()把输入转换成数字 while循环的基本写法break和continue的区别- 如何写一个简单的命令行菜单
场景案例:写一个简单的任务菜单
我们先看一个简化版菜单:
tasks = []
while True:
command = input("请输入命令(add/list/quit):").strip().lower()
if command == 'add':
task = input("请输入任务名称:").strip()
if task:
tasks.append(task)
print("任务已添加。")
else:
print("任务名称不能为空。")
elif command == 'list':
if tasks:
for index, task in enumerate(tasks, start=1):
print(str(index) + ". " + task)
else:
print("当前没有任务。")
elif command == 'quit':
print("程序已退出。")
break
else:
print("无法识别这个命令,请重新输入。")
这个例子里,用户可以不断输入命令,直到输入 quit 才退出。strip().lower() 会先清理首尾空白并统一成小写,因此输入 Quit、QUIT 或 quit 都能正常退出。
知识点拆解
1. 使用 input() 接收输入
name = input("What's your name? ")
print("Hello, " + name + "!")
input() 会先显示提示文字,然后等待用户输入。用户按下回车后,输入内容会作为字符串返回。
2. input() 返回的是字符串
即使用户输入的是数字,input() 拿到的也是字符串:
age = input("How old are you? ")
print(type(age))
如果输入 18,输出的类型仍然是 <class 'str'>。也就是说,得到的是字符串 '18',不是整数 18。
3. 用 int() 转换数字输入
如果要做数字比较,需要转换:
age = input("How old are you? ")
age = int(age)
if age >= 18:
print("You can register.")
else:
print("You are too young.")
如果用户输入的不是整数,例如 abc 或 18.5,int() 会触发 ValueError。后面学异常处理时,可以用 try-except 做保护。
4. 求模运算符 %
% 可以得到除法的余数,常用于判断奇偶数或倍数:
number = int(input("Enter a number: "))
if number % 2 == 0:
print("Even number")
else:
print("Odd number")
5. while 循环
while 会在条件为 True 时持续执行:
count = 1
while count <= 5:
print(count)
count += 1
输出:
1
2
3
4
5
6. 让用户决定何时退出
message = ""
while message != 'quit':
message = input("请输入内容,输入 quit 退出:").strip().lower()
if message != 'quit':
print(message)
这种写法适合简单交互。用户输入 quit,循环结束。这里会把输入统一成小写,因此更适合处理命令;如果需要保留用户原始文本,就不要直接调用 lower()。
7. 使用标志变量
标志变量可以让循环条件更清楚:
active = True
while active:
command = input("请输入命令:").strip().lower()
if command == 'quit':
active = False
else:
print("Command: " + command)
active 表示程序是否继续运行。
8. 使用 break 退出循环
while True:
command = input("请输入命令:").strip().lower()
if command == 'quit':
break
print("Command: " + command)
break 会立即退出当前循环。
9. 使用 continue 跳过本轮循环
number = 0
while number < 5:
number += 1
if number == 3:
continue
print(number)
输出:
1
2
4
5
continue 不是退出循环,而是跳过本轮剩下的代码,回到循环开头。
使用 continue 时要特别注意变量更新的位置。如果更新计数器的代码写在 continue 后面,它可能永远没有机会执行,最终形成无限循环。
10. 用 while 处理列表
当需要一边处理一边删除列表元素时,while 很合适:
pending_tasks = ['write report', 'check email', 'review plan']
finished_tasks = []
while pending_tasks:
task = pending_tasks.pop(0)
print("Handling: " + task)
finished_tasks.append(task)
print(finished_tasks)
这里使用 pop(0),是为了按照列表原来的顺序处理任务。对于数据量很小的入门示例没有问题;如果以后需要处理很长的任务队列,可以再了解 collections.deque。
11. 删除列表中所有指定值
tags = ['python', 'draft', 'note', 'draft']
while 'draft' in tags:
tags.remove('draft')
print(tags)
输出:
['python', 'note']
初学者容易踩的坑
| 问题 | 常见原因 | 建议 |
|---|---|---|
| 数字比较报错 | input() 返回字符串 |
先用 int() 转换 |
| 无限循环停不下来 | 条件一直为 True |
确认循环里有退出条件 |
break 和 continue 混淆 |
不清楚控制流 | break 退出循环,continue 跳过本轮 |
| 忘记更新计数器 | while 条件一直成立 |
每轮循环要改变相关变量 |
| 用户输入大小写不一致 | 直接比较原始输入 | 可以先 strip().lower() |
输入命令时建议先清理
command = input("Enter command: ").strip().lower()
这样用户输入 Quit、QUIT、quit,都能统一处理成 quit。
工作里能怎么用
| 场景 | 用法 |
|---|---|
| 命令行菜单 | while True + input() |
| 任务队列 | while tasks: |
| 用户配置 | 用 input() 接收参数 |
| 重试逻辑 | 失败后继续循环 |
| 清理列表 | while value in list_name: |
示例:简单重试次数输入:
retry_text = input("请输入重试次数:").strip()
if retry_text.isdecimal():
retry_count = int(retry_text)
while retry_count > 0:
print("再次尝试,剩余次数:" + str(retry_count))
retry_count -= 1
else:
print("重试次数必须是非负整数。")
小结
input()返回字符串- 数字输入需要用
int()转换后再比较 while会在条件为True时持续运行break立即退出循环continue跳过本轮剩余代码while list_name:可以在列表非空时持续处理- 写交互程序时,一定要设计退出条件
下一篇
下一篇继续讲函数。交互式程序写长以后,很容易出现重复逻辑,函数可以帮我们把代码拆得更清楚。
本文来自博客园,作者:lunzi_fly,转载请注明原文链接:https://www.cnblogs.com/lunzi1992/p/20562272
浙公网安备 33010602011771号