使用替换而不是查找

2024-06-07 22:18:32 发布

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

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

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”,但我不知道应该如何在这里合并。你知道吗

请帮忙!!!!!你知道吗


Tags: 代码ingame重点targetifrequestposition
3条回答

只需使用一组猜出来的字母,然后做如下操作。你知道吗

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

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

这里有两个选项:

  1. 反复使用str.find

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

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

使用正则表达式:

import re
correct = re.sub(r'[^a]',"*","australia")  # returns "a****a**a"

这个正则表达式[^a]匹配除“a”之外的所有字符。re.sub函数将每个“nota”替换为“*”

编辑

您的注释使您认为您正试图通过替换game.correct字符串中的字符来更改该字符串。记住python中的字符串是不可变的。你不能更改其中的单个字母。因此,与其试图把星星改成“a”,不如换一根新弦。正则表达式是实现这一点的一种方法。你知道吗

相关问题 更多 >

    热门问题