我有这段代码:
inp = int(input("Enter a number:"))
for i in inp:
n = n + i;
print (n)
但是它抛出了一个错误:'int' object is not iterable
我想通过将每个数字相加来找到总数,例如110。1 + 1 + 0 = 2。我该怎么做?
我有这段代码:
inp = int(input("Enter a number:"))
for i in inp:
n = n + i;
print (n)
但是它抛出了一个错误:'int' object is not iterable
我想通过将每个数字相加来找到总数,例如110。1 + 1 + 0 = 2。我该怎么做?
首先,删掉那个 int
调用 - 你正在将一串字符转换为整数,这不是你想要的(你想将每个字符视为它自己的数字)。将其更改为:
inp = int(input("Enter a number:"))
至:inp = input("Enter a number:")
现在,inp
是一个数字字符串,你可以逐个数字地循环遍历它。
接下来,给n
赋一个初始值--根据你的代码,你将会得到一个NameError
,因为你没有初始化它。假设你希望在 for
循环之前执行 n = 0
。
然后,再次考虑字符和整数之间的区别。你现在有:
n = n + i;
此外,除了无用的分号(Python 是一种基于缩进的语法),它还试图将字符 i 加到整数 n 上 —— 这是行不通的!因此,这里需要进行如下修改:
n = n + int(i)
将字符 '7'
转换成整数 7
,以此类推。
也许你正在尝试
for i in range(inp)
这将打印您的输入值(inp)次数,如果只想打印一次,请按照以下方法操作: for i in range(inp - inp + 1) print(i)
我刚遇到了这个错误,因为我没有使用range()
尝试:
for i in str(inp):
这将迭代字符串表示中的字符。一旦您获得每个字符,您可以像单独的数字一样使用它。
好的,你想处理表示数字的字符串,需要迭代数字的每个位数,而不是迭代数字本身(数字本身是一种抽象的实体,可以用不同的方式写出,比如罗马数字中的"CX"或十六进制中的"0x6e"(都表示110)等等)。
因此:
inp = input('Enter a number:')
n = 0
for digit in inp:
n = n + int(digit)
print(n)
n = 0
是必需的(在进入循环之前某个地方)。您无法获取不存在的变量的值(右侧的 n = n + int(digit)
取 n
的值)。如果此时 n
存在,它可能保存与您目前需要的完全不相关的内容,导致意外行为;您需要加以防范。顺便提一下:如果你想得到所有数字的总和,只需简单执行以下操作:
print sum(int(digit) for digit in raw_input('Enter a number:'))
正如ghills已经提到的那样
inp = int(input("Enter a number:"))
n = 0
for i in str(inp):
n = n + int(i);
print n
for .. in
语句期望您使用已定义迭代器的类型。简单 int 类型没有迭代器。
将您的输入转换为字符串,以便可以进行迭代。
然后执行列表推导,并将每个值更改回数字。
现在,如果您想要,可以对所有数字进行求和:
inp = [int(i) for i in str(input("Enter a number:"))]
print sum(inp)
或者,如果你真的想在执行时看到输出:
def printadd(x,y):
print x+y
return x+y
inp = [int(i) for i in str(input("Enter a number:"))]
reduce(printadd,inp)
对于 OP 的问题(“我想通过将每个数字相加来找出总和,例如,110。1 + 1 + 0 = 2。我该怎么做?”),一个可能的答案是使用内置函数 divmod()。
num = int(input('Enter a number: ')
nums_sum = 0
while num:
num, reminder = divmod(num, 10)
nums_sum += reminder
int()
,而是将其变成range()
就可以解决这个问题。inp = range(input("Enter a number: "))