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.我该怎么做?
由于
答案 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