Форум сайта python.su
Кто знает ка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)
Офлайн
>>> 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
Офлайн
def adder(m, n): if m > n: return 0 else: return sum(range(m, n+1))
Офлайн
Cпасибо
Офлайн
>>> def adder(i, j): ... return sum(range(i, j + 1)) ... >>> adder(3, 6) 18 >>> adder(6, 3) 0 >>>
Офлайн
неоптимально же складывать)
def adder(m, n): if m > n: return 0 else: return (m + n) * (n - m + 1) / 2
Офлайн
Добавлю тут инфу
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 >>>
>>> 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)
Офлайн
Не могу не внести лепту:
py.user.nextто же самое, что и
>>> def adder(m, n):
return (n * n - m * m + n + m) // 2 if m <= n else 0
Офлайн
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 >>>
Офлайн
py.user.next>>> False+1
False и 0 - это разные вещи
Офлайн