Найти - Пользователи
Полная версия: Проблема с кодом - не проверяет условие в if
Начало » Python для новичков » Проблема с кодом - не проверяет условие в if
1
Relrin
Имеется код, который находит в строке операторы и возвращает их в виде словаря в виде {Ключ:Оператор}.
После передачи строки, я ищу “#”, означающие комментарий в строке, и если он есть, то строка игнорируется. Если же нет - то идем дальше анализировать. Ищем find'ом одинарные и двойные кавычки, т.к. в результаты поиска не включаем операторы, которые включены в строку (типа puts (“Key=15”)). Если же оператор найденными нами, не входит в строку, то записываем в словарь, и делаем срез от этого выбранного шаблона, до конца строка.
Но возникла проблема, которая меня поразила. На строке:
if (index!=-1 and indexSharp!=-1) or (index!=-1 and index<indexSharp):
интерпретатор, проскакивает сразу к концу цикла и берет следующий шаблон. Я не могу понять - почему? Быть может кто подскажет почему if игноррируется и как эту проблему можно решить?

Код:
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)
Soteric
Может проще будет вывести на экран все переменные, участвующие в if, и посмотреть самому?
hedint
в приведенном листинге 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):
!= заменено на == в первой части условия.
при таком изменении возвращает {0: ‘=’}
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