如何调试这个简单的终端Hangman Python 3脚本?

如何调试这个简单的终端Hangman Python 3脚本?,python,Python,这些代码行表示刽子手游戏,但当我运行它时,我有一个问题。我试图改变其中的一部分,但结果没有改变 我认为问题出在for循环的猜测函数中,因为当我不猜测字母时,我激活了elif指令(字母elif!=X),但退出是错误的,我不理解原因 #!/usr/bin/python3 from random import * words = [ 'riccardo', 'aereodinamic', 'train', 'love', 'ferrari'] guessing_letter = [] base =

这些代码行表示刽子手游戏,但当我运行它时,我有一个问题。我试图改变其中的一部分,但结果没有改变

我认为问题出在for循环的猜测函数中,因为当我不猜测字母时,我激活了elif指令(字母elif!=X),但退出是错误的,我不理解原因

#!/usr/bin/python3
from random import *

words = [ 'riccardo', 'aereodinamic', 'train', 'love', 'ferrari']
guessing_letter = []

base = [' +--+ ',   ' |  |   ', '    |   ', '    |   ', '    |   ', ' ======']
man =  [' O  |   ', '/|  |', '/|\ |', '/   |', '/ \ |']

life = list(range(0, len(man)))

words = words[randint(0, len(words) -1)]
word = [words[int(i)] for i in range(0, len(words))]

for i in range(0, len(word)):
    guessing_letter.append('_')


def guessing():

    X = input("Guessing Word: ")

    for i in life:
      for letter in word:

        if letter == X:
            for i in range(-1, 3):

                position = word.index(letter)
                guessing_letter[position] = letter

                word[position] = '*'

                if letter not in word:
                    break

            printer()
            print(' ')
            print(guessing_letter)


            guessing_word = ''.join(str(i) for i in guessing_letter)
            if guessing_word == words:
                print('============================')
                print(' ')
                print('You win the match!')

                break



        elif letter != X:

            base[i + 2] = man[i]

            if i == 2 and base[3] == man[1]:
              base[3] = man[2]
              life.remove(i)

            elif i == 4 and base[4] == man[3]:
              base[4] = man[4]
              life.remove(i)

            printer()
            print(guessing_letter)


            if  base == [base[0], base[1], man[0], man[2], man[4], base[5]]:
                break

        X = input('Guesing WOrd: ')



def printer():
    for i in range(0,len(base)):
        print(base[i])


guessing()
输出:

 Guessing Word: s
 +--+ 
 |  |   
 O  |   
    |   
    |   
 ======
['_', '_', '_', '_']
Guessing Word: l
 +--+ 
 |  |   
 O  |   
    |   
    |   
 ======
 
['l', '_', '_', '_']
Guessing Word: o
 +--+ 
 |  |   
 O  |   
/|  |
    |   
 ======
['l', '_', '_', '_']
Guessing Word: v
 +--+ 
 |  |   
 O  |   
/|\ |
/|\ |
 ======
['l', '_', '_', '_']
Guessing Word: e
 +--+ 
 |  |   
 O  |   
/|\ |
/|\ |
/   |
['l', '_', '_', '_']
Guessing Word: 
Traceback (most recent call last):
  File "./Hangman.py", line 79, in <module>
    guessing()
  File "./Hangman.py", line 68, in guessing
    guessing()
  File "./Hangman.py", line 49, in guessing
    guessing()
  File "./Hangman.py", line 68, in guessing
    guessing()
  File "./Hangman.py", line 68, in guessing
    guessing()
  File "./Hangman.py", line 68, in guessing
    guessing()
  File "./Hangman.py", line 53, in guessing
    base[i + 2] = man[i]
IndexError: list assignment index out of range
猜单词:s +--+ | | O| | | ====== ['_', '_', '_', '_'] 猜词:l +--+ | | O| | | ====== [l'、'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 猜词:o +--+ | | O| /| | | ====== [l'、'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 猜词:v +--+ | | O| /|\ | /|\ | ====== [l'、'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 猜词:e +--+ | | O| /|\ | /|\ | / | [l'、'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 猜词: 回溯(最近一次呼叫最后一次): 文件“/Hangman.py”,第79行,在 猜 文件“/Hangman.py”,第68行,在猜测中 猜 文件“/Hangman.py”,第49行,在猜测中 猜 文件“/Hangman.py”,第68行,在猜测中 猜 文件“/Hangman.py”,第68行,在猜测中 猜 文件“/Hangman.py”,第68行,在猜测中 猜 文件“/Hangman.py”,第53行,在猜测中 基数[i+2]=人[i] 索引器:列表分配索引超出范围
在您的elif中,您正在执行
信函=word
,这将永远不会发生,因为循环是word中字母的
。您可能想使用
elif字母而不是word:
。您正在代码中使用递归,但无法阻止它。应该有返回语句在if和else中打破它,以防你赢了或输了(你甚至不需要递归)。您的特定错误是因为base没有索引i+2@SajanGohil我试图删除递归并更改elif字母!=单词:以elif字母表示!=X:。但是输出是相等的,您可以更新问题中的代码,而且,它应该是字母=十、 我的建议是incorrect@SajanGohil我已经更新了代码。函数仍然没有退出条件。如果你猜这个词会发生什么?它会一直持续到生命结束。由于您调用了tge函数本身,生命计数器将重置。您基本上只是再次开始游戏,但猜测字母不会重置。elif中也没有break语句。您没有检查单词中的所有字母,只需再次调用该函数。此外,从您正在迭代的列表中删除元素会导致问题,请仔细查看,在您的elif中,您正在执行
letter=word
,这将永远不会发生,因为循环是word中字母的
。您可能想使用
elif字母而不是word:
。您正在代码中使用递归,但无法阻止它。应该有返回语句在if和else中打破它,以防你赢了或输了(你甚至不需要递归)。您的特定错误是因为base没有索引i+2@SajanGohil我试图删除递归并更改elif字母!=单词:以elif字母表示!=X:。但是输出是相等的,您可以更新问题中的代码,而且,它应该是字母=十、 我的建议是incorrect@SajanGohil我已经更新了代码。函数仍然没有退出条件。如果你猜这个词会发生什么?它会一直持续到生命结束。由于您调用了tge函数本身,生命计数器将重置。您基本上只是再次开始游戏,但猜测字母不会重置。elif中也没有break语句。您没有检查单词中的所有字母,只需再次调用该函数。此外,从正在迭代的列表中删除元素会导致问题,请进一步研究