功能参数超出功能范围

时间:2017-12-05 17:36:46

标签: python

对于一个课程项目,我必须做一个刽子手游戏。遵循它的指导方针我得到了这段代码:

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超出了字符串索引的范围。我相信这是因为我的函数参数是本地的。知道怎么解决吗?

2 个答案:

答案 0 :(得分:0)

我尝试使用各种输入执行代码,我发现当变量compareLetter的值超过guessed的长度时会发生错误。 看起来逻辑中存在一些问题!!

我试过hangman('banana', 'apple') 以下是checkLettercompareLetter的值如何变化:

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指出的那样,你的代码逻辑是有缺陷的。看看你在每个循环中做了什么,并将它与你想要做的每个循环进行比较。它们不是一回事。