これが私のコードです:
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
私が試してみると.
何がおかしいのですか?
あなたの問題はこの行にあります:
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つのことに対処したいと思いました:
:
がありません。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
>>>
これはとても簡単で、整数をリストオブジェクトに変換しようとしています。もちろん失敗するでしょうし、そうするべきです...
あなたが提供した例を使ってあなたにこれを実演/証明するためには...ちょうど以下のようにそれぞれの場合に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
>>>