Python 如何使用文本文件创建登录

Python 如何使用文本文件创建登录,python,logging,login,append,Python,Logging,Login,Append,所以我一直在尝试创建一个测验,你必须有一个帐户,这意味着你可以注册和登录。我成功地对注册部分进行了编码(我非常自豪),它将登录详细信息保存到一个单独的文本文件中,当它保存登录详细信息时,看起来是这样的:username:password 现在,我正在努力与登录部分,我想你必须阅读文本文件,然后分割用户名和密码,然后我有一些如何比较输入的用户名和密码保存的。 到目前为止,这是我为登录部分所做的,但它不起作用: def login(): filename = 'Accounts.txt' openf

所以我一直在尝试创建一个测验,你必须有一个帐户,这意味着你可以注册和登录。我成功地对注册部分进行了编码(我非常自豪),它将登录详细信息保存到一个单独的文本文件中,当它保存登录详细信息时,看起来是这样的:username:password

现在,我正在努力与登录部分,我想你必须阅读文本文件,然后分割用户名和密码,然后我有一些如何比较输入的用户名和密码保存的。 到目前为止,这是我为登录部分所做的,但它不起作用:

def login():
filename = 'Accounts.txt'
openfile = open('Accounts.txt', "r")
Userdata = openfile.readlines()
with open('Accounts.txt', 'r') as file:
    for line in file:
        user2, passw = line.split(':')
        login2 = input("Enter username: ")
        passw2 = input("Enter passwordd: ")
        if login2 == user2 and passw2 == passw:
            print("Logged in")
        else:
            print("User or password is incorrect!")
openfile.close();
下面是整个代码的样子(如果需要):


如果您对我如何创建登录部分有任何想法,那将很有帮助。

您正在询问帐户文件中每一行的用户用户名和密码。在for循环之外获取输入的登录信息。

不确定您的代码中有什么不起作用,但我更新了代码,如下所示,并且能够打印登录

def login():
#filename = 'Accounts.txt'
#openfile = open('Accounts.txt', "r")
#Userdata = openfile.readlines()
with open('Accounts.txt', 'r') as file:
    login2 = input("Enter username: ")
    passw2 = input("Enter passwordd: ")
    for line in file:
        user2, passw = line.split(':')
        if login2 == user2 and passw2 == passw:
            print("Logged in")
            break
        else:
            continue

login()
欢迎来到编程! 这可能会让人望而生畏,但要继续学习和练习。你走对了

我在代码中看到了一些可以改进的地方。我的评论如下:

1) 您不需要同时使用
open()
(和
close()
)和
来访问文件内容。在这种情况下,只需将
一起使用即可。这将使您的代码更简单。()

2) 您正在循环中请求用户登录&passwd(也就是多次)。这对你的用户来说是非常烦人的。将
输入
的调用移动到
for
循环之前

3) 登录成功时,您还需要
中断
循环

因此,您的代码有一个稍微改进的版本:

filename = 'Accounts.txt'
with open(filename, 'r') as file:
    login2 = input("Enter username: ")
    passw2 = input("Enter password: ")

    for line in file:
        user2, passw = line.split(':')
        if login2 == user2 and passw2 == passw:
            print("Logged in")
            break
        else:
            print("User or password is incorrect!")

它不起作用不是对问题的一个很好的描述。代码的流程是从后到前的。您不想在
for file:
循环中的行中询问用户的用户名和密码。在循环之前这样做一次。除此之外,可能会有很多问题,例如空格。您可以对保存在文件中的项目以及用户输入调用
strip()
,但这也会删除密码中的故意空白。什么是失败的示例输入?OP还需要在成功时打破循环。循环结束后才打印成功/失败消息。如果我有100000个唯一用户,平均会提示用户多少次他们的登录详细信息?在这里,当找到正确的匹配时,应该使用一个中断,并继续使用,直到所有行都处理完毕。仍然会平均提示用户50000次。对此问题的任何合理答案都需要将
input()
行从
for
循环中提升出来。同意,提示应该在循环外。
filename = 'Accounts.txt'
with open(filename, 'r') as file:
    login2 = input("Enter username: ")
    passw2 = input("Enter password: ")

    for line in file:
        user2, passw = line.split(':')
        if login2 == user2 and passw2 == passw:
            print("Logged in")
            break
        else:
            print("User or password is incorrect!")