Python在for循环中计算许多不同的和

时间:2015-06-10 16:58:26

标签: python

我试图计算输入的字母值(a = 1,b = 2 ... z = 26)。任何其他字符都被视为0 代码如下:

alpha = list('abcdefjhijklmnopqrstuvwxyz')
a = []
sum1= 0
while True:
    b = input()
    if b == '':
        break
    else:
        a.append(b.lower())
lst_len = len(a)
for i in range(lst_len):
    elem_len = len(a[i])
    for j in range(elem_len):
        if (a[i][j]) in alpha:
            num = alpha.index(a[i][j]) + 1
            sum1 += num

        else:
            pass
    print sum1

我的问题是如何在for循环中打印每个i的和值,而不是继续添加到之前的总和

谢谢!

3 个答案:

答案 0 :(得分:2)

使用字典,将每个字母映射到正确的值,然后对每个单词中的每个字符使用dict.get,使用0作为缺失键的默认值并对每个单词的所有值求和:

alpha = dict(enumerate('abcdefjhijklmnopqrstuvwxyz',1))
a = []

while True:
    b = input("Press 'enter' when finished")
    if b == '':
        break
    else:
        a.append(b.lower())
for word in a:
    print(sum(alpha.get(ch,0) for ch in word))

您还可以使用iter和lit comp来获取输入:

alpha = dict(enumerate('abcdefjhijklmnopqrstuvwxyz',1))
a = [w for w in iter(lambda:input("Press 'enter' when finished").lower(),"")]

iter的第二个参数是一个哨兵值,它会在输入时打破循环。

for word in a:
    # sum all letter values, chars not in out dict will get 0
    print(sum(alpha.get(ch,0) for ch in word))

alpha将每个字母作为键,值为1-26:

{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'j', 8: 'h', 9: 
'i', 10: 'j', 11: 'k', 12: 'l', 13: 'm', 14: 'n', 15: 'o', 16: 'p', 
17: 'q', 18: 'r', 19: 's', 20: 't', 21: 'u', 22: 'v', 23: 'w', 24: 'x', 25: 'y', 26: 'z'}

在旁注上你不需要在字符串上调用list,字符串是可迭代的和可索引的,因此alpha = 'abcdefjhijklmnopqrstuvwxyz'就足够了。

除非你真的想要做其他事情,否则你也不需要在每个if之后使用else,这样你就可以删除else:pass。

最后,不是使用if (a[i][j]) in alpha:然后编制索引,而是使用了str.find,只是检查了返回值不是== to -1,这是没有匹配时的默认值。

答案 1 :(得分:1)

sum1 = 0移到for i in range(lst_len):之后,以便在每次内循环结束后重置。

答案 2 :(得分:0)

使用临时总和var:

alpha = list('abcdefjhijklmnopqrstuvwxyz')
a = []
sum1= 0
while True:
    b = input()
    if b == '':
        break
    else:
        a.append(b.lower())
lst_len = len(a)
for i in range(lst_len):
    local_sum = 0
    elem_len = len(a[i])
    for j in range(elem_len):
        if (a[i][j]) in alpha:
            num = alpha.index(a[i][j]) + 1
            local_sum += num
        else:
            pass
    print local_sum
    sum1 += local_sum
print sum1