Добавьте знаки умножения (*) между коэффициентами
У меня есть программа, в которой пользователь вводит функцию, такую какsin(x)+1
, я используюast
попытаться определить, является ли строка «безопасной», путем внесения в белый список компонентов, как показано вэтот ответ, Теперь я хотел бы проанализировать строку, чтобы добавить умножение (*
) знаки между коэффициентами без них.
Например:
3x
->3*x
4(x+5)
->4*(x+5)
sin(3x)(4)
->sin(3x)*(4)
(sin
уже в глобальных, в противном случае это было быs*i*n*(3x)*(4)
Есть ли эффективные алгоритмы для достижения этой цели? Я бы предпочел pythonic решение (то есть не сложные регулярные выражения, не потому что они pythonic, но только потому, что я не понимаю их также и хочу решение, которое я могу понять. Простые регулярные выражения в порядке.)
Я очень открыт для использованияsympy
(что выглядит действительно легко для такого рода вещей) при одном условии: безопасность. По-видимомуsympy
использованияeval
под капотом. У меня довольно хорошая безопасность с моим текущим (частичным) решением. Если у кого есть способ сделатьsympy
безопаснее при ненадежном вводе, я бы тоже это приветствовал.