Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 16, 2016 22:39:05

Inna90
Зарегистрирован: 2016-10-09
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Кто знает каk делать в Pyton функцию adder(i, j)

Кто знает ка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)

Офлайн

#2 Окт. 16, 2016 22:58:43

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2750
Репутация: +  184  -
Профиль   Отправить e-mail  

Кто знает каk делать в Pyton функцию adder(i, j)

 >>> 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



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Окт. 16, 2016 23:05:28

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Кто знает каk делать в Pyton функцию adder(i, j)

 def adder(m, n):
    if m > n:
        return 0
    else:
        return sum(range(m, n+1))

Офлайн

#4 Окт. 16, 2016 23:08:40

Inna90
Зарегистрирован: 2016-10-09
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Кто знает каk делать в Pyton функцию adder(i, j)

Cпасибо

Офлайн

#5 Окт. 17, 2016 14:40:29

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Кто знает каk делать в Pyton функцию adder(i, j)

  
>>> def adder(i, j):
...     return sum(range(i, j + 1))
... 
>>> adder(3, 6)
18
>>> adder(6, 3)
0
>>>



Офлайн

#6 Ноя. 6, 2016 16:44:55

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Кто знает каk делать в Pyton функцию adder(i, j)

неоптимально же складывать)

  def adder(m, n):
    if m > n:
        return 0
    else:
        return (m + n) * (n - m + 1) / 2



Офлайн

#7 Ноя. 7, 2016 11:33:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Кто знает каk делать в Pyton функцию adder(i, j)

Добавлю тут инфу
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
>>>



Отредактировано py.user.next (Ноя. 7, 2016 12:09:29)

Офлайн

#8 Дек. 2, 2016 21:58:55

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Кто знает каk делать в Pyton функцию adder(i, j)

Не могу не внести лепту:

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

с той лишь разницей, что чуть меньше килобайт, если умножить на тысячу копий



Офлайн

#9 Дек. 3, 2016 01:56:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Кто знает каk делать в Pyton функцию adder(i, j)

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 - это разные вещи.



Офлайн

#10 Дек. 10, 2016 18:29:57

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Кто знает каk делать в Pyton функцию adder(i, j)

py.user.next
False и 0 - это разные вещи
>>> False+1
1
>>> 1*False
0
>>> 10**False
1
>>> False**False
1

Не вижу разницы.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version