我需要返回具有所有除数的最大值除数的数字。所以,我所尝试的是:
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.我怎么能这样做?请给我任何建议。谢谢。
答案 0 :(得分:1)
定义max_divs
和max_divs_elem
变量并将其更新为存储具有最高分隔数的元素,我已将带有 NEW LINES 前缀的注释放到新的代码行中:
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]))
答案 1 :(得分: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)