实战:猜数字游戏
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模块的随机数生成
- 循环与条件判断的综合运用
- 异常处理机制的应用
- 输入验证的重要性
优化建议:
- 添加图形界面(Tkinter/PyQt)
- 实现网络对战功能
- 加入声音效果提示
- 开发自动猜题算法
下节预告:在后续文章中,我们将学习Python函数的进阶用法,并开发一个支持多种文件格式转换的实用工具。