流程图如下:

  最先考虑使用python中的list,以能取到user_list中的用户信息,但中途发现没有比较好的方法截取取密码,还是新手的缘故,最终选择了使用dict,以方便截取用户名以及相应的密码。

user_list格式如下:

xxx:xxx
xxx:xxx
xxx:xxx

user_lock格式如下:

xxx
xxx
xxx

Code:

#!/usr/bin/env python
# encoding: utf-8
# Auther:ccorz Mail:ccniubi@163.com import time,getpass,os
# 将输入用户赋值于user_name变量
# print('=============',os.popen('pwd').read())
user_name=input('请输入您的用户名:')
# 打开文件user_list,user_lock,赋予读写权限
user_list=open('user_list','r+')
user_lock=open('user_lock','r+')
#设置日志文件,open如果,用追加模式
log_file=open('login.log','a+')
# 设置一个退出标识符
break_flag=0
time_now=time.strftime('%Y-%m-%d %H:%M:%S') #遍历user_lock被锁用户文件
for line in user_lock:
# 设置被锁用户的变量,strip()将字符串两边的空格符去掉
lock_name=line.strip()
#判断输入用户是否与遍历用户相同
if user_name==lock_name:
print('您的用户已被锁定...请尝试其他的用户')
log_file.write('\n%s:被锁定用户%s尝试登陆!'%(time_now,user_name))
#修改退出标识符的值,以便区分既在user_list,又在user_lock的用户
break_flag=1
#退出循环
break
#将空字典赋予变量account
account={}
for line in user_list:
#遍历user_list文件,将一行的字符串去掉空格,并按":"分割为key value,并将key value添加入dict中
account[line.strip().split(':')[0]]=line.strip().split(':')[1]
# print(account) # break_flag==0用来区分在user_list,user_lock中同时存在的用户,
# 如果没有此标识符,上面遍历锁用户文件也会执行以下程序
if user_name in account and break_flag==0:
#设置计数器,初始值为0
count=0
#循环3次
while count < 3:
password=input('请输入%s的密码:'%user_name)
# 校验密码
if password==account[user_name]:
print('欢迎登陆系统.......')
log_file.write('\n%s,user %s had login.'%(time_now,user_name))
# 退出循环
break
else:
# 密码错误,将计数器+1
count+=1
print('%s的密码错误,请重新输入,您还有%s次机会'% (user_name,3-count))
# 循环超过3次,执行下面命令
else:
print('用户%s已经被锁定,请联系管理员!'%user_name)
# 将密码输入超过3此的用户名添加进user_lock,写入日志文件
user_lock.write('\n%s'%user_name)
log_file.write('\n%s:%s is locked!'%(time.strftime('%Y-%m-%d %H:%M:%S'),user_name))
if user_name not in account:
# \033[1;44;33m....\033[0m 高亮显示,并提醒用户无此用户,是否用此用户名注册
regis_or_quit=input('''\033[1;44;33m没有用户%s,是否注册此用户?\033[0m
\033[1;44;33m输入"y"继续注册,输入"q"退出:\033[0m'''%user_name)
#将输入的字符串转化为小写并与y或者q匹配
if regis_or_quit.lower()=='q':
print('Bye!!!!!!!!')
elif regis_or_quit.lower()=='y':
#直接使用user_name注册,第一次输入密码密码,如果不想显示明文密码可用getpass.getpass('...')
regis_pass=input('请输入%s的密码:'%user_name)
#允许两次确认密码,设置循环2次,故也无需设置计数器
for i in range(2):
#确认注册密码,防止用户忘记密码
regis_pass_again=input('请确认注册用户%s的密码:'%user_name)
# 校验注册密码
if regis_pass_again==regis_pass:
# 校验密码成功,将user_name regis_pass两个变量的值写入user_list文件,并提醒用户注册成功
user_list.write('\n%s:%s'%(user_name,regis_pass))
log_file.write('\n%s:%s注册成功'%(time_now,user_name))
print('用户%s注册成功.....'%user_name)
# 退出循环
break
#校验注册密码失败,进入下一次循环
else:
print('\033[1;33;44m密码与上次不一致.......\033[0m')
#密码确认超过两次,注册失败
else:
print('用户%s注册失败'%user_name)
#输入不为y或者q,其他字符串或者回车 空格时,程序显示退出
else:
print('输入不符合规范,程序已退出.....')
#将open的两个账户文件关闭,也可用with open() as xxx,open() as xxxx
user_list.close()
user_lock.close()
log_file.close()

