2016-12-02 6 views
0

プログラムは、渡された値まで3と5の倍数をすべて追加する必要があります。しかし、その代わりに、倍数に関係なくすべての数を追加するようです。それは23を返しますが、代わりに45を返します。なぜですか?このような場合にはなぜ私のプログラムはifループをチェックしなかったかのようにifループを実行しますか?

def solution(number=10): 
    i = 0 
    c = 0 
    while i < number: 
     if number % 3 == 0: 
      c += i 
     elif number % 5 == 0: 
      c += i 
     i += 1 

    return c 
+7

を返す '番号%は3'場合、私%3''でなければなりませんか?それはそのままですが、あなたの条件にはインデックス「i」は含まれていません。少し奇妙です。 –

答えて

1

デバッグ文を追加することが多い問題を特定するのに役立ちます:

def solution(number=10): 
    i = 0 
    c = 0 
    while i < number: 
     if number % 3 == 0: 
      c += i 
     elif number % 5 == 0: 
      c += i 
     print('i={}, c={}, number={}, number%3={}, number%5={}'.format(i, c, number, number%3, number%5)) 
     i += 1 

    return c 

solution() 

、これは印刷します

i=0, c=0, number=10, number%3=1, number%5=0 
i=1, c=1, number=10, number%3=1, number%5=0 
i=2, c=3, number=10, number%3=1, number%5=0 
i=3, c=6, number=10, number%3=1, number%5=0 
i=4, c=10, number=10, number%3=1, number%5=0 
i=5, c=15, number=10, number%3=1, number%5=0 
i=6, c=21, number=10, number%3=1, number%5=0 
i=7, c=28, number=10, number%3=1, number%5=0 
i=8, c=36, number=10, number%3=1, number%5=0 
i=9, c=45, number=10, number%3=1, number%5=0 

注意だけで、簡単な例についてprint(もしあれば変数print(locals())は非常に便利です!)を検査したいだけですが、pdbのような他のデバッグツールもあります。

これが失敗する理由は、iの代わりにnumberのモジュロを比較したためです。 number=10だからnumber%5==0は常にTrueです。 @JohnColemanのコメントも参照してください。 i % ... == 0

変更を:

def solution(number=10): 
    i = 0 
    c = 0 
    while i < number: 
     if i % 3 == 0: 
      c += i 
     elif i % 5 == 0: 
      c += i 
     print('i={}, c={}, number={}, i%3={}, i%5={}'.format(i, c, number, i%3, i%5)) 
     i += 1 

    return c 

solution() 

出力します

i=0, c=0, number=10, i%3=0, i%5=0 
i=1, c=0, number=10, i%3=1, i%5=1 
i=2, c=0, number=10, i%3=2, i%5=2 
i=3, c=3, number=10, i%3=0, i%5=3 
i=4, c=3, number=10, i%3=1, i%5=4 
i=5, c=8, number=10, i%3=2, i%5=0 
i=6, c=14, number=10, i%3=0, i%5=1 
i=7, c=14, number=10, i%3=1, i%5=2 
i=8, c=14, number=10, i%3=2, i%5=3 
i=9, c=23, number=10, i%3=0, i%5=4 

をし、23

関連する問題