Да я вроде читал, и учебник и википедию.
ага, немногг опоэксперементировав я всётаки понял как действеет эта часть кода
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
1 она устанавливает нормы повторяющихся выражений "\(?&\)?|\(?>\)?|\(?<\)?|\(?=\)?|\(?_\)?|\(\
2.ищет каждое выражение в string
4.если в стринг находит его то то заменяет на “X”
5.присваивает новой функции переменную result
6. если result не совпадает сo string делает тоже самое пока не совпадёт.
7. Я не понял как он вырвался из этого круговорота сравнения со стрингом. Но если была правильная функция то в конце концов она станет просто “Х” а неправильная что-то другое. Так вот вы их срвниваете и он нам говорит результат.
Но непоятно остаётся только то как она вырывается из дкруговорота сравнения . Я вот проделал эту функцию вручную и нифига не вырвался, вводил я прав функцию или е прав.
>>> 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'
так почему в def is_prop_formula она вырывается?