Day1作业1:登陆接口(加入日志、注册功能)的更多相关文章

  1. day1作业:登录接口

    作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 思路: (1)用户输入用户名: (2)去锁定文件中验证用户名是否锁定: (3)去当前用户验证用户是否存在: ...

  2. python 作业 编写登陆接口

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

  3. Android后台数据接口交互实现注册功能

    首先,在ecplise里面新建一个叫做TestServices的web工程.在WebContent--WEB-INF--libs文件夹下导入两个jar包:mysql-connector-java-6. ...

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

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

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

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

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

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

  7. day1作业--登录接口

    作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定     知识: 1.循环的使用: 2.continue,break在循环中中断的作用: 3.文件的写入,读取: 4.各基础知 ...

  8. 不用框架,原生使用python做注册接口/登陆接口/充值接口的测试,做的数据/代码分离

    注意充值时候,cookie的处理方法,还是原来的三种方法 1.操作数据文件  do_exclel.py # -*- conding:utr-8 -*- #@Time :2018/11/8 22:46 ...

  9. day1作业登录接口总结

    作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 上面作业,用了几种思路来解决问题:但是本质上其实都是一样的:核心都是对文件的操作,文件的增删改查:并且这些操 ...

  10. 老男孩Day1作业(一):编写登录接口

    需求:编写登陆接口1. 用户输入帐号密码进行登陆2. 用户信息保存在文件内3. 用户密码输入错误三次后锁定用户 1)编写思路 编写思路参考下面GitHub链接中的流程图 https://github. ...

随机推荐

  1. java常用日期类型转换

    import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import j ...

  2. python的优缺点。

    Python的定位是“优雅”.“明确”.“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序. 开发效率非常高,Pyt ...

  3. Stone Game II

    Description There is a stone game.At the beginning of the game the player picks n piles of stones in ...

  4. (13)打鸡儿教你Vue.js

    一小时复习 vue.js是一个JavaScriptmvvm库,是以数据驱动和组件化的思想构建的,相比angular.js,vue.js提供了更加简洁,更加容易理解的api,如果习惯了jquery操作d ...

  5. ELK教程2:Kibana的安装

    kibana作为ElastciSearch的数据查询展示界面,集成了很多的功能,本文主要讲述如下部署kibana. 安装 安装命令如下: # 下载kibana的npm wget https://art ...

  6. P3719 [AHOI2017初中组]rexp——递归模拟

    P3719 [AHOI2017初中组]rexp 没有什么算法的题做起来真不适应,这道题深深讽刺了我想用栈维护匹配括号个数的想法: 递归解决就行了: 时刻注意函数返回值是什么,边界条件是什么: #inc ...

  7. java代码拼写sql

    java后台    String zffwdm=map.get("zffwmc")==null?"":map.get("zffwmc"); ...

  8. leaflet使用手册

    谷歌地图加载地址: 谷歌交通地图地址:http://www.google.cn/maps/vt/pb=!1m4!1m3!1i{z}!2i{x}!3i{y}!2m3!1e0!2sm!3i38007257 ...

  9. 数据结构Java版之遍历二叉树(六)

    二叉树是我们在程序中用的最多的一种树(个人观点).最简单的一个二叉树是由一个根节点,两个子节点(一左一右成左右孩子节点)组成.二叉树是数组和链表的结合,即包含了数组的快速查找优点,又包含了链表的快速添 ...

  10. kubernetes入门学习系列

    一.kubernetes基础概念 初识kubernetes kubernetes相关概念 二.kubernets架构和组件 kubernetes架构 kubernetes单Master架构 kuber ...