列出整数的所有除数的函数

时间:2018-08-02 13:30:19

标签: python python-2.7

我正在练习Python的基础知识,并且练习了一个函数,该函数要求用户输入数字,该函数将返回该数字的所有除数,所以我做到了

def divisor_generator():
    integer = raw_input("Enter a number:")
    integer = int(integer)
    list = []
    for divisors in range(integer+1):
        if divisors%integer == 0:
            list.append(divisors)
    print list 

例如,整数50的输出为

[50, 0]

我真的想保持简单,但我不明白它有什么不好,我搜寻了很多答案,但都没有达到我的理解水平。为什么我的功能无法正常工作?

3 个答案:

答案 0 :(得分:2)

您的部门倒退了。

我想你的意思是

# I took the s off of "divisors" since it's actually a single number
integer % divisor == 0

以这种方式考虑,如果integer为50,而divisor为2,则采用的方式是:

2 % 50 == 0

如果分子小于分母,则除非数字相同,否则该检查永远不会成立。我始终会仔细检查一下自己的精神,以确保我不会意外地将数字倒退。


并且,如注释中所述,请勿创建名为list的变量。 list是一个内置函数,对其进行阴影处理有可能在以后导致错误。

答案 1 :(得分:1)

这是正确的版本(我正在使用python 3.6.1)。您需要切换integerdivisors的位置。而且您需要从1开始您的范围,否则会出现division by zero错误

def divisor_generator():
    integer = input("Enter a number:")
    integer = int(integer)
    list = []
    for divisors in range(1, integer+1):
        if integer%divisors == 0:
            list.append(divisors)
    print (list) 

顺便说一句,如果您也对解决问题的方法简洁而又感兴趣的话,这是另一种解决方案(虽然不一定需要):

integer = int(input("Enter a number:"))
divisors = [i for i in range(1, integer+1) if integer%i == 0]
print (divisors)

答案 2 :(得分:1)

您的模数是向后的。

您的示例在需要i % 50时评估为50 % i