Найти - Пользователи
Полная версия: Программа определения ФАВ в строке
Начало » Python для новичков » Программа определения ФАВ в строке
1 2 3 4 5
Ed
Трудно с вами. Может вам книжку какую почитать?
В первом случае вы поменяли функцию, убрали оттуда один параметр ('X'), получили ошибку, что функция принимает 3 параметра, а вы передали 2 и вместо того, чтобы вернуть все назад пришли сюда задавать вопросы.
Во-втором вы вместо строки ‘X’ использовали несуществующую переменную A и получили сообщение, что имя ‘А’ неопределено. Верните ‘X’ назад и все будет работать. Зачем эти странные манипуляции?

Из ваших вопросов по прежнему следует что вы не понимаете что происходит.

Да, re.sub просто заменяет в строке то, что подходит под регулярное выражение тем, что дали. В нашем случае строка - sting, регулярное выражение - строка с непонятными скобками и буквами, а то, на что заменять - ‘X’.
knkd
Вот интересно, есть где неанглийская документация/(примеры с доступными пояснениями) по PLY/pyparsing.
То что например сдесь впринципе понятно, но как база для дальнейшего понимания не подходит.
Ed
Alex_Kutsan
Так на этот Х может заменяется каждый вариант выражения из этого "\(&\)|\(>\)|\(<\)|\(=\)|\(_\)|\(\)"?
Да. Перечитайте статью в википедии по регулярным выражениям. Там все это должно быть.

В программе 7 строк. Это не такой большой объем, чтобы его невозможно было понять. Рекомендую попользоваться print в нужных местах и попускать все это на разных входных данных.
Практика гораздо быстрее приведет вас к пониманию происходящего.
Возможно это вообще не то, что вы хотите :)
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
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 она вырывается?
Ed
Про вырывание из круговорота читаем здесь: http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB