Python 中字符串的重叠值

Overlapping values of strings in Python

我正在 Python 中构建一个益智文字游戏。我有正确的拼图词和猜出的拼图词。我想构建第三个字符串,它在正确的拼图单词中显示猜出的拼图中的正确字母,并在不正确字母的位置显示 _。

例如,假设正确的单词是 APPLE,猜中的单词是 APTLE 然后我想要第三个字符串:AP_L_

猜字和正确字保证3到5个字长,但不保证猜字和正确字一样长

例如,正确的单词是TEA,猜到的单词是TEAKO,那么第三串应该是TEA__,因为玩家猜错了最后两个字母。

另一个例子,正确的单词是APPLE,猜中的单词是POP,第三个字符串应该是:

_ _ P_ _(没有space分隔)

我可以成功得到正确和猜到的单词的匹配索引;但是,我在构建第三个字符串时遇到了问题。我刚刚了解到 Python 中的字符串是不可变的,我不能分配 str1[index] = str2[index]

之类的东西

我尝试了很多方法,包括使用列表,但我没有得到正确的答案。附上的代码是我最近的尝试,你能帮我解决这个问题吗?

谢谢

找到 puzzle_word 和猜测

之间的匹配项
def matcher(str_a, str_b):
    #find indexes where letters overlap
    matched_indexes = [i for i, (a, b) in enumerate(zip(str_a, str_b)) if a == b]

    result = []
    for i in str_a:
        result.append('_')

    for value in matched_indexes:
        result[value].replace('_', str_a[value])

    print(result)

matcher("apple", "allke")

现在的输出结果是五个“_”的列表

案例:

  1. 正确的单词是 APPLE,猜中的单词是 APTLE 第三 字符串:AP_L_
  2. 正确的词是TEA,猜的词是TEAKO, 第三个字符串应该是 TEA__
  3. 正确的单词是 APPLE 并且猜到了 单词是 POP,第三个字符串应该是 _ _ P_ _

这里有几件事。

str.replace() 不替换内联;正如您所指出的,字符串是不可变的,因此您必须分配 replace:

的结果
result[value] = result[value].replace('_', str_a[value])

但是,这样做没有意义,因为您只能分配给列表元素:

result[value] = str_a[value]

最后你可以在没有 for 循环的情况下分配长度为 str_a 的列表,这可能更具可读性:

result = ['_'] * len(str_a)

您可以在此处使用 itertools.zip_longest 以始终确保填充到提供的最长单词,然后通过连接匹配字符或 _ 来创建新字符串。例如:

from itertools import zip_longest

correct_and_guess = [
    ('APPLE', 'APTLE'),
    ('TEA', 'TEAKO'),
    ('APPLE', 'POP')
]

for correct, guess in correct_and_guess:
    # If characters in same positions match - show character otherwise `_`
    new_word = ''.join(c if c == g else '_' for c, g in zip_longest(correct, guess, fillvalue='_'))
    print(correct, guess, new_word)

将打印以下内容:

APPLE APTLE AP_LE
TEA TEAKO TEA__
APPLE POP __P__