猜数字是几乎所有程序员写过的第一个小游戏:电脑随机想一个 1 到 100 之间的数,你猜,它只告诉你"大了"还是"小了",直到猜中。别看它简单,随机数、类型转换、循环、条件判断这些 Python 基础全用上了,是绝佳的练手项目。
玩法介绍
程序在 1~100 之间随机生成一个目标数;玩家每次输入一个整数,程序给出"猜大了 / 猜小了 / 猜对了"的提示;玩家根据提示不断缩小范围,直到猜中为止,最后统计一共猜了几次。
第 1 步:生成随机目标数字
先用 random.randint(a, b) 生成闭区间 [a, b] 内的随机整数。记得在文件开头 import random。
import random
target = random.randint(1, 100)
print("我已经想好了一个 1 到 100 之间的数字,来猜猜看吧!")
第 2 步:读取玩家输入
input() 返回的是字符串,必须用 int() 转成整数才能比较。万一玩家输入了"abc",程序会直接崩溃——先用 try / except 把异常兜住。
while True:
text = input("请输入你猜的数字: ")
try:
guess = int(text)
break
except ValueError:
print("请输入一个整数!")
第 3 步:比较并给出提示
拿到数字后和 target 比大小,用 if / elif / else 输出提示。注意猜中后要用 break 跳出循环。
if guess > target:
print("猜大了,再小一点~")
elif guess < target:
print("猜小了,再大一点~")
else:
print("恭喜!猜对啦!")
break
第 4 步:用 while 循环串起来
把输入、比较放进同一个 while True 循环,再加一个计数器统计猜测次数,每猜一次 +1。注意输入非法时用 continue 跳过本轮,不计数。
attempts = 0
while True:
text = input("请输入你猜的数字: ")
try:
guess = int(text)
except ValueError:
print("请输入一个整数!")
continue # 这次不算,直接进入下一轮
attempts += 1
if guess > target:
print("猜大了,再小一点~")
elif guess < target:
print("猜小了,再大一点~")
else:
print(f"恭喜!猜对啦!答案就是 {target},你一共猜了 {attempts} 次。")
break
第 5 步:支持"再来一局"
把整局游戏包进外层循环,结束后问玩家是否再玩;顺手加上"超过 7 次给提示"的小功能,让游戏更有挑战。7 次是有道理的:2 的 7 次方等于 128,理论上二分法最多 7 次必中。
import random
while True:
target = random.randint(1, 100)
attempts = 0
print("\n===== 新的一局 =====")
while True:
text = input("请输入你猜的数字: ")
try:
guess = int(text)
except ValueError:
print("请输入一个整数!")
continue
attempts += 1
if guess > target:
print("猜大了,再小一点~")
elif guess < target:
print("猜小了,再大一点~")
else:
print(f"恭喜!答案就是 {target},你用了 {attempts} 次!")
break
if attempts == 7:
print(f"提示:目标数在 {target - 10} 到 {target + 10} 之间")
again = input("再来一局?(y/n): ")
if again.lower() != "y":
print("下次见!")
break
第 6 步:完整代码与运行
上面第 5 步的代码就是完整版。把它保存为 guess.py,在终端运行 python3 guess.py 即可开玩。运行效果大致如下:
===== 新的一局 =====
请输入你猜的数字: 50
猜小了,再大一点~
请输入你猜的数字: 75
猜大了,再小一点~
...
请输入你猜的数字: 62
恭喜!答案就是 62,你用了 6 次!
试试用二分法(每次都猜当前范围的中间值),看能不能稳定在 7 次以内猜中。如果输入的不是整数,程序会友好地提示而不是崩溃——这就是第 2 步 try / except 的功劳。
💡 改进方向:①加入难度选择(1~50 / 1~1000);②用 random.shuffle 生成"不重复四位数",做成猜数字和位置都反馈的进阶版(类似 Bulls and Cows);③把历史猜测记录打印出来方便复盘;④限制最多猜 10 次,超了算输,让游戏更有压力感。