Снова задачка из курса питона для чайников.
Введите натуральное число: 6 (это инпут)
При N = 6 элементы выражения будут равны:
(далее цикл for с подстановкой n в формулу)
n = 0
elem = (-1)**0 * 1/(2**0) = 1.0
n = 1
elem = (-1)**1 * 1/(2**1) = -0.5
n = 2
elem = (-1)**2 * 1/(2**2) = 0.25
n = 3
elem = (-1)**3 * 1/(2**3) = -0.125
n = 4
elem = (-1)**4 * 1/(2**4) = 0.0625
n = 5
elem = (-1)**5 * 1/(2**5) = -0.03125
Сумма равна: 0.65625
Нужно, чтобы в конце было не "Сумма равна: 0.65625", а "Сумма равна: 1 - 0,5 + 0,25 - 0,125 + 0,0625 - 0,03125 = 0,65625", то есть чтобы был выведен сам процесс сложения всех значений elem
Python
Сложение чисел из цикла с отображением не только суммы, но и процесса
Вот простой код Python, который реализует требуемую функцию:
N = int(input("Введите натуральное число: "))
print("При N = {} элементы выражения будут равны:".format(N))
sum = 0
elements = []
for n in range(N+1):
elem = (-1)**n * 1/(2**n)
elements.append('{:.5f}'.format(elem))
print("n = {}".format(n))
print("elem = (-1)**{} * 1/(2**{}) = {}".format(n,n,elem))
sum += elem
elements_joined = ' + '.join(elements).replace('+ -', '- ')
print("Сумма равна: {} = {}".format(elements_joined, '{:.5f}'.format(sum)))
В этом коде мы используем конструкцию '+' в join(), чтобы объединить все элементы списка в одну строку, разделяя их оператором '+'. Затем мы заменяем '+ -' на '-', чтобы отображение было корректным для отрицательных значений.По-школьному будет так:
А по-взрослому - вот так:
Хотя, шустрее будет собрать вывод в список и в конце сконкатенировать через пробел:
А если слагаемых ряда немного, то последний принт заменить на это:
n = int(input())
s = m = g = 1
print(m, end = ' ')
for _ in range(1, n):
m /= 2
g = -g
print(('-', '+')[g >= 0], m, end = ' ')
s += g * m
print('=', s)
А по-взрослому - вот так:
from functools import reduce
from itertools import accumulate, repeat
def acc(t, x):
s, vs = t
return s + x, vs + ' ' + ('-', '+')[x >= 0] + ' ' + str(abs(x))
s, vs = reduce(acc, accumulate(repeat(-.5, n - 2), float.__mul__, initial=-.5), (1, '1'))
print(vs, '=', s)
Хотя, шустрее будет собрать вывод в список и в конце сконкатенировать через пробел:
from functools import reduce
from itertools import accumulate, repeat
def acc(t, x):
s, vs = t
return s + x, vs + [('-', '+')[x >= 0], abs(x)]
s, vs = reduce(acc, accumulate(repeat(-.5, n - 2), float.__mul__, initial=-.5), (1, [1]))
print(' '.join(map(str, vs)), '=', s)
А если слагаемых ряда немного, то последний принт заменить на это:
print(*vs, '=', s)
про f строки почитай
Похожие вопросы
- Помогите разобраться и объяснить принцип действия цикла поиска простых чисел в Pyrhon
- Выразите число в виде суммы четырех квадратов Нужно написать программу на python
- Задача по Python: Найти сумму чисел и при вводе чисел...
- Как возвести число в степень в python через цикл while? В чем моя ошибка в коде? Объясните, пожалуйста подробнее
- Дано двузначное число. Определить: кратна ли сумма его цифр числу а. Написать блок-схему.
- На входе строка s = '3' + n * '5'. В конце сумма её цифр должна быть равна 27. Как преобразовать эту строку в число?
- Почему цикл не останавливается ?
- 4 задачи по темам:Массивы,Строки,Циклы,условный оператор
- С клавиатуры вводится число n. Вычислить сумму S=1/1+1/2+1/3+...+1/n.
- Необходимо вычислить сумму двух дробей a/v;d/c. Используйте рекурсию, чтобы найти общий знаменатель двух чисел.