ошибка в скрипте для авторизации
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 элементов для множества - это совсем не много.