У меня есть код:
import re
import math
#from sympy import * # breaks?
#x, y, z = symbols('x y z')
#init_printing(use_unicode=True)
def evaluate_expression(expr, variables):
# Evaluate the expression using eval(), and provide the variables dictionary
return eval(expr, variables)
def main():
tools = """
<<<[eval("5"),a_x]>>>
<<<[eval("5+a_x"),ans]>>>
"""
variables = {}
lines = tools.strip().split("\n")
for line in lines:
# Extract the inner array using regular expression
match = re.search(r'<<<\[(.*?),(\w+)\]>>>', line)
if match:
# Extract expression and variable name
expr = match.group(1)
var_name = match.group(2)
# Evaluate expression
value = evaluate_expression(expr, variables)
# Update variables dictionary
variables[var_name] = value
# Check if 'ans' is defined
if 'ans' in variables:
print("ans = ", variables['ans'])
break
if __name__ == "__main__":
main()
Если я не импортирую Sympy, он работает нормально, но если я импортирую Sympy, он ломается, исследование больше не существует, независимо от того, как я называю переменные. Я не понимаю?






sympy имеет reclass, когда вы импортируете все *, вы скрываете импорт re. Сначала импортируйте sympy (или импортируйте из него только то, что вам действительно нужно)
from sympy import *
import re
# Output: ans = 10
@VatsaPandey, вероятно, тоже что-то скрывает. Импортируйте только то, что вам нужно.
вы также можете (например, если вам нужен симпи re) использовать стиль, например from sympy import re as re_sympy или просто import sympy, и добавить к нему префикс
Отсюда и математический импорт ломается, даже если ниже импорта *?