我正在开始编码,我尝试编写“Hangman”。现在我自己解决了大部分问题,但我正在努力解决这个问题。 我想保存多个索引,以便我可以将“_”替换为所需的字符。
guess = ""
for x in randomWord:
guess = str(guess) + "_"
#Calculates the index for the found lette
for i in randomWord:
wordIndex = randomWord.find(userInput)
#If Statement deconstructs string into list and adds found letter
if wordIndex > -1:
guess = list(guess)
guess[wordIndex] = userInput
guess = "".join(guess)
missLett -= 1
我在某处读到,枚举可以帮助我解决我的问题,但就是无法掌握它。
使用
enumerate
确实非常适合您的任务。它在迭代的每一步都会产生对 (index, value)
。
为了简单起见,您可以当时迭代
randomWord
一个字符,并将所有匹配位置的 guess
中的字符替换为 userInput
。像这样的东西应该有效:
randomWord = "hippopotamus"
guess = list("_" * len(randomWord))
userInput = "p"
for i, char in enumerate(randomWord):
if char == userInput:
guess[i] = userInput
print("".join(guess))
# Outputs: "__pp_p______"
我不太确定为什么要获取字符串中的索引。您可以将
guess
定义为列表,以便您可以轻松访问其元素,并将“_”替换为正确的字母。
这是一种使用列表来实现 Hangman 的方法:
randomWord = "helloworld"
guess = ["_" for x in randomWord] # use guess as a list instead to access elements easier
max_err = 5 # max number of trials
err = 0 # number of errors
while err < max_err:
letter = input("Guess a letter :\n")
if letter in randomWord:
for i in range(len(guess)): # parsing each letter in guess
if randomWord[i] == letter:
guess[i] = letter # correct letter => replace it in guess
print(''.join(guess))
else:
print("Oh no !\n")
err += 1
print("you lost...")
请注意,同一字母可能会在
randomWord
中出现多次。使用 enumerate
的相关代码可能如下所示:
guess = list(guess)
# Typical usage of enumerate. i contains the letter and idx its index
for idx, i in enumerate(randomWord):
if i == userInput:
guess[idx] = userInput
missLett -= 1
guess = "".join(guess)