下面我为你整理了小甲鱼Python零基础入门课程中一些经典作业的题目、思路解析和参考代码,这些作业涵盖了从最基础的变量、循环到稍微复杂的函数、文件操作等核心知识点。

数字炸弹游戏
描述:** 经典的数字炸弹游戏,程序随机生成一个1-100的数字作为“炸弹”,然后玩家轮流猜一个数字,每次猜的数字范围会缩小,直到有人猜中炸弹,游戏结束。
考察知识点:
random模块的使用 (random.randint)while循环input()和print()的交互- 条件判断 (
if/elif/else) - 变量的更新
思路解析:
- 初始化:使用
random.randint(1, 100)生成一个炸弹数字bomb。 - 设置范围:定义一个变量
low初始为1,一个变量high初始为100。 - 游戏循环:使用
while True创建一个无限循环,直到猜中炸弹才退出。 - 玩家输入:在循环内部,提示玩家输入一个在
low和high之间的数字。 - 判断结果:
- 如果猜的数字
guess等于bomb,游戏结束,恭喜玩家。 - 如果猜的数字
guess小于bomb,说明炸弹在更大的范围,更新low = guess + 1,并提示“猜小了”。 - 如果猜的数字
guess大于bomb,说明炸弹在更小的范围,更新high = guess - 1,并提示“猜大了”。
- 如果猜的数字
- 更新范围并提示:每次更新
low或high后,都打印出新的猜测范围,让玩家更有目标。
参考代码:

import random
# --- 数字炸弹游戏 ---
# 1. 初始化游戏
bomb = random.randint(1, 100)
low = 1
high = 100
print("欢迎来到数字炸弹游戏!")
print(f"炸弹数字在 {low} 到 {high} 之间。")
# 2. 游戏主循环
while True:
# 3. 玩家输入
try:
guess_str = input(f"请输入一个 {low} 到 {high} 之间的数字: ")
guess = int(guess_str)
except ValueError:
print("输入无效,请输入一个整数!")
continue # 如果输入的不是数字,重新开始循环
# 4. 判断结果
if guess == bomb:
print(f"恭喜你!炸弹就是 {bomb},你赢了!")
break # 猜中了,退出循环
elif guess < bomb:
print("猜小了!")
low = guess + 1
else: # guess > bomb
print("猜大了!")
high = guess - 1
# 5. 更新范围并提示
print(f"现在炸弹数字的范围缩小到了 {low} 到 {high} 之间。")
print("-" * 20)
文件词频统计器
描述:**
编写一个程序,可以读取一个文本文件(如 hamlet.txt),统计其中每个单词出现的次数,并按出现频率从高到低排序,最后将结果输出到一个新的文件中。
考察知识点:
- 文件读写 (
open(),read(),write(),close()) - 字符串处理 (
split(),lower(),strip(),replace()) - 字典 (
dict) 的使用 - 排序 (
sorted()的key参数) - 列表推导式
思路解析:
- 读取文件:使用
with open('hamlet.txt', 'r', encoding='utf-8') as f:的方式安全地读取文件内容到字符串content。 - 清洗文本:
- 将所有字母转换为小写,避免 "The" 和 "the" 被统计为两个词。
- 使用
replace()或re.sub()将标点符号替换为空格。 - 使用
split()方法将长字符串按空格分割成一个单词列表words。
- 统计词频:
- 创建一个空字典
word_count。 - 遍历
words列表,对于每个单词,如果它在字典中,则值加1;如果不在,则添加到字典中,值为1。
- 创建一个空字典
- 排序:
- 使用
sorted()函数对字典的items()进行排序。 key=lambda item: item[1]表示按照字典的值(即词频)进行排序。reverse=True表示降序排列。
- 使用
- 写入结果:
- 创建一个新的结果文件(如
word_count_result.txt)。 - 遍历排序后的列表,将每个单词及其频次格式化后写入新文件。
- 创建一个新的结果文件(如
参考代码:
import re
# --- 文件词频统计器 ---
def count_words_in_file(input_file_path, output_file_path):
"""
统计文本文件中的词频并写入到另一个文件中。
"""
# 1. 读取文件
try:
with open(input_file_path, 'r', encoding='utf-8') as f:
content = f.read()
except FileNotFoundError:
print(f"错误:文件 '{input_file_path}' 未找到!")
return
# 2. 清洗文本
# 转换为小写
content = content.lower()
# 使用正则表达式替换所有非字母数字的字符为空格
content = re.sub(r'[^a-z0-9\s]', ' ', content)
# 按空格分割成单词列表
words = content.split()
# 3. 统计词频
word_count = {}
for word in words:
# 过滤掉空字符串
if word:
word_count[word] = word_count.get(word, 0) + 1
# 4. 按频率排序
# sorted() 返回一个列表,每个元素是 (key, value) 的元组
sorted_word_counts = sorted(word_count.items(), key=lambda item: item[1], reverse=True)
# 5. 写入结果文件
with open(output_file_path, 'w', encoding='utf-8') as f_out:
f_out.write("单词词频统计结果(从高到低):\n")
f_out.write("=" * 30 + "\n")
for word, count in sorted_word_counts:
f_out.write(f"{word}: {count}\n")
print(f"词频统计完成,结果已保存到 '{output_file_path}'。")
# --- 使用示例 ---
# 假设你有一个名为 hamlet.txt 的文件在同一目录下
input_filename = 'hamlet.txt'
output_filename = 'word_count_result.txt'
count_words_in_file(input_filename, output_filename)
简易计算器
描述:** 实现一个简单的命令行计算器,可以处理加减乘除以及括号运算,用户输入一个数学表达式,程序计算并输出结果。
考察知识点:
eval()函数(强大但需谨慎使用)try...except异常处理input()和print()的交互- 循环结构 (
while)
思路解析:
- 循环:使用
while True让计算器可以连续进行计算,直到用户输入特定的退出命令(如 "q" 或 "quit")。 - 输入:提示用户输入一个数学表达式。
- 退出判断:检查输入是否为退出命令,如果是则
break循环。 - 计算与异常处理:
- 将用户的输入字符串用
eval()函数进行计算。 eval()会执行字符串中的Python表达式。- 用
try...except结构捕获可能发生的异常,SyntaxError:表达式语法错误,如3 + * 4。NameError:使用了未定义的变量,如a + b。ZeroDivisionError:除零错误。
- 将用户的输入字符串用
- 输出结果:如果没有异常,打印计算结果;如果有异常,打印友好的错误提示。
参考代码:
# --- 简易计算器 ---
print("--- 欢迎使用简易计算器 ---")
print("输入 'q' 或 'quit' 退出程序。")
while True:
# 1. 获取用户输入
expression = input("请输入一个数学表达式 ( 3 + 5 * (10 - 8)): ")
# 2. 检查是否要退出
if expression.lower() in ['q', 'quit']:
print("感谢使用,再见!")
break
# 3. 使用 eval 计算并处理异常
try:
# 使用 eval() 计算表达式
result = eval(expression)
# 4. 打印结果
print(f"结果是: {result}")
except SyntaxError:
print("错误:输入的表达式语法不正确!")
except NameError:
print("错误:表达式中包含了未定义的变量!")
except ZeroDivisionError:
print("错误:不能除以零!")
except Exception as e:
# 捕获其他未知错误
print(f"发生未知错误: {e}")
print("-" * 20)
猜数字游戏(升级版)
描述:** 在作业一的基础上进行升级,程序随机生成一个1-100的数字,玩家有最多6次机会来猜中它,每次猜测后,程序会提示“猜大了”、“猜小了”或“恭喜你猜对了”,如果6次机会用完还没猜中,则游戏结束,公布答案。
考察知识点:
random模块while循环和for循环break和continue- 条件判断
- 计数器的使用
思路解析:
- 初始化:生成炸弹数字
bomb,设置一个最大尝试次数max_attempts(如6),和一个已用尝试次数计数器attempts(初始为0)。 - 循环:使用
while attempts < max_attempts:作为循环条件,确保最多只进行max_attempts次猜测。 - 输入与判断:在循环内部,获取玩家输入,判断大小,并更新计数器
attempts。 - 猜中判断:如果猜中,立即
break退出循环,并显示胜利信息。 - 失败判断:当循环正常结束后(即
attempts达到max_attempts但没有猜中),说明玩家失败了,公布答案。
参考代码:
import random
# --- 猜数字游戏(升级版) ---
# 1. 初始化
bomb = random.randint(1, 100)
max_attempts = 6
attempts = 0
print(f"欢迎来到猜数字游戏!")
print(f"我已经想好了一个 1 到 100 之间的数字,你有 {max_attempts} 次机会来猜它。")
# 2. 游戏主循环
while attempts < max_attempts:
# 3. 获取输入
try:
guess_str = input(f"第 {attempts + 1} 次尝试,请输入你的猜测: ")
guess = int(guess_str)
except ValueError:
print("输入无效,请输入一个整数!")
continue # 不算作一次有效尝试
attempts += 1 # 增加尝试次数
# 4. 判断结果
if guess == bomb:
print(f"恭喜你!你猜对了!数字就是 {bomb}!")
break # 猜对,游戏结束
elif guess < bomb:
print("猜小了!")
else:
print("猜大了!")
# 5. 判断是否失败
# 如果循环是因为 attempts >= max_attempts 而退出的,并且没有猜对
if attempts >= max_attempts and guess != bomb:
print(f"\n很遗憾,你的 {max_attempts} 次机会都用完了。")
print(f"正确答案是 {bomb}。")
总结与建议
- 先自己思考:看到题目后,先不要急着看答案,尝试自己用伪代码或流程图把思路理清楚,再动手写代码。
- 理解代码:参考代码只是一个实现方式,更重要的是理解每一步的逻辑,尝试修改代码,看看会发生什么(比如把
while True改成while attempts < 10)。 - 小甲鱼的风格:小甲鱼的课程非常注重趣味性,他的作业也体现了这一点,在做作业时,可以多思考如何让程序更健壮(比如处理用户错误输入)、更友好(比如给出清晰的提示)。
- 进阶挑战:完成基础作业后,可以尝试自己增加功能。
- 在数字炸弹中,增加多人模式。
- 在词频统计器中,排除常见的停用词(如 "the", "a", "is")。
- 在计算器中,增加幂运算()或取余()的支持。
希望这些资料能帮助你更好地完成小甲鱼的Python作业,祝你学习愉快!
