我试图将数字1-26分配给字母a-z并根据任何给定的字符串将这些数字相加而没有成功。例如:a = 1, b=2, c=3
。因此,如果任何给定的字符串为"abc"
,则输出应为1+2+3=6
。
编程背景-新手,自学。 我只学习了python编程中的字符串,列表及其对应的方法。我还没有学习函数和类,所以请使您的答案尽可能简单。
到目前为止,我已经尝试过
Name = "abc"
a,b,c = [1,2,3]
Sum_of_name = ""
For alphabet in abc:
Sum_of_name = sum_of_name + alphabet
Print(sum_of_name)
打印出相同的abc。
我意识到,当我迭代字符串“ abc”时,该字符串不同于变量a,b和c。因此,整数不会分配给字符串,也无法加起来。
关于如何利用当前的知识水平解决此问题的任何建议。
答案 0 :(得分:2)
这是一种方法。
演示:
from string import ascii_lowercase
d = {v: i for i,v in enumerate(ascii_lowercase, 1)}
Name = "abc"
print( sum(d[i] for i in Name) )
输出:
6
答案 1 :(得分:1)
首先列出字母
>>> from string import ascii_lowercase as alphabet
>>> alphabet
'abcdefghijklmnopqrstuvwxyz'
然后查找按字母顺序排列的值(还有其他方法可以做到这一点)
>>> values = {letter: value for value, letter in enumerate(alphabet, 1)}
>>> values
{'d': 4, 'f': 6, 'o': 15, 'b': 2, 's': 19, 'c': 3, 'w': 23, 'q': 17, 'v': 22, 'p': 16, 'i': 9, 'e': 5, 'l': 12, 't': 20, 'y': 25, 'n': 14, 'a': 1, 'r': 18, 'j': 10, 'x': 24, 'g': 7, 'm': 13, 'k': 11, 'h': 8, 'z': 26, 'u': 21}
然后将其用于sum
个值
def sum_letters(word):
return sum(values[letter] for letter in word)
>>> sum_letters('abc')
6
答案 2 :(得分:0)
如果您有固定的订单,则可以使用ord()
a="Name"
s=0
for i in a.lower():
s+=ord(i)-96
print(s)
答案 3 :(得分:0)
要获取字母中的字符,可以使用string
lib:
>>> import string
>>> letters = string.lowercase
>>> letters
'abcdefghijklmnopqrstuvwxyz'
然后我们可以将其变成字典,以使获取字母的数字(位置)值变得容易:
letter_map = dict(zip(list(letters), range(1, len(letters) + 1)))
因此,您的函数将对每个字母输入执行简单的字典查找:
def string_sum(string_input):
return sum(letter_map[char] for char in string_input)
几个测试用例:
>>> assert string_sum('abc') == 6
>>> assert string_sum('') == 0 # because it's empty