如何调试这个简单的终端Hangman Python 3脚本?
这些代码行表示刽子手游戏,但当我运行它时,我有一个问题。我试图改变其中的一部分,但结果没有改变 我认为问题出在for循环的猜测函数中,因为当我不猜测字母时,我激活了elif指令(字母elif!=X),但退出是错误的,我不理解原因如何调试这个简单的终端Hangman Python 3脚本?,python,Python,这些代码行表示刽子手游戏,但当我运行它时,我有一个问题。我试图改变其中的一部分,但结果没有改变 我认为问题出在for循环的猜测函数中,因为当我不猜测字母时,我激活了elif指令(字母elif!=X),但退出是错误的,我不理解原因 #!/usr/bin/python3 from random import * words = [ 'riccardo', 'aereodinamic', 'train', 'love', 'ferrari'] guessing_letter = [] base =
#!/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语句。您没有检查单词中的所有字母,只需再次调用该函数。此外,从正在迭代的列表中删除元素会导致问题,请进一步研究