2017-04-09 61 views
0

練習,我創建了一個代碼來回答這個問題:除數從實踐蟒蛇

創建一個程序,詢問了一些用戶,然後打印出該號碼的所有約數的列表。 (如果你不知道除數是多少,那麼它是一個數字,可以平均分成另一個數字,例如13是26的因數,因爲26/13沒有餘數。)

不幸的是,我的程序doesn對給定數字不返回除數值。這裏是我的代碼:

print('Enter a number to know its divisors :') 
number = int(input()) 

while number > 1: 
    inf = number - 1 
    result = number % inf 
    if result == 0: 
     print (inf) 

能否請你告訴我哪裏是我的錯誤?如果可能的話,我也希望你的評論能夠讓這個程序變得更簡單。

最佳

+0

你不會減少'數字'或'inf':你得到一個無限循環。 –

+0

使用for循環。 –

+0

Merci @ Jean-François。如果我在末尾添加「number = number - 1」會怎麼樣? – Bonapara

回答

0

你需要真正遞減變量inf在for循環,並運行循環,直到inf達到1(相對於number,應保持相同)。但是,您可以編寫更容易使用rangefilterlambda功能的程序:

print('Enter a number to know its divisors :') 
number = int(input()) 

for divisor in filter(lambda x: number % x == 0, range(1, number)): 
    print(divisor) 

編輯:我覺得好像有點忘,你可以用for ... in ... if代替過濾白癡。

print([x for x in range(1, number) if number % x == 0]) 
+0

謝謝你的回答@gyre。我不知道過濾器和lambda函數。我試圖在網上搜索,但我並不真正瞭解。也許你能解釋我的代碼(以及這2個函數的作用)嗎?否則,非常感謝它完美的工作 – Bonapara

+0

當然。 'range(1,number)'給你一個從1到'number'的數字序列,它構成了所有可能的除數,然後你過濾所有這些可能性以產生一個只有那些數字'號碼%x == 0「(換句話說,那些可以均勻分配數字的號碼)。 'for ... in'陳述只是遍歷所有找到的除數並將其打印出來。 – gyre

+0

我明白了,非常感謝! – Bonapara