对于一个课程项目,我必须做一个刽子手游戏。遵循它的指导方针我得到了这段代码:
def hangman(guessed, secret):
word = ""
wrongLetters = 0
checkLetter = 0
compareLetter = 0
for i in range(len(secret)):
if secret[checkLetter] == guessed[compareLetter]:
word += guessed[compareLetter]
compareLetter = 0
checkLetter += 1
elif secret[checkLetter] != guessed[compareLetter]:
compareLetter += 1
for i in range(len(secret) - 1):
if secret[checkLetter] == guessed[compareLetter]:
word += guessed[checkLetter]
break
elif secret[checkLetter] != guessed[compareLetter]:
compareLetter += 1
wrongLetters += 1
elif wrongLetters == len(secret):
word += "-"
wrongLetters = 0
checkLetter += 1
compareLetter = 0
print(word)
我的问题是,它告诉我第二个if secret[checkLetter] == guessed[compareLetter]:
语句下的for
超出了字符串索引的范围。我相信这是因为我的函数参数是本地的。知道怎么解决吗?
答案 0 :(得分:0)
我尝试使用各种输入执行代码,我发现当变量compareLetter
的值超过guessed
的长度时会发生错误。
看起来逻辑中存在一些问题!!
我试过hangman('banana', 'apple')
以下是checkLetter
和compareLetter
的值如何变化:
0 1
1 1
1 2
1 3
1 4
1 6
希望你能理解这个问题。
答案 1 :(得分:0)
乍看之下可能出现的问题比我看到的还要多,但现在可以了。
1)在第二个for循环中,你永远不会到达最后一个elif案例。
2)当你到达猜测字母列表的末尾时,你不会重置compareLetter。这意味着最终,它会比“猜到的”长度大,这就是造成你的异常的原因。
3)你已经命名了两个for循环迭代器i。而你永远不会使用它们。
4)你的for循环经过两次秘密的长度,嵌套。而且,你不再使用迭代器。
正如eiram_mahera指出的那样,你的代码逻辑是有缺陷的。看看你在每个循环中做了什么,并将它与你想要做的每个循环进行比较。它们不是一回事。