Как искать в файле и проверять, есть ли - PullRequest
0 голосов
/ 06 августа 2020

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

# Global Variables (few are inside function)
global data
global l_password
global wrong


# The Main Thing
def system():
    choose = input("Enter 'c' to create an account \n\t\tor \nEnter 'l' to log in \n\nEnter here: ")
    if choose == "c":
        create()
        print("Now please login with your created account")
        login()
    elif choose == "l":
        login()
    else:
        print("You have entered and invalid character. \nPlease enter only 'c' or 'l' ")


# Creating an account
def create():
    c_username = str(input("Username: "))
    c_password = str(input("Password: "))
    data = open("accounts_data", "a")
    data.write("\n\nUsername: ")
    data.write(c_username)
    data.write("\nPassword: ")
    data.write(c_password)
    print("Success! Account is created.")


# Logging in an account
def login():
    print("Login with your account ---->")
    l_username = str(input("Username: "))
    l_password = str(input("Password: "))

    if l_username or l_password in data.read():
        print("Congrats! You are successfully now logged into your account!")

    if l_username or l_password not in data.read():
        error = str(input(
            "Sorry we couldn't find your account. "
            "\nEnter the correct username or password."
            "\n\tor \nType 'r' to retry \nor \nCreate one by typing 'c'\n:"))

        if error == 'r':
            login()

        elif error == 'c':
            create()
            login()


system()
data.close()

Он говорит, что оба, вошли в учетную запись, а также извините, не смогли найти учетную запись

    if l_username or l_password in data.read():
        print("Congrats! You are successfully now logged into your account!")

    if l_username or l_password not in data.read():
        error = str(input(
            "Sorry we couldn't find your account. "
            "\nEnter the correct username or password."
            "\n\tor \nType 'r' to retry \nor \nCreate one by typing 'c'\n:"))

МОЙ ТЕКСТОВЫЙ ФАЙЛ (где хранятся все эти учетные записи, а переменная является данными для этого файла) Скажите, пожалуйста, если я объявил переменную для этого файла

в моем текстовом файле все это есть. Правильно?

Username: apple
Password: apples

Ответы [ 3 ]

1 голос
/ 06 августа 2020

Это происходит из-за 'или', которое вы использовали в первой части.

if l_username and l_password in data.read():
        print("Congrats! You are successfully now logged into your account!")

пожалуйста, замените 'or' на 'and', как я сделал выше, и скажите мне, если это работает. (оставьте or во второй части как есть, просто измените этот конкретный на 'and')

0 голосов
/ 06 августа 2020

Попробуйте использовать:

    line = data.read()
    if l_username in line and l_password in line:
            print("Congrats! You are successfully now logged into your account!")

Значение внутри l_username действительно; в этой ситуации всегда верно. Вы только сравниваете l_password со строкой чтения в data.read (). Вот почему вы получаете оба сообщения.

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

Еще одним важным моментом здесь является то, что вы не различаетесь в l_username и l_password по сравнению с data.read(). Если пользователь вставляет логин в пароль, он также будет верным.

0 голосов
/ 06 августа 2020

Здесь, очевидно, есть проблема:

 if l_username or l_password in data.read():
        print("Congrats! You are successfully now logged into your account!")

  if l_username or l_password not in data.read():
        error = str(input(
            "Sorry we couldn't find your account. "
            "\nEnter the correct username or password."
            "\n\tor \nType 'r' to retry \nor \nCreate one by typing 'c'\n:"))

Вход осуществляется по имени пользователя и паролю, поэтому в вашем коде оператор or вверху будет означать, если имя пользователя или пароль были правильными , вы войдете в систему. Оба вывода вызваны правильным паролем или именем пользователя, а второе - неправильным.

Окончательное решение? Просто замените or в первом операторе на and

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...