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