针对给定单词计算猜测得分

时间:2017-08-19 11:07:34

标签: python

def compute_score(guess,position,word)

# word = 'castle'
# guess comes from previous function (e.g. 'ran')
# position = 0, 1, 2 --> where guess starts in relation to word
    # EG1 - 'ran' at pos=0 'ran', 'castle' --> a in rat and a in castle match
    # EG2 - 'ran' at pos=1 '_ran', 'castle'----> no matches

我想要一种方法来匹配猜测中的每个字符与同一位置的给定单词中的每个字符,并给出+100的分数 所以对于EG1 - >一个单词和相同的位置,但对于EG2 - > a两个词但不同的位置。检查完字符后,它将被放入一个单独的变量'checked'

# Then I want to check just characters that are the same in each word
checked = 'a'
for c in guess and not in checked:
    if c in word:
    score = score + 20

我无法弄清楚如何做第一部分 - >检查字符是相同的AND在同一位置。

2 个答案:

答案 0 :(得分:0)

如果将两个字符串压缩在一起,则会得到字符对:

>>> zip("ABC", "aBCde")
[('A', 'a'), ('B', 'B'), ('C', 'C')]

方便地丢弃较长单词中的字符。现在你的问题是检查一对中两个字符的相同位置:

score = 0
for first, last in zip(word, guess):
    if first == last:
        score += 20

如果您想在单个表达式中计算得分,可以使用True == 1False == 0这一事实并总结理解:

score = 20*sum(first==last for (first, last) in zip(word, guess))

但这对某些人的品味来说太过分了,可能会让初学者感到困惑。

答案 1 :(得分:0)

您可以使用enumerate()在迭代时检查索引,因为它返回索引/字符元组列表,enumerate('test')将返回[(0, 't'), (1, 'e'), (2, 's'), (3, 't')]。所以你可以这样做:

for i, c in enumerate(guess):
    if c not in checked:
        if word[i] == c:
            score += 20
        checked += c