Python 使用替换而不是查找

Python 使用替换而不是查找,python,python-3.x,Python,Python 3.x,我写了以下文章,但无法理解下一部分: if request.guess in game.target: position = game.target.find(request.guess) game.correct[position] = request.guess.upper() 这里的重点是请求。guess是像'a'和游戏一样的字符输入。target是'austin'。因此,上面的代码将在目标单词中找到字符,并生成类似a****的输出。但我的代码只适用于字母

我写了以下文章,但无法理解下一部分:

if request.guess in game.target:            
  position = game.target.find(request.guess)
  game.correct[position] = request.guess.upper()
这里的重点是
请求。guess
是像
'a'
游戏一样的字符输入。target
'austin'
。因此,上面的代码将在目标单词中找到字符,并生成类似
a****
的输出。但我的代码只适用于字母不重复的单词,例如:澳大利亚。我知道python中有一个方法“replace”,但我不知道应该如何在这里合并


请帮忙

只需使用一组猜测的字母,然后执行以下操作

In [164]: word = 'Australia'
In [165]: guessed = set()
In [166]: guessed.add('a')
In [167]: print(''.join(c if c.lower() in guessed else '*' for c in word))
A****a**a

对于正则表达式:

import re
correct = re.sub(r'[^a]',"*","australia")  # returns "a****a**a"
正则表达式
[^a]
匹配除“a”之外的所有字符。
re.sub
函数将每个“非a”替换为“*”

编辑


您的评论可能使人认为您正在尝试更改
游戏。请通过替换字符串中的字符来更正
字符串。请记住,python中的字符串是不可变的。不能更改其中的单个字母。因此,与其尝试将星星改为“a”,不如制作一个新的字符串。正则表达式是执行此操作的一种方法。

replace
在这里没有帮助,因为您没有更改正在搜索的字符串

这里有两个选项:

  • 重复使用
    str.find

    pos = 0
    while True:
        pos = game.target.find(request.guess, start=pos)
        if pos == -1: break
        game.correct[pos] = request.guess.upper()
    
  • 每次从头开始构建字符串:

    game.correct = ''.join(
        letter if letter in request.guesses else '*'
        for letter in game.target
    )
    

  • 我建议您在学习上投入一些时间,它们在许多类似的情况下都会派上用场,并且通常比即席实现更具表现力(和效率)。此外,您还可以在其他语言和操作系统外壳中重用(带有一些怪癖)您对它们的理解,这使得它们非常强大

    您可以从模式中构建一个正则表达式,该表达式将匹配除要查找的字符以外的任何字符:
    r'[^{}]'。格式(模式)
    ;然后使用它进行替换:

    import re
    pattern = request.guess
    result = re.sub(r'[^{}]'.format(pattern),"*","adam")
    
    :

    印刷品:

    ada*
    a*a*
    ***m
    

    您知道有一个
    replace
    ,但不知道如何使用它?教程对您的帮助比任何问题的答案都要大。使用enumerate(game.target)
    中的i,c对
    game.target
    中的字符进行迭代。在循环内部,您可以访问字符
    c
    及其位置
    i
    。检查
    c
    是否与猜测的字符匹配,如果匹配,则更新位置
    i
    @SSNR处显示的字符串:这里的问题是game.correct随****而变化,因此我不确定如何获取重复字母的位置,然后替换相同的位置。如果你能帮忙的话,那就太好了great@SvenMarnach:非常感谢。你的把戏奏效了。非常感谢!!!!!!
    ada*
    a*a*
    ***m