Python,改变字符串

2024-10-03 21:33:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一些代码方面的帮助。我目前正在用python编写hangman代码,并给出一个单词和一个字母,我试图将这个单词添加到下划线中,并显示正确猜出的字母。 举个例子,输入('heedphones',['e','d'])将返回'\u e\u d\u e\u

result = ''
matches = 0
for i in past_guesses:
    if i in word:
        result += i
    else:
        status += '_'
        matches += 1

return result

这是我尝试过的,但我不断得到“ed”作为回报。有人知道为什么会这样,我怎么能解决吗


Tags: 代码inforif字母result单词else
3条回答

计算机的逻辑和人类的逻辑是一样的,你需要检查你单词的字母是否在猜测中,而不是相反。在这两种情况下都需要更新results

result = ''
for i in word:
    if i in past_guesses:
        result += i
    else:
        result += '_'

或更多Python:"".join(i if i in past_guesses else '_' for i in word)

这里是一个通用的模板为一个刽子手游戏。创建一个board,即wordlen。如果我们的guessword,我们将替换这个board的索引。我们还可以创建一个列表guessed来附加所有猜测,以便跟踪是否已经尝试了一个条目

从这里我们可以建立一个while循环,一旦我们的board == word出现,这个循环就会中断。从user获取guess,然后检查它是否已经被使用过。如果不是,那么我们使用列表理解来检索索引,评估guess是否在word中。如果找到任何索引,我们将board转换为list,然后替换它们,然后.join()返回到一个字符串,否则我们可以打印guess not in word

在继续下一个循环之前,我们可以将guess附加到guessed列表,并打印最新的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}!')

else子句中,您是在status后面加下划线,而不是result

编辑:正如朱利安所指出的,你在错误的事情上循环

如果您的意图是生成一个与原始单词一样长的字符串,那么循环的执行次数应该与单词的长度相同;i、 你应该循环使用word的字母,而不是past_guesses

换句话说,如果用户进行了三次猜测,那么函数将返回一个只有三个字母的字符串,这显然不是您想要的

相关问题 更多 >