实验简介:
本次上机实验围绕 random 随机库
交互式猜数字游戏,增加输入校验、记录猜测过程、连玩3局求平均次数;
实现思路:
交互式猜数字游戏
- 使用 random.randint(1,100) 生成1~100随机答案。
- 用 try-except 捕获非整数输入,做合法性校验:输入必须是整数,范围1~100,不满足则提示重新输入,程序不会崩溃。
- 列表 history 记录每一轮猜测的数字,累加变量记录猜测次数。
- 一局猜完后打印猜测全过程,循环执行3局,最后计算三局的平均猜测次数。
程序运行结果示例
plaintext
=任务1:猜数字游戏,连玩3局=
—第1局—
请输入1~100的整数猜测:50
小了
请输入1~100的整数猜测:75
大了
请输入1~100的整数猜测:62
小了
请输入1~100的整数猜测:68
恭喜猜对!一共猜了4次
猜测过程:[50, 75, 62, 68]
—第2局—
请输入1~100的整数猜测:30
小了
请输入1~100的整数猜测:60
大了
请输入1~100的整数猜测:45
恭喜猜对!一共猜了3次
猜测过程:[30, 60, 45]
—第3局—
请输入1~100的整数猜测:20
小了
请输入1~100的整数猜测:80
大了
请输入1~100的整数猜测:50
小了
请输入1~100的整数猜测:65
大了
请输入1~100的整数猜测:57
恭喜猜对!一共猜了5次
猜测过程:[20, 80, 50, 65, 57]
3局游戏平均猜测次数:4.00
学习心得
本次实验让我直观感受到随机模拟和算法效率的巨大差距。
猜数字两种策略对比,直观理解线性算法和二分算法的效率差距。线性猜测是O(n),范围扩大,猜测次数线性上涨;二分是对数O(log₂n),范围扩大,猜测次数增长极其缓慢。
踩坑记录
任务1输入校验踩坑
一开始没有写 try-except ,如果输入字母,程序直接崩溃报错。
✅解决:捕获ValueError,区分「不是整数」和「超出数字范围」两类提示。
代码:
import random
def play_one_game():
“”“玩一局猜数字游戏,返回本局猜的次数”“”
target = random.randint(1, 100)
guesses = []
count = 0
print("\n=== 新的一局开始!我已经想好了一个 1~100 的数字 ===") while True: user_input = input("请输入你猜的数字:").strip() try: guess = int(user_input) except ValueError: print("⚠️ 输入的不是整数,请重新输入!") continue if guess < 1 or guess > 100: print("⚠️ 数字必须在 1~100 之间,请重新输入!") continue count += 1 guesses.append(guess) if guess > target: print("大了") elif guess < target: print("小了") else: print(f"🎉 恭喜你猜中了!答案就是 {target}") print(f"本局你一共猜了 {count} 次。") print("你的猜测过程:" + " → ".join(str(g) for g in guesses)) return countdef main():
total_times = 0
rounds = 3
for i in range(1, rounds + 1): print(f"\n########## 第 {i} 局 ##########") times = play_one_game() total_times += times average = total_times / rounds print(f"\n===== 3 局结束 =====") print(f"总猜测次数:{total_times}") print(f"平均每局用了 {average:.2f} 次")ifname== “main”:
main()