尝试用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'是正确的信和正确的位置。
那么实现一个函数的最佳方法是什么,可以检查一个字母是否正确并且位于正确的位置(并用一个表示!)或者表示它是一个正确的字母在错误的位置用〜
答案 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.)