如何获得每个单词的分数?

时间:2019-01-24 13:38:54

标签: python

我正在编写一个程序,可以计算两个或更多单词的点数。如何获取数组列表中每个点的值?我已经有了点字典。

points_dictionary = {
        'A': 1, 'B': 3, 'C': 3,
        'D': 2, 'E': 1, 'F': 4, 'G': 2,
        'H': 4, 'I': 1, 'J': 8, 'K': 5,
        'L': 1, 'M': 3, 'N': 1, 'O': 1,
        'P': 3, 'Q': 10, 'R': 1, 'S': 1,
        'T': 1, 'U': 1, 'V': 4, 'W': 4, 'X': 8,
        'Y': 4, 'Z': 10, '#': 0, '0':3
    }

我有一个看起来像这样的列表currwords = ['PEARS' 'MANGO' 'ORANGE] 我已经编写了一个代码,可以获取每个字母的要点,但是其输出会添加所有要点。

for you in currwords:
    for yeah in you:
        trans = list(yeah)
        trans = points_dictionary[yeah[0]]
        total_words.append(trans)
        final1 = sum(total_words)
        print(final1)

每次我使用此代码时,它只会输出列表上的总点数。如何获得每个单词的分数,例如PEAR = 6 MANGO = 8和ORANGE = 7

3 个答案:

答案 0 :(得分:2)

您可以将summap一起使用:

points_dictionary = {
        'A': 1, 'B': 3, 'C': 3,
        'D': 2, 'E': 1, 'F': 4, 'G': 2,
        'H': 4, 'I': 1, 'J': 8, 'K': 5,
        'L': 1, 'M': 3, 'N': 1, 'O': 1,
        'P': 3, 'Q': 10, 'R': 1, 'S': 1,
        'T': 1, 'U': 1, 'V': 4, 'W': 4, 'X': 8,
        'Y': 4, 'Z': 10, '#': 0, '0':3
    }

currwords = ['PEARS', 'MANGO', 'ORANGE']

for word in currwords:
    print(word, sum(map(lambda c: points_dictionary.get(c, 0), word)))

输出

PEARS 7
MANGO 8
ORANGE 7

您也可以使用generator expression

for word in currwords:
    print(word, sum(points_dictionary.get(c, 0) for c in word))

映射和生成器表达式的目的是将每个单词的字母映射到对应的点值。

答案 1 :(得分:0)

我认为这里的问题是您在每次迭代时将trans附加到total_words上,但是从不重置其值。您可以添加

total_words = []

在第一个循环中。另外,在for yeah in you循环中,您两次定义了trans,因此从不使用第一个。更正之后,您的代码应如下所示:

for you in currwords:
    total_words = []
    for yeah in you:
        trans = points_dictionary[yeah]
        total_words.append(trans)
        final1 = sum(total_words)
        print(final1)

答案 2 :(得分:0)

让我们 老派 去做:

points_dictionary = {
        'A': 1, 'B': 3, 'C': 3,
        'D': 2, 'E': 1, 'F': 4, 'G': 2,
        'H': 4, 'I': 1, 'J': 8, 'K': 5,
        'L': 1, 'M': 3, 'N': 1, 'O': 1,
        'P': 3, 'Q': 10, 'R': 1, 'S': 1,
        'T': 1, 'U': 1, 'V': 4, 'W': 4, 'X': 8,
        'Y': 4, 'Z': 10, '#': 0, '0':3
    }

currwords = ['PEARS', 'MANGO', 'ORANGE']
sumsOfwords = []
sum = 0
i = -1
for words in currwords:
    for word in words:
        if words == currwords[i + 1]:
            sum = sum + points_dictionary[word]
        else:
            sumsOfwords.append(sum)
            sum = 0
            sum = sum + points_dictionary[word]
            i = i + 1

sumsOfwords.append(sum)
print(sumsOfwords)

输出:

  

[7、8、7]

dictionary = dict(zip(currwords, sumsOfwords))
print(dictionary)

输出:

  

{'PEARS':7,'MANGO':8,'ORANGE':7}