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实现类似ftp传输文件的网络程序示例
Apr 08 Python
wxpython学习笔记(推荐查看)
Jun 09 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
通过实例浅析Python对比C语言的编程思想差异
Aug 30 Python
python实现对文件中图片生成带标签的txt文件方法
Apr 27 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
python 获取等间隔的数组实例
Jul 04 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
Aug 22 Python
python实现多线程端口扫描
Aug 31 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
pytorch三层全连接层实现手写字母识别方式
Jan 14 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
PHP 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
php显示时间常用方法小结
2015/06/05 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
JS 控件事件小结
2012/10/31 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
法院先进个人事迹材料
2014/05/04 职场文书
村级个人对照检查材料
2014/08/22 职场文书
党员思想汇报材料
2014/12/19 职场文书
优秀范文:读《红岩》有感3篇
2019/10/14 职场文书
spring boot中nativeQuery的用法
2021/07/26 Java/Android