powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Python] Не проверяет условие?
3 сообщений из 3, страница 1 из 1
[Python] Не проверяет условие?
    #37969186
Relrin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется код, который находит в строке операторы и возвращает их в виде словаря в виде {Ключ:Оператор}.
После передачи строки, я ищу "#", означающие комментарий в строке, и если он есть, то строка игнорируется. Если же нет - то идем дальше анализировать. Ищем 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
[Python] Не проверяет условие?
    #37969222
Relrin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
[Python] Не проверяет условие?
    #37969258
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри в сторону вот этих штук

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


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