首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Project #1)找出低于1000的3或5倍数之和。

(Project #1)找出低于1000的3或5倍数之和。
EN

Code Review用户
提问于 2019-09-07 11:51:25
回答 2查看 1.4K关注 0票数 4

我以前在编程方面有很好的经验(主要是C++),但我对Python非常非常陌生,我决定试用Project作为练习。下面是对问题1的描述:

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

这是我的解决方案:

代码语言:javascript
复制
sum = 0
for n in range(0, 1000):
    if n % 3 == 0 or n % 5 == 0:
        sum += n
print(sum)

这个程序运行得很好。我想从代码评审中得到什么:

  • 不管我做了什么非毕达通的事;
  • 我是否做了什么过时的事;
  • 我是否对PEP 8做了什么;
  • 是否有更好的方法来做到这一点;
  • ..。
EN

回答 2

Code Review用户

发布于 2019-09-07 12:35:13

关键字sum是内置的函数,您不应该从保留关键字中命名变量。

下面列出了最常用的关键字,这些关键字不应该命名任何变量:

类,最后,是,返回,无,继续,for,lambda,try,True,def,from,nonlocal,while,和,del,global,not,as,elif,if或,产生,断言,否则,导入,传递,中断,除非,在,引发

对于内置函数,请检查https://www.programiz.com/python-programming/methods/built-in

代码语言:javascript
复制
for n in range(0, 1000):

可以写for n in range(1000):

range()函数以及整个Python都是零索引的。

您还可能希望使用理解语法(这比显式循环高效得多),并将其封装在如下函数中:

代码语言:javascript
复制
def get_multiples(upper_bound):
    """Return sum of multiples of 3 and multiples of 5 within specified range."""
    return sum(number for number in range(upper_bound) if not number % 3 or not number % 5)
票数 4
EN

Code Review用户

发布于 2019-09-07 18:04:46

这个问题可以用数学公式来解决,从而得到一个O(1)解。但在这里,我展示了另一种实现它的方法,它比简单的循环更有效:

代码语言:javascript
复制
def sum_multiples(n):
    return sum(range(0, n, 3)) + sum(range(0, n, 5)) - sum(range(0, n, 3*5))

或者说,

代码语言:javascript
复制
def sum_multiples(n):
    numbers = range(n)
    return sum(numbers[::3]) + sum(numbers[::5]) - sum(numbers[::3*5])

顺便说一句,在HackerRank网站上,最初的问题被修改为需要处理广泛的输入。您可以在各种提供的测试用例上运行解决方案(添加了适当的输入/输出),以验证时间约束下的正确性。

票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/227628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档