杰瑞科技汇

Python小甲鱼作业怎么做?

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

Python小甲鱼作业怎么做?-图1
(图片来源网络,侵删)

数字炸弹游戏

描述:** 经典的数字炸弹游戏,程序随机生成一个1-100的数字作为“炸弹”,然后玩家轮流猜一个数字,每次猜的数字范围会缩小,直到有人猜中炸弹,游戏结束。

考察知识点:

  • random 模块的使用 (random.randint)
  • while 循环
  • input()print() 的交互
  • 条件判断 (if/elif/else)
  • 变量的更新

思路解析:

  1. 初始化:使用 random.randint(1, 100) 生成一个炸弹数字 bomb
  2. 设置范围:定义一个变量 low 初始为1,一个变量 high 初始为100。
  3. 游戏循环:使用 while True 创建一个无限循环,直到猜中炸弹才退出。
  4. 玩家输入:在循环内部,提示玩家输入一个在 lowhigh 之间的数字。
  5. 判断结果
    • 如果猜的数字 guess 等于 bomb,游戏结束,恭喜玩家。
    • 如果猜的数字 guess 小于 bomb,说明炸弹在更大的范围,更新 low = guess + 1,并提示“猜小了”。
    • 如果猜的数字 guess 大于 bomb,说明炸弹在更小的范围,更新 high = guess - 1,并提示“猜大了”。
  6. 更新范围并提示:每次更新 lowhigh 后,都打印出新的猜测范围,让玩家更有目标。

参考代码:

Python小甲鱼作业怎么做?-图2
(图片来源网络,侵删)
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 参数)
  • 列表推导式

思路解析:

  1. 读取文件:使用 with open('hamlet.txt', 'r', encoding='utf-8') as f: 的方式安全地读取文件内容到字符串 content
  2. 清洗文本
    • 将所有字母转换为小写,避免 "The" 和 "the" 被统计为两个词。
    • 使用 replace()re.sub() 将标点符号替换为空格。
    • 使用 split() 方法将长字符串按空格分割成一个单词列表 words
  3. 统计词频
    • 创建一个空字典 word_count
    • 遍历 words 列表,对于每个单词,如果它在字典中,则值加1;如果不在,则添加到字典中,值为1。
  4. 排序
    • 使用 sorted() 函数对字典的 items() 进行排序。
    • key=lambda item: item[1] 表示按照字典的值(即词频)进行排序。
    • reverse=True 表示降序排列。
  5. 写入结果
    • 创建一个新的结果文件(如 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)

思路解析:

  1. 循环:使用 while True 让计算器可以连续进行计算,直到用户输入特定的退出命令(如 "q" 或 "quit")。
  2. 输入:提示用户输入一个数学表达式。
  3. 退出判断:检查输入是否为退出命令,如果是则 break 循环。
  4. 计算与异常处理
    • 将用户的输入字符串用 eval() 函数进行计算。
    • eval() 会执行字符串中的Python表达式。
    • try...except 结构捕获可能发生的异常,
      • SyntaxError:表达式语法错误,如 3 + * 4
      • NameError:使用了未定义的变量,如 a + b
      • ZeroDivisionError:除零错误。
  5. 输出结果:如果没有异常,打印计算结果;如果有异常,打印友好的错误提示。

参考代码:

# --- 简易计算器 ---
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 循环
  • breakcontinue
  • 条件判断
  • 计数器的使用

思路解析:

  1. 初始化:生成炸弹数字 bomb,设置一个最大尝试次数 max_attempts (如6),和一个已用尝试次数计数器 attempts (初始为0)。
  2. 循环:使用 while attempts < max_attempts: 作为循环条件,确保最多只进行 max_attempts 次猜测。
  3. 输入与判断:在循环内部,获取玩家输入,判断大小,并更新计数器 attempts
  4. 猜中判断:如果猜中,立即 break 退出循环,并显示胜利信息。
  5. 失败判断:当循环正常结束后(即 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作业,祝你学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