int对象不可迭代?

时间:2009-12-21 04:42:15

标签: python int loops

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.我该怎么做?

由于

11 个答案:

答案 0 :(得分:20)

首先,失去对int的调用 - 您将一串字符转换为整数,这不是您想要的(您希望将每个字符视为自己的数字)。变化:

inp = int(input("Enter a number:"))

为:

inp = input("Enter a number:")

既然inp是一串数字,你可以逐位循环。

接下来,为n分配一些初始值 - 当你现在编码代码时,你将获得NameError,因为你从未初始化它。大概你想在n = 0循环之前for

接下来,再次考虑字符和整数之间的差异。你现在有:

n = n + i;

除了不必要的分号(Python是基于缩进的语法)之外,还试图将字符 i加到整数 n - 这不会工作!因此,变为

n = n + int(i)

将字符'7'转换为整数7,依此类推。

答案 1 :(得分:8)

尝试:

for i in str(inp):

这将迭代字符串表示中的字符。一旦你拥有了每个角色,就可以像使用一个单独的角色一样使用它。

答案 2 :(得分:5)

也许你正在尝试

for i in range(inp)

我刚刚遇到此错误,因为我没有使用range()

答案 3 :(得分:3)

好吧,你想要处理代表数字的字符串,迭代数字,而不是数字本身(这是一个可以用不同方式编写的抽象实体,比如罗马数字中的“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,它可能会保留与您当前需求完全无关的内容,从而导致意外行为;你需要防范这一点。

此解决方案不会尝试确保用户提供的输入实际上是一个数字。我会留下这个问题供你思考(提示:你需要的只是the Python tutorial)。

答案 4 :(得分:3)

旁注:如果你想得到所有数字的总和,你可以简单地做

print sum(int(digit) for digit in raw_input('Enter a number:'))

答案 5 :(得分:1)

for .. in语句希望您使用定义了迭代器的类型。一个简单的int类型没有迭代器。

答案 6 :(得分:1)

正如ghills已经提到的那样

inp = int(input("Enter a number:"))

n = 0
for i in str(inp):
    n = n + int(i);
    print n

当您循环浏览某些内容时,关键字为“IN”,只需将其视为某个列表即可。你不能循环一个普通的整数。因此,它不可迭代。

答案 7 :(得分:0)

接受你的输入并确保它是一个字符串,以便它是可迭代的。

然后执行列表推导并将每个值更改回数字。

现在,如果你愿意,你可以做所有数字的总和:

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)

答案 8 :(得分:0)

您可以尝试更改 for i in inp:for i in range(1,inp): 迭代不适用于单个int。相反,您需要提供一个运行范围。

答案 9 :(得分:0)

请勿将其设为int(),而将其设为range()将解决此问题。

inp = range(input("Enter a number: "))

答案 10 :(得分:0)

OP-s问题的一个可能答案(“我想通过加每个数字来找出总数,例如110。1 + 1 + 0 =2。我该怎么做?”)是使用build -in函数divmod()

num = int(input('Enter a number: ')
nums_sum = 0

while num:
    num, reminder = divmod(num, 10)
    nums_sum += reminder