2.5实战:猜数字游戏

654 阅读3分钟

实战:猜数字游戏

1. 游戏设计目标

开发一个交互式猜数字游戏,实现以下功能:

  • 生成1-100的随机整数
  • 提供最多7次猜测机会
  • 每次猜测后提示"太大"或"太小"
  • 输入错误时友好提示
  • 游戏结束时显示统计信息

2. 随机数生成

2.1 random模块使用

import random
​
# 生成指定范围的随机整数
secret_number = random.randint(1, 100)
print("调试用答案:", secret_number)  # 开发阶段可显示答案

模块常用方法

方法功能说明
random.random()生成[0.0, 1.0)的浮点数
random.choice(list)从序列中随机选择元素
random.shuffle(list)打乱序列顺序

3. 用户输入处理

3.1 基础输入验证

while True:
    guess = input("请输入1-100的整数:")
    
    if guess.isdigit():
        num = int(guess)
        if 1 <= num <= 100:
            return num
        print("请输入1-100范围内的数字!")
    else:
        print("输入内容不是有效数字!")

3.2 异常捕获机制

def get_valid_input():
    """获取有效输入的完整处理"""
    while True:
        try:
            num = int(input("请输入猜测数字:"))
            if 1 <= num <= 100:
                return num
            print("⚠️ 请输入1-100之间的数字!")
        except ValueError:
            print("⚠️ 输入内容不是有效整数!")
        except KeyboardInterrupt:
            print("\n游戏终止")
            exit()

4. 完整游戏实现

import random
​
def number_guessing_game():
    """猜数字游戏主逻辑"""
    secret = random.randint(1, 100)
    attempts = 0
    max_attempts = 7
    history = []
​
    print("=== 猜数字游戏 ===")
    print(f"你有{max_attempts}次机会猜测1-100之间的数字")
​
    while attempts < max_attempts:
        remaining = max_attempts - attempts
        print(f"\n剩余次数:{remaining}")
​
        guess = get_valid_input()
        history.append(guess)
        attempts += 1
​
        if guess == secret:
            print(f"🎉 恭喜!你在第{attempts}次猜中了答案!")
            break
        elif guess > secret:
            print("🔽 猜大了,试试小一点的数字")
        else:
            print("🔼 猜小了,试试大一点的数字")
    else:
        print(f"\n❌ 机会用尽,正确答案是:{secret}")
​
    print("\n=== 游戏统计 ===")
    print(f"猜测记录:{' → '.join(map(str, history))}")
    print(f"总尝试次数:{attempts}次")
​
def get_valid_input():
    """获取有效输入的完整处理"""
    while True:
        try:
            num = int(input("请输入猜测数字:"))
            if 1 <= num <= 100:
                return num
            print("⚠️ 请输入1-100之间的数字!")
        except ValueError:
            print("⚠️ 输入内容不是有效整数!")
        except KeyboardInterrupt:
            print("\n游戏终止")
            exit()
​
if __name__ == "__main__":
    number_guessing_game()

5. 功能扩展建议

5.1 难度分级系统

def select_difficulty():
    """难度选择功能"""
    levels = {
        '1': {'range': 50, 'attempts': 5},
        '2': {'range': 100, 'attempts': 7},
        '3': {'range': 200, 'attempts': 10}
    }
    
    while True:
        choice = input("请选择难度(1-简单 2-普通 3-困难):")
        if choice in levels:
            return levels[choice]
        print("无效的难度选择!")

5.2 游戏记录保存

import json
​
def save_record(player_name, attempts):
    """保存游戏记录"""
    try:
        with open("records.json", "r") as f:
            records = json.load(f)
    except FileNotFoundError:
        records = []
​
    records.append({"name": player_name, "attempts": attempts})
    
    with open("records.json", "w") as f:
        json.dump(records, f, indent=2)

6. 调试技巧

6.1 打印调试信息

# 在循环内添加临时调试语句
print(f"[DEBUG] 当前答案:{secret},用户输入:{guess}")

6.2 单元测试用例

def test_input_validation():
    """测试输入验证函数"""
    assert get_valid_input("50") == 50
    assert get_valid_input("abc") 触发异常
    assert get_valid_input("150") 提示范围错误

7. 游戏运行示例

=== 猜数字游戏 ===
你有7次机会猜测1-100之间的数字
​
剩余次数:7
请输入猜测数字:50
🔼 猜小了,试试大一点的数字
​
剩余次数:6
请输入猜测数字:75
🔼 猜小了,试试大一点的数字
​
剩余次数:5
请输入猜测数字:88
🎉 恭喜!你在第3次猜中了答案!
​
=== 游戏统计 ===
猜测记录:50 → 75 → 88
总尝试次数:3次

8. 总结与优化方向

核心知识点

  • random模块的随机数生成
  • 循环与条件判断的综合运用
  • 异常处理机制的应用
  • 输入验证的重要性

优化建议

  1. 添加图形界面(Tkinter/PyQt)
  2. 实现网络对战功能
  3. 加入声音效果提示
  4. 开发自动猜题算法

下节预告:在后续文章中,我们将学习Python函数的进阶用法,并开发一个支持多种文件格式转换的实用工具。