2016-02-15 43 views
-3

我需要返回具有所有除數的最大值除數的數字。所以,到目前爲止我曾嘗試是:如何返回除數最大值的數字?

def max_divisors(my_list): 
#Takes each number in list 
n=my_list 
for k in n: 
    #calculate how many divisors each number has 
    i=2 
    count=2 
    while(i**2 < k): 
     if(k%i==0): 
      count+=2 
     i+=1 
    count+=(1 if i**2==k else 0) 
    print(k,"has",count, "divisors") 
print(max_divisors([100,5, 6])) 

這是完全恢復 100 has 9 divisors 5 has 2 divisors 6 has 4 divisors. 現在我需要獲得最大除數的數量。也就是說,除了所有的因數9以外都是最大的,所以應該打印數字100.我可以這樣做嗎?任何建議請。謝謝。

回答

1

定義max_divsmax_divs_elem變量和更新它們來存儲與除法的最高計數元素中,我的推杆前綴新品系評論到新的代碼行:

def max_divisors(my_list): 
    #Takes each number in list 
    n=my_list 

    # NEW LINES: initialise max_divs and max_divs_elem vars 
    max_divs = 0 
    max_divs_elem = 0 

    for k in n: 
     #calculate how many divisors each number has 
     i=2 
     count=2 
     while(i**2 < k): 
      if(k%i==0): 
       count+=2 
      i+=1 
     count+=(1 if i**2==k else 0) 
     # update max_divs and max_divs_elem if needed 
     if max_divs < count: 
      max_divs = count 
      max_divs_elem = k 
     print(k,"has",count, "divisors") 

    # NEW LINES: print values of max_divs, max_divs_elem 
    print(max_divs_elem, "has maximal dividers:", max_divs) 
print(max_divisors([100,5, 6])) 
+0

這不是Pythonic。 –

+0

@Andriy Ivaneyko謝謝 – cloudybunny

+0

@cloudybunny歡迎您,有一個愉快的一天) –

1

你的功能做得太多許多。把它分成更小的部分。

有一個單獨的函數來獲取divisiors:

def count_divisors(number): 
    i = 2 
    count = 2 
    while(i ** 2 < k): 
     if(k % i == 0): 
      count += 2 
     i += 1 
    count += (1 if i ** 2 == k else 0) 
    return count 

然後您的打印和搜索可以是獨立的:

>>> numbers = [100, 5, 6] 
>>> divisors = [count_divisors(number) for number in numbers] 

>>> for number, divisor_count in zip(numbers, divisors): 
...  print("{} has {} divisors".format(number, divisor_count)) 

您可以使用內置的功能max搜索的最大一些標準:

>>> max(zip(numbers, divisors), key=itemgetter(1)) 
(100, 9) 
+0

非常感謝您糾正我的程序錯誤。從現在開始,病房將隨之而來。 – cloudybunny