Функция никогда не возвращается 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)
В целом, ваш код выглядит неплохо. Но я бы более внимательно рассмотрел ваше первое заявление. В частности, вы проверяете, соответствует ли символ среднему символу. Что бы вы хотели вернуть, если ваш персонаж был равен среднему символу?
Кроме того, вы должны убедиться, что все пути могут быть достигнуты вашим алгоритмом. При каких условиях True будет возвращена вашей функцией?
Я думаю, что этот код может работать правильно, просто я отсортировал строку перед проверкой символа 'm':
def isitIn(char, aStr):
b = ''
if aStr == '': # Check for empty string
return False
b = sorted(aStr)
m = b[len(b) // 2]
if char == m:
return True
elif len(b) == 1:
return False
elif char < m:
return isitIn(char, b[:len(b) // 2])
else:
return isitIn(char, b[len(b) // 2:])
return isitIn(char, aStr)
это тоже работает. немного короче:
def isIn(char, aStr):
if len(aStr)==0:
return False
elif len(aStr)==1:
return char == aStr
elif char == aStr[len(aStr)//2]:
return True
else:
if char < aStr[len(aStr)//2]:
return isIn(char, aStr[0:len(aStr)//2])
elif char > aStr[len(aStr)//2]:
return isIn(char, aStr[len(aStr)//2:])
return isIn(char, aStr)