Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Python] Не проверяет условие? / 3 сообщений из 3, страница 1 из 1
24.09.2012, 00:42:02
    #37969186
Relrin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Python] Не проверяет условие?
Имеется код, который находит в строке операторы и возвращает их в виде словаря в виде {Ключ:Оператор}.
После передачи строки, я ищу "#", означающие комментарий в строке, и если он есть, то строка игнорируется. Если же нет - то идем дальше анализировать. Ищем find'ом одинарные и двойные кавычки, т.к. в результаты поиска не включаем операторы, которые включены в строку (типа puts ("Key=15")). Если же оператор найденными нами, не входит в строку, то записываем в словарь, и делаем срез от этого выбранного шаблона, до конца строка.
Но возникла проблема, которая меня поразила. На строке:
Код: python
1.
if (index!=-1 and indexSharp!=-1) or (index!=-1 and index<indexSharp):


интерпретатор, проскакивает сразу к концу цикла и берет следующий шаблон. Я не могу понять - почему? Быть может кто подскажет почему if игноррируется и как эту проблему можно решить?

Код:
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
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)
...
Рейтинг: 0 / 0
24.09.2012, 02:21:55
    #37969222
Relrin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Python] Не проверяет условие?
Код: python
1.
if (index!=-1 and indexSharp!=-1) or (index!=-1 and index<indexSharp):


исправил на:
Код: python
1.
if (index!=-1 and indexSharp==-1) or (index!=-1 and index<indexSharp):


И стало работать... :)

Вопрос: быть может есть регулярное выражение (если можно, покажите пример), которое бы позволило, скажем найти все присваивания(т.е. выловить только знак "=")?
...
Рейтинг: 0 / 0
24.09.2012, 06:37:14
    #37969258
FishHook
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Python] Не проверяет условие?
Посмотри в сторону вот этих штук

PLY (Python Lex-Yacc)
ANTLR for Ruby
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Python] Не проверяет условие? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]