Использование двоичного поиска и рекурсии для поиска в текстовом файле

#python #file #sorting #search

#python #файл #сортировка #Поиск

Вопрос:

Я хочу использовать рекурсию и двоичный поиск для поиска в текстовом файле имени пользователя и пароля. Каждая учетная запись (имя пользователя и пароль) сохраняются в одной строке с пробелом, разделяющим их.

Это то, что у меня есть в настоящее время (работает), просто хочу использовать больше методов:

 def validation(username1, password1):
    file = open("Accounts.txt", "r")
    for line in file:
        line = line.split("n")
        line = line[0].split(" ")

        if username1 == line[0] and password1 == line[1]:
            main_menu()     #main_menu() will allow the user to enter the game
        else:
            valid = Label(root, text="Account not found try again or sign up")
            valid.place(x=215, y=130)
            login()        #will recall the login window and ask them to renter details 
    file.close()
 

У меня есть следующий код, который я хочу использовать:

 def validation(username1, password1):
    file = open("Accounts.txt", "r")
 

userame1 и passwrod1 — это данные, которые ввел пользователь. Теперь я хочу проверить, что учетная запись уже создана с использованием двоичного поиска и рекурсии.

Идеи Эми о том, как это сделать? Я все еще учусь программировать.

Комментарии:

1. Ваше требование все еще не ясно, вы упомянули двоичную, рекурсивную и пузырьковую сортировку?

2. @AbhinavMathur извините за это, я изменил вопрос x

3. Прочитать все строки, отсортировать этот список, а затем использовать двоичный поиск? В чем здесь проблема

4. @AbhinavMathur не могли бы вы, пожалуйста, привести мне пример

5. @Katie010203 Ни двоичный поиск, ни рекурсия не кажутся особенно актуальными для этой задачи. Если вы хотите использовать альтернативный подход, я бы предложил создать dict с именами пользователей в качестве ключей и паролями в качестве значений. Затем, если имя пользователя не было в результирующем dict , ваша программа предложит создать новую учетную запись; но если бы это было так, программа проверила бы пароль и, если он был неправильным, предложила бы пользователю (используя цикл while) ввести правильный.

Ответ №1:

Самый простой способ — прочитать все строки и отсортировать их, чтобы можно было применить двоичный поиск.

 def validation(username1, password1):
    file = open("Accounts.txt", "r")
    lines = [i.strip().split() for i in file.readlines()]
    # lines is a list of [username, password] sublists
    lines.sort()
    if binary_search(lines, [username1, password1]):
        login()
    else:
        print(“User Not Found”)
 

Комментарии:

1. является ли «binary_search» какой-то функцией? x

2. @Katie010203 Смотрите модуль bisect в стандартной библиотеке python.

Ответ №2:

вы можете попытаться узнать, есть ли определенное слово в текстовом файле:

 def validation(username1, password1):
    file = open("Accounts.txt", "r")
    content = file.read()

    if str(username1) and str(password1) in content:
        return True

    else:
        return False
 

А затем вызовите main_menu() или login() в зависимости от результата проверки()

Комментарии:

1. использует ли это рекурсию и двоичный поиск? x

2. Я не собираюсь лгать, я понятия не имею. Но я бы сказал, что да

3. @персефона нет, это не так. Пожалуйста, сначала ознакомьтесь с терминологией