第7章 用户输入和 while 循环

系列第 7 篇:本文是《Python编程 从入门到实践》读书笔记系列的第 7 篇。

本文内容:input() 获取用户输入、int() 数值转换、while 循环基本结构、break/continue、标志(flag)、while 与列表/字典结合使用。

本章目标:这一篇主要解决一个问题:怎么让程序接收用户输入,并持续运行到用户主动退出。

开篇:这篇解决什么问题

前面的代码大多是写死数据,程序跑一遍就结束。但很多脚本需要用户输入参数,比如选择菜单、输入任务名、填写重试次数。input() 负责接收输入,while 循环负责让程序持续工作。

本篇你会学到什么

  • input() 接收到的内容为什么总是字符串
  • 如何用 int() 把输入转换成数字
  • while 循环的基本写法
  • breakcontinue 的区别
  • 如何写一个简单的命令行菜单

场景案例:写一个简单的任务菜单

我们先看一个简化版菜单:

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() 会先清理首尾空白并统一成小写,因此输入 QuitQUITquit 都能正常退出。

知识点拆解

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.")

如果用户输入的不是整数,例如 abc18.5int() 会触发 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 确认循环里有退出条件
breakcontinue 混淆 不清楚控制流 break 退出循环,continue 跳过本轮
忘记更新计数器 while 条件一直成立 每轮循环要改变相关变量
用户输入大小写不一致 直接比较原始输入 可以先 strip().lower()

输入命令时建议先清理

command = input("Enter command: ").strip().lower()

这样用户输入 QuitQUITquit,都能统一处理成 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: 可以在列表非空时持续处理
  • 写交互程序时,一定要设计退出条件

下一篇

下一篇继续讲函数。交互式程序写长以后,很容易出现重复逻辑,函数可以帮我们把代码拆得更清楚。

posted on 2026-06-16 10:35  lunzi_fly  阅读(10)  评论(0)    收藏  举报