Sympy нарушает регулярное выражение в Python?

У меня есть код:

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, он ломается, исследование больше не существует, независимо от того, как я называю переменные. Я не понимаю?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

sympy имеет reclass, когда вы импортируете все *, вы скрываете импорт re. Сначала импортируйте sympy (или импортируйте из него только то, что вам действительно нужно)

from sympy import *
import re

# Output: ans = 10

Отсюда и математический импорт ломается, даже если ниже импорта *?

Vatsa Pandey 17.04.2024 04:34

@VatsaPandey, вероятно, тоже что-то скрывает. Импортируйте только то, что вам нужно.

Guy 17.04.2024 05:01

вы также можете (например, если вам нужен симпи re) использовать стиль, например from sympy import re as re_sympy или просто import sympy, и добавить к нему префикс

ti7 17.04.2024 21:23

Другие вопросы по теме