我正在练习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]
我真的想保持简单,但我不明白它有什么不好,我搜寻了很多答案,但都没有达到我的理解水平。为什么我的功能无法正常工作?
答案 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
)。您需要切换integer
和divisors
的位置。而且您需要从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
。