Python,更改字符串
我需要一些代码方面的帮助。我目前正在用python编写hangman的代码,并给它一个单词和字母,我试图将这个单词添加到下划线中,并显示正确猜测的字母。 例如,输入(‘耳机’、[‘e’、‘d’])将返回“_e_d____e_”Python,更改字符串,python,Python,我需要一些代码方面的帮助。我目前正在用python编写hangman的代码,并给它一个单词和字母,我试图将这个单词添加到下划线中,并显示正确猜测的字母。 例如,输入(‘耳机’、[‘e’、‘d’])将返回“_e_d____e_” result = '' matches = 0 for i in past_guesses: if i in word: result += i else: status += '_' matches +=
result = ''
matches = 0
for i in past_guesses:
if i in word:
result += i
else:
status += '_'
matches += 1
return result
这是我尝试过的,但我不断得到“ed”作为回报。有人知道为什么会发生这种情况以及我如何解决吗?在
else
子句中,您在状态
后面加了下划线,而不是结果
编辑:正如朱利安指出的,你在错误的事情上循环
如果您的目的是生成一个与原始单词一样长的字符串,那么循环的执行次数应与单词的长度相同;i、 e.你应该循环使用单词的字母,而不是过去的猜测
换句话说,如果用户做了三次猜测,那么你的函数将返回一个只有三个字母的字符串,这显然不是你想要的。计算机的逻辑与人类的逻辑相同,你需要检查单词的字母是否在猜测中,而不是相反。在这两种情况下,您都需要更新结果
result = ''
for i in word:
if i in past_guesses:
result += i
else:
result += '_'
或者更多的pythonic:“”。加入(如果我过去在word中猜到其他“\uu”代表i)
这里是一个用于刽子手游戏的通用模板。创建一个板
,它是word
的len
。如果我们的guess
位于word
中,我们将替换此板的索引。我们还可以创建一个列表gusted
,将所有猜测添加到该列表中,以便跟踪是否已尝试输入
从这里我们可以设置一个while
循环,一旦我们的板==word
就会中断。从用户那里获取guess
,然后检查它是否已经被使用过。如果不是,那么我们使用列表理解检索索引,来评估猜测
是否在单词
中。如果找到任何索引,我们将把board
转换为list,然后替换它们,然后将.join()
board恢复为字符串,如果没有,我们可以打印猜测not in word
在继续下一个循环之前,我们可以将guess
添加到gusted
列表中,并打印最新的board
word = 'headphones'
board = '_' * len(word)
guessed = []
while board != word:
guess = input('Enter letter: ')
if guess in guessed:
print(f'{guess} has already been used!')
else:
lst = [i for i, v in enumerate(word) if v == guess]
board = list(board)
if lst:
for i in lst:
board[i] = guess
else:
print(f'{guess} was not in the word.')
guessed.append(guess)
board = ''.join(board)
print(board)
print('Congratulations, the word was {word}!')
对,python首先检查word中是否有“i”,然后继续循环。然而,在我的代码中,它检查“i”是否在猜测中,这只会导致一次迭代?对,因为在我的例子中,它与过去的猜测一样长,在这种情况下,猜测只有2个字母。感谢您的澄清和帮助。