web-dev-qa-db-ja.com

Python - TypeError: 'int'オブジェクトは反復可能ではありません

これが私のコードです:

import math

print "Hey, lets solve Task 4 :)"

number1 = input ("How many digits do you want to look at? ")
number2 = input ("What would you like the digits to add up to? ")

if number1 == 1:
    cow = range(0,10)
Elif number1 == 2:
    cow = range(10,100)
Elif number1 == 3:
    cow = range(100,1000)
Elif number1 == 4:
    cow = range(1000,10000)
Elif number1 == 5:
    cow = range(10000,100000)
Elif number1 == 6:
    cow = range(100000,1000000)
Elif number1 == 7:
    cow = range(1000000,10000000)
Elif number1 == 8:
    cow = range(10000000,100000000)
Elif number1 == 9:
    cow = range(100000000,1000000000)
Elif number1 == 10:
    cow = range(1000000000,10000000000)

number3 = cow[-1] + 1

n = 0
while n < number3:
    number4 = list(cow[n])
    n += 1

リスト内の各要素について、それがそれぞれの文字に分解されるように、ループを作成しようとしています。たとえば、リストの中に137という数字があったとすると、それは[1,3,7]に変わります。それから私はこれらの数を一緒に加えたい(私はまだその少し始めていないが、私はそれをする方法のいくつかの考えを持っている)。

ただし、エラーメッセージが表示され続けます

TypeError: 'int' object is not iterable

私が試してみると.

何がおかしいのですか?

50
user2908001

あなたの問題はこの行にあります:

number4 = list(cow[n])

整数を返すcow[n]を取り、それをリストにしようとします。以下に示すように、これは機能しません。

>>> a = 1
>>> list(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>

おそらくあなたはcow[n]リストの中に入れるつもりでした:

number4 = [cow[n]]

下記のデモを参照してください。

>>> a = 1
>>> [a]
[1]
>>>

また、私は2つのことに対処したいと思いました:

  1. Whileステートメントの最後に:がありません。
  2. そのようにinputを使用することは非常に危険であると考えられます、なぜならそれはその入力を本当のPythonコードとして評価するからです。ここでは raw_input を使用してから int を使用して入力を整数に変換するほうがよいでしょう。

数字を分割してから好きなように追加するには、まず数字を文字列にします。次に、文字列は反復可能なので、 sum を使用できます。

>>> a = 137
>>> a = str(a)
>>> # This way is more common and preferred
>>> sum(int(x) for x in a)
11
>>> # But this also works
>>> sum(map(int, a))
11
>>>
81
iCodez

これはとても簡単で、整数をリストオブジェクトに変換しようとしています。もちろん失敗するでしょうし、そうするべきです...

あなたが提供した例を使ってあなたにこれを実演/証明するためには...ちょうど以下のようにそれぞれの場合にtype関数を使ってください、そして結果はそれ自身のために話すでしょう!

>>> type(cow)
<class 'range'>
>>> 
>>> type(cow[0])
<class 'int'>
>>> 
>>> type(0)
<class 'int'>
>>> 
>>> >>> list(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> 
0
grepit