python实现简单登陆流程
登陆流程图:
代码实现:
- #-*- coding=utf-8 -*-
- import os,sys,getpass
- '''
- user.txt 格式
- 账号 密码 是否锁定 错误次数
- jack 123 unlock 0
- tom 123 unlock 0
- lily 123 unlock 0
- hanmeimei 123 unlock 0
- lucy 123 unlock 0
- '''
- # 定义写入文件的函数
- def wirte_to_user_file(users,user_file_path):
- user_file = file(user_file_path,'w+')
- for k,v in users.items():
- line = []
- line.append(k)
- line.extend(v)
- user_file.write(' '.join(line)+'\n')
- user_file.close()
- # 判断用户文件是否存在,不存在直接退出
- user_file_path = 'users.txt'
- if os.path.exists(user_file_path):
- user_file = file(user_file_path,'r')
- else:
- print 'user file is not exists'
- sys.exit(1)
- # 遍历用户文件,将用户包装成字典
- users_dic = {}
- for user_line in user_file:
- user = user_line.strip().split()
- users_dic[user[0]] = user[1:]
- '''
- {
- 'lucy': ['123', 'unlock', '0'],
- 'lily': ['123', 'unlock', '0'],
- 'jack': ['123', 'unlock', '0'],
- 'hanmeimei': ['123', 'unlock', '0'],
- 'tom': ['123', 'unlock', '0']
- }
- '''
- while True:
- # 输入账号
- input_name = raw_input('please input your username,input "quit" or "q" will be exit : ').strip()
- # 判断是否为退出
- if input_name == 'quit' or input_name == 'q':
- sys.exit(0)
- # 输入密码
- password = getpass.getpass('please input your password:').strip()
- # 判断账号是否存在、是否锁定
- if input_name not in users_dic:
- print 'username or password is not right'
- break
- if users_dic[input_name][1] == 'lock':
- print 'user has been locked'
- break
- # 判断密码是否正确,正确,登陆成功
- if str(password) == users_dic[input_name][0]:
- print 'login success,welcome to study system'
- sys.exit(0)
- else:
- # 如果密码错误则修改密码错误次数
- users_dic[input_name][2] = str(int(users_dic[input_name][2])+1)
- # 密码错误次数大于3的时候则锁定,并修改状态
- if int(users_dic[input_name][2]) >= 3:
- print 'password input wrong has 3 times,user will be locked,please connect administrator'
- users_dic[input_name][1] = 'lock'
- wirte_to_user_file(users_dic,user_file_path)
- break
- wirte_to_user_file(users_dic,user_file_path)
python实现简单登陆流程的更多相关文章
- Python 实现简单的 Web
简单的学了下Python, 然后用Python实现简单的Web. 因为正在学习计算机网络,所以通过编程来加强自己对于Http协议和Web服务器的理解,也理解下如何实现Web服务请求.响应.错误处理以及 ...
- 用 python实现简单EXCEL数据统计
任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlrd workbook = xlrd.open_ ...
- python开启简单webserver
python开启简单webserver linux下面使用 python -m SimpleHTTPServer 8000 windows下面使用上面的命令会报错,Python.Exe: No Mod ...
- Python开发简单爬虫 - 慕课网
课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序 课程目录 第1章 课程介绍 ...
- python使用简单http协议来传送文件
python使用简单http协议来传送文件!在ubuntu环境下,局域网内可以使用nc来传送文件,也可以使用基于Http协议的方式来下载文件我们可以使用python -m SimpleHTTPServ ...
- Python超简单的HTTP服务器
Python超简单的HTTP服务器 安装了python就可以 python -m SimpleHTTPServer 执行这一个命令即可实现一个HTTP服务器,将当前目录设为HTTP服务目录,可以通过h ...
- 教学项目之-通过Python实现简单的计算器
教学项目之-通过Python实现简单的计算器 计算器开发需求 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/ ...
- python多线程简单例子
python多线程简单例子 作者:vpoet mail:vpoet_sir@163.com import thread def childthread(threadid): print "I ...
- python实现简单的循环购物车小功能
python实现简单的循环购物车小功能 # -*- coding: utf-8 -*- __author__ = 'hujianli' shopping = [ ("iphone6s&quo ...
随机推荐
- 【模板】第 K 大数
题目:给定一个序列,求其第 K 大的数是多少. 时间复杂度\(O(n)\) 代码如下: #include <bits/stdc++.h> using namespace std; cons ...
- MSXML2.ServerXMLHTTP & HTTPS & 证书过期 — msxml3.dll '80072f05'
昨天测试一个几天前写的一个应用,时不时的报错: msxml3.dll '80072f05' The date in the certificate is invalid or has expired ...
- Gradle安装 Gradle效率提升 eclipse安装gradle插件 【我】
Gradle安装 从官网下载 gradle4.6版本,也可以从svn地址下载 https://downloads.gradle.org/distributions/gradle-4.6-bin.zip ...
- jsp中的request.getContextPath()
jsp中的request.getContextPath() <%=request.getContextPath()%>是为了解决相对路径的问题,可返回站点的根路径. 但不用也可以吧,比 ...
- python 3字符编码
python 3字符编码 官方链接:http://legacy.python.org/dev/peps/pep-0263/ 在Python2中默认是ascii编码,Python3是utf-8编码 在p ...
- python---web框架本质(1)
总的来说php相对较为简单,但是内部封装太多,不利于对编程的更本质探索. 但是对于生产开发确实是一门不错的语言.python对于socket以及web框架的理解更加透彻 # coding:utf8 # ...
- 如何下载网易云音乐APP里的MV和短视频?
本人:网易云音乐死粉,朋友圈大多都用的是云音乐,因为推荐功能牛逼 然后:发现云音乐APP里越来越多吸引我的短视频,经常看到好的就想保存到相册,然后微信发给朋友 但是:不知道怎么下载网易云音乐的短视频, ...
- Spark记录-spark-env.sh配置
环境变量 含义 SPARK_MASTER_IP master实例绑定的IP地址,例如,绑定到一个公网IP SPARK_MASTER_PORT mater实例绑定的端口(默认7077) SPARK_MA ...
- golang变量声明
func main() { var a1 int a1 = 1 var a = 1 b := 1 var c, d int c = 1 d = 1 var e, f = 1, 2 g, h := 1, ...
- 【1】存在大于1s的FullGC
目前有存在大于1s的FullGC,金桥的机器目前是2C4G的,使用的GC方法只能使用单线程进行串行的回收,导致GC比较慢. 建议可以调整GC参数,改用CMS,能够解决这个问题, 参数修改方法: 在应用 ...