【问题标题】:int object is not iterable while trying to sum the digits of a number?int 对象在尝试对数字的数字求和时不可迭代?
【发布时间】:2010-12-28 15:16:06
【问题描述】:

我有这个代码:

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

【问题讨论】:

标签: python loops integer


【解决方案1】:

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

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

到:

inp = input("Enter a number:")

现在inp 是一串数字,您可以逐位循环。

接下来,为n 分配一些初始值——就像你现在的代码一样,你会得到一个NameError,因为你从来没有初始化它。大概你想要n = 0for 循环之前。

接下来,再次考虑字符和整数的区别。你现在有:

n = n + i;

除了不必要的分号(Python 是一种基于缩进的语法)之外,它还试图将 character i 与 integer n 相加 - 这不会工作!所以,这个变成了

n = n + int(i)

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

【讨论】:

    【解决方案2】:

    也许你正在尝试

    for i in range(inp)
    

    这将打印您的输入值 (inp) 次,要仅打印一次,请执行以下操作: 对于 i 在范围内(inp - inp + 1 ) 打印(一)

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

    【讨论】:

    • 这将如何解决问题? OP想要迭代数字的数字,而不是迭代number次......
    【解决方案3】:

    尝试:

    for i in str(inp):
    

    这将遍历字符串表示中的字符。拥有每个字符后,您可以将其用作单独的数字。

    【讨论】:

    • 嗯..它说 TypeError: unsupported operand type(s) for +: 'int' and 'str'
    • 添加时转回int?
    • 好吧,当你把它加到一个整数上时,它现在是一个字符串。所以在这种情况下,你可以说 int(i) + n 或任何它。
    【解决方案4】:

    嗯,你想处理代表数字的字符串,迭代数字,而不是数字本身(这是一个可以不同写法的抽象实体,如罗马数字中的“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)。

    【讨论】:

    • 这会起作用,很好,我建议将它作为一个函数,如果 op 作为知识,inp 是一个全局变量并保持 n 局部,所以它在完成并再次调用时重置为零跨度>
    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        正如 ghills 已经提到的那样

        inp = int(input("Enter a number:"))
        
        n = 0
        for i in str(inp):
            n = n + int(i);
            print n
        

        当您循环浏览某物时,关键字是“IN”,只要始终将其视为某物的列表。您不能循环遍历纯整数。因此,它是不可迭代的。

        【讨论】:

          【解决方案8】:

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

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

          现在,您可以根据需要对所有数字求和:

          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)
          

          【讨论】:

            【解决方案9】:

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

            num = int(input('Enter a number: ')
            nums_sum = 0
            
            while num:
                num, reminder = divmod(num, 10)
                nums_sum += reminder
            

            【讨论】:

              【解决方案10】:

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

              【讨论】:

              • 这将如何解决问题? OP想要迭代数字的数字,而不是迭代number次......
              【解决方案11】:

              不要将其设为int(),而是将其设为range() 将解决此问题。

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

              【讨论】:

              • 这将如何解决问题? OP想要迭代数字的数字,而不是迭代number次......
              猜你喜欢
              • 2011-08-09
              • 2020-12-27
              • 1970-01-01
              • 1970-01-01
              • 2018-02-10
              • 2018-12-14
              • 2018-02-03
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多