python初学之用户登录的实现过程(实例讲解)


Posted in Python onDecember 23, 2017

要求编写登录接口:

1. 输入用户名和密码

2.认证成功后显示欢迎信息

3.用户名输错,提示用户不存在,重新输入(5次错误,提示尝试次数过多,退出程序)

4.用户名正确,密码错误,提示密码错误,重新输入.(密码错误3次,锁定用户名并提示,退出程序)

readme

应用知识点:

一、文件的操作

基本操作

f = open('lyrics','r',) #打开文件
first_line = f.readline()
print('first line:',first_line) #读一行
data = f.read()# 读取剩下的所有内容,文件大时不要用
print(data) #打印文件
f.close() #关闭文件

打开文件的模式有:

r,只读模式(默认)。

w,只写模式。【不可读;不存在则创建;存在则删除内容;】

a,追加模式。【可读;不存在则创建;存在则只追加内容;】

with语句,同时打开多个文件,还可以避免打开文件后忘记关闭,语法:

with open('file1', 'r', encoding='utf-8') as f , \
open('file2', 'w', encoding='utf-8') as f_2 :
...

本例中有2个文件,一个存用户名和密码,另一个存黑名单.在读取文件后怎样转变成python对象,然后对对象进行操作,是我遇到的第一个难点!

然后查了下资料,发现字符串split方法,可以把字符串,从逗号分隔符的地方断开,得到一个子字符串列表.这样一来,就可以对黑名单进行查找等操作了.

...
user_lis_bak = f.readline().split(',')
...

Python 字典 setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。

dict.setdefault(key, default=None)

二、列表和字典

列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作

names = ['xiaoli',"xiaoming",'yuanlu']

通过下标访问列表中的元素,下标从0开始计数

>>> names[0]
'xiaoli'
>>> names[1]
'xiaoming'
>>> names[-1]
'yuanlu'
>>> names[-2] #还可以倒着取
'xiaoming'

字典是一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

info = {
   'xiaoli': "123456",
   'xiaoming': "111111",
   'yuanlu': "888888",
 }

这里key是用户名,value是密码,一一对应,key是唯一的.

三、for loop 和 if...else

for i in range(10): print(i)

还是上面的程序,但是遇到大于5的循环次数就不走了,直接退出

for i in range(10):
   if i>5:
     continue #不往下走了,直接进入下一次loop
   print(i)

用户名和密码文件格式:

xiaoli 123456

xiaoming 888888

wangpeng 111111

luyuan 112222

qiling 556666

haiming 223333

黑名单文件格式:

xiaoli,xiaoming,wangpeng,

代码

with open('user_lis', 'r', encoding='utf-8') as f_user_lis,\
     open('user_lis_bak', 'r', encoding='utf-8') as f_user_lis_bak: # 打开文件'user_lis'和'user_lis_bak'
  user_lis_bak = f_user_lis_bak.read().split(',')   # 读取f_user_lis_bak并转成列表赋值给 user_lis_bak
  user_lis_dict = {}                 # 定义一个空字典
  for i in f_user_lis:
    user_lis_dict.setdefault(i.split()[0], i.split()[1])  # 读取f_user_lis并把值放入字典user_lis_dict中
count = 0
for i in range(5):                 # 设置错误次数上限为5次
  name = input('请输入用户名>>')
  password = input('请输入密码>>')
  if name in user_lis_bak:            # 第一步先查找黑名单
    print('用户名已被锁定,请联系管理员!!!')
    continue                  # 在黑名单中直接进入下一次循环,重新输入用户名和密码
  elif name in user_lis_dict:           # 第二步查找用户白名单
    if password == user_lis_dict.get(name):   # 密码正确,验证通过 退出
      print('亲爱的会员', name, '欢迎回来')
      break
    else:                   # 密码错误,提示错误
      if count == 2:
        name_bak_write = open('user_lis_bak', 'a', encoding='utf-8')
        name_bak_write.write(name+',')
        name_bak_write.close()       # 3次密码错误,就把用户名写进黑名单
        print('用户名已锁定,请联系管理员!!!')
        break
      print('密码错误!!!')
      count += 1               # 密码错一次,count就+1
  else:
    if i == 4:                 # 用户名错5次,直接退出
      print('尝试次数过多,再见!!!')
      continue
    print('用户名不存在!!!')          # 用户名错误,提示错误

以上这篇python初学之用户登录的实现过程(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现多线程抓取妹子图
Aug 08 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
python中join()方法介绍
Oct 11 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
pycharm远程开发项目的实现步骤
Jan 20 Python
python pyenv多版本管理工具的使用
Dec 23 Python
django迁移文件migrations的实现
Mar 31 Python
django 利用Q对象与F对象进行查询的实现
May 15 Python
浅谈django channels 路由误导
May 28 Python
python如何在word中存储本地图片
Apr 07 Python
python的numpy模块安装不成功简单解决方法总结
Dec 23 #Python
windows 下python+numpy安装实用教程
Dec 23 #Python
Python实现字典的遍历与排序功能示例
Dec 23 #Python
Python实现字典按照value进行排序的方法分析
Dec 23 #Python
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 #Python
简单了解什么是神经网络
Dec 23 #Python
python用户管理系统的实例讲解
Dec 23 #Python
You might like
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
php操作mongodb封装类与用法实例
2018/09/01 PHP
JavaScript Accessor实现说明
2010/12/06 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
2016/07/15 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
Tornado 多进程实现分析详解
2018/01/12 Python
python实现图片中文字分割效果
2019/07/22 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
python SOCKET编程基础入门
2021/02/27 Python
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
电大自我鉴定范文
2013/10/01 职场文书
工程承包协议书
2014/04/22 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年纪检工作总结
2014/11/12 职场文书
python中 Flask Web 表单的使用方法
2022/05/20 Python
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技