Последовательность чисел от 1 до n представляет собой арифметическую прогрессию с шагом 1
- Первый элемент прогрессии равен 1
- Последний элемент прогрессии равен n
- Количество элементов равно n.
Сумма арифметической прогрессии от 1 до n включительно равна произведению количества элементов на полусумму первого и последнего элементов.
Сумма n членов арифметической прогрессии определяется по формуле:
Sₙ=n×(A₁+Aₙ)/2
A₁=1
Aₙ=n
Sₙ=n×(1+n)/2
На языке Python функция для суммы чисел от 1 до n имеет следующий код:
def fun(n):return int(n*(n+1)/2)
Пример программы для проверки работоспособности функции fun:
Результат выполнения программы для проверки работоспособности функции fun:
I’m trying to make a function that is given the first number in an arithmetic progression, the derivation d and the number of terms in the series which is n and then calculate their sum using recursion
I tried the following
def rec_sum(a_1, d, n):
if n == 0:
return 0
return (n*(a_1+rec_sum(a_1,d,n-1)))/2
print rec_sum(2,2,4)
which gives me 18 instead of 20
thanks for the help
khelwood
55.3k13 gold badges79 silver badges107 bronze badges
asked Dec 1, 2017 at 11:01
2
There is a simpler way to find the sum of arithmetic progression, but if you need the recursion —
def rec_sum(first_element, step, seq_length):
if seq_length <= 0:
return 0
return first_element + rec_sum(first_element + step, step, seq_length - 1)
Mahesh Karia
2,0451 gold badge12 silver badges21 bronze badges
answered Dec 1, 2017 at 11:13
Another solution:
def rec_sum(a_1, d, n):
if n == 0:
return 0
return a_1 + rec_sum(a_1 + d, d, n-1)
print rec_sum(2, 2, 4)
output:
20
answered Dec 1, 2017 at 11:22
Mahesh KariaMahesh Karia
2,0451 gold badge12 silver badges21 bronze badges
Вот задачка, я не понимаю как можно вычислить сумму членов прогрессии не знаю конечный номер числа в этой прогрессии
задан 19 апр 2022 в 16:17
3
Заготовка решения:
- Перебирайте в цикле значения k, начиная с 1 и прибавляя к нему каждую итерацию по 1
- Вычисляйте ak по данной вам формуле
- Когда ak станет меньше или равно заданного вам числа e цикл нужно прекратить
- Суммируйте вместе получающиеся элементы ak пока цикл не прекратится
- Когда цикл закончится, напечатайте получившуюся сумму
Код вы должны написать самостоятельно, поскольку это учебное задание. Я вам разъяснил, что именно тут нужно делать.
ответ дан 19 апр 2022 в 17:19
CrazyElfCrazyElf
65.4k5 золотых знаков19 серебряных знаков50 бронзовых знаков
Цикл for
в языке Питон позволяет перебирать… почти всё, что угодно: объекты из списка, числа из арифметической прогрессии, элементы
списков, буквы слов и т.п.
В цикле for
указывается переменная и множество значений, по которому будет пробегать переменная.
Множество значений может быть задано списком, кортежем, строкой или диапазоном.
Вот простейший пример использования цикла, где в качестве множества значений используется кортеж:
i = 1 for color in 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet': print(i,'-th color of rainbow is ', color, sep='') i += 1
В этом примере переменная color
последовательно принимает значения 'red'
, 'orange'
и т.д.
В теле цикла выводится сообщение, которое содержит название цвета, то есть значение переменной color
, а также номер итерации цикла число, которое сначала равно 1,
а потом увеличивается на один (инструкцией i += 1
с каждым проходом цикла).
В списке значений могут быть выражения различных типов, например:
for obj in 1, 2, 3, 'one', 'two', 'three': print(obj)
При первых трёх итерациях цикла переменная i
будет принимать значение типа int
,
при последующих трёх — типа str
.
Функция enumerate
Вернёмся к первому примеру.
В случаях, когда вместе с элементами нужны также и их индексы, идеоматический подход в питоне выглядит так:
for i, color in enumerate(('red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet')): print(i+1, '-th color of rainbow is ', color, sep='')
Функция enumerate
возвращает пары из порядкового номера элемента начиная с нуля и собственно самого элемента.
В данном примере ещё лучше воспользоваться параметром start
, тогда нумерация начнётся не с нуля, а с указанного в параметре start
значения:
for i, color in enumerate(('red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet'), start=1): print(i, '-th color of rainbow is ', color, sep='')
Функция range
(перебор членов арифметической прогрессии)
Как правило, циклы for
используются либо для повторения какой-либо последовательности действий
заданное число раз, либо для изменения значения переменной в цикле от некоторого начального значения до некоторого
конечного.
Для повторения цикла некоторое заданное число раз n
можно использовать цикл for
вместе с функцией range
:
for i in range(n): Тело цикла
Например:
s = 0 for i in range(3): print(i, i * i) s += i * i print(s)
В качестве n
в range(n)
может использоваться числовая константа, переменная или произвольное арифметическое
выражение (например, 2 ** 10
).
Если значение n
равно нулю или отрицательное, то тело цикла не выполнится ни разу.
Код выше эквивалентен такому:
s = 0 # Начали i = 0 print(i, i * i) s += i # Ещё раз i = 1 print(i, i * i) s += i # Ещё раз i = 2 print(i, i * i) s += i # Закончили print(s)
Если задать цикл таким образом:
for i in range(a, b): Тело цикла
то индексная переменная i
будет принимать значения от a
до b - 1
,
то есть первый параметр функции range
, вызываемой с двумя параметрами, задаёт начальное значение индексной
переменной, а второй параметр — значение, которая индексная переменная принимать не будет. Если же
a ⩾ b
, то цикл не будет выполнен ни разу. Например, для того, чтобы просуммировать значения
чисел от 1 до n
можно воспользоваться следующей программой:
sum = 0 for i in range(1, n + 1): sum += i
В этом примере переменная i
принимает значения 1, 2, ..., n
, и значение переменной
sum
последовательно увеличивается на указанные значения.
Наконец, чтобы организовать цикл, в котором индексная переменная будет уменьшаться, необходимо использовать функцию range
с тремя параметрами.
Первый параметр задаёт начальное значение индексной переменной, второй параметр — значение, до которого будет
изменяться индексная переменная (не включая его!), а третий параметр — величину изменения индексной переменной.
Например, сделать цикл по всем нечётным числам от 1 до 99 можно при помощи функции range(1, 100, 2)
, а сделать цикл по всем числам от 100 до 1 можно при помощи range(100, 0, -1)
.
Более формально, цикл for i in range(a, b, d)
при d > 0
задаёт значения
индексной переменной i = a
, i = a + d
, i = a + 2 * d
и так
для всех значений, для которых i < b
. Если же d < 0
, то переменная
цикла принимает все значения i > b
.
Упражнения
A: Ряд — 1
Даны два целых числа A и B (при этом A≤B). Выведите все числа от A до B включительно.
B: Ряд — 2
Даны два целых числа A и В. Выведите все числа от A до B включительно, в порядке возрастания,
если A < B
, или в порядке убывания в противном случае.
C: Ряд — 3
Напечатайте в порядке убывания 100 наименьших квадратов целых положительных чисел.
Программа ничего не получает на вход, только выводит нужные числа.
D: Ряд — 4
Дано натуральное число $n$. Напечатайте все $n$-значные нечетные натуральные
числа в порядке убывания.
E: Сумма кубов
По данному натуральном $n$ вычислите сумму
(1^3+2^3+3^3+…+n^3).
★★
Это число можно вычислить и без суммирования.
Напишите в комментариях чему она равна и почему.
F: Сумма произведений соседних чисел
По данному натуральному $n$ вычислите сумму
$1times2+2times3+…+(n-1)times n$.
G: Факториал
По данному целому неотрицательному $n$ вычислите значение $n!$.
★★★
Напишите программу, которая вычисляет 1,000,000! за одну минуту.
Не пытайтесь вывести это число (в нём около 5565709 десятичных цифр, и попытка вывода может занять больше 20 минут).
Чтобы проверить правильность ответа посмотрите на длину в двоичной записи.
Если ответ хранится в переменной x
, то x.bit_length() = 18488885
.
PS. Функцию factorial
из модуля math
разумеется нельзя использовать.
★★★★★
Напишите программу, которая вычисляет 1,000,000! за одну… секунду!.
Ну ладно, можно за пять :).
H: Сумма чисел от 1 до n
По данному натуральному $nge1$ вычислите сумму
$1+2+…+n$. Ответ выведите в виде
вычисленного выражение и его значения в точности, как показано в примере.
В этой задаче нельзя использовать if
.
I: Сумма произведений соседних чисел — 2
По данному натуральному $nge2$ вычислите сумму
$1times2+2times3+…+(n-1)times n$. Ответ выведите в виде
вычисленного выражение и его значения в точности, как показано в примере.
В этой задаче нельзя использовать if
.
J: Четные числа
По данным двум натуральным числам A и B (A≤B) выведите все чётные числа на отрезке от A до B.
В этой задаче нельзя использовать инструкцию if
.
K: Флаги
Напишите программу, которая по данному числу $n$ от 1 до 9 выводит на экран n флагов. Изображение одного флага
имеет размер 4×4 символов, между двумя соседними флагами также имеется пустой (из пробелов) столбец. Разрешается
вывести пустой столбец после последнего флага и вообще допускается вывод
пробелов в конце строк. Внутри каждого флага должен быть записан его номер — число от 1 до $n$.
Символ обратного слэша “” в текстовых строках
имеет специальное значение. Чтобы включить в состав текстовой
строки такой символ, его нужно повторить дважды. Например,
для вывода на экран одного такого символа можно использовать
такой код: print("\")
.
3
+___ +___ +___
|1 / |2 / |3 /
|__ |__ |__
| | |
L: Звездочки
Дано 10 целых чисел. Считайте каждое из этих чисел и выведите столько символов “*”
чему равно это число. Выводите число сразу же после считывания числа.
1
2
3
4
5
6
7
8
9
10
*
**
***
****
*****
******
*******
********
*********
**********
M: Сумма N чисел
Дано несколько чисел. Вычислите их сумму. Сначала вводите количество чисел N, затем вводится ровно N целых чисел.
Какое наименьшее число переменных нужно для решения этой задачи?
★
Какое наименьшее число переменных нужно для решения этой задачи (если не использовать никаких хаков)?
Напишите в комментариях сколько и почему.
N: Делители
По данному натуральному числу (nle 1000) выведите все натуральные
делители числа (n) в порядке возрастания.
Числа нужно выводить в одной строке через пробел (вспомните про параметры
функции print).
O: Количество нулей
Дано N чисел: сначала вводится число N, затем вводится ровно N целых чисел. Подсчитайте количество
нулей среди введенных чисел и выведите это количество.
P: Цифры числа
Дано 10-значное число. Выведите все цифры этого числа в обратном порядке
по одной, без разделителей.
Q: Замечательные числа — 1
Найдите и выведите все двузначные числа, которые равны удвоенному произведению своих цифр.
Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел.
R: Замечательные числа — 2
Квадрат трехзначного числа оканчивается тремя цифрами, равными этому числу. Найдите и выведите все такие числа.
Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел.
S: Замечательные числа — 3
Дано натуральное число n. Выведите в порядке возрастания
все трехзначные числа, сумма цифр которых равна $n$.
3
102
111
120
201
210
300
T: Лесенка
По данному натуральному $nle 9$ выведите лесенку из $n$ ступенек, $i$-я
ступенька состоит из чисел от 1 до $i$ без пробелов.
U: Замечательные числа — 4
Даны два четырёхзначных числа A и B. Выведите все четырёхзначные числа на отрезке от A до B, запись которых
является палиндромом.
1600
2100
1661
1771
1881
1991
2002
V: Замечательные числа — 5
Даны два четырёхзначных числа A и B.
Выведите в порядке возрастания все четырёхзначные числа на отрезке от A до B,
запись которых содержит ровно три одинаковые цифры.
1900
2100
1911
1999
2000
2022
W: Сумма факториалов
По данному натуральном (n) вычислите сумму (1!+2!+3!+…+n!).
В решении этой задачи можно использовать
только один цикл.
X: Домино
Рассмотрим (N)-домино. В таком домино каждая костяшка состоит из двух половинок, на каждой из которых нарисовано от 0 до (N) точек.
Полный комплект костяшек такого домино содержит все возможные костяшки, каждую по одному разу.
Например, для (N=2) в комплект войдут следующие костяшки: (0,0), (0,1), (0,2), (1,1), (1,2) и (2,2).
По заданному (N) ((1le N le 30)) определите, сколько всего точек изображено на всех костяшках полного комплекта (N)-домино.
Тесты к этой задаче закрытые.
Y: Треугольная последовательность
Дана монотонная последовательность,
в которой каждое натуральное число $k$ встречается ровно
$k$ раз: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, …
По данному натуральному $n$ выведите первые $n$ членов этой последовательности.
Решите задачу при помощи одного цикла for
.
Операция умножения строки на число также не допускается.
Z: Остатки
Даны целые неотрицательные числа a, b, c, d, при этом
0≤c<d. Выведите в порядке возрастания все числа от a до b,
которые дают остаток c при делении на d.
В этой задаче нельзя использовать инструкцию if, операторы сравнения
(<
и т.д.), должен быть только один цикл.
ZA★: Транспортные расходы
Необходимо заказать транспорт для перевозки (N) человек.
Заказывать можно автобусы и такси. В каждый автобус можно посадить не более 50 человек, в каждое такси — не более 4 человек.
Стоимость заказа автобуса составляет (A) рублей, такси — (B) рублей (разумеется, (A gt B)).
Определите, какое количество автобусов и такси нужно заказать, чтобы потратить как можно меньшую сумму денег.
Программа получает на вход три целых числа: (N), (A), (B) ((1 le N le 10^5), (1 le B lt A le 1000)).
Выведите два числа — количество автобусов и количество такси для заказа в оптимальном случае. Если возможных ответов несколько, выведите любой.
Тесты к этой задаче закрытые.
ZB★: Кривая дракона
Кривая дракона — один из наиболее известных фракталов. Она строится так:
на первом шаге проводится отрезок из начала координатной плоскости в точку (0; 1).
Далее на каждом шаге из конца фрактала повторяется уже нарисованная часть фигуры, повернутая на 90 градусов против часовой стрелки
По данному числу (Nge 1) определите конец кривой дракона после выполнения (N) шагов.
Тесты к этой задаче закрытые.
ZC★: Магический квадрат
Магический квадрат — это таблица 3×3,
в каждой из ячеек которой находятся числа от 0 до 9, числа могут повторяться,
но сумма чисел в каждой строке и каждом столбце равна одному числу (N).
Определите по данному (N) сколько существует различных магических квадратов
с суммой чисел в каждой строки и каждом столбце, равной (N).
Программа получает на вход одно целое неотрицательное число (N) и должна вывести искомое число вариантов.
ZD★★: Скорая помощь
Бригада скорой помощи выехала по вызову в один из отделенных районов. К сожалению,
когда диспетчер получил вызов, он успел записать только адрес дома и номер квартиры (K_1),
а затем связь прервалась. Однако он вспомнил, что по этому же адресу дома некоторое время назад
скорая помощь выезжала в квартиру (K_2), которая расположена в подъезде (P_2) на этаже (N_2).
Известно, что в доме (M) этажей и количество квартир на каждой лестничной площадке одинаково.
Напишите программу, которая вычилсяет номер подъезда (P_1) и номер этажа (N_1) квартиры (K_1).
Программа получает на вход пять положительных целых чисел (K_1), (M), (K_2), (P_2), (N_2).
Все числа не превосходят 1000.
Выведите два числа (P_1) и (N_1). Если входные данные не позволяют однозначно определить (P_1) или (N_1),
вместо соответствующего числа напечатайте 0. Если входные данные противоречивы, напечатайте два числа –1 (минус один).
Тесты к этой задаче закрытые.
ZE★: Страусиная ферма
На страусиной ферме есть (Ntimes M) птиц. Каждому страусу соорудили по загону, установив перегородки так, чтобы они образовывали прямоугольник из
(N) строк и (M) столбцов. Тем самым образуется ровно (Ntimes M) квадратных загонов (1times 1).
В один прекрасный осенний день страус Чак, находившийся в нижнем левом загоне,
почувствовал острую необходимость отправиться по важным и неотложным страусиным делам.
Он начал пробивать себе путь на волю, ломая перегородки. Сначала он сломал правую перегородку
и переместился загоном правее. Потом он сломал верхнюю перегородку и переместился вверх.
Далее он прокладывал себе путь по такому же принципу: ломая попеременно то правую, то верхнюю перегородку, пока, наконец, не оказался на свободе.
Хозяин, увидев разгром, учиненный Чаком, сильно расстроился. Но делать нечего —надо приводить все в порядок.
Он отправил письмо на ближайшую лесопилку, указав, сколько у него осталось перегородок,
но забыв при этом указать, сколько ему требуется.
Помогите работникам лесопилки: зная, сколько у хозяина осталось перегородок, определите, каких размеров могла быть ферма.
Программа получает на вход одно число (X), (1le Xle 10^9) — количество оставшихся перегородок.
Программа должна вывести все возможные варианты размеров фермы, в виде чисел (N) и (M), по одному варианту в строке. Порядок вывода вариантов не важен.
В данной статье мы расскажем, как на Python вычисляется сумма и среднее значение первых n
натуральных чисел. Кроме того, мы разберем, как найти сумму чисел, введённых пользователем, и их среднее значение. Также мы рассмотрим встроенную функцию sum()
и вычисление среднего значения списка чисел.
Содержание
- Сумма и среднее значение первых n натуральных чисел
- Встроенная функция
sum()
- Встроенная функция
- Сумма и среднее значение списка чисел
- Вычисление суммы и среднего значения при помощи математической формулы
- Сумма и среднее значение чисел, введенных пользователем
- Использование цикла while для вычисления суммы и среднего значения
- Практическая задача: сложение двух матриц в Python
Алгоритм решения данной задачи:
- Принимаем значение числа
n
от пользователя. Для этого используется функцияinput()
. - Затем запустим цикл
for
до введенного числа, используя для этого функциюrange()
. На каждой итерации мы будем получать следующее число, пока цикл не достигнет последнего числа, то есть n. - Вычислим сумму всех этих чисел. Для этого на каждой итерации цикла будем добавлять число к переменной
sum
. - И наконец, после завершения цикла вычислим среднее значение по формуле:
average = sum / n
, гдеn
– это число, введенное пользователем.
Код программы:
n = int(input("Enter number")) sum = 0 # Цикл от 1 до n for num in range(1, n + 1, 1): sum = sum + num print("Sum of first ", n, "numbers is: ", sum) average = sum / n print("Average of ", n, "numbers is: ", average)
Результат:
Enter number 10 Sum of first 10 numbers is: 55 Average of 10 numbers is: 5.5
Встроенная функция sum()
Для вычисления суммы элементов итерируемых объектов, таких как список или функция range()
, можно также воспользоваться встроенной функцией sum()
.
n = 10 res = sum(range(1, n + 1)) print("Sum of first ", n, "numbers is: ", res) # Результат: # Sum of first 10 numbers is: 55
Сумма и среднее значение списка чисел
Для вычисления суммы всех чисел списка и их среднего значения нужно сделать следующее:
- Проитерировать список при помощи цикла
for
и прибавить каждое число к переменнойsum
. - Для вычисления среднего значения разделить полученную сумму на число элементов списка (его длину, вычисляемую при помощи встроенной функции
len()
).
# Список со значениями int и float num_list = [10, 20.5, 30, 45.5, 50] # Первый подход, с использованием встроенной функции sum res = sum(num_list) avg = res / len(num_list) print("sum is: ", res, "Average is: ", avg) # Результат: # sum is: 156.0 Average is: 31.2 # Второй подход, с использованием цикла for res1 = 0 for num in num_list: res1 += num avg1 = res1 / len(num_list) print("sum is: ", res1, "Average is: ", avg1) # Результат: # sum is: 156.0 Average is: 31.2
Вычисление суммы и среднего значения при помощи математической формулы
В приведенных выше программах мы вычисляли сумму и среднее при помощи циклов. Теперь давайте посмотрим, как рассчитать сумму и среднее значение напрямую, используя математическую формулу суммы арифметической прогрессии.
Пусть n
это последнее число нашей последовательности первых n
натуральных чисел. Тогда:
- сумма n натуральных чисел будет равна
n * (n+1) / 2
- а их среднее значение –
(n * (n+1) / 2) / n
Пример:
n = 20 # Формула для вычисления суммы res = n * (n + 1) / 2 print('sum of first', n, 'numbers is:', res) # Результат: # sum of first 20 numbers is: 210.0 # Формула для вычисления среднего average = (n * (n + 1) / 2) / n print('Average of first', n, 'numbers is:', average) # Результат: # Average of 20 numbers is: 10.5
Сумма и средние значение нескольких чисел, введённых пользователем
А вот как можно рассчитать сумму и среднее значение нескольких введённых пользователем чисел:
input_string = input('Enter numbers separated by space ') print("n") # Преобразуем введённые числа в список numbers = input_string.split() # Приводим числа к типу int for i in range(len(numbers)): numbers[i] = int(numbers[i]) # Вычисляем сумму и среднее значение print("Sum = ", sum(numbers)) print("Average = ", sum(numbers) / len(numbers))
Результат:
Enter numbers separated by space 10 20 30 40 50 Sum = 150 Average = 30.0
Использование цикла while
для вычисления суммы и среднего значения
Для вычисления суммы первых n
чисел и их среднего значения также можно использовать цикл while
.
Вот возможный алгоритм:
- Определяем число
n
- Запускаем цикл
while
до тех пор, покаn
будет больше 0 - В каждой итерации добавляем текущее значение
n
к переменнойsum
и уменьшаемn
на 1 - Вычисляем среднее значение, разделив сумму на
n
n = 20 total_numbers = n sum = 0 while n >= 0: sum += n n -= 1 print("sum =", sum) # Результат # sum = 210 average = sum / total_numbers print("Average = ", average) # Результат: # Average = 10.5
Практическая задача: сложение двух матриц в Python
matrixOne = [[6,9,11], [2 ,3,8]] matrixTwo = [[15,18,11], [26,16,19]] # Инициализируем нулями матрицу, в которую будет сохранен результат result = [[0,0,0], [0,0,0]]
Решение данной задачи:
matrixOne = [[6,9,11], [2 ,3,8]] matrixTwo = [[15,18,11], [26,16,19]] result = [[0,0,0], [0,0,0]] # Сначала перебираем строки for i in range(len(matrixOne)): # Затем перебираем столбцы for j in range(len(matrixOne[0])): result[i][j] = matrixOne[i][j] + matrixTwo[i][j] print("Addition of two Matrix In Python") for res in result: print(*res)
Результат:
Addition of two Matrix In Python 21 27 22 28 19 27
Перевод статьи “Python program to calculate sum and average of first n natural numbers”.