0

当用户尝试登录时,即使详细信息正确,我的 CSV 登录系统也会退出。它崩溃而没有警告或错误。

我在 Windows 10 上使用 Python 3.7.3。

我尝试将 for 循环设为 for-else 循环,过去我也尝试将 CSV 文件作为文本文件读取。

attempt = 0

def main():
    global attempt

    with open('details.csv', 'r') as csv_file:
        csv_reader = csv.DictReader(csv_file, delimiter=',')
        row_count = len(csv_file.readlines()) - 1

        print("Welcome to Dice Game! There are {0} currently registered users.".format(row_count))
        print("=====================================================================\n")

        username = input("Enter Username: ").lower()
        password = input("Enter Password: ")


        for row in csv_reader:
            if username == row["username"].lower() and password == row["password"]:
                print("\nLogged in as {0}.\n".format(username.capitalize()))
                game()

            else:
                attempt += 1
                print("\nInvalid login! (Attempt {0})\n".format(attempt))
                if attempt == 3:
                    print("\nLocked Out!")
                else:
                    main()

我希望它将用户带到下一部分(在这种情况下是一个名为游戏的函数),或者如果登录不正确,警告用户。

4

1 回答 1

0

看起来你的缩进搞砸了,这在 python 中很重要。如果在获取凭据和循环之间有两个空白行,则将退出 main()。

否则,我会这样做:

with open('details.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file, delimiter=',')

max_attempts = 3
for attempt in range(1:max_attempts + 1):
    username = input("Enter Username: ").lower()
    password = input("Enter Password: ")

    if any(row["username"].lower() and password == row["password"] for row in csv_reader):
        print("\nLogged in as {0}.\n".format(username.capitalize()))
        game()
    else:
        print("\nInvalid login! (Attempt {0})\n".format(attempt))
        if attempt == 3:
            print("\nLocked Out!")
于 2019-05-16T17:31:15.283 回答