我对python相对较新,因此试图让自己运行一些简单的算法。这是项目euler的第一个问题,虽然python中有同样问题可以使用其他解决方案,但我尝试过不同的方法。
在症结中,我们的想法是找到所有3或5的倍数小于1000的总和。这是我的代码。
def main():
num = input('Insert number:')
output = sumOfMultiples(num)
print(output)
def sumOfMultiples(param):
j = 0
i = 0
for i in range(i, param):
if (i % 3 ==0) or (i % 5 == 0) and (i % 15 != 0):
j = j + i
return j
if __name__ == '__main__':
main()
这是我得到的错误
Traceback (most recent call last):
File "/Users/Soumasish/PycharmProjects/MultiplesOf3And5/Main.py", line 21, in <module>
main()
File "/Users/Soumasish/PycharmProjects/MultiplesOf3And5/Main.py", line 7, in main
output = sumOfMultiples(num)
File "/Users/Soumasish/PycharmProjects/MultiplesOf3And5/Main.py", line 15, in sumOfMultiples
for i in range(i, param):
TypeError: 'str' object cannot be interpreted as an integer
Process finished with exit code 1
答案 0 :(得分:1)
您需要将输入转换为int:
def main():
num = int(input('Insert number:'))
output = sumOfMultiples(num)
print(output)
此外,您可以按如下方式减少第二种方法。我查了一下,它仍然给出了正确的答案:
def sumOfMultiples(param):
sum = 0
for i in range(param):
if (i % 3 ==0) or (i % 5 == 0):
sum += i
return sum
答案 1 :(得分:0)
当您输入以下内容时,这是类型的问题:
num = input('Insert number:')
num
是一种字符串类型。如果您使用type(num)
,则可以看到此信息。然后,您尝试使用num
取模,模数不是带字符串的已定义操作。
如果您输入的类型正确,问题就会消失:
num_str = input('Insert number:')
output = sumOfMultiples(int(num_str)) #this makes the input string an int first
答案 2 :(得分:0)
不是通过将每个数字除以5和3来检查每个数字,而是可以使用公式在O(1)中轻松完成。
n=int(input())
a=(n-1)/3
b=(n-1)/5
c=(n-1)/15
ans=(3*a*(a+1)/2)+(5*b*(b+1)/2)-(15*c*(c+1)/2)
print(ans)