在 Hangman 使用数组的 Python 3.2 实现中,存在一个问题:无法将玩家错误的猜测存储在 BadGuess 数组中并显示在游戏界面上。
解决方案![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/045ae760e08d4f54b726a60255619bb8.png#pic_center)
-
首先,需要修改 BadGuess 数组的初始化。将它从
BadGuess = "_" * len(ChosenWord) * 2
更改为BadGuess = ["_"] * len(ChosenWord) * 2
。这种方式将 BadGuess 初始化为一个长度为 ChosenWord 长度两倍的列表,其中每个元素都是一个下划线字符串。这确保了 BadGuess 数组具有正确的大小来存储玩家的错误猜测。 -
接下来的问题是如何存储错误猜测。在玩家猜测错误时,需要将该猜测存储在 BadGuess 数组的适当位置。可以使用以下代码来实现:
# 如果猜测错误
if PlayerGuess not in ChosenWord:
# 在 BadGuess 数组中找到正确的存储位置
for b in range(len(BadGuess)):
# 如果该位置为空
if BadGuess[b] == "_":
# 将猜测存储在该位置
BadGuess[b] = PlayerGuess
# 退出循环
break
- 最后,需要在游戏界面上显示 BadGuess 数组中的错误猜测。可以使用以下代码来实现:
# 打印错误猜测
print("Letters you have missed:", " ".join(BadGuess))
代码例子
以下是一个完整的游戏代码,包括上述修改:
import random
# 游戏单词库
GameWords = ['COMPUTER', 'PYTHON', 'RUBY', 'DELPHI', 'LAPTOP', 'IDEALS', 'PERL']
# 程序选择一个单词
word = random.randint(0, 6)
ChosenWord = GameWords[word]
# 将 ChosenWord 转换为列表
ChosenWord = list(ChosenWord)
# 生成游戏界面
playField = ["_"] * len(ChosenWord)
# 错误猜测数组
BadGuess = ["_"] * len(ChosenWord) * 2
# 打印游戏界面
print("Bad Guesses:", " ".join(BadGuess))
print("\nHidden Word:", " ".join(playField))
# 获取单词中的字母数
WordLength = len(ChosenWord)
# 给出猜测次数,是单词长度的两倍
NumChances = WordLength * 2
print("\nNumber of Chances:", NumChances)
print("\nThis is the number of letters in the word:", WordLength, "\n")
# 猜测循环
flag = True
GoodCounter = 0
b = 0
while flag:
# 获取玩家猜测
PlayerGuess = input("\nGuess a letter: ").upper()
# 玩家只能输入一个字母
if len(PlayerGuess) != 1:
print("Please enter a single letter.")
# 玩家未输入字母
elif PlayerGuess not in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
print("Please enter a LETTER.")
# 玩家猜测错误
elif PlayerGuess not in ChosenWord:
# 在 BadGuess 数组中找到正确的存储位置
for b in range(len(BadGuess)):
if BadGuess[b] == "_":
BadGuess[b] = PlayerGuess
break
print("You have guessed wrong")
print("Letters you have missed:", " ".join(BadGuess))
NumChances -= 1
print("You have", NumChances, "left!")
if NumChances == 0:
flag = False
print("You have lost!")
else:
flag = True
# 玩家猜测正确
elif PlayerGuess in ChosenWord:
# 在 playField 数组中更新正确猜测的字母
for i in range(WordLength):
if ChosenWord[i] == PlayerGuess:
playField[i] = PlayerGuess
print("\nLetters you have HIT!", " ".join(playField))
print("You have guessed correctly")
GoodCounter += 1
if GoodCounter >= WordLength:
flag = False
print("You have won!")
else:
flag = True