Как преобразовать математические примеры в строку так, чтобы при этом эта строка не была результатом этого примера в Python?
Есть словарь с математическими примерами и я хочу написать этот пример и потом, через знак =, результат этого примера.
Вот код:
from math import sqrt
dict = {
'a': (1/(5-2*sqrt(6))) + (1/(5+2*sqrt(6))),
'b': (2/(3*sqrt(2)+4)) - (2/(3*sqrt(2)-4)),
'c': (6/(3+2*sqrt(3))) + (1/(3-2*sqrt(3))),
'd': ((sqrt(11)+sqrt(6))/(sqrt(11)-sqrt(6))) + ((sqrt(11)-sqrt(6))/(sqrt(11)+sqrt(6))),
'e': ((5+8/9) / (1+17/36) + (1+1/4)) * (5/21) + sqrt(16),
}
for i in dict.values():
x = str(i)
print(f'{x} = {i}')
Но в консоли выводится:
9.999999999999957 = 9.999999999999957
-7.999999999999983 = -7.999999999999983
и так далее...
Как сделать так, чтобы писало:
(1/(5-2*sqrt(6))) + (1/(5+2*sqrt(6))) = 9.999999999999957
Ответы (1 шт):
Автор решения: Jack_oS
→ Ссылка
У вас значениями являются результаты выражений, а не сами выражения...
Как вариант, выводить так:
for k, v in dict.items():
print(f'{k} = {v}')
a = 9.999999999999957
b = -7.999999999999983
c = -1.2264973081037431
d = 6.799999999999999
e = 5.25
Или выражения сделать строкими:
dict = {
'a': '(1/(5-2*sqrt(6))) + (1/(5+2*sqrt(6)))',
'b': '(2/(3*sqrt(2)+4)) - (2/(3*sqrt(2)-4))',
'c': '(6/(3+2*sqrt(3))) + (1/(3-2*sqrt(3)))',
'd': '((sqrt(11)+sqrt(6))/(sqrt(11)-sqrt(6))) + ((sqrt(11)-sqrt(6))/(sqrt(11)+sqrt(6)))',
'e': '((5+8/9) / (1+17/36) + (1+1/4)) * (5/21) + sqrt(16)',
}
И выполнять расчет позже, выполняя с помощью eval() содержимое строк:
for k, v in dict.items():
print(f'{k}: {v} = {eval(v)}')
выведет:
a: (1/(5-2*sqrt(6))) + (1/(5+2*sqrt(6))) = 9.999999999999957
b: (2/(3*sqrt(2)+4)) - (2/(3*sqrt(2)-4)) = -7.999999999999983
c: (6/(3+2*sqrt(3))) + (1/(3-2*sqrt(3))) = -1.2264973081037431
d: ((sqrt(11)+sqrt(6))/(sqrt(11)-sqrt(6))) + ((sqrt(11)-sqrt(6))/(sqrt(11)+sqrt(6))) = 6.799999999999999
e: ((5+8/9) / (1+17/36) + (1+1/4)) * (5/21) + sqrt(16) = 5.25