Перейти к содержанию
На чтение 1 мин Просмотров 12.7к. Опубликовано 21 ноября, 2021 Обновлено 21 ноября, 2021
Дано натуральное число N. Напишите программу для вычисления следующей суммы ряда (начиная с единицы):
Что оценивается
Задание считается успешно выполненным, если:
- результат вывода соответствует условию;
- input содержит корректное приглашение для ввода;
- переменные имеют значащие имена, не только a, b, c, d.
Допускается вывод без описания, достаточно вывести сумму ряда.
Советы и рекомендации
Обратите внимание: если мы воспользуемся формулой для расчёта члена ряда, то
при n = 0, член ряда равен 1;
при n = 1, мы получим -1/2;
при n = 2, мы получим 1/4;
при n = 3, мы получим -1/8.
Решение задачи:
number = int(input('Введите натуральное число: '))
s = 1
x = 1
for n in range(1, number + 1):
x = ((-1) ** n) / (2 ** n)
s = x + s
print('Член ряда ', x,'сумма ряда ', s)
( 37 оценок, среднее 4.3 из 5 )
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
You have been given a series 1/1! + 2/2! + 3/3! + 4/4! +…….+ n/n!, find out the sum of the series till nth term. Examples:
Input :n = 5 Output : 2.70833 Input :n = 7 Output : 2.71806
Python3
def
sumOfSeries(num):
res
=
0
fact
=
1
for
i
in
range
(
1
, num
+
1
):
fact
*
=
i
res
=
res
+
(i
/
fact)
return
res
n
=
5
print
("
Sum
: ", sumOfSeries(n))
Output:
Sum: 2.70833
Time Complexity: O(N)
Auxiliary Space: O(1)
Please refer complete article on Program to find the sum of a Series 1/1! + 2/2! + 3/3! + 4/4! +…….+ n/n! for more details!
Last Updated :
11 Aug, 2022
Like Article
Save Article
Попробуем на практике разобрать работу циклов, про которые рассказано в одном из наших уроков. Выполним предложенное задание, использовав несколько разных методик и видов циклов.
Задача
Программа выводит сумму первых членов натурального ряда чисел до введённого n-числа включительно.
Решение задачи с помощью цикла while
Произведём расчёт, используя цикл с предусловием while.
n=int(input(Введите последнее число из ряда натуральных чисел=))
i=1
s=0
while i<=n:
s=i+s
i=i+1
print (Сумма чисел от 1 до, n, =, s)
- Сперва задаем в переменную n самое большое натуральное число (в пределах разумного).
- Обнулим на входе сумму s.
- Цикл будет выполняться до тех пор, пока внутренняя переменная не достигнет значения n.
Результат выполнения программы
Решение задачи с помощью цикла for
Быстрее происходит расчёт при помощи цикла for.
n=int(input(Введите последнее число=))
s=0
for i in range(1,n+1):
s=i+s
print (Сумма чисел от 1 до, n, =, s)
Посмотрите, в цикле записано максимальное число не n, а n+1. Это связано с тем, что цикл должен выполняться на один шаг больше, чтобы последнее значение промежуточной суммы было учтено.
Результат выполнения программы
Решение задачи с помощью списка
Ту же самую задачку можно решить, используя список. По сути, это ничего не меняет, но, как видите, код при этом занимает всего две строки:
n=int(input(Введите последнее число=))
print (Сумма чисел от 1 до, n, =, sum([i for i in range(1,n+1)]))
Результат выполнения программы
Задача на последовательность Функция перевода целого двоичного числа в десятичное
Нужно найти сумму чисел в следующей последовательности: 2, 22, 222, 2222, …, 2(n), – где, n – количество разрядов в последнем числе
Для примера, n = 5 последнее число будет 22222, а сумма чисел в последовательности – 24690.
n = 5 # кол-во разрядов
last_num = 0 # итоговое число
i = 1 # счетчик разрядов
sum = 0 # 2 + 22 + 222 + 2222 + 22222 => 24690
while n > 0:
last_num += 2 * i
i *= 10
n -= 1
print(last_num)
while last_num != 0:
sum += last_num // 10
last_num //= 10
print(sum)
Понимаю, что код кривой, так как только начал учит Python.
Подскажите пожалуйста, как найти сумму чисел, поскольку условие sum += last_num // 10 “отсекает” первую двойку и по итогу сумма получается из чисел 2222 + 222 + 22 + 2 = 2468, вместо 22222 + 2222 + 222 + 22 + 2 = 24690.
strawdog
23.4k4 золотых знака19 серебряных знаков33 бронзовых знака
задан 22 июл 2022 в 13:30
2
Основная ошибка – излишняя сложность. У вас идея верная, но уберите две строки. Python призывает к лаконичности и ясности, начинайте решение с продумывания самого лаконичного и ясного варианта. Но ясность важнее лаконичности.
n = 5 # кол-во разрядов
last_num = 0 # итоговое число
i = 1 # счетчик разрядов
sum1 = 0 # 2 + 22 + 222 + 2222 + 22222 => 24690
while n > 0:
last_num += 2 * i
i *= 10
n -= 1
sum1 += last_num
print(sum1)
ответ дан 22 июл 2022 в 13:43
СергейСергей
4,9296 золотых знаков11 серебряных знаков29 бронзовых знаков
3
У вас появляется ошибка, потому что вы отсекаете последнюю цифру дважды (sum += last_num // 10
и last_num //= 10
). Нужно убрать одно из действий:
n = 5 # кол-во разрядов
last_num = 0 # итоговое число
i = 1 # счетчик разрядов
sum_ = 0 # 2 + 22 + 222 + 2222 + 22222 => 24690
while n > 0:
last_num += 2 * i
i *= 10
n -= 1
print(last_num)
while last_num != 0:
sum_ += last_num
last_num //= 10
print(sum_)
22222
24690
Кстати, код вполне нормальный. Только имя sum
в python зарезервировано под функцию, поэтому его не стоит использовать в качестве названия переменной.
В таких случаях можно добавлять ‘_’ к концу имени.
ответ дан 22 июл 2022 в 13:39
VestaltVestalt
7132 серебряных знака17 бронзовых знаков
6
Можно не отсекать, а накапливать:
term
– слагаемое: 0, 2, 22, 222, …, 2(n);sum_
– накопительная сумма: 2 + 22 + 222 + …;n
– счётчик итераций.
Проще некуда:
n = 5
sum_ = 0
term = 0
while n > 0:
term = 10 * term + 2
sum_ += term
n -= 1
print(sum_)
Если применить немного изобретательности, слагаемые можно считать напрямую. На одну переменную меньше, но понять что происходит сложнее:
n = 5
sum_ = 0
while n > 0:
sum_ += 2 * (10 ** n - 1) // 9
n -= 1
print(sum_)
И ещё немного изобретательности: есть замкнутая формула для ответа. Одна строка и долгие объяснения почему так:
n = 5
print(2 * ((10 ** (n + 1) - 1) // 9 - n - 1) // 9)
ответ дан 22 июл 2022 в 15:20
1
В одну строчку по приколу, но тут используется строковое представление цифры для удобства:
n = 5
k = '2'
print(sum(int(k*i) for i in range(1, n+1)))
# 24690
Просто “размножаем” цифру нужное число раз (для этого она должна быть строкой), превращаем в число, всё это в цикле и дальше суммируем.
ответ дан 22 июл 2022 в 15:55
CrazyElfCrazyElf
65.4k5 золотых знаков19 серебряных знаков50 бронзовых знаков
10
Еще вариант:
from functools import reduce
n = 5
d = 2
res = [0] * n
q = 0
for i in range(n, 0, -1):
q, res[i-1] = divmod(q + i * d, 10)
print(*res, sep='') # 24690
print(''.join(map(str,res))) # 24690
print(reduce(lambda x, y: 10*x+y, res)) # 24690
Или так:
from itertools import accumulate, repeat
n = 5
d = 2
print(sum(accumulate(repeat(d, n), lambda x, y: x * 10 + y))) # 24690
ответ дан 23 июл 2022 в 15:53
TigerTV.ruTigerTV.ru
3,1851 золотой знак10 серебряных знаков21 бронзовый знак
2
-
-
Actions
Automate any workflow
-
Packages
Host and manage packages
-
Security
Find and fix vulnerabilities
-
Codespaces
Instant dev environments
-
Copilot
Write better code with AI
-
Code review
Manage code changes
-
Issues
Plan and track work
-
Discussions
Collaborate outside of code
Explore
-
All features
-
Documentation
-
GitHub Skills
-
Blog
-
-
For
-
Enterprise
-
Teams
-
Startups
-
Education
By Solution
-
CI/CD & Automation
-
DevOps
-
DevSecOps
Case Studies
-
Customer Stories
-
Resources
-
-
-
GitHub Sponsors
Fund open source developers
-
The ReadME Project
GitHub community articles
Repositories
-
Topics
-
Trending
-
Collections
-
- Pricing