Форум сайта python.su
Трудно с вами. Может вам книжку какую почитать?
В первом случае вы поменяли функцию, убрали оттуда один параметр ('X'), получили ошибку, что функция принимает 3 параметра, а вы передали 2 и вместо того, чтобы вернуть все назад пришли сюда задавать вопросы.
Во-втором вы вместо строки ‘X’ использовали несуществующую переменную A и получили сообщение, что имя ‘А’ неопределено. Верните ‘X’ назад и все будет работать. Зачем эти странные манипуляции?
Из ваших вопросов по прежнему следует что вы не понимаете что происходит.
Да, re.sub просто заменяет в строке то, что подходит под регулярное выражение тем, что дали. В нашем случае строка - sting, регулярное выражение - строка с непонятными скобками и буквами, а то, на что заменять - ‘X’.
Офлайн
Вот интересно, есть где неанглийская документация/(примеры с доступными пояснениями) по PLY/pyparsing.
То что например сдесь впринципе понятно, но как база для дальнейшего понимания не подходит.
Офлайн
Alex_KutsanДа. Перечитайте статью в википедии по регулярным выражениям. Там все это должно быть.
Так на этот Х может заменяется каждый вариант выражения из этого "\(&\)|\(>\)|\(<\)|\(=\)|\(_\)|\(\)"?
Офлайн
Да я вроде читал, и учебник и википедию.
ага, немногг опоэксперементировав я всётаки понял как действеет эта часть кода
def reduce(string):
result = re.sub("\(?&[A-Z]\)?|\(?[A-Z]>[A-Z]\)?|\(?[A-Z]<[A-Z]\)?|\(?[A-Z]=[A-Z]\)?|\(?[A-Z]_[A-Z]\)?|\([A-Z]\)", "X", string)
if result != string:
return reduce(result)
return result
>>> def is_prop_formula(string):
def reducE(string):
result = re.sub("\(&[A-Z]\)|\([A-Z]>[A-Z]\)|\([A-Z]<[A-Z]\)|\([A-Z]=[A-Z]\)|\([A-Z]_[A-Z]\)|\([A-Z]\)", "X", string)
if result != string:
return reducE(result)
return result
return reducE(string) == "X"
>>> is_prop_formula("(((A=B)>((&C)<D))=(C=(T>Z)))")
True
>>> string = "(((A=B)>((&C)<D))=(C=(T>Z)))"
>>> result = re.sub("\(&[A-Z]\)|\([A-Z]>[A-Z]\)|\([A-Z]<[A-Z]\)|\([A-Z]=[A-Z]\)|\([A-Z]_[A-Z]\)|\([A-Z]\)", "X", string)
>>> result==string
False
>>> result = re.sub("\(&[A-Z]\)|\([A-Z]>[A-Z]\)|\([A-Z]<[A-Z]\)|\([A-Z]=[A-Z]\)|\([A-Z]_[A-Z]\)|\([A-Z]\)", "X", result)
>>> result == string
False
>>> result = re.sub("\(&[A-Z]\)|\([A-Z]>[A-Z]\)|\([A-Z]<[A-Z]\)|\([A-Z]=[A-Z]\)|\([A-Z]_[A-Z]\)|\([A-Z]\)", "X", result)
>>> result == string
False
>>> result = re.sub("\(&[A-Z]\)|\([A-Z]>[A-Z]\)|\([A-Z]<[A-Z]\)|\([A-Z]=[A-Z]\)|\([A-Z]_[A-Z]\)|\([A-Z]\)", "X", result)
>>> result == string
False # функция уже равна "Х" но из круговорота она не вырвется т.к. она не равна стрингу. А равна стрингу только та функция которая
# ни буде содержать вобще ни одного из правильных выражений
>>> result
'X'
Офлайн
Про вырывание из круговорота читаем здесь: http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F
Офлайн