在python中打印一个数字的因子

时间:2014-07-07 22:05:47

标签: python loops while-loop

我试图在python中打印数字20的因子,所以它会: 20 10 五 4 2 1

我意识到这是一个非常简单的问题,但我对我的尝试中的一些具体细节提出了疑问。如果我说:

def factors(n):
    i = n
    while i < 0:
        if n % i == 0:
            print(i)
        i-= 1

当我这样做时,它只打印出20个。当我指定i = n然后递减i时,我认为有什么不对,它是否也会影响n?这是如何运作的? 我也意识到这可能是用for循环完成的,但是当我使用for循环时,我只能弄清楚如何向后打印因子,这样我得到:1,2,5,10 .... 我还需要使用迭代来做到这一点。帮助

注意:这不是一个家庭作业问题我试图自己重新学习python,因为它已经有一段时间了,所以我觉得很难被这个问题困住:(

3 个答案:

答案 0 :(得分:1)

while i < 0:

这从一开始就是假的,因为i可能是正面开始的。你想要:

while i > 0:

用语言来说,你想“在i处开始n,在它仍然大于0时减少它,在每一步测试因素”。


>>> def factors(n):
...     i = n
...     while i > 0:  # <--
...         if n % i == 0:
...             print(i)
...         i-= 1
... 
>>> factors(20)
20
10
5
4
2
1

答案 1 :(得分:0)

while条件应该是i > 0而不是i < 0因为它永远不会满足它,因为我从20开始(或在其他情况下更多)

答案 2 :(得分:0)

希望我的回答有帮助!

#The "while True" program allows Python to reject any string or characters
while True:
try:
    num = int(input("Enter a number and I'll test it for a prime value: "))
except ValueError:
    print("Sorry, I didn't get that.")
    continue
else:
    break

#The factor of any number contains 1 so 1 is in the list by default.
fact = [1]

#since y is 0 and the next possible factor is 2, x will start from 2.
#num % x allows Python to see if the number is divisible by x
for y in range(num):
    x = y + 2
    if num % x is 0:
        fact.append(x)
#Lastly you can choose to print the list
print("The factors of %s are %s" % (num, fact))