在Python中重叠字符串的值

问题描述 投票:0回答:2

我正在用Python构建拼图文字游戏。我有正确的拼图单词,以及猜到的拼图单词。我想建立一个第三个字符串,在正确的拼图字中显示猜测拼图中的正确字母,并在不正确字母的位置显示_。

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

猜测的单词和正确的单词保证长度为3到5个字符,但猜测的单词不能保证与正确的单词长度相同

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

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

_ _ P_ _(没有空间分隔)

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

我尝试了很多东西,包括使用列表,但我没有得到正确的答案。附上的代码是我最近的尝试,请你帮我解决一下?

谢谢

找到puzzle_word和guess之间的匹配

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_ _
python-3.x string immutability string-comparison
2个回答
0
投票

你可以在这里使用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__

0
投票

这里有几件事。

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

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

但是,这样做是没有意义的,因为您可以只分配给list元素:

result[value] = str_a[value]

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

result = ['_'] * len(str_a)
© www.soinside.com 2019 - 2024. All rights reserved.