Найдено несколько типов контроллеров, соответствующих URL. Это может произойти, если атрибуты маршрутов на нескольких контроллерах соответствуют запрошенному URL

Функция никогда не возвращается True. Я думаю, что он должен возвращать True, когда char == m, поэтому вы можете удалить его из if-clause (который возвращает False) и поместить его в другой if:

if char == m:
   return True
elif aStr == '' or len(aStr) == 1:
    return False
else:
    ...

Кроме того, вы вызываете метод isIn, который не определен. Я думаю, что вы хотели рекурсивно называть isitIn.

После сравнения char < m и char > m вы должны «делить пополам» строку, поэтому не делайте return isitIn(char, aStr[:-1]) и return isIn(char, aStr[1:]), вместо этого пропустите (в рекурсивном вызове) «половина» строки.

if char < m:
    return isitIn(char, aStr[:len(aStr) // 2])
elif char > m:
    return isitIn(char, aStr[len(aStr) // 2:])

Редактирование: на всякий случай, код, который я пробовал:

def isitIn(char, aStr):
    if aStr == '':  # Check for empty string
        return False
    m = aStr[len(aStr) // 2]
    if char == m:
       return True
    elif len(aStr) == 1:
        return False
    else:
       if char < m:
           return isitIn(char, aStr[:len(aStr) // 2])
       elif char > m:
           return isitIn(char, aStr[len(aStr) // 2:])
    return isitIn(char, aStr)
15
задан danludwig 31 January 2014 в 17:43
поделиться