5个适合初学者的Python练手小程序代码示例
初学 Python 时,单纯记忆语法容易遗忘,通过规模适中、目标明确的轻量级程序进行实践,是掌握基础语法的最高效路径。本文整理了 5 个核心代码量在 25 到 45 行左右的初学者练手小程序:猜数字游戏、简易命令行待办清单、英文字符与词频统计器、温标单位换算工具以及带提示的倒计时器。每个项目分别对应循环分支、容器操作、数据映射、函数封装及标准库调用等核心技能,并附有可直接运行的完整代码和关键逻辑解析。
一、初学者的进阶路径与练习目标划分
许多初学者在学完变量、列表和基本语法后,面对空白的编辑器往往不知道该写什么。盲目挑战大型 Web 框架或爬虫项目,容易因为环境配置繁琐、概念跨度过大而受挫;而只做单行计算又无法建立“程序是解决具体问题的自动化脚本”的全局认知。
一个合格的入门练习应当具备三个特征:代码行数适中(阅读与调试成本低)、包含完整的输入与输出交互、涵盖至少一个核心控制流或数据容器。本文所选的 5 个小程序按照技能梯度自然递进,既有独立性,又有递进关系。
二、项目一:猜数字互动小游戏
练习目标:掌握 random 模块的伪随机数生成、while 循环、多分支 if-elif-else 条件判断,以及处理用户键盘输入时的类型转换与异常捕获。
核心逻辑拆解:程序首先使用 random.randint(1, 100) 生成一个目标整数。随后进入无限循环,使用 input() 持续接收用户输入。若用户输入字母或符号,直接使用 int() 会抛出 ValueError,因此需要配合 try-except 结构完成防护,防止程序异常奔溃。
import random
def guess_number_game():
target = random.randint(1, 100)
attempts = 0
print("=== 欢迎来到猜数字小游戏 ===")
print("目标数字已在 1 到 100 之间生成,请开始猜测!")
while True:
user_input = input("请输入猜测的数字(输入 q 退出):").strip()
if user_input.lower() == 'q':
print(f"游戏已退出,正确答案是:{target}。")
break
try:
guess = int(user_input)
except ValueError:
print("输入无效!请输入有效的整数。")
continue
attempts += 1
if guess < 1 or guess > 100:
print("提示:输入的数字超出了 1 到 100 的有效范围。")
continue
if guess < target:
print("猜小了,请往大一点猜!")
elif guess > target:
print("猜大了,请往小一点猜!")
else:
print(f"恭喜你猜对了!正确数字就是 {target}。")
print(f"你总共尝试了 {attempts} 次。")
break
if __name__ == "__main__":
guess_number_game()
注意事项:random.randint(a, b) 的取值范围是闭区间,包含边界值 a 和 b。从 input() 获取的内容始终是字符串类型,必须通过 int() 显式转换后才能进行大小比对。
三、项目二:简易命令行待办记账清单
练习目标:掌握列表(List)的基本操作(追加 append、索引访问与弹出 pop)、enumerate() 函数的使用,以及人机交互菜单的分发设计。
核心逻辑拆解:通过一个由 tasks = [] 维持的动态列表充当内存数据库。主循环打印交互菜单,根据用户输入的数字指令分发到“查看”、“添加”、“删除”或“退出”分支。在删除时,初学者最容易混淆用户眼中的序号(从 1 开始)与 Python 底层索引(从 0 开始),需要完成 task_num - 1 的偏移转换。
def todo_app():
tasks = []
print("=== 简易命令行待办清单 ===")
while True:
print("\n--- 功能菜单 ---")
print("1. 查看任务清单")
print("2. 添加新任务")
print("3. 完成并删除任务")
print("4. 退出程序")
choice = input("请选择操作编号(1-4):").strip()
if choice == "1":
if not tasks:
print("当前待办清单为空!")
else:
print("当前任务列表:")
for index, item in enumerate(tasks, start=1):
print(f" [{index}] {item}")
elif choice == "2":
new_task = input("请输入要添加的任务内容:").strip()
if new_task:
tasks.append(new_task)
print(f"成功添加:“{new_task}”")
else:
print("任务内容不能为空!")
elif choice == "3":
if not tasks:
print("当前没有可删除的任务!")
continue
for index, item in enumerate(tasks, start=1):
print(f" [{index}] {item}")
del_input = input("请输入要删除的任务序号:").strip()
try:
task_num = int(del_input)
if 1 <= task_num <= len(tasks):
removed = tasks.pop(task_num - 1)
print(f"已完成并移除:“{removed}”")
else:
print("输入的序号超出任务范围!")
except ValueError:
print("请输入有效的数字编号!")
elif choice == "4":
print("感谢使用,清单程序已安全退出。")
break
else:
print("无效选项,请输入 1 到 4 之间的数字。")
if __name__ == "__main__":
todo_app()
注意事项:执行 tasks.pop(index) 前必须先校验 1 <= task_num <= len(tasks),若直接传入非法索引,会引发 IndexError 导致程序崩溃。
四、项目三:英文文本与词频统计器
练习目标:掌握字符串清洗(str.lower() 与标点符号替换)、字典(Dictionary)键值对映射累加,以及使用 sorted() 函数结合匿名函数对结果进行自定义排序。
核心逻辑拆解:在进行词频统计前,原始文本通常包含大写字母与逗号、句号等标点。若不处理,“Python”、“python”和“python.”会被视作三个不同的词。因此,第一步先遍历字符将标点替换为空格并统一转小写,随后通过 split() 分词,再用 frequency[word] = frequency.get(word, 0) + 1 累加出现次数。
import string
def word_frequency_counter(text):
if not text.strip():
print("提供的文本内容为空!")
return
# 清洗标点符号并全部归一化为小写
cleaned_chars = []
for char in text:
if char in string.punctuation:
cleaned_chars.append(" ")
else:
cleaned_chars.append(char.lower())
cleaned_text = "".join(cleaned_chars)
words = cleaned_text.split()
# 统计词频映射
frequency = {}
for word in words:
frequency[word] = frequency.get(word, 0) + 1
# 按照词频由高到低进行降序排序
sorted_freq = sorted(frequency.items(), key=lambda item: item[1], reverse=True)
print(f"\n--- 统计完成 ---")
print(f"总单词数:{len(words)} | 独立词汇数:{len(frequency)}")
print(f"{'单词':<16} {'出现次数':<10}")
print("-" * 28)
for word, count in sorted_freq[:8]:
print(f"{word:<16} {count:<10}")
if __name__ == "__main__":
sample_text = """
Python is an easy to learn, powerful programming language.
Python has efficient high-level data structures and a simple approach to programming.
Python syntax is elegant and dynamic typing makes it an ideal language for scripting.
"""
word_frequency_counter(sample_text)
注意事项:dict.get(key, default) 方法在键不存在时能安全返回预设的默认值 0,避免直接使用 frequency[word] 时抛出 KeyError。
五、项目四:温标单位换算工具
练习目标:掌握函数定义(def)、参数传递与返回值(return)、浮点数运算,以及基于物理现实的防御性范围校验。
核心逻辑拆解:将计算逻辑封装为独立纯函数(摄氏度转华氏度、华氏度转摄氏度、摄氏度转绝对温度开尔文)。主交互函数负责获取用户输入的温度值与转换目标,并通过 f-string 的 {value:.2f} 语法精确保留两位小数。
def celsius_to_fahrenheit(c):
return (c * 9 / 5) + 32
def fahrenheit_to_celsius(f):
return (f - 32) * 5 / 9
def celsius_to_kelvin(c):
return c + 273.15
def temperature_converter():
print("=== 温标双向转换计算器 ===")
print("1. 摄氏度 (°C) -> 华氏度 (°F)")
print("2. 华氏度 (°F) -> 摄氏度 (°C)")
print("3. 摄氏度 (°C) -> 开尔文 (K)")
mode = input("请选择转换模式(1-3):").strip()
if mode not in ("1", "2", "3"):
print("错误:模式选择超出有效范围!")
return
val_str = input("请输入待换算的温度数值:").strip()
try:
temp = float(val_str)
except ValueError:
print("错误:请输入有效的数字!")
return
if mode == "1":
if temp < -273.15:
print("物理约束警告:摄氏温度不能低于绝对零度 (-273.15°C)!")
return
res = celsius_to_fahrenheit(temp)
print(f"换算结果:{temp:.2f}°C = {res:.2f}°F")
elif mode == "2":
if temp < -459.67:
print("物理约束警告:华氏温度不能低于绝对零度 (-459.67°F)!")
return
res = fahrenheit_to_celsius(temp)
print(f"换算结果:{temp:.2f}°F = {res:.2f}°C")
elif mode == "3":
if temp < -273.15:
print("物理约束警告:摄氏温度不能低于绝对零度 (-273.15°C)!")
return
res = celsius_to_kelvin(temp)
print(f"换算结果:{temp:.2f}°C = {res:.2f} K")
if __name__ == "__main__":
temperature_converter()
注意事项:浮点数进行除法计算时容易产生无限循环小数,输出给用户时务必通过格式化语法保留合理的小数位数。
六、项目五:简易命令行倒计时器
练习目标:掌握标准库 time 模块调用、divmod() 的商余计算、转义符 \r(回车符)在控制台的原地动态刷新,以及捕获 KeyboardInterrupt 异常优雅退出。
核心逻辑拆解:接收总秒数后,循环中每次用 time.sleep(1) 暂停 1 秒。通过 mins, secs = divmod(seconds, 60) 分解为分秒形式。输出时设置 print(..., end="\r", flush=True),光标会重置回当前行行首覆盖旧文本,从而实现单个位置数字递减,避免满屏滚动。
import time
def countdown_timer(seconds):
if seconds <= 0:
print("错误:倒计时秒数必须大于 0!")
return
print(f"倒计时开始,总时长:{seconds} 秒。(可随时按 Ctrl+C 中止)")
try:
while seconds > 0:
mins, secs = divmod(seconds, 60)
time_display = f"{mins:02d}:{secs:02d}"
# end='\r' 让光标返回行首,flush=True 强制立即刷新输出缓冲区
print(f"剩余时间: {time_display}", end="\r", flush=True)
time.sleep(1)
seconds -= 1
print("\n时间到!倒计时已顺利完成!")
except KeyboardInterrupt:
print("\n提示:倒计时已被用户手动中止。")
if __name__ == "__main__":
input_str = input("请输入倒计时的总秒数:").strip()
if input_str.isdigit():
countdown_timer(int(input_str))
else:
print("输入无效:请输入正整数!")
注意事项:Python 默认对标准输出进行行缓冲,如果不加上 flush=True,在某些 IDE 或操作系统终端中可能会因为缓冲积累而出现倒计时卡顿或跳秒现象。
七、总结与自主扩展建议
通过以上 5 个练手小程序,初学者不仅能够全面演练 Python 的核心语法特性,还能逐步养成“输入校验、状态跟踪、异常兜底、优雅退出”的工业级编码习惯。
在完全掌握这些代码示例后,建议读者尝试以下轻量级进阶改动:
- 猜数字小游戏:增加最高限制猜测次数(如 7 次以内),超出后提示挑战失败;
- 命令行待办清单:使用 Python 内置的
json模块将任务列表持久化保存到本地文件,下次启动时自动恢复; - 词频统计器:扩展为读取本地
.txt文本文件并过滤常见的英语虚词(Stop Words,如 the, a, is); - 单位换算器:增加长度(公里与英里)、质量(公斤与磅)等更多物理维度的换算选项;
- 倒计时器:在倒计时结束时触发终端蜂鸣提示(如输出
\a字符)或打印 ASCII 艺术字。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













