Кажется, что вы ищете функцию eval
, как отмечено в ответе @ Rasgel. Документация здесь
Как отмечали некоторые люди, это представляет большую угрозу безопасности.
Чтобы обойти это, я могу придумать 2 способа:
1.Объедините eval
с регулярным выражением
Если вы хотите выполнять только основные арифметические операции, такие как сложение, вычитание и, возможно, 2**4
или что-то подобное, вы можете использовать регулярное выражение, чтобы сначала удалить все нечисловыенеарифметические операционные символы.
import re
a = str(input("Type in your wavelength: "))
if "mm" in a:
print("Unit = Millimeter")
# After parsing the units,
# Remove anything other than digits, +, -, *, /, . (floats), ! (factorial?) and ()
# If you require any other symbols, add them in
pruned_a = re.sub(r'[^0-9\*\+\-\/\!\.\(\)]', "", a)
result = eval(pruned_a)
2.Убедитесь, что eval на самом деле не оценивает ваши локальные или глобальные переменные в вашем коде Python.
result = eval(expression, {'__builtins__': None}, {})
(приведенный выше код взят из другого ответа Stackoverflow здесь: Math Expression Evaluation - там могут быть другие решения, которые могут вас заинтересовать)
Комбинированное
import re
a = str(input("Type in your wavelength: "))
if "mm" in a:
print("Unit = Millimeter")
# After parsing the units,
# Remove anything other than digits, +, -, *, /, . (floats), ! (factorial?) and ()
# If you require any other symbols, add them in
pruned_a = re.sub(r'[^0-9\*\+\-\/\!\.\(\)]', "", a)
result = eval(pruned_a, {'__builtins__': None}, {}) #to be extra safe :)