我写过以下文章,但无法确定下一部分:
if request.guess in game.target:
position = game.target.find(request.guess)
game.correct[position] = request.guess.upper()
这里的要点是request.guess
是一个字符输入,如'a'
,game.target
是'austin'
。因此,上面的代码将在目标字中找到字符并生成类似a*****
的输出。但是我的代码只适用于那些字母不重复的单词,例如:澳大利亚。我知道python中有一个方法'replace',但我无法弄清楚我应该如何合并。
请帮助!!!!!
答案 0 :(得分:2)
只需使用一组猜测字母,然后执行以下操作。
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
答案 1 :(得分:1)
使用正则表达式:
import re
correct = re.sub(r'[^a]',"*","australia") # returns "a****a**a"
这个正则表达式[^a]
匹配除" a"之外的所有字符。 re.sub
函数替换每个"而不是"使用" *"
修改的
您的评论认为您正在尝试通过替换该字符串中的字符来更改game.correct
字符串。请记住,python中的字符串是不可变的。您无法更改其中的单个字母。因此,不要试图将星星改为" a",而是必须创建一个新的字符串。正则表达式是实现此目的的一种方法。
答案 2 :(得分:0)
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
)
答案 3 :(得分:0)
我建议您花一些时间学习regular expressions,它们在许多类似情况下派上用场,并且通常比临时实施更具表现力(和效率)。此外,您可以重用(有些怪癖)您对其他语言和操作系统shell的理解,这使它们非常强大。
您可以从模式中构建一个正则表达式,该表达式将匹配除您要查找的字符之外的任何内容:r'[^{}]'.format(pattern)
;然后用它来做替换:
import re
pattern = request.guess
result = re.sub(r'[^{}]'.format(pattern),"*","adam")
import re
print re.sub(r'[^{}]'.format('ad'),"*","adam")
print re.sub(r'[^{}]'.format('a'),"*","adam")
print re.sub(r'[^{}]'.format('m'),"*","adam")
打印:
ada*
a*a*
***m