web-dev-qa-db-ja.com

intオブジェクトは反復不可能ですか?

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。どうすればよいですか?

ありがとう

16
3zzy

最初に、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に加算しようとしていますが、これは機能しません!したがって、this

n = n + int(i)

文字を変える'7'から整数7など。

20
Alex Martelli

試してください:

for i in str(inp):

これは、文字列表現内の文字を反復処理します。各文字を取得したら、別の数字のように使用できます。

8
Gavin H

多分あなたはしようとしている

for i in range(inp)

Range()を使用していないため、このエラーが発生しました。

6
johnjullies

サイドノート:すべての数字の合計を取得したい場合は、単に行うことができます

print sum(int(digit) for digit in raw_input('Enter a number:'))
3
Eric O Lebigot

さて、数字を表す文字列を処理し、数字自体ではなく数字を反復処理します(ローマ数字の「CX」や16進数の「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が存在する場合、現在のニーズとはまったく関係のない何かが保持され、予期しない動作が発生する可能性があります。それを防ぐ必要があります。

このソリューションは、ユーザーが提供する入力が実際に数字であることを保証しようとしません。この問題については、考えてみてください(ヒント:必要なものは Pythonチュートリアル )にあります)。

3
Michał Marczyk

for .. inステートメントは、イテレータが定義されている型を使用することを想定しています。単純なint型には反復子がありません。

1
Brian R. Bondy

ヒルズがすでに言及したように

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

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

何かをループしているとき、キーワードは「IN」です。常に何かのリストと考えてください。プレーン整数をループすることはできません。したがって、繰り返しはできません。

1
CppLearner

入力を受け取り、文字列であることを確認して反復可能にします。

次に、リストの内包表記を実行し、各値を数値に戻します。

これで、必要に応じてすべての数値の合計を計算できます。

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)
0
Brian

int()にするのではなく、range()にすることでこの問題を解決できます。

inp = range(input("Enter a number: "))
0
戴東華

_for i in inp:_をfor i in range(1,inp):に変更しようとすることができます。反復は単一のintでは機能しません。代わりに、実行する範囲を指定する必要があります。

0
Yaakov Freedman

OP-sの質問(「110などの各桁を追加して合計を求めたい。1+ 1 + 0 =2。どうすればよいですか?」)に対する1つの可能な答えは、組み込み関数を使用することです。 divmod()

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

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