python-3.x - 字典中项目的总和
问题描述
我一直在尝试做一个练习。目标是对项目求和,看看哪个项目的价值最高并返回,每个字母对应一个值。例如,“Babel”价值 10 点 (3+1+3+1+2),“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'
解决方案
我会首先为每个字母分配一个分值。这使得给单词打分变得更容易,因为每个字母都有一个指定的值
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
可以确定两个单词的“最大值”的函数,w1
并且w2
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
推荐阅读
- lua - 我需要帮助从 StarterGUI 中的脚本为 Lua 中的角色创建一个变量
- cors - 将 Cors-Anywhere 更改为节点获取
- android - 翻屏android时保存ViewModel
- python - 如何创建具有单个序列元素的序列?
- neo4j - 如何计算节点的不同计数
- php - 如何组合具有相同元素值的数组
- c - 比较C中结构指针中的字符串
- c - 无法理解“readdir.c”在 Linux 内核中的工作原理
- node.js - 如何使用 nodeJS 在 EUC(CP51932)中进行 URL 编码
- flutter - 向 Scaffold Appbar 添加具有多个页面的点击计数器