Python Euler实践

2024-05-16 10:04:30 发布

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

如果我们列出10以下的所有自然数,它们是3或5的倍数,我们得到3、5、6和9。这些倍数之和是23

完成该解决方案,使其返回传入数字以下所有3或5的倍数之和

注意:如果数字是3和5的倍数,则只计算一次。此外,如果数字为负数,则返回0(对于具有负数的语言)

def solution(number):
    sum = 0
    if(number <= 0):
        return 0
    else:
        for i in range(1,number+1):
            if( i % 3 == 0 or i % 5 == 0 and i % 15 != 0 ):
                sum += i
    return sum  

代码战中有105个测试用例用于此挑战,其中55个通过,50个未通过。如何改进代码

附言:我看不出哪些案例通过了,哪些案例没有通过

第二点:伙计们,当我删除I%15!=0


Tags: 代码语言numberforreturnifdef数字
3条回答

你不需要i%15!=0条件,因为之前的条件已经满足,所以永远不会对其进行测试,范围也应该是范围(1,数字),因为请求低于传入的数字(例如21和22应该给出相同的答案)

def solution(number):
    sum = 0
    if(number <= 0):
        return 0
    else:
        for i in range(1,number):
            if( i % 3 == 0 or i % 5 == 0 ):
                sum += i
    return sum  

print(solution(21))
print(solution(22))

省略最后一个测试(i % 15 != 0),条件变为i % 3 == 0 or i % 5 == 0,这就是问题所要求的,而且问题说below传入的数字,因此从range中排除number

def solution(number):
    sum = 0
    if number <= 0:
        return 0
    else:
        for i in range(1, number):
            if i % 3 == 0 or i % 5 == 0:
                sum += i
    return sum  

看起来你不是在数15的倍数吧?我可能错了,但你好像说,如果我可以被(3或5)整除,但不能被15整除,那么它就算数了

相关问题 更多 >