ошибка в скрипте для авторизации

from bisect import bisect_left

log = str(input("YOU LOGIN___"))

def findPosition(num_list, number):
  pos = bisect_left(num_list, number)
  if pos < len(num_list):
      return pos
      return False

log_list = sorted([
   50987, 548934, 94375984, 1549, 473856, 750987, 30000, 00000000, 228000,
   ])
num = log
print(findPosition(log_list, num))

Я хотел реализовать автризацию на python с помощью алгоритма бинарного поиска хоть тут и мало паролей в готовом варианте должно быть 3000 данных заранее спасибо за помощь)


Ответы (1 шт):

Автор решения: CrazyElf

У вас тут полно ошибок разного рода:

  • Логин вы вводите как строку, а пытаетесь потом эту строку сравнивать с числами (когда используете двоичный поиск), естественно, выходит ошибка.
  • В строке return False явно сделана лишняя табуляция, так этот return бесполезен, до него просто "не дойдёт ход".
  • bisect_left ищет, на какую позицию в имеющемся списке можно было бы вставить искомый элемент, чтобы сохранить упорядоченность списка. То ли это, что вы пытаетесь сделать? Если вы хотите проверить, есть ли в списке такой логин, то вам нужно прямо взять и проверить, что стоит на той позиции, которую выдал bisect_left, там может быть число, которое больше введённого, а не само оно.
  • Вообще, если вы пытаетесь просто определить, есть ли введённый логин среди уже имеющихся, то используйте множество set и просто проверяйте, есть ли введённый логин в этом множестве с помощью оператора in, который для множества работает со сложностью O(1), т.е. моментально, искать ничего не нужно. 3000 элементов для множества - это совсем не много.
→ Ссылка