Невозможно сравнить входную переменную с данными в .txt / Невозможно прочитать файл для сравнения данных - PullRequest
1 голос
/ 11 июля 2020

В настоящее время я работаю над программой, в которой вы можете войти и зарегистрироваться, а имя пользователя и пароль хранятся в отдельном файле .txt. Регистрация проходит нормально, имя пользователя и пароль записываются без проблем, но у меня возникают проблемы с чтением из файла в userRegister и userLogin

.txt файле форматируется именем пользователя, паролем , и мне было интересно, как я могу go читать из файла с намерением сравнить loginUsername и loginPassword с username_password и сравнение registerUsername с существующими именами пользователей, чтобы убедиться в отсутствии дубликатов.

username_password = open("savedCredentials.txt", "r+")

option = ()
def startMenu():
    option = input("Do you want to [login] or [register] an account?:")
    if option == 'login':
        return userLogin()
    elif option == 'register':
        return userRegister()
    else:
        print("Invalid input, enter either [login] or [register]")
        return startMenu()

def userRegister():
    registerUsername = input("Enter a username: ")
    if registerUsername in username_password:
        print("This username is already in use")
        userRegister()
    else:
        registerPassword = input ("Enter a password: ")
        if len(registerPassword) < 5:
            print("Your password needs to contain 5 or more characters")
            registerPassword()
        elif " " in registerPassword:
            print("Your password cannot contain spaces")
        else:
            register = open("savedCredentials.txt", "a")
            register.write(registerUsername)
            register.write(",")
            register.write(registerPassword)
            register.write("\n")
            print("Your username and password have been successfully registered")

def userLogin():
    loginUsername = input("Enter your username: ")
    if loginUsername in username_password:
        loginPassword = input("Enter your password: ")
        if loginPassword in username_password:
            successfulLogin()
    else:
        print("This username isn't registered to an account, please try again")
        return userLogin()

def successfulLogin():
    print("You have been logged in")

username_password.close()

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Вы должны добавить функцию read при открытии файла.

замените строку username_password = open("savedCredentials.txt", "r+")

на

username_password = open("savedCredentials.txt", "r+").read()

тогда вам нужно удалить строку username_password.close()

, вам нужно вызвать функцию startMenu, поэтому добавьте startMenu() внизу вашего кода.

0 голосов
/ 11 июля 2020

Несколько вещей:

  1. Вы не вызываете никаких функций в приведенном выше коде, поэтому ничто не будет работать в существующем виде.

  2. Вы не можете перебирать текстовую оболочку, вы можете обойти это, просто прочитав свой файл с помощью .read ()

  3. Если вы закроете () файл вне своих функций, вы получить сообщение об ошибке, что файл закрыт, вместо этого закройте файл в своей функции (всякий раз, когда пользователь завершит работу).

  4. Появляется, когда вы go через условный поиск if .read () больше не работает во втором раунде. Не совсем знаю, почему (может быть, кто-то здесь может go более подробно), но обходной путь - вместо этого преобразовать ваш файл в список и вместо этого выполнить поиск по нему.

Приведенное ниже работает, но это немного некрасиво (я должен go знать, но хотел опубликовать это очень быстро, чтобы у вас был хотя бы рабочий пример, и вы можете его использовать).

username_password2=[]
with open("savedCredentials.txt", "r+") as file:
    for lines in file:
        a=lines.replace(',',' ')
        b=a.split()
        username_password2.append(b)

username_password = [x for y in username_password2 for x in y]

option = ()
def startMenu():
    option = input("Do you want to [login] or [register] an account?:")
    if option == 'login':
        return userLogin()
    elif option == 'register':
        return userRegister()
    else:
        print("Invalid input, enter either [login] or [register]")
        return startMenu()

def userRegister():
    registerUsername = input("Enter a username: ")
    if registerUsername in username_password:
        print("This username is already in use")
        userRegister()
    else:
        while True:
            registerPassword = input ("Enter a password: ")
            if len(registerPassword) < 5:
                print("Your password needs to contain 5 or more characters")
            elif " " in registerPassword:
                print("Your password cannot contain spaces")
            else:
                register = open("savedCredentials.txt", "a")
                register.write(registerUsername)
                register.write(",")
                register.write(registerPassword)
                register.write("\n")
                print("Your username and password have been successfully registered")
                register.close()
                break

def userLogin():
    loginUsername = input("Enter your username: ")
    if loginUsername in username_password:
        loginPassword = input("Enter your password: ")
        if loginPassword in username_password:
            successfulLogin()
        else:
            print(username_password)
    else:
        print("This username isn't registered to an account, please try again")
        return userLogin()

def successfulLogin():
    print("You have been logged in")

startMenu()
...