2015-11-11 73 views
-1

我試圖創建一個函數來測試一個數字是否可以被其他數字整除(在*args部分中提交)。我的功能返回False,當我運行is_divisible(12, 2, 4)返回True。但is_divisible(6, 8, 10, 2)返回True。我不知道什麼是錯誤的任何幫助將不勝感激。Python - 創建一個函數來檢查數字是否可以被其他數字整除

def is_divisible(numerator, *args): 
    divisors = list(args) 
    for number in range(len(divisors)): 
     x = divisors.pop() 
     if numerator % x != 0: 
      return False 
     else: 
      return True 
+0

你'返回TRUE'太早 - 試圖通過在你的腦袋實際過程加強,在紙上或使用例如http://www.pythontutor.com/ – jonrsharpe

回答

0
def is_divisible(numerator, *args): 
    divisors = list(args) 
    for divisor in divisors: 
     if numerator % divisor != 0: 
      return False 
    return True 

print(is_divisible(6, 8, 10, 2)) 

這裏是你的代碼稍加修改。我猜想你想檢查你的號碼是否可以被列表中的所有號碼整除,這就是我將return True移出for block的原因。否則,您將從*args的第一個數字中返回結果,因此您錯誤地得到了True,因爲6可以被2整除(但不是8或10)。使用any

+0

*「你得到錯誤結果的原因是,pop()(沒有參數)總是彈出列表中的最後一個元素。」* - 不,這是不正確的。 *「我假設你想檢查你的號碼是否可以被列表中的所有數字整除,這就是爲什麼我將返回從真正的block中移出來的原因。」* - 這就是爲什麼他們得到錯誤的結果。以相反的順序檢查它們使**完全沒有區別**。 – jonrsharpe

+0

@jonrsharpe:非常感謝您的澄清,我修正了它。 – jermenkoo

2

更Python的解決方案:

>>> def is_divisible(numerator, *args): 
    return not any(numerator % divisor for divisor in args) 

>>> is_divisible(13,4,2) 
False 
>>> is_divisible(60,3,2) 
True 
+0

(+1)是的,那是pythonic。但是,我會使用'all'而不是'not any':'all(分子%divisor == 0用於args中的除數);'這會使事情更具可讀性。 –

相關問題