字典中项目的总和

时间:2018-06-05 13:45:06

标签: python-3.x

我一直在尝试做练习。目标是对项目进行求和,看看哪一项具有最高价值并返回,每个字母对应一个值。例如," Babel"值得10分(3 + 1 + 3 + 1 + 2)和#34; Xadrez"值得21分(8 + 1 + 2 + 1 + 1 + 8),所以程序应该返回" Xadrez"。 我的代码是这样的:

    def better(l1):
      dic = {'D':2, 'C':2, 'L':2, 'P':2, 'B':3, 'N':3, 'F':4, 'G':4,
       'H':4, 'V':4, 'J':5, 'Q':6, 'X':8, 'Y':8, 'Z':8}

      for word in dic.keys():
        l1 = []
        best = 0
        sum = 0
        word = word.split()
        word = word.item()

        sum = word.item()

        best = word
        l1 = l1.append(word)
     return best

我的想法是尝试拆分每个单词并将每个单词中每个字母的值相加。谢谢。 另一个例子:([' ABACO',' UTOPIA',' ABADE'])>>' ABACO'

1 个答案:

答案 0 :(得分:0)

我首先要为每个字母指定一个分数值。这样可以更轻松地对单词进行评分,因为每个字母都有指定值

points = \
  { 0: '_' # wild letter
  , 1: 'eaionrtlsu'
  , 2: 'dg'
  , 3: 'bcmp'
  , 4: 'fhvwy'
  , 5: 'k'
  , 8: 'jx'
  , 10: 'qz'
  }

您可以轻松地像您一样构建dic。最好在评分函数之外定义它,因为dic可以重复使用而不是每次运行函数时重新创建(就像在代码中一样)

dic = \
{ letter:score for (score,set) in points.items() for letter in set }
# { '_': 0
# , 'e': 1
# , 'a': 1
# , 'i': 1
# , ...
# , 'x': 8
# , 'q': 10
# , 'z': 10
# }

内置dic功能

,使用sum评分单词很容易
def score_word (word):
  return sum (dic[letter] for letter in word)

print (score_word ("babel")) # 9
print (score_word ("xadrez")) # 23

现在我们需要一个max_word函数来确定" max"两个单词w1w2

def max_word (w1, w2):
  if (score_word (w1) > score_word (w2)):
    return w1
  else:
    return w2

print (max_word ("babel", "xadrez")) # xadrez

现在可以轻松制作一个可以接受任意数量单词的函数max_words

def max_words (w = None, *words):
  if not words:
    return w
  else:
    return max_word (w, max_words (*words))

print (max_words ('abaco', 'utopia', 'abade')) # abaco
print (max_words ()) # None