猜单词(Hangman)是经典的文字游戏:程序藏起一个单词,只显示字母个数,你一个个猜字母,猜对就亮出位置,猜错就少一次机会。它比猜数字更考验"状态管理"——你需要同时跟踪答案、已猜字母、已亮出的位置、剩余机会,这正是程序设计的核心练习。
玩法介绍
程序从单词库随机选一个英文单词(如 python),显示成 "_ _ _ _ _ _";玩家每次输入一个字母,猜中则所有对应位置亮出,猜错扣 1 次机会;共有 6 次机会,用完之前猜出全部字母即获胜,否则失败并公布答案。重复猜过的字母不扣机会。
第 1 步:准备单词库
用一个列表存单词,random.choice 随机选一个。统一转成小写,避免大小写导致比较失败。
import random
words = ["python", "hangman", "computer", "program", "keyboard"]
answer = random.choice(words).lower()
第 2 步:用状态列表显示进度
用列表 guessed 记录"哪些位置已经猜中",初始全是 False;显示时,猜中的位置输出字母,没猜中的输出下划线 _。这是"数据驱动显示":改数据,画面自动更新。
guessed = [False] * len(answer)
def show():
line = []
for i, ch in enumerate(answer):
line.append(ch if guessed[i] else "_")
print(" ".join(line))
show() # 例如: _ _ _ _ _ _
第 3 步:猜字母与输入校验
要求输入单个字母,校验长度与是否为字母;用集合 tried 记录猜过的字母,重复输入不算错、不扣机会,直接提示并重来。
tried = set() # 已猜过的字母集合
while True:
ch = input("猜一个字母: ").lower()
if len(ch) != 1 or not ch.isalpha():
print("请输入单个英文字母!")
continue
if ch in tried:
print("这个字母猜过了,换一个吧!")
continue
tried.add(ch)
break
第 4 步:更新显示状态
猜中时把所有匹配位置标为 True;猜错时机会减 1。注意区分"哪个位置"和"什么字母"两层信息——enumerate 同时拿到下标和字符,是这段代码的关键。
if ch in answer:
for i, letter in enumerate(answer):
if letter == ch:
guessed[i] = True
print("猜对啦!")
else:
lives -= 1
print(f"没有这个字母,还剩 {lives} 次机会")
第 5 步:判定输赢并组装主循环
全部猜中即获胜——all(guessed) 一行搞定;机会用完则失败并公布答案。把前面几步组装成完整版:
import random
words = ["python", "hangman", "computer", "program", "keyboard"]
answer = random.choice(words).lower()
guessed = [False] * len(answer)
tried = set()
lives = 6
def show():
print(" ".join(ch if guessed[i] else "_" for i, ch in enumerate(answer)))
while lives > 0 and not all(guessed):
show()
ch = input("猜一个字母: ").lower()
if len(ch) != 1 or not ch.isalpha():
print("请输入单个英文字母!")
continue
if ch in tried:
print("这个字母猜过了!")
continue
tried.add(ch)
if ch in answer:
for i, letter in enumerate(answer):
if letter == ch:
guessed[i] = True
print("猜对啦!")
else:
lives -= 1
print(f"没有这个字母,还剩 {lives} 次机会")
if all(guessed):
print(f"\n恭喜!你猜出了单词: {answer}")
else:
print(f"\n机会用完啦,答案是: {answer},下次加油!")
第 6 步:完整代码与运行
第 5 步的代码就是完整版,保存为 hangman.py,运行 python3 hangman.py 即可游玩。玩的时候你会发现自己不知不觉在练英语——把单词库换成 function、variable 这类编程术语,边玩边巩固专业词汇。
💡 改进方向:①用 ASCII 画逐步画出"上吊小人",每错一次多画一笔,氛围拉满;②加入提示功能:花 1 次机会显示一个字母;③单词库按难度分组,开局可选;④把 guessed 列表换成字符串拼接版本,练习不同的数据处理思路。