我试图计算输入的字母值(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的和值,而不是继续添加到之前的总和
谢谢!
答案 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