デバッグ文を追加することが多い問題を特定するのに役立ちます:
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
を返す '番号%は3'場合、私%3''でなければなりませんか?それはそのままですが、あなたの条件にはインデックス「i」は含まれていません。少し奇妙です。 –