2016-11-09 38 views
-1

FizzBu​​zzの問題にわずかな違いがあります。Python、TypeError: 'int'オブジェクトは反復可能ではありません

私はこのエラーメッセージの多くの回答を読んでいますが、私が紛失しているものを把握するのに役立っていません。

私は答えを本当に感謝していますが、私が望むのは、エラーの背後にある理由を理解することです。

関数を呼び出さずに単純なループ/ if/elif構造体を使用してこのタスクを実行することはできませんか?

はTypeError:「int型のオブジェクトは、あなたは、単一の番号を反復処理しようとしている

def solution(N): 
N = 0 
for i in N:  
    if i % 3 == 0 and i % 5 == 0 and i % 7 == 0: 
     print('FizzBuzzWoof') 
    elif i % 3 == 0 and i % 5 == 0: 
     print('FizzBuzz') 
    elif i % 3 == 0: 
     print('Fizz') 
    else: 
     print(i) 

    N = N+1 

def main(): 
    solution(35) 
main() 
+5

を含める場合は、範囲(int型)で、私のために'もしかしてrange(0, ints+1)を置きますか? – Li357

+0

スタックトレースを送信してください。 Pythonはどのラインにエラーがあったかを伝えました。それはあなたが共有したいものではありませんか? – tdelaney

+0

また、関数のパラメータの名前をints以外の何かに変更することをお勧めします。ints = 0を宣言すると、0になります。したがって、intsの範囲でiを見つけようとすると、任意の良い。 – JackTheCrab

答えて

1

反復可能ではありません。代わりにintsの配列を作成し、それを反復処理することができます。例えば:今

ints = [1, 2, 3] 
x.append([4, 5]) #append elements you need 
print (x) 
#result will be 1,2,3,4,5 

そして、これで行くと1〜5を反復処理:あなたのコードints

for i in ints: 
    #your logic goes in here 
0

は、整数、35提供された例です。整数はコレクションではないため、for-loopの範囲としては使用できません。 @AndrewLiがコメントで示唆しているように、0n-1という要素を含むイテレータを取得するには、range(n)を使用します。

コードでは、solution関数では、intsを第1のものとして上書きして、関数に解析された引数を実質的に無視します。下のコードでは、range(arg)を追加し、引数をintsの代わりにargに変更しました。

def solution(arg): 
    ints = 0 
    for i in range(arg): 
    if i % 3 == 0 and i % 5 == 0 and i % 7 == 0: 
     print('FizzBuzzWoof') 
    elif i % 3 == 0 and i % 5 == 0: 
     print('FizzBuzz') 
    elif i % 3 == 0 and i % 5 == 0: 
     print('Fizz') 
    else: 
     print(i) 

    ints = ints+1 

def main(): 
    solution(35) 

main() 
+0

このタイプのfor-loopsで 'range()'標準を使用していますか?また、私は変数 'ints'を初期化する必要があると考えていました。 ints = 0であり、forループの前に来るので、ループに値を渡すだけでループが実行され、ループが繰り返されるたびに 'ints'をリセットせずに終了します。 – mrmjp

+0

あなたのコードに基づいて、私は数字0〜 'ints'を繰り返し、それぞれの条件が満たされれば_Fizz_、_FizzBu​​zz_、または_FizzBu​​zzWoof_を印刷したいと思っていました。あなたのコードでは、 'ints = 0'を設定します。つまり、引数を0に上書きします。一般的には、 'for(i = 0; i Jonas

2

、このいずれかを試してみてください。

def solution(ints): 
for i in range(1, ints+1):  
    if i % 3 == 0 and i % 5 == 0 and i % 7 == 0: 
     print('FizzBuzzWoof') 
    elif i % 3 == 0 and i % 5 == 0: 
     print('FizzBuzz') 
    elif i % 3 == 0 and i % 5 == 0: 
     print('Fizz') 
    else: 
     print(i) 

def main(): 
    solution(35) 
main() 

は `あなたが0で開始したいと35

+0

「0」は省略可能です。デフォルト_start_値は「0」です。したがって、 'range(stop)'は0からstop-1までの数を提供します。 – Jonas

関連する問題