我对python还比较陌生,因此我试图让自己运行一些简单的算法。这里是project euler的第一个问题,虽然在python中有其他解决相同问题的方法,但是我尝试了不同的方法。
其实质是求小于1000的3或5的所有倍数之和。这是我的密码。
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
这是类型的问题,当您使用以下项输入时:
num
是字符串类型。如果您使用type(num)
,您可以看到这一点。然后,尝试使用num
获取一个模,而该模不是一个带字符串的已定义操作。如果您使类型正确,问题将消失:
您需要将输入转换为int:
此外,您可以按如下方式减少第二种方法。我查了一下,它仍然给出了正确的答案:
这是类型的问题,当您使用以下项输入时:
num
是字符串类型。如果使用type(num)
,您可以看到这个。然后,尝试使用num
获取一个模,而该模不是一个带字符串的已定义操作。如果您使类型正确,问题将消失:
我们不必把每个数除以5和3来检查,而可以用公式在O(1)中很容易地做到。
相关问题 更多 >
编程相关推荐