我需要在字母表中输入和。 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)
解决方案是什么?你能帮我吗
答案 0 :(得分:2)
使用sum()
function和generator 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))