Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,更改字符串_Python - Fatal编程技术网

Python,更改字符串

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 +=

我需要一些代码方面的帮助。我目前正在用python编写hangman的代码,并给它一个单词和字母,我试图将这个单词添加到下划线中,并显示正确猜测的字母。 例如,输入(‘耳机’、[‘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”作为回报。有人知道为什么会发生这种情况以及我如何解决吗?

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个字母。感谢您的澄清和帮助。