第19集:综合练习-猜数字游戏
本集学习目标
- 综合运用前面学到的知识:条件语句、循环、输入输出等
- 学会设计一个完整的游戏程序
- 掌握程序的基本结构和流程
- 学会使用random模块生成随机数
- 学会处理用户输入
- 学会给出提示和反馈
项目介绍
本集我们将制作一个完整的猜数字游戏,这是一个经典的编程练习项目,能够很好地综合运用前面学到的所有知识。
游戏规则
- 系统随机生成一个1-100的数字
- 玩家有7次机会猜测
- 每次猜测后,系统会提示"太大"或"太小"
- 如果猜对了,游戏结束
- 如果7次都没猜对,游戏结束并显示正确答案
游戏设计思路
程序结构
开始游戏
↓
生成随机数(1-100)
↓
初始化次数(7次)
↓
开始循环(最多7次)
↓
输入猜测
↓
判断猜测
├─ 猜对了 → 赢了 → 退出循环
├─ 太大了 → 提示"太大"
└─ 太小了 → 提示"太小"
↓
次数减1
↓
判断是否还有次数
├─ 有 → 继续循环
└─ 没有 → 输了 → 退出循环
↓
游戏结束涉及的知识点
- 输入输出:
input()和print() - 条件语句:
if-elif-else - 循环:
for循环 - random模块:生成随机数
- 数据类型转换:
int() - break语句:提前退出循环
完整代码
版本1:基础版本
import random
# 生成随机数(1-100)
target = random.randint(1, 100)
max_attempts = 7
print("=" * 50)
print("欢迎来到猜数字游戏!")
print("我已经想好了一个1-100的数字")
print(f"你有{max_attempts}次机会来猜!")
print("=" * 50)
# 游戏循环
for attempt in range(max_attempts):
# 输入猜测
guess = int(input(f"\n第{attempt + 1}次猜测,请输入你的数字:"))
# 判断猜测
if guess == target:
print(f"\n恭喜你猜对了!数字就是{target}")
print(f"你用了{attempt + 1}次就猜对了!")
break
elif guess < target:
print("太小了!")
else:
print("太大了!")
# 提示剩余次数
remaining = max_attempts - attempt - 1
if remaining > 0:
print(f"还有{remaining}次机会")
else:
# 循环正常结束(没有break),说明没猜对
print(f"\n很遗憾,你没能猜对")
print(f"正确答案是:{target}")
print("\n游戏结束!")版本2:增强版本(输入验证)
import random
# 生成随机数(1-100)
target = random.randint(1, 100)
max_attempts = 7
print("=" * 50)
print("欢迎来到猜数字游戏!")
print("我已经想好了一个1-100的数字")
print(f"你有{max_attempts}次机会来猜!")
print("=" * 50)
# 游戏循环
for attempt in range(max_attempts):
# 输入猜测(带验证)
while True:
try:
guess = int(input(f"\n第{attempt + 1}次猜测,请输入你的数字(1-100):"))
if 1 <= guess <= 100:
break
else:
print("请输入1-100之间的数字!")
except ValueError:
print("请输入有效的数字!")
# 判断猜测
if guess == target:
print(f"\n恭喜你猜对了!数字就是{target}")
print(f"你用了{attempt + 1}次就猜对了!")
break
elif guess < target:
print("太小了!")
else:
print("太大了!")
# 提示剩余次数
remaining = max_attempts - attempt - 1
if remaining > 0:
print(f"还有{remaining}次机会")
else:
# 循环正常结束(没有break),说明没猜对
print(f"\n很遗憾,你没能猜对")
print(f"正确答案是:{target}")
print("\n游戏结束!")版本3:高级版本(可重复玩)
import random
def play_game():
"""玩一局游戏"""
# 生成随机数(1-100)
target = random.randint(1, 100)
max_attempts = 7
print("=" * 50)
print("欢迎来到猜数字游戏!")
print("我已经想好了一个1-100的数字")
print(f"你有{max_attempts}次机会来猜!")
print("=" * 50)
# 游戏循环
for attempt in range(max_attempts):
# 输入猜测(带验证)
while True:
try:
guess = int(input(f"\n第{attempt + 1}次猜测,请输入你的数字(1-100):"))
if 1 <= guess <= 100:
break
else:
print("请输入1-100之间的数字!")
except ValueError:
print("请输入有效的数字!")
# 判断猜测
if guess == target:
print(f"\n恭喜你猜对了!数字就是{target}")
print(f"你用了{attempt + 1}次就猜对了!")
return attempt + 1 # 返回使用的次数
elif guess < target:
print("太小了!")
else:
print("太大了!")
# 提示剩余次数
remaining = max_attempts - attempt - 1
if remaining > 0:
print(f"还有{remaining}次机会")
# 没猜对
print(f"\n很遗憾,你没能猜对")
print(f"正确答案是:{target}")
return max_attempts # 返回使用的次数
def main():
"""主函数"""
print("========================================")
print(" 猜数字游戏 - 综合练习")
print("========================================\n")
# 游戏统计
total_games = 0
total_attempts = 0
wins = 0
# 主循环
while True:
print("\n" + "=" * 50)
choice = input("要开始游戏吗?(y/n):").lower()
if choice == 'n':
print("\n游戏结束!")
break
elif choice != 'y':
print("无效的输入,请输入y或n")
continue
# 玩游戏
attempts = play_game()
# 更新统计
total_games += 1
total_attempts += attempts
if attempts < 7: # 用少于7次就猜对了
wins += 1
# 显示统计
print("\n" + "=" * 50)
print("游戏统计:")
print(f"总局数:{total_games}")
print(f"胜利次数:{wins}")
print(f"总尝试次数:{total_attempts}")
if total_games > 0:
avg_attempts = total_attempts / total_games
print(f"平均尝试次数:{avg_attempts:.1f}")
if __name__ == "__main__":
main()代码讲解
1. random模块
import random
target = random.randint(1, 100) # 生成1-100的随机整数说明:
random.randint(a, b):生成a到b之间的随机整数(包括a和b)- 每次运行程序,生成的数字都不同
2. for循环和else子句
for attempt in range(max_attempts):
# 循环体
if guess == target:
break # 猜对了,退出循环
else:
# 这个else只会在循环正常结束时执行(没有break)
print("很遗憾,你没能猜对")说明:
- for循环可以带else子句
- else子句只会在循环正常结束时执行(即没有break)
- 如果循环被break中断,else不会执行
3. 输入验证
while True:
try:
guess = int(input("请输入数字:"))
if 1 <= guess <= 100:
break
else:
print("请输入1-100之间的数字!")
except ValueError:
print("请输入有效的数字!")说明:
- 使用while循环确保用户输入有效
- try-except捕获输入错误(非数字)
- 检查输入范围(1-100)
4. break语句
if guess == target:
print("恭喜你猜对了!")
break # 退出循环说明:
- break用于立即退出循环
- 猜对了就退出,不再继续循环
游戏运行示例
==================================================
欢迎来到猜数字游戏!
我已经想好了一个1-100的数字
你有7次机会来猜!
==================================================
第1次猜测,请输入你的数字(1-100):50
太小了!
还有6次机会
第2次猜测,请输入你的数字(1-100):75
太大了!
还有5次机会
第3次猜测,请输入你的数字(1-100):60
太小了!
还有4次机会
第4次猜测,请输入你的数字(1-100):70
太大了!
还有3次机会
第5次猜测,请输入你的数字(1-100):65
太小了!
还有2次机会
第6次猜测,请输入你的数字(1-100):68
恭喜你猜对了!数字就是68
你用了6次就猜对了!
游戏结束!扩展功能
扩展1:难度选择
print("选择难度:")
print("1. 简单(1-50,10次机会)")
print("2. 中等(1-100,7次机会)")
print("3. 困难(1-200,5次机会)")
difficulty = input("请选择难度(1/2/3):")
if difficulty == '1':
max_num = 50
max_attempts = 10
elif difficulty == '2':
max_num = 100
max_attempts = 7
else:
max_num = 200
max_attempts = 5
target = random.randint(1, max_num)扩展2:提示范围
# 记录猜测范围
min_hint = 1
max_hint = 100
# 在每次猜测后更新范围
if guess < target:
min_hint = max(min_hint, guess + 1)
else:
max_hint = min(max_hint, guess - 1)
# 提示剩余范围
print(f"提示:数字在{min_hint}-{max_hint}之间")扩展3:历史记录
# 记录所有猜测
guesses = []
# 每次猜测后记录
guesses.append(guess)
# 显示历史猜测
print(f"你的猜测:{guesses}")本集小结
- 综合运用了条件语句、循环、输入输出
- 使用random模块生成随机数
- 使用for-else结构判断循环是否正常结束
- 使用try-except进行输入验证
- 使用break提前退出循环
- 使用函数封装代码,提高可读性
- 添加输入验证,增强程序的健壮性
- 添加游戏统计,提升用户体验
课后练习
练习1:修改游戏范围
将数字范围改为1-200,尝试次数改为10次。
练习2:添加提示功能
在每次猜测后,提示数字在哪个范围内。
练习3:添加历史记录
记录并显示玩家的所有猜测。
练习4:难度选择
添加简单、中等、困难三个难度级别。
练习5:记分系统
根据猜测次数给出评分:
- 1-2次:S级
- 3-4次:A级
- 5-6次:B级
- 7次:C级
下集预告
恭喜你完成了第一阶段的20集学习!你已经掌握了Python的基础语法、条件语句、循环等重要知识点。下一阶段我们将学习数据结构:字符串、列表、元组、字典、集合等。
继续加油!