python01作业思路:用户登录程序
一、基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序
作为长期从事运维工作的我来说,学习全栈开发是一个巨大的挑战。看到一些大神写的代码不仅写的代码长,功能又复杂。对于自己第一次独立编写程序没有经验。看到这样题目先不要着急写,功能先一步一步去实现。接下来实现第一次用户登录的功能:
1 # 定义用户名和密码 2 user = "gao" 3 pwd = "123" 4 # 用户输入 5 username = input("Username:") 6 password = input("Password:") 7 # 判断用户输入是否正确 8 if username == user and password == pwd: 9 print('welcome to %s' % username) 10 else: 11 print('Wrong username or password ')
接下来实现三次用户登录:
1 # 用户定义 2 user = "gao" 3 pwd = "123" 4 count = 0 5 6 # 判断 7 while count < 3: 8 username = input("Username:") 9 password = input("Password:") 10 if user == username and pwd == password: 11 print('Welcome to %s' % user) 12 break 13 else: 14 print('Wrong username or password') 15 count += 1
二、升级需求:
可以支持多个用户登录 (提示,通过字典存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
分析:锁定用户,可以使用文件来实现,把用户的信息存放到文件里面。下次登录的时候从文件里读取信息,如果登录的用户在文件信息中就不让他登录,这样就能实现了锁定用户禁止登录了。
flag = False #标志位,如果连续3次都输入的用户一致,就为True,否则改为False
last_input = alex # 最近输入账户
if flase == False :输入不一致,不锁定
1. 设置flag = True, last_input = None;
2. 每次loop, 拿本次输入的用户名跟last_input对比,如果相等,什么也不干。否则,改为flag = False
3. 3次loop完毕,判断flag == True,代表3次都一样要锁定。
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2018/10/24 19:35 4 # @Author : 郜江涛 5 # @File : 用户登录.py 6 # @Function : ---------------- 7 8 9 # f = open("account.txt", 'w') 10 # account = { 11 # 'gao': ['123', 0], 12 # 'liu': ['123', 0] # 1 lock, 0 active. 13 # } 14 # f.write(str(account)) 15 # f.close() 16 # 用户数据一般是提前建立好的,如果没有提前创建好。需要执行上一步。 17 f = open("account.txt", 'r') 18 account = eval(f.read()) 19 f.close() 20 count = 0 # 计数器 21 last_input = None 22 flag = True 23 global user 24 while count < 3: 25 user = input("Username:").strip() # 去掉用户字符串两边的空格 26 password = input("Password:").strip() 27 if last_input is None: # 第一次输入 28 last_input = user 29 if last_input != user: # 上一次与此次输入的用户不相等 30 flag = False 31 if user in account: 32 if account[user][1] == 1: # 用户状态是否锁定 33 exit("用户已锁定,请联系管理员") 34 elif password == account[user][0]: # 用户没有锁定 35 print('Welcome to %s' % user) 36 break 37 else: 38 print('Wrong username or password') 39 else: 40 print('用户不存在') 41 count += 1 42 else: 43 print('输入的次数太多了') 44 if flag is True: 45 account[user][1] = 1 # 3次一致,锁定 46 f = open("account.txt", 'w') 47 f.write(str(account))