python3求和每个字母值的总和

时间:2015-11-30 10:30:17

标签: string algorithm sorting python-3.x

我需要在字母表中输入和。     a = 1     b = 2     c = 3     d = 4

alphabet = 'abcdefghijklmnopqrstuvwxyz'

v1

string = "abcd"

# #result = sum(string) so 
if string[0] and string[1] and string[2] and string[3] in alphabet:
   if string[0] is alphabet[0] and string[1] is alphabet[1] and string[2] is alphabet[2] and string[3] is alphabet[3]:
      print(a+b+c+d)

v2

string = ("ab","aa","dc",)

if string[0][0] and string[0][1] and string[1][0] and string[1][1] and string[2][0] and string[2][1] in alphabet:
   if string[0] is alphabet[0] and string[1] is alphabet[1] and string[2] is alphabet[2] and string[3] is alphabet[3]:
      print(a+b+c+d)   

解决方案是什么?你能帮我吗

2 个答案:

答案 0 :(得分:2)

使用sum() functiongenerator expression;从string.ascii_lowercase构建的字典可以作为获取每个字母整数值的方法:

from string import ascii_lowercase

letter_value = {c: i for i, c in enumerate(ascii_lowercase, 1)}
wordsum = sum(letter_value.get(c, 0) for c in word if c)

enumerate(ascii_lowercase, 1)在迭代时生成(index, letter)对,从1开始。这会为您提供(1, 'a')(2, 'b')等。可以将其转换为{{1}字典中的字母对,将字母映射到整数。

接下来,使用dict.get() method可以选择默认值;对于输入字符串中的任何字符,您可以查找数值并将其映射到整数,但如果字符不是小写字母,则返回c: i。然后,带有循环的0部分只会添加这些值。

如果您需要支持包含单词的序列,请再次使用sum(...)。将上述sum()调用放入函数中,并将该函数应用于序列中的每个单词:

sum()

答案 1 :(得分:2)

老式的方法是利用小写字母是连续的这一事实,以便ord(b) - ord(a) == 1

data = "abcd"
print("Sum:", sum(ord(c)-ord("a")+1 for c in data))

当然你可以“优化”它来减少计算次数,虽然在这种情况下看起来很愚蠢:

ord_a = ord("a")
print("Sum:", sum(ord(c)-ord_a for c in data)+len(data))