Найти - Пользователи
Полная версия: Кто знает каk делать в Pyton функцию adder(i, j)
Начало » Python для экспертов » Кто знает каk делать в Pyton функцию adder(i, j)
1 2
Inna90
Кто знает каk делать в Pyton
Написать функцию adder(i, j), которая принимает два аргумента - и и j-класса integer, и вычисляет сумму последовательных чисел от i до j при условии, если i<=j. В противном случае функция возвращает ноль.
Проверка правильности:
adder(6, 4) → 0 (потому что 6 > 4)
adder(3, 3) → 3 (потому что у нас только 3)
adder(3, 4) → 7 (потому что 3+4=7)
adder(3, 6) → 18 (потому что 3+4+5+6 = 18)
adder(1, 5) → 15 (потому что 1+2+3+4+5 = 15)
Rodegast
 >>> i, j = 6, 4
>>> sum(xrange(i, j+1, 1))
0
>>> i, j = 3, 3
>>> sum(xrange(i, j+1, 1))
3
>>> i, j = 3, 4
>>> sum(xrange(i, j+1, 1))
7
>>> i, j = 3, 6
>>> sum(xrange(i, j+1, 1))
18
>>> i, j = 1, 5
>>> sum(xrange(i, j+1, 1))
15
Romissevd
 def adder(m, n):
    if m > n:
        return 0
    else:
        return sum(range(m, n+1))
Inna90
Cпасибо
py.user.next
  
>>> def adder(i, j):
...     return sum(range(i, j + 1))
... 
>>> adder(3, 6)
18
>>> adder(6, 3)
0
>>>
izekia
неоптимально же складывать)
  def adder(m, n):
    if m > n:
        return 0
    else:
        return (m + n) * (n - m + 1) / 2
py.user.next
Добавлю тут инфу
wiki. натуральный ряд
Можно найти сумму ряда до m, потом найти сумму ряда до n, а потом из суммы ряда до n вычесть сумму ряда до m и получится сумма натуральных чисел от m до n. И чтобы учесть m, нужно сумму не до m вычислять, а до m - 1.
(Можно вычислить и до m, но после вычитания сумм m прибавить обратно.)

Записываем суммы и вычитаем меньшую из большей
  
>>> def adder(m, n):
...     sum_m = m * (m + 1) // 2
...     sum_n = n * (n + 1) // 2
...     return sum_n - sum_m + m
... 
>>> adder(1, 3)
6
>>> adder(1, 100)
5050
>>> adder(100, 1)
-4949
>>>

То же самое, только упрощаем и добавляем ноль, если m > n
  
>>> def adder(m, n):
...     return (n * n - m * m + n + m) // 2 if m <= n else 0
... 
>>> adder(1, 3)
6
>>> adder(1, 100)
5050
>>> adder(100, 1)
0
>>>
Isem
Не могу не внести лепту:
py.user.next
>>> def adder(m, n):
return (n * n - m * m + n + m) // 2 if m <= n else 0
то же самое, что и
def adder(m, n):
return m <= n and (n + m) * (n - m + 1) // 2

с той лишь разницей, что чуть меньше килобайт, если умножить на тысячу копий
py.user.next
Isem
то же самое
  
>>> def adder(m, n):
...     return m <= n and (n + m) * (n - m + 1) // 2
... 
>>> adder(1, 3)
6
>>> adder(1, 100)
5050
>>> adder(100, 1)
False
>>>
Вот оно возвращает False, а должно возвращать 0. False и 0 - это разные вещи.
Isem
py.user.next
False и 0 - это разные вещи
>>> False+1
1
>>> 1*False
0
>>> 10**False
1
>>> False**False
1

Не вижу разницы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB