这是我在求职面试中被问到的一个问题。
问题是如何将1到100之间的所有自然数相加,我也要求在python中编写这个程序。
那是我写的代码:
def sumNaturalNumbers(start, end, total_sum):
li = range(start, end)
sum = li[0] + li[-1]
li.remove(li[0])
li.remove(li[-1])
total_sum += sum
if len(li) == 0:
return total_sum
return sumNaturalNumbers(li[0], li[-1]+1, total_sum)
print sumNaturalNumbers(1,101, 0)
有什么我可以改变\修复使这个功能更加pythonic,所以我可以在下一次面试时提高自己吗?
修改
我的目的是在列表中对每个迭代中的第一个和最后一个项目求和,并将它乘以50.我要求展示我的思维方式,然后在解释之后,实现它。 我知道函数sum,但我需要以这种方式实现它。
答案 0 :(得分:2)
有一个内置函数sum
,它对输入的列表求和:
sum(range(start, stop+1))
>>> sum(range(1, 11)) #Sum of numbers between 1 and 10, inclusive
55
>>> sum(range(1, 101)) #Sum of numbers between 1 and 100, inclusive
5050
>>>
答案 1 :(得分:1)
def sum_nums_in_range(start, end):
repeating_sum = 0
li = range(start, end + 1)
first_half = li[:len(li)/2]
second_half = li[len(li)/2:]
for a, b in zip(first_half, reversed(second_half)):
repeating_sum = a+b
return repeating_sum * len(li)/2
答案 2 :(得分:1)
那样的东西?
def sum_gauss(start, end):
return ((end-start+1)/2) * (end+start)
(在Python 2中,您需要from __future__ import division
)
答案 3 :(得分:1)
如果你应该递归,一个简单的方法就是从结尾删除1直到你开始:
def sumNaturalNumbers(start, end):
if end == start:
return start
return end + sumNaturalNumbers(start, end-1)
答案 4 :(得分:1)
def sumNaturalNumbers(start, end):
return (start + end) * (end - start + 1) // 2
>>> sumNaturalNumbers(1, 10)
55
>>> sumNaturalNumbers(1, 100)
5050
答案 5 :(得分:1)
评论内联
def foo(start, end):
'''return the sum of the range start --> end
'''
# sum([2,3,4]) == sum([2,2,2]) + sum([0,1,2])
# first part of the sum is the min value times the length
n = end - start
b = start * n
# the second part is the sum of the difference between the
# min value and all the other items
# this turns out to be equivalent to sum(range(1, n-1))
# applying the infamous formula to this range
m = n-1
c = m*(m+1)/2
# return the sum of the two parts
return b + c
>>>
>>> foo(1,10)
45
>>> foo(2,11)
54
>>> foo(2,10)
44
>>>
答案 6 :(得分:1)
def sumBetween(lower, upper):
return sum(range(lower, upper))
sumBetween(1,101)
为什么简单时会使事情复杂化?
答案 7 :(得分:-1)
x = (lambda x: ((x * x + x)/2))(100)
print(x)
# aka
print((lambda x: ((x * x + x)/2))(100))