Python-替换字符串上特定位置的所有字母

时间:2011-05-19 06:50:39

标签: python string

尝试用Python创建电视游戏节目“Lingo”。

在游戏中,玩家正试图猜出一个五个字母的单词。他们开始随机猜测一个五个字母的单词。然后游戏板会亮起来显示他们猜到的单词与实际单词的匹配程度。

例如,如果真正的单词是“gorge”并且玩家猜测“eagle” - 那么棋盘会显示'e'和'g'在真实单词中,但是它们不在正确的位置关于真正的“峡谷”这个词。 (g在[0]和[3]索引中,而在鹰中它们在[2]索引中)。

如果单词“快乐”并且用户猜到“harpy”,则主板会显示三个字母在真实单词中并且它们被正确定位。 (H-A-Y)。

在Python实现中,我强调一个字母是正确的,但是在错误的位置下面有一个'〜'。如果它是正确的并且位置正确,我会放一个'!'在它下面。

重要的功能如下:

  wordGuess = input("Guess a letter: ")[0:5]
    for letter in wordGuess:
        if letter in realWord:
            if wordGuess.find(letter) == realWord.find(letter)

//不知道该怎么做

如果有多个正确字母出现,其中一个字母与realWord中字母的位置不匹配 - 我该如何检测它?

例如,如果真正的单词是“持续”并且有人猜测“黄铜”,则黄铜中的第一个's'是正确的字母,但是位置不正确,而第二个's'是正确的信和正确的位置。

那么实现一个函数的最佳方法是什么,可以检查一个字母是否正确并且位于正确的位置(并用一个表示!)或者表示它是一个正确的字母在错误的位置用〜

1 个答案:

答案 0 :(得分:5)

无论位置如何,都要查找常用字母:

In [1]: set('harpy') & set('happy')
Out[1]: set(['a', 'h', 'p', 'y'])

获取一个布尔标志,指示在任何位置“happy”中是否存在“harpy”的每个字母:

In [17]: [l in 'happy' for l in 'harpy']
Out[17]: [True, True, False, True, True]

在上面的代码中,'happy'可以替换为第一个片段的集合交集。

最后,为每个位置获取一个布尔标志,指示字母是否位于正确的位置:

In [2]: [l==r for l,r in zip('happy','harpy')]
Out[2]: [True, True, False, True, True]

将上述内容合并为一个完整的解决方案:

In [49]: real='lasts'

In [50]: guess='brass'

In [51]: exact=[l==r for l,r in zip(real,guess)]

In [52]: approx=[l in real for l in guess]

In [53]: chars=[[' ','~'],['!','!']]

In [54]: print guess, '\n', ''.join(chars[e][a] for e,a in zip(exact,approx))
brass 
  ~~!

(如果你想知道使用布尔值来索引数组,它们会被隐式转换为整数:False = 0和True = 1.)