我最近对Python感兴趣并决定通过我在网上找到的一个简单的测验任务挑战自己。如果能让事情更清楚,可以在这里找到完整的任务:
" https://gyazo.com/35426cce2c0f177b37031ea6a87b2ce9"
到目前为止我做了什么:
询问姓名,年龄和密码
根据之前输入的姓名和年龄创建用户名(上面屏幕截图中的任务1)
到目前为止的样子:
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%明确这一点非常重要。
答案 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的文档。