编写登陆接口

  • 输入用户名密码
  • 认证成功后显示欢迎信息
  • 输错三次后锁定

帐号文件user.txt内容如下:

qaz 123
qwe 12345
qweqwr 12321424
......


锁文件user_lock.txt默认为空


一、只针对帐号文件里的用户进行判断并锁定,针对用户和密码各有三次错误重试机会。
流程图:


二、代码如下

 # Author: zfh
# -*- coding:utf-8 -*-
import os,getpass,sys i = 0
while i < 3: #开始循环,只要用异常登录不超过三次
name = input('请输入用户名:') #输入用户名 lock_file = open('user_lock.txt','r+') #打开锁定用户文件,检查登录用户是否被锁定(r+--读写),文件名前直接加路径
lock_list = lock_file.readlines() #逐行读取锁定用户记录文件 for lock_line in lock_list: #循环读取的锁定用户记录
lock_line = lock_line.strip('\n') #去掉换行符
if name == lock_line: #如果输入用户被锁定,直接退出
sys.exit('用户%s已锁定' %name) #输出提示用户被锁定 user_file = open('user.txt','r') #打开用户文件(r--只读)
user_list = user_file.readlines() #逐行读取用户文件 for user_line in user_list: #循环读取的用户记录
(user,passwd) = user_line.strip('\n').split() #分别获取帐号和密码信息
if name == user: #如用户名正常匹配
j = 0
while j < 3: #只要用户密码异常不超过3次就不断循环
password = getpass.getpass('请输入密码:') #输入隐藏密码,import getpass
if passwd == password: #如果密码正确,提示欢迎登录
# print('登录成功%s'%name)
sys.exit('用户%s登录成功'%name) #输出欢迎用户登录,正常退出
else:
if j != 2: #j!=2时继续循环
print('用户 %s 密码错误,请重新输入,还有 %d 次机会' % (name,2 - j))#提示还剩余0次机会了
j += 1 #密码输入错误后,循环值增加1
else: #密码输入三次错误后,将该用户追加到LOCK文件
lock_file.write(name +'\n')
sys.exit('用户 %s 达到最大登录次数,将被锁定并退出' % name)
else:
pass #当用户没匹配时,跳过并继续循环
else:
if i != 2: #i!=2是循环
print('用户 %s 不存在,请重新输入,还有 %d 次机会' % (name,2 - i)) #提示还剩余0次机会了
i += 1 #当用户输入错误时,循环值增加1
else:
sys.exit('用户 %s 不存在,退出' % name) #用户输入三次错误后,异常退出 lock_file.close() #关闭LOCK文件
user_file.close() #关闭帐号文件

Python学习第一天-编写登陆接口的更多相关文章

  1. python之编写登陆接口(第一天)

    作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 针对此实例写了有二种类型的脚本,略有不同,具体如下: 帐号文件account.txt内容如下: sam 123 david ...

  2. Python学习之编写登陆接口(Day1,作业一)

    作业一:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定(下次登陆还是锁定) 知识点:while循环,for循环,文件操作,if判断,列表操作 思路: 1.登陆,三次登陆失败,锁定 ...

  3. 使用 Python 编写登陆接口

    # 使用 Python 编写登陆接口# Create Date: 2017.10.31 Tuesday# Author: Eric Zhao# -*- coding:utf-8 -*-'''编写登陆接 ...

  4. python学习第一讲,python简介

    目录 python学习第一讲,python简介 一丶python简介 1.解释型语言与编译型语言 2.python的特点 3.python的优缺点 二丶第一个python程序 1.python源程序概 ...

  5. day1作业:编写登陆接口

    作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 思路:要求是编写登陆接口,那么要有一个存放用户信息的模块:三次后锁定,要有一个存放锁定用户信息的模块:我们知 ...

  6. Python小程序之用户登陆接口

    编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 程序逻辑图: 代码: #!/usr/bin/env python #_*_ coding:UTF-8 _*_ #__author_ ...

  7. Python学习-第一天-函数和模块的使用

    目录 Python学习-第一天总结 print输出的一种简单格式 函数参数之可变参数 模块管理函数 if else语句的单行实现(简洁) 变量作用域 函数书写格式 Python学习-第一天总结 pri ...

  8. day1作业一:编写登陆接口

    作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 Readme: (1)提示用户输入用户名: (2)用户名验证,验证是否已经锁定: (3)是否锁定:已锁定告诉 ...

  9. python 作业 编写登陆接口

    # -*- coding:utf-8 -*-import os,sysfor i in range(3):#进行3次循环 blacklist = open(r"C:\Users\Pc4\De ...

随机推荐

  1. POJ 2187 Beauty Contest( 凸包求最远点对 )

    链接:传送门 题意:给出 n 个点,求出这 n 个点中最远的两个点距离的平方 思路:最远点对一定会在凸包的顶点上,然后直接暴力找一下凸包顶点中距离最远的两个点 /******************* ...

  2. jQuery 文档操作

    一.插入操作 1. 父元素.append(子元素) 追加某元素,在父元素中添加新的子元素, 子元素可以为: stirng / element (js对象) / jquery 元素 var oli = ...

  3. JS中的NaN

    什么是NaN?它的类型是什么?如何可靠地测试一个值是否等于NaN? NaN属性表示“不是数字”的值.这个特殊值是由于一个操作数是非数字的(例如“abc”/ 4)或者因为操作的结果是非数字而无法执行的. ...

  4. elasticsearch的安装和使用

    准备环境: 环境: win7 64位  jdk1.8.0  elasticsearch2.3.3 elasticsearch2.3.3:https://www.elastic.co/thank-you ...

  5. 【codeforces 810C】Do you want a date?

    [题目链接]:http://codeforces.com/contest/810/problem/C [题意] 给你一个集合,它包含a[1],a[2]..a[n]这n个整数 让你求出这个集合的所有子集 ...

  6. Ubuntu 安装wps-office

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50288483 本人的ubuntu系统是 ...

  7. linux mint(Ubuntu、Debian) 18修改环境变量

    修改环境变量 sudo gedit /etc/profile sudo gedit /etc/profile 在profile文件的末尾添加以下代码 export JAVA_HOME=/usr/lib ...

  8. 极路由4pro安装java(Jamvm 2.0.0 + gnu classpath 0.9.8)

    首先试了gnu classpath 0.9.9,编译不过后来改成0.9.8 编译环境 OS: 64位 Ubuntu 16.04 LTS(vmware虚拟机) SDK: 用之前讲过的官方SDKmtmip ...

  9. 强名称程序集(strong name assembly)——为程序集赋予强名称

    ,唯一标识一个程序集 2,放置程序集被仿冒和被篡改. 3,能够部署到全局程序集缓存(GAC:GlobalAssembly Cache)中:在将强名称程序集不熟在GAC其中以后,强名称程序集也能够称为共 ...

  10. iOS KVC(Key-Value Coding)

    常见用法: 获取值 valueForKey: 依据属性名取值 valueForKeyPath: 依据路径取值(如:[person valueForKeyPath:@"car.price&qu ...