登陆流程图:



代码实现:

  1. #-*- coding=utf-8 -*-
  2.  
  3. import os,sys,getpass
  4.  
  5. '''
  6. user.txt 格式
  7.  
  8. 账号 密码 是否锁定 错误次数
  9. jack 123 unlock 0
  10. tom 123 unlock 0
  11. lily 123 unlock 0
  12. hanmeimei 123 unlock 0
  13. lucy 123 unlock 0
  14. '''
  15.  
  16. # 定义写入文件的函数
  17. def wirte_to_user_file(users,user_file_path):
  18. user_file = file(user_file_path,'w+')
  19. for k,v in users.items():
  20. line = []
  21. line.append(k)
  22. line.extend(v)
  23. user_file.write(' '.join(line)+'\n')
  24. user_file.close()
  25.  
  26. # 判断用户文件是否存在,不存在直接退出
  27. user_file_path = 'users.txt'
  28.  
  29. if os.path.exists(user_file_path):
  30. user_file = file(user_file_path,'r')
  31. else:
  32. print 'user file is not exists'
  33. sys.exit(1)
  34.  
  35. # 遍历用户文件,将用户包装成字典
  36. users_dic = {}
  37. for user_line in user_file:
  38. user = user_line.strip().split()
  39. users_dic[user[0]] = user[1:]
  40.  
  41. '''
  42. {
  43. 'lucy': ['123', 'unlock', '0'],
  44. 'lily': ['123', 'unlock', '0'],
  45. 'jack': ['123', 'unlock', '0'],
  46. 'hanmeimei': ['123', 'unlock', '0'],
  47. 'tom': ['123', 'unlock', '0']
  48. }
  49. '''
  50. while True:
  51. # 输入账号
  52. input_name = raw_input('please input your username,input "quit" or "q" will be exit : ').strip()
  53.  
  54. # 判断是否为退出
  55. if input_name == 'quit' or input_name == 'q':
  56. sys.exit(0)
  57.  
  58. # 输入密码
  59. password = getpass.getpass('please input your password:').strip()
  60.  
  61. # 判断账号是否存在、是否锁定
  62. if input_name not in users_dic:
  63. print 'username or password is not right'
  64. break
  65.  
  66. if users_dic[input_name][1] == 'lock':
  67. print 'user has been locked'
  68. break
  69.  
  70. # 判断密码是否正确,正确,登陆成功
  71. if str(password) == users_dic[input_name][0]:
  72. print 'login success,welcome to study system'
  73. sys.exit(0)
  74. else:
  75. # 如果密码错误则修改密码错误次数
  76. users_dic[input_name][2] = str(int(users_dic[input_name][2])+1)
  77. # 密码错误次数大于3的时候则锁定,并修改状态
  78.  
  79. if int(users_dic[input_name][2]) >= 3:
  80. print 'password input wrong has 3 times,user will be locked,please connect administrator'
  81. users_dic[input_name][1] = 'lock'
  82. wirte_to_user_file(users_dic,user_file_path)
  83. break
  84.  
  85. wirte_to_user_file(users_dic,user_file_path)

python实现简单登陆流程的更多相关文章

  1. Python 实现简单的 Web

    简单的学了下Python, 然后用Python实现简单的Web. 因为正在学习计算机网络,所以通过编程来加强自己对于Http协议和Web服务器的理解,也理解下如何实现Web服务请求.响应.错误处理以及 ...

  2. 用 python实现简单EXCEL数据统计

    任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlrd workbook = xlrd.open_ ...

  3. python开启简单webserver

    python开启简单webserver linux下面使用 python -m SimpleHTTPServer 8000 windows下面使用上面的命令会报错,Python.Exe: No Mod ...

  4. Python开发简单爬虫 - 慕课网

    课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序   课程目录 第1章 课程介绍 ...

  5. python使用简单http协议来传送文件

    python使用简单http协议来传送文件!在ubuntu环境下,局域网内可以使用nc来传送文件,也可以使用基于Http协议的方式来下载文件我们可以使用python -m SimpleHTTPServ ...

  6. Python超简单的HTTP服务器

    Python超简单的HTTP服务器 安装了python就可以 python -m SimpleHTTPServer 执行这一个命令即可实现一个HTTP服务器,将当前目录设为HTTP服务目录,可以通过h ...

  7. 教学项目之-通过Python实现简单的计算器

    教学项目之-通过Python实现简单的计算器   计算器开发需求 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/ ...

  8. python多线程简单例子

    python多线程简单例子 作者:vpoet mail:vpoet_sir@163.com import thread def childthread(threadid): print "I ...

  9. python实现简单的循环购物车小功能

    python实现简单的循环购物车小功能 # -*- coding: utf-8 -*- __author__ = 'hujianli' shopping = [ ("iphone6s&quo ...

随机推荐

  1. 【模板】第 K 大数

    题目:给定一个序列,求其第 K 大的数是多少. 时间复杂度\(O(n)\) 代码如下: #include <bits/stdc++.h> using namespace std; cons ...

  2. MSXML2.ServerXMLHTTP & HTTPS & 证书过期 — msxml3.dll '80072f05'

    昨天测试一个几天前写的一个应用,时不时的报错: msxml3.dll  '80072f05' The date in the certificate is invalid or has expired ...

  3. Gradle安装 Gradle效率提升 eclipse安装gradle插件 【我】

    Gradle安装 从官网下载 gradle4.6版本,也可以从svn地址下载 https://downloads.gradle.org/distributions/gradle-4.6-bin.zip ...

  4. jsp中的request.getContextPath()

    jsp中的request.getContextPath()   <%=request.getContextPath()%>是为了解决相对路径的问题,可返回站点的根路径. 但不用也可以吧,比 ...

  5. python 3字符编码

    python 3字符编码 官方链接:http://legacy.python.org/dev/peps/pep-0263/ 在Python2中默认是ascii编码,Python3是utf-8编码 在p ...

  6. python---web框架本质(1)

    总的来说php相对较为简单,但是内部封装太多,不利于对编程的更本质探索. 但是对于生产开发确实是一门不错的语言.python对于socket以及web框架的理解更加透彻 # coding:utf8 # ...

  7. 如何下载网易云音乐APP里的MV和短视频?

    本人:网易云音乐死粉,朋友圈大多都用的是云音乐,因为推荐功能牛逼 然后:发现云音乐APP里越来越多吸引我的短视频,经常看到好的就想保存到相册,然后微信发给朋友 但是:不知道怎么下载网易云音乐的短视频, ...

  8. Spark记录-spark-env.sh配置

    环境变量 含义 SPARK_MASTER_IP master实例绑定的IP地址,例如,绑定到一个公网IP SPARK_MASTER_PORT mater实例绑定的端口(默认7077) SPARK_MA ...

  9. 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, ...

  10. 【1】存在大于1s的FullGC

    目前有存在大于1s的FullGC,金桥的机器目前是2C4G的,使用的GC方法只能使用单线程进行串行的回收,导致GC比较慢. 建议可以调整GC参数,改用CMS,能够解决这个问题, 参数修改方法: 在应用 ...