如何用Python for循环通过单词字符查询字典键值并求和
代码问题排查与优化建议
你现有代码的大小写转换逻辑是正确的,可以正常处理混合大小写的输入,但还存在几个需要修正的问题:
- 字典名不匹配:你定义的分数字典名为
SCRABBLE_LETTER_VALUES,但函数中调用的是LETTER_VALUES,直接运行会触发NameError。 - 存在冗余参数:函数定义时传入了参数
n,但整个逻辑中没有使用该参数,要么直接删除冗余参数,要么根据你的实际需求补充n对应的逻辑(比如拼字游戏常见的长度奖励规则)。 - 变量名不规范:使用Python内置函数
sum作为变量名,会覆盖内置的求和函数,建议替换为total、score_sum等自定义名称。 - 容错性不足:如果传入的单词包含非英文字母字符(如标点、空格、数字),会直接触发
KeyError,可以用字典的get方法优化容错,非字母字符默认加0分即可。
修正后可直接运行的代码示例
SCRABBLE_LETTER_VALUES = { '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} def get_word_score(word): """接收合法单词,计算拼字游戏得分,支持大小写混合输入""" total = 0 word_low = word.lower() for char in word_low: # 非字母字符默认加0分,若要求仅支持纯字母输入可删除get的默认值,触发报错提醒非法输入 total += SCRABBLE_LETTER_VALUES.get(char, 0) return total
测试调用get_word_score('abc')即可得到返回值7,符合你的需求。如果需要保留参数n,可以根据实际业务规则补充对应逻辑,比如长度达标额外加分等。
内容的提问来源于stack exchange,提问作者thatscoolman
相关产品推荐
相关产品推荐

