score = {
'a': 1, 'b': 3, 'c': 3, 'd': 2, 'e': 1, 'f': 4,
'g': 2, 'h': 4, 'i': 1, 'j': 8, 'k': 10, 'l': 1,
'm': 2, 'n': 1, 'o': 1, 'p': 3, 'q': 8, 'r': 1,
's': 1, 't': 1, 'u': 1, 'v': 4, 'w': 10, 'x': 10,
'y': 10, 'z': 10,
}
x = input('Enter a Word: ')
y = list(x)
a = []
for i in x:
z = int(score[i])
a = sum(z)
print(a)
a= sum(z)
继续说它是" int'对象不可迭代"。
我做错了什么?
答案 0 :(得分:3)
我猜你希望a
存储单词中字母的总和。如果是这样,你所做的是错的。 sum()
函数需要一个iterable,然后通过添加该iterable的每个元素来获取总和并返回总和。示例 -
>>> sum([1,2,3,4])
10
它不会像你期望的那样工作。
在你的情况下,你甚至不需要使用总和,只需做 -
a = 0 #before the loop
和
a += z #inside the loop
此外,你应该缩进print a
outisde for循环,这样你只打印最后的字母总和。
答案 1 :(得分:1)
如@AdandSKumar的评论@Amadan所述,你可以做以下事情:
a = sum(score[c] for c in x)
假设您还在学习Python,这里是对上述代码的解释。
首先,如@AnandSKumar所述,sum
内置函数将参数作为可迭代参数。什么是可迭代的?它是一个实现__iter__
方法的对象,它允许迭代对象的数据。最好的例子是list
对象。请考虑以下代码:
my_list = ['a', 'b', 'c']
try:
while True:
print next(my_list)
except StopIteration:
print "The end."
# Result :
a
b
c
The end.
我们遍历列表my_list
。 sum
函数可能/在Python实现中看起来像这样:
def sum(iterable):
iterator = iter(iterable)
result = next(iterator, 0)
try:
while True:
result += next(iterator)
except StopIteration:
pass
return result
您正在做的事情的一个很好的例子可能是创建一个列表如下,总和:
a = [score[c] for c in x]
print sum(a)
# Equivalent code (one liner) :
print sum([score[c] for c in x])
# Equivalent code :
a = []
for c in x:
a.append(c)
print sum(a)
问题是你完全生成了你的列表a
并且需要内存。 @Amadan所说的是使用generator expression动态生成列表a
。我们的想法是创建一个可迭代的,它在内存中没有任何表示。
print sum(score[c] for c in x)
# Equivalent code :
result = 0
for c in x:
result += score[c]
print result
这样的内存效率更高,看起来你是Python之神:)
你想要做的一件事:
# Python 3
print sum(score[c] for c in input("Enter a word: "))
# Python 2
print sum(score[c] for c in raw_input("Enter a word: "))