一、基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序
作为长期从事运维工作的我来说,学习全栈开发是一个巨大的挑战。看到一些大神写的代码不仅写的代码长,功能又复杂。对于自己第一次独立编写程序没有经验。看到这样题目先不要着急写,功能先一步一步去实现。接下来实现第一次用户登录的功能:
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 ')
View Code
接下来实现三次用户登录:
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
View Code
二、升级需求:
可以支持多个用户登录 (提示,通过字典存多个账户信息)
用户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))
View Code