我的代码需要一些帮助。我目前正在用python编码hangman,并给出了单词和字母,我试图使单词变成下划线,并显示正确猜出的字母。 将给出一个示例输入('headphones',['e','d'])将返回'_e_d____e_'。
result = ''
matches = 0
for i in past_guesses:
if i in word:
result += i
else:
status += '_'
matches += 1
return result
这是我尝试过的方法,但是我不断得到“ ed”作为回报。任何人都知道为什么会发生这种情况以及我该如何解决?
答案 0 :(得分:0)
在uid
子句中,您要向else
而不是status
附加下划线。
编辑:正如朱利安(Julien)指出的那样,您正在遍历错误的内容。
如果您打算产生一个与原始单词一样长的字符串,则您的循环应执行与单词长度相同的次数;也就是说,您应该遍历result
的字母,而不是word
的字母。
换句话说,如果用户进行了三个猜测,则您的函数将仅返回三个字母的字符串,这显然不是您想要的。
答案 1 :(得分:0)
计算机的逻辑与人类的逻辑相同,您需要检查单词的字母是否在猜测中,而不是相反。在这两种情况下,您都需要更新results
...
result = ''
for i in word:
if i in past_guesses:
result += i
else:
result += '_'
或更多pythonic:"".join(i if i in past_guesses else '_' for i in word)
答案 2 :(得分:0)
这是a子手游戏的通用模板。创建一个board
的{{1}}的{{1}}。如果我们的len
在word
中,我们将替换此board
的索引。我们还可以创建列表guess
来附加所有猜测,以便我们可以跟踪是否已经尝试输入。
从这里我们可以建立一个word
循环,一旦我们的guessed
就会中断。从用户那里获取while
,然后检查是否已使用它。如果不是,则使用列表推导检索索引来评估board == word
是否在guess
中。如果找到任何索引,我们将转换guess
到列表,然后替换它们,然后将word
放回字符串,如果没有,我们可以打印board
。
在继续下一个循环之前,我们可以将.join()
附加到guess not in word
列表中,并打印最新的guess
guessed