将循环设置为false后,为什么我的代码没有结束?

时间:2020-01-25 20:19:12

标签: python python-3.x

因此,在我成功登录该帐户后,该代码应停止运行,但是我不知道为什么没有发生这种情况,当我按“ q”时也应该发生这种情况。 同样,当我输入用户名然后输入密码后转到第二个选项(注册)时,它们不会立即写入.txt文件中,但是在我以某种方式结束代码后才被写入。 有什么方法可以立即写入用户名和密码,然后在同一循环中登录?

代码:

database = open("database.txt", "r+")
status = True


def display_menu():
    print("Login or Register?")
    print("INFO: Press 1 for Login or 2 for Register\nPress q to exit!")
    choice = input("Login/Register/Exit: ")

    if choice == "1":
        login()
    elif choice == "2":
        register()
    elif choice == "q":
        status = False


def login():
    username = input("Enter your name: ")
    password = input("Enter your password: ")

    if username and password in database:
        print("You have successfully login!")
        status = False
    else:
        if password not in database and username in database:
            print("Wrong password!")
        elif username not in database and password in database:
            print("Wrong username!")
        else:
            print("You don't have an account!")


def register():
    create_username = input("Username: ")
    database.write(str(create_username))

    create_password = input("Password: ")
    database.write(str(create_password))

    confirmation_password = input("Confirmation Password: ")

    if create_username in database:
        print("The name is already taken")

    elif confirmation_password != create_password:
        print("Your passwords doesn't match!")
        register()
    else:
        print("You have successfully created your account!\n")
        print("Now you can log in!\n")
        login()

while True:
    display_menu()

1 个答案:

答案 0 :(得分:0)

1)if username and password in database:-此代码查找用户名为布尔值(True或False),但如果不是,则只要存在用户名,该部分将返回True。 您需要:if username and password in database: 查看代码后,由于您存储数据的方式,这不太可能按预期工作,但至少会更正确。

2)您多次定义和编辑status,但切勿在循环中使用它。我假设您希望这成为您的while条件? 第二行,您需要while Status:,而不是while True

3)文件通常仅在您执行file.close()之后才被写入。因此,请确保每次尝试写入文件时都要这样做,然后重新打开它。

您的代码有很多问题,但是希望可以解决一些基本的逻辑错误。