我对编程很新,并为自己设定了在Python上生成Hangman游戏的任务。我到目前为止的代码是在这篇文章的底部供参考:它几乎完成,但当我尝试打印相同数量的下划线时,我有一个非常讨厌的问题,因为要猜到的单词中有字母。我不知道为什么,但是,尽管Python明白了,当我给出
时word = ['n','i','g','h','t']
作为我在内核中的输入词,它知道“night”是需要猜测的单词,它会打印一些下划线,这些下划线对应于我已赋给变量'word'的默认列表中的字母数,这是“什么”,即8个下划线,而不是5.我知道它知道“夜晚”是正确的词,因为我可以猜到它,这是最终的结果:
In [227]: attempt(word,'n')
>>> n i g h t _ _ _
>>> a b c d e f - - - j k l m - o p q r s - u v - x y z
在末尾留下三个空白下划线。有没有人知道如何删除这些下划线而不影响程序的其余部分?
以下是代码:
space,alphabet=' ',['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
word = ['w','h','a','t','e','v','e','r']
word_blanks = ['_' for letter in word]
def attempt(word,inp1=''):
if inp1 in word:
indeces=[i for i,val in enumerate(word) if val==inp1]
for i in indeces:
word_blanks[i]=inp1
if inp1 in alphabet:
loc=alphabet.index(inp1)
alphabet[loc]='-'
print space.join(word_blanks)
print space.join(alphabet)
我希望这一切都清楚并且正确出来。感谢您的帮助!
答案 0 :(得分:2)
word_blanks
的起始长度是8,你永远不会重置它,因此你只覆盖其中的某些位置,长度保持为8.尝试使用超过8个字符的单词word.
如果您在第7位之后猜到一封信,那么您将获得IndexError
,因为它会尝试更改word_blanks[8]
每次获得此代码的新单词时,您都需要生成word_blanks
的新版本。