我以前在编程方面有很好的经验(主要是C++),但我对Python非常非常陌生,我决定试用Project作为练习。下面是对问题1的描述:
如果我们列出所有低于10的自然数,它们是3或5的倍数,我们得到3,5,6和9。这些倍数之和是23。找出低于1000的3或5倍数之和。
这是我的解决方案:
sum = 0
for n in range(0, 1000):
if n % 3 == 0 or n % 5 == 0:
sum += n
print(sum)这个程序运行得很好。我想从代码评审中得到什么:
发布于 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。
for n in range(0, 1000):可以写for n in range(1000):
range()函数以及整个Python都是零索引的。
您还可能希望使用理解语法(这比显式循环高效得多),并将其封装在如下函数中:
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)发布于 2019-09-07 18:04:46
这个问题可以用数学公式来解决,从而得到一个O(1)解。但在这里,我展示了另一种实现它的方法,它比简单的循环更有效:
def sum_multiples(n):
return sum(range(0, n, 3)) + sum(range(0, n, 5)) - sum(range(0, n, 3*5))或者说,
def sum_multiples(n):
numbers = range(n)
return sum(numbers[::3]) + sum(numbers[::5]) - sum(numbers[::3*5])顺便说一句,在HackerRank网站上,最初的问题被修改为需要处理广泛的输入。您可以在各种提供的测试用例上运行解决方案(添加了适当的输入/输出),以验证时间约束下的正确性。
https://codereview.stackexchange.com/questions/227628
复制相似问题