Форум сайта python.su
0
Имеется код, который находит в строке операторы и возвращает их в виде словаря в виде {Ключ:Оператор}.
После передачи строки, я ищу “#”, означающие комментарий в строке, и если он есть, то строка игнорируется. Если же нет - то идем дальше анализировать. Ищем find'ом одинарные и двойные кавычки, т.к. в результаты поиска не включаем операторы, которые включены в строку (типа puts (“Key=15”)). Если же оператор найденными нами, не входит в строку, то записываем в словарь, и делаем срез от этого выбранного шаблона, до конца строка.
Но возникла проблема, которая меня поразила. На строке:
if (index!=-1 and indexSharp!=-1) or (index!=-1 and index<indexSharp):
class RubyOperations: def __init__(self,code,cnt): self._code = code self._cnt = cnt @property def findOperators(self): """ Возвращает операторы в виде словаря, указанного в строке self._code """ dictionary={} # шаблон поиска pattern=["=","+","-","*","/","%","**","==","+=","-=","*=", "/=","**=","%=","===","!=",">=",">","<=","<","<=>", ".eql?","equal?","not","and","or","||","&&","!", ">>","<<","^","~"] indexSharp=self._code.find("#") for i in pattern: block=self._code[:] cntOp=block.count(i) while(cntOp!=0): index =block.find(i) index_r1=block.find("\'") index_r2=block.find("\"") if (index!=-1 and indexSharp!==-1) or (index!=-1 and index<indexSharp): if index<index_r1 or index<index_r2: break else: block=size._code[index+len(i):] dictionary[self._cnt]=i self._cnt+=1 cntOp-=1 return dictionary if __name__ == '__main__': obj=RubyOperations("rb_clicked = Proc.new",0) print(obj.findOperators)
Отредактировано Relrin (Сен. 23, 2012 23:57:45)
Офлайн
20
Может проще будет вывести на экран все переменные, участвующие в if, и посмотреть самому?
Офлайн
0
в приведенном листинге 2 синтаксических ошибки, во-первых.
во-вторых,вполне логично, что он его проскакивает.
единственный паттерн в тестовом примере знак равно “=”.
смотрим условие и выводим все переменные, которые в нем участвуют.
index = 11
indexSharp = -1
первая часть условия (11 != -1 and -1 != -1) - ложь.
вторая часть условия (11 != -1 and 11 < -1) - ложь.
условие не выполняется.
возможно, в оригинале должно было быть так?
if (index!=-1 and indexSharp==-1) or (index!=-1 and index<indexSharp):
Отредактировано hedint (Сен. 24, 2012 07:52:31)
Офлайн