跳到主要内容

10.1 实战项目一:猜数字游戏

项目目标

电脑随机想一个 1~100 的数字,玩家来猜。每次猜测后电脑提示"大了"或"小了",直到猜中,最后告诉玩家用了几次。

用到的知识:random 模块、while 循环、if 判断、异常处理、函数。

先自己试试

强烈建议先合上答案,按下面的思路自己写 15 分钟,卡住了再往下看:

  1. random.randint(1, 100) 生成答案
  2. while True 循环反复让玩家输入
  3. 每次输入后比较大小并提示
  4. 猜中就 break,并统计次数

版本一:最小可用版

import random

answer = random.randint(1, 100)
count = 0

print("我想了一个 1~100 的数字,你来猜!")

while True:
guess = int(input("你猜:"))
count += 1

if guess > answer:
print("大了!")
elif guess < answer:
print("小了!")
else:
print(f"猜对了!你一共猜了 {count} 次")
break

先运行玩一下,确认逻辑没问题。但它有个缺陷:输入非数字直接崩溃。

版本二:加入健壮性

用异常处理让程序不怕乱输入:

import random

answer = random.randint(1, 100)
count = 0

print("我想了一个 1~100 的数字,你来猜!")

while True:
try:
guess = int(input("你猜:"))
except ValueError:
print("请输入数字!")
continue

if guess < 1 or guess > 100:
print("要猜 1~100 之间的数哦")
continue

count += 1

if guess > answer:
print("大了!")
elif guess < answer:
print("小了!")
else:
print(f"猜对了!你一共猜了 {count} 次")
break

版本三:函数化 + 再来一局

把逻辑装进函数,并支持重复游玩:

import random


def play_one_round():
"""玩一局,返回猜的次数"""
answer = random.randint(1, 100)
count = 0

while True:
try:
guess = int(input("你猜:"))
except ValueError:
print("请输入数字!")
continue

if not 1 <= guess <= 100:
print("要猜 1~100 之间的数哦")
continue

count += 1
if guess > answer:
print("大了!")
elif guess < answer:
print("小了!")
else:
print(f"猜对了!用了 {count} 次")
return count


def main():
print("=== 猜数字游戏 ===")
best = None

while True:
count = play_one_round()
if best is None or count < best:
best = count
print(f"🎉 新纪录:{best} 次!")

again = input("再来一局?(y/n):")
if again != "y":
print(f"最佳纪录 {best} 次,再见!")
break


if __name__ == "__main__":
main()

💡 1 <= guess <= 100 是 Python 独有的链式比较,等价于 guess >= 1 and guess <= 100

挑战任务

  1. 限制最多猜 7 次,7 次没中就"游戏失败"并公布答案。
  2. 根据次数给评价:≤4 次"天才",≤7 次"不错",其他"再接再厉"。
  3. (思考题)用什么策略猜,次数最少?提示:每次猜剩余范围的中间值,最多 7 次必中——这就是著名的二分查找思想。

你学到了什么

  • 从"能跑"到"健壮"再到"结构清晰",真实开发就是这样逐步迭代的
  • while True + continue/break 控制游戏流程
  • 把一局的逻辑封装成函数,主流程就变得非常清晰

下一个项目:10.2 实战项目二:待办清单