在我的程序中,它应该要求用户输入一个数字,然后显示所有可能的除数,但最后,它必须显示所有除数的总和。我在最后一部分遇到问题,希望得到一些帮助。
我的代码:
prompt = int(input("Enter an interger: "))
print("The divisors of the integer you entered are: ")
for i in range(1, prompt+1):
if(prompt%i==0):
print(i)
print(f")
例如,如果用户输入 20:
The divisors of the integer you entered are:
1
2
4
5
10
20
The sum of the divisors is: 42
只需对代码进行简单的修改即可达到目的。喜欢:
prompt = int(input("Enter an interger: "))
print("The divisors of the integer you entered are: ")
divisor_sum = 0 #updated line
for i in range(1, prompt+1):
if(prompt%i==0):
print(i)
divisor_sum+=i #calculate sum of all divisors
print("The sum of divisors " + str(divisor_sum)) #print the sum of divisors
您还可以使用
list comprehension
使您的程序更短、更智能,例如:
prompt = int(input("Enter an interger: "))
divisors = [i for i in range(1,prompt+1) if prompt%i==0]
divisor_sum = sum(divisors)
print("The divisors of the integer you entered are: ")
for i in divisors:
print(i)
print("The sum of divisors " + str(divisor_sum))
您只需要一个变量来存储总和。我用过
s
。除了 print(f")
之外,其余所有代码都完全没问题。它未使用,并且由于不完整而给出语法错误 "
。而且,f
没有定义
prompt = int(input("Enter an interger: "))
s=0
print("The divisors of the integer you entered are: ")
for i in range(1, prompt+1):
if(prompt%i==0):
s += i
print(i)
print ("The sum of the divisors is: %d" %s)
输出
Enter an interger: 20
The divisors of the integer you entered are:
1
2
4
5
10
20
The sum of the divisors is: 42
另一种方法是将有效除数列表存储在某种容器中。在这种情况下,适当的“容器”是一个列表。 这样做的好处是您可以存储除数以供以后使用。
prompt = int(input("Enter an interger: "))
divisors = []
print("The divisors of the integer you entered are: ")
for i in range(1, prompt+1):
if(prompt%i==0):
print(i)
divisors.append(i)
print("The sum of divisors " + sum(divisors)) #print the sum of divisors
# max(divisors)
# min(divisors)
# etc...
嗯,这个问题让我想起了我在 Euler 项目中解决的一个问题,并且我以 O(sqrt(n)) 复杂度完成了它。
如果你考虑9,
我们不需要考虑到 9 即可得到所有因子。我们只需要考虑到3,如果我们有X作为除数,那么prompt/X也是一个除数。有了这个属性,你可以使算法更加高效
import time
from math import sqrt
prompt = int(input("Enter an interger: "))
start =time.time()
print("The divisors of the integer you entered are: ")
sumofdivisors=0
for divisor in range(1, int(sqrt(prompt))+1):
if(prompt%divisor==0):
sumofdivisors+=divisor
sumofdivisors+=(prompt/divisor)
if (divisor==prompt/divisor):
sumofdivisors-=divisor
print(divisor)
else:
print(divisor)
print(prompt/divisor)
print("sum is",sumofdivisors)
end=time.time()
print("time taken is",end-start)
输出
Enter an interger: 8
The divisors of the integer you entered are:
1
8.0
2
4.0
sum is 15.0
time took = 0.0002665519714355469
prompt = int(input("Enter an interger: "))
print("The divisors of the integer you entered are: ")
total= 0
for i in range(1, prompt+1):
if(prompt%i==0):
print(i)
total+= i
print("The sum of the divisors is:{}".format(total))
输出:
Enter an interger: 20
The divisors of the integer you entered are:
1
2
4
5
10
20
The sum of the divisors is:42
从数学上来说,当你对一个数字的除数求和时,你不包括所讨论的数字。通常不需要添加范围函数的+1,并且会产生不正确的结果。 以下关于友好配对的维基百科文章可以作为参考。
看看这个更简单的版本。
x = eval(input("Enter a number: "))
s = 0
for i in range(1, x):
if x % i == 0:
s += i
print(s)