创建一个从文本文件中调用信息的登录程序

时间:2017-10-14 17:44:26

标签: python

我最近对Python感兴趣并决定通过我在网上找到的一个简单的测验任务挑战自己。如果能让事情更清楚,可以在这里找到完整的任务:

" https://gyazo.com/35426cce2c0f177b37031ea6a87b2ce9"

到目前为止我做了什么:

  1. 询问姓名,年龄和密码

  2. 根据之前输入的姓名和年龄创建用户名(上面屏幕截图中的任务1)

  3. 将用户名和密码存储到外部文本文件中,该文件以逗号分隔。
  4. 到目前为止的样子:

    name = input("Please enter your name. ")
    age = input("Now please enter you age. ")
    
    username = name[0:3] + age
    print ("Your username has been created and is", username, ".")
    
    password = input("Now please create a password. ")
    
    file = open("Login.txt","a")
    file.write (username)
    file.write (",")
    file.write (password)
    file.write("\n")
    file.close()
    
    print ("Your login details have been saved. ")
    

    我需要帮助:

    基本上我很难创建一个登录程序。要求输入用户名和密码的东西,检查所述用户名和密码是否在文本文件中,如果没有,则提示用户通过输入他们的姓名,年龄和密码来创建帐户以继续。

    任何帮助将不胜感激。如果我不清楚任何地方随时可以随意询问我需要更具体的地方,因为我知道要100%明确这一点非常重要。

3 个答案:

答案 0 :(得分:0)

查看您的代码,您的Login.txt文件将如下所示:

some_user,some_pass
some_other_user,some_other_pass

为了验证提供的用户名和密码,我们必须逐行检查文件,然后检查这些行的不同部分以确定: a)如果用户名在文件中,b)如果提供的用户名密码匹配。

logged_in = False
with open('Login.txt', 'r') as file:
    for line in file:
        username, password = line.split(',')
        # Check the username against the one supplied
        if username == supplied_username:
            logged_in = password == supplied_password
            break

if logged_in:
    # Proceed to the quiz...
else:
    # Register user
  

如果不在文本文件中,则提示用户创建帐户。然后继续正常的测验

您应该区分完全不在文件中的用户名(未注册的测验用户)和在文件中找到的用户名,但提供的密码无效。对前者进行登记是有道理的;但不是后者。

答案 1 :(得分:0)

您需要在文件中搜索与数据匹配的记录。

如果用户名为neo123且密码为secure的用户有时会登录,我们会希望该行neo123,secure位于该文件中,对吧?

如果您在r模式下打开文件并调用readlines(),您将获得一个字符串列表,每个字符串都是该文件中的一行。您可以使用in运算符来检查该行是否在列表中,这意味着它在文件中。

with open("Login.txt", "r") as loginfile:
    (username + "," + password + "\n") in loginfile.readlines()

答案 2 :(得分:0)

编程的一个基本部分是学会将事情分解成碎片,然后将问题分解成更小的部分,直到你有可以解决的问题为止。最终你会变得足够好,并且经验丰富,你会立即看到这些碎片。

您已经有上面显示的第一级故障。您只需将每个步骤分解为可以完成的任务。所以你的高级代码是这样的:

def main():
    username, password = get_name_and_password()
    registered_users = read_pwdfile('pwd_filename')
    if usr_pass_registered(username, password, registered_users):
        registered = True
    else:
        registered = get_registration(username, password, 'pwd_filename')
    if registered:
        run_quiz(username)

现在您有四个可以独立解决的子问题。它们也可以独立测试,以便您可以放心地将它们重新组合在一起。

get_name_and_password()您表示您已编写代码。将其移动到子程序中,最后返回输入的两个值的元组。

read_pwd(filename)需要打开具有给定名称的文件,将其内容读入数据结构,关闭文件,然后返回数据结构。用于数据的结构是学习编程的另一部分。在这里,我建议您创建一个空列表,并从文件中读取每行,将(user, pwd)元组添加到列表中。您需要处理文件不存在的情况,因此您需要学习编写try: ... except FileNotFoundError:代码块的代码。

usr_pass_registered(username, password, registered_users)会迭代 注册用户列表,如果找到,将返回True。这将为您提供编写for循环的经验,该循环将迭代registered_users数据结构。当您找到用户时,您还必须在循环中编写break代码(因为没有必要继续浏览文件的其余部分)。

get_registration(username, password, 'pwd_filename')会询问创建帐户所需的任何进一步信息,打开用户和密码文件并附加信息。查看内置函数open()上的文档,了解如何打开文件,以便最后编写。如果他们注册成功则返回True或如果他们选择不注册则返回False。您可以问一个问题,比如“你想注册吗?”或者你可以假设他们不想注册,如果他们回复你的所有其他问题。

对于初学Python程序员来说,这似乎是一个很好的挑战。您将学习使用各种代码和数据结构,学习如何调试程序,并学习使用Python的文档。