我一直在尝试编码,并制作了这款小巧的hangman游戏
from random import randint
import sys
used_letters = []
life = 3
wordList = ['apple','bee','castle','house','train','computer','snake','program','cellphone','microphone']
word = wordList[randint(0,(len(wordList)-1))]
wordList = [letter for letter in word]
amountLetters = 0
word_holder = []
for letter in wordList:
word_holder.append(amountLetters)
amountLetters += 1
while life > 0:
fail_counter = 0
user_input = (input('What is your guess?')).lower()
if user_input == word:
print('You win')
sys.exit(0)
elif user_input == 'word':
print(word_holder)
elif user_input == 'letters':
print(used_letters)
elif wordList.count(user_input) > 0:
for letter in wordList:
if user_input == letter:
indexNb = wordList.index(letter)
word_holder.insert(indexNb, letter)
wordList.insert(indexNb, '0')
print(f'You found the letter {letter}')
else:
fail_counter = fail_counter + 1
if fail_counter == len(wordList):
print('You lost a life')
used_letters.append(letter)
life -= 1
if life == 0:
print('You lose!')
我一直在尝试不同的方式来弥补这一点,但我做不到。这似乎是一个好方法,但它不断陷入无限循环,并用相同的字母重复打印。所以基本上我想知道为什么“ for”会进入无限循环,尽管“ wordList”中的“ letter”应该是有限的。
答案 0 :(得分:1)
您正在insert
进入当前正在检查的索引处的wordList
,这意味着您将正在检查的letter
推出一个(将{{1 }}的当前位置),意味着在下一个循环中再次找到它。
因此,在第一个循环中,在'0'
中搜索'x'
,您会在索引['x', 'y', 'z']
上找到x
,然后是0
insert
在该索引处,将'0'
更新为list
。在下一个循环中,它将['0', 'x', 'y', 'z']
迭代器的内部索引从0推进到1,并将找到的值(再次list
!)放入'x'
中。然后letter
个insert
得到'0'
。我认为您可以从这里开始遵循逻辑;您将['0', '0', 'x', 'y', 'z']
insert
无限个,因为每个将您的目标推出另一个索引,然后您立即再次“找到”它。
答案 1 :(得分:0)
凭经验,wordList
是不是有限的:您在遍历它时会附加到它的后面,从而扩展了列表。在循环中使用print
语句来跟踪您的值,您会发现问题所在。您在找到的字母前插入0
。那封信被撞到了一个位置,您将在下一次执行时找到相同信。
for letter in wordList:
if user_input == letter:
indexNb = wordList.index(letter)
word_holder.insert(indexNb, letter)
wordList.insert(indexNb, '0')
print('You found the letter', letter)
print(' wordList is now', wordList)
相反,请使用replace
方法或从原始方法构建一个新字符串。例如,只需将此循环替换为
wordList.replace(letter, '0')
print('You found the letter', letter)
另外,请注意一个明显的问题:您正在处理整个wordList
,而不仅仅是一个单词。我还没有修复那部分。
答案 2 :(得分:0)
欢迎来到Stackoverflow社区。 for循环中的以下行可能会导致无限循环,请更新您的代码。
wordList.insert(indexNb, '0')