在Python中确定3或5的倍数

0 投票
4 回答
31663 浏览
提问于 2025-04-18 11:24

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

4 个回答

0

在编程中,有时候我们会遇到一些问题,想要找到解决办法。比如说,某个代码块可能没有按预期工作,这时候我们就需要去查找原因。通常,大家会在网上的技术论坛,比如StackOverflow,发帖求助,或者查看别人遇到的类似问题和解决方案。

在这些论坛上,用户会描述他们遇到的具体问题,提供相关的代码示例,甚至会分享他们尝试过的解决方法。这样,其他人就可以根据这些信息来帮助他们,或者从中学习到一些新的技巧。

总之,技术论坛是一个很好的资源,可以帮助我们解决编程中的各种难题。无论是新手还是有经验的程序员,都能在这里找到有用的信息和支持。

num = int(input("enter the number : "))
lt = []
for i in range(num):
  if (i%3==0 or i%5==0):
     lt.append(i)
sum_of_lt=sum(lt)
print(sum_of_lt)
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)
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
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

撰写回答