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

2024-06-07 03:11:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我在练习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]

我真的很想保持简单,我不明白什么是不好的,我寻找了这么多的答案,但没有一个是在我的理解水平。为什么我的功能没有按预期工作?你知道吗


Tags: 函数用户numberinputrawdef数字integer
3条回答

你的部门落后了。你知道吗

我想你的意思是:

# 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是一个内置函数,隐藏它可能会在以后导致错误。你知道吗

你的模是反的。你知道吗

您的示例是在需要50 % i时计算到i % 50。你知道吗

下面是正确的版本(我使用的是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)

相关问题 更多 >