2016-12-02 37 views
0

程序應該添加3和5的所有倍數,直到傳遞的值。但相反,它似乎增加了每一個數字,無論多個。它應該返回23,但返回45.爲什麼?爲什麼我的程序通過if循環運行,就好像它沒有檢查if loops == TRUE一樣?

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'%?事實上,你的條件不涉及指數'我',這有點奇怪。 –

回答

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

這個失敗的原因是你比較了number的模而不是inumber=10所以number%5==0總是True。另見@JohnColeman的評論。它打印

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

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

相關問題