在python中确定3或5的倍数

2024-04-25 17:52:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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

Tags: 方法inpyoutputparammainlineusers
4条回答

这是类型的问题,当您使用以下项输入时:

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

您需要将输入转换为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

这是类型的问题,当您使用以下项输入时:

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

我们不必把每个数除以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)

相关问题 更多 >