输入数字后,没有任何反应。如果我将print语句放在条件语句之一中,它将打印它,但是它将循环打印它多次。
对正在发生的事情以及如何以最简单的方式仅打印一次最终列表感到非常好奇。
number = input('Enter a Number')
newList = []
for i in range(1,10000000000001):
if int(number) % i == 0:
newList.append(i)
print(newList)
答案 0 :(得分:3)
您等待的时间还不够长,循环还没有结束。
在打印之前,您要循环10 ^ 13,或10 trillion次,
for i in range(1,10000000000001):
这将花费Python一段时间,执行循环体是有代价的。在我的笔记本电脑(带有2.9 GHz Intel Core i7处理器的2017 MacBook Pro)上,我可以在大约1分之一秒的时间内使您的循环机身运行1000万次:
>>> import timeit
>>> timeit.timeit(
... "int(number) % i == 0", # loop body code
... "number = 42; i = 43", # set values for the variables
... number=10**7) # number of repetitions to time
1.259572982788086
10万亿次重复将花费10 ** 6(100万)次,即大约1259573秒。
1259573秒是349小时52分53秒:
>>> from datetime import timedelta
>>> print(timedelta(seconds=1.259573 * 10 ** 6))
14 days, 13:52:53
在循环完成之前,您将需要等待2周14个小时!
您不需要经常循环。如果您要查找数字的除数,则只需循环至数字的平方根,因为您始终可以通过除以{{1}来找到“其他”除数。 }再除数。平方根是除数number
在产生小于除数(因此已经过测试)的数字之前可以得到的最大值:
number // divisor
这当然会以不同的顺序打印除数:
number = int(input("Enter a number: ")
for i in range(1, int(number ** 0.5) + 1):
if number % i == 0:
# i is a divisor
print(i, end=' ')
# so is number // i
j = number // i
# but test if it is different from i
if j != i:
print(j, end=' ')
您可以进一步减少迭代次数;奇数只能有奇数除数,因此您也可以跳过所有偶数。
以下内容为Enter a number: 1002001
1 1002001 7 143143 11 91091 13 77077 49 20449 77 13013 91 11011 121 8281 143 7007 169 5929 539 1859 637 1573 847 1183 1001
(range()
(对于偶数)或1
(对于奇数)设置步长:
2
答案 1 :(得分:1)
尝试使用end
参数进行打印。另外,当您碰到正在处理的号码时,请停下来。
number = int(input('Enter a number'))
for i in range(1, min(10000000000001, number + 1)):
if number % i == 0:
print(i, end = ' ')
输出,输入为1002001:
Enter a number1002001
1 7 11 13 49 77 91 121 143 169 539 637 847 1001 1183 1573 1859 5929 7007 8281 11011 13013 20449 77077 91091 143143 1002001
如果您要查找一个数字的所有因素,可以使用更有效的方法。使用浏览器来研究解决方案。应该使用“ Python整数因子”。