【问题标题】:Trying to build a program in Python that sums the letters of a word based on the value of a letter尝试在 Python 中构建一个程序,根据字母的值对单词的字母求和
【发布时间】:2022-10-25 11:57:11
【问题描述】:

我的项目正在研究根据每个字母的分配值对用户输入的单词的值进行总计。我正在努力让代码循环遍历单词的每个字母,并对每个字母的值求和。我对 Python 还是很陌生,所以我不确定其中有多少是正确的或合乎逻辑的。下面是我的代码:

letter_values=[['a',-5],['b',2],['c',3],['d',4],['e',-10],['f',6],['g',7],['h',8],['i',-15],['j',10],['k',11],['l',12],['m',13],['n',14],['o',-20],['p',16],['q',17],['r',18],['s',19],['t',20],['u',-20],['v',22],['w',23],['x',24],['y',25],['z',26]]
word = input("Enter a word:")
for j in range(len(word)):
    for i in range(len(letter_values)):
        if letter_values[i][0] in(word):
            word_value = letter_values[i][1]
        break
    word_total = sum(word_value)
print(word_total)

任何建议将不胜感激!

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以使用 python 字典,例如:

    values = {"a": 1, "b":2, "c": 3, "d": 4}
    

    您可以使用键 'a' 访问字母 'a' 的值:

    print(values["a"])
    

    一个例子:

    values = {"a" : 1, "b" : 2, "c" : 3}
    word = str(input("Enter a word:"))
    total = 0
    for letter in word:
        total += values[letter]
    print(total)
    

    【讨论】:

    • Here 是一些关于为什么应该使用字典而不是列表的额外信息。
    • sum(values[letter] for letter in word) 看起来会更干净
    【解决方案2】:

    你的代码几乎是好的。您的外部循环使用 j 作为索引在单词中逐个字母地进行。但是 j 从未在内部循环中使用。 word_total 应该在 for 循环之外。要修复,您的代码应如下所示。

    for letter in word: # go letter by letter
        for inner_list in letter_values: 
            # brute force check for against every entry in letter_values
            if letter == inner_list[0]  # compare to letter
                word_value = inner_list[1]
                break
    word_total = sum(word_value)
    

    我真的很喜欢@BryanMontoyaOsorio 的字典解决方案。它优雅,易于理解,并且只有几行代码。

    这个答案的其余部分是一种自动生成字典的奇怪方法。首先,Python 有一个内置常量ascii_lowercase,它包含字符串模块中的所有小写字母。

    import string
    print(string.ascii_lowercase)
    
    'abcdefghijklmnopqrstuvwxyz'
    

    random 模块可以使用sample() 方法为我们提供一个值列表:

    import random
    value_list = random.sample(range(-26,26+1), 26)
    print(value_list)
    
    [-15, -26, 20, 9, -9, -23, -7, 1, -25, 18, 13, 0, 2, 15, -14, -20, 12, -2, -17, 21, -16, -6, 8, 14, -5, -13]
    

    所以要生成字典:

    import string
    import random
    
    valdict = {} # create empty dictionary
    value_list = random.sample(range(-26,26+1), 26)
    for i, letter in enumerate(string.ascii_lowercase):
         valdict[letter] = value_list[i]
    
    print(valdict)
    
    {'a': 4, 'b': -17, 'c': 11, 'd': -11, 'e': 10, 'f': 1, 'g': -18, 'h': -4, 'i': -13, 'j': 9, 'k': -20, 'l': 25, 'm': 17, 'n': 14, 'o': -2, 'p': -1, 'q': 6, 'r': -5, 's': -21, 't': -26, 'u': -19, 'v': 24, 'w': -12, 'x': -25, 'y': -14, 'z': 20}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多