初学 python 之 用户登录实现过程
要求编写登录接口 : 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方法,可以把字符串,从逗号分隔符的地方断开,得到一个子字符串列表.这样一来,就可以对黑名单进行查找等操作了.
1 ...
2 user_lis_bak = f.readline().split(',')
3 ...
Python 字典 setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。
1 dict.setdefault(key, default=None)
二,列表和字典
列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作
1 names = ['xiaoli',"xiaoming",'yuanlu']
通过下标访问列表中的元素,下标从0开始计数

1 >>> names[0]
2 'xiaoli'
3 >>> names[1]
4 'xiaoming'
5 >>> names[-1]
6 'yuanlu'
7 >>> names[-2] #还可以倒着取
8 'xiaoming'

字典是一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
1 info = {
2 'xiaoli': "123456",
3 'xiaoming': "111111",
4 'yuanlu': "888888",
5 }
这里key是用户名,value是密码,一一对应,key是唯一的.
三,for loop 和 if...else
1 for i in range(10): print(i)
: 3 continue #不往下走了,直接进入下一次loop 4 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('用户名不存在!!!') # 用户名错误,提示错误
____author___JayeHe
初学 python 之 用户登录实现过程的更多相关文章
- python实现用户登录问候
创建一个至少包含 5个用户名的列表,且其中一个用户名为 'admin' .想象你要编写代码,在每位用户登录网站后都打印一条问候消息.遍历用户名列表,并向每位用户打印一条问候消息.添加一条 if 语句, ...
- python实现用户登录、注册实例
python面向函数式编程,模拟用户登录验证.注册的代码实现. 主要有以下两个文件: 1.user.txt文档文件,相当于数据库的用户信息表,主要是记录用户名和密码. 注意:1)此文档需要与.py文件 ...
- python程序—用户登录
编写一个用户登录程序: 1.登录成功显示登录页面 2.登录失败,显示密码错误,并且显示错误几次 3.登录失败三次,退出程序 username= 'root' passwd= ' count= prin ...
- Python入门-用户登录程序升级版
编写登陆接口 基础需求: 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 升级需求: 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用户3次认证失败后,退出程序,再次启动程 ...
- python案例-用户登录
要求: •输入用户名密码 •认证成功后显示欢迎信息 •输错三次后锁定 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 "" ...
- python实现用户登录界面
要求 输入用户名密码正确,提示登录成功, 输入三次密码错误,锁定账户. 实现原理: 创建两个文件accout,accout_lock accout记录用户名,密码 accout root 1qazxs ...
- 【Python】用户登录三次锁定
这是从另外一个博客考过了的,借鉴一下,怕下次找不到1 # -*- coding:utf-8 -*- 2 3 #登录三次锁定用户 4 5 #用于计数(循环三次的判断) 6 count = 0 7 8 # ...
- python 模拟用户登录代码
需求:输入用户名,判断用户是否被锁定,锁定则退出,否则进入密码验证,输入三次错误密码之后此用户被锁定. userlist.txt里,用":"将用户名.密码.状态码分开: [root ...
- MySQL 初学笔记 ① -- MySQL用户登录权限控制
1. MySQL 登录 MySQL -u username -p 2. MySQL 创建用户 use mysql //进入mysql 表 INSERT INTO user (Host,User,Pas ...
随机推荐
- UI基础:UITextField 分类: iOS学习-UI 2015-07-01 21:07 68人阅读 评论(0) 收藏
UITextField 继承自UIControl,他是在UILabel基础上,对了文本的编辑.可以允许用户输入和编辑文本 UITextField的使用步骤 1.创建控件 UITextField *te ...
- Windows 7 64bit Python 2 Install
安装 setuptools 出现 UnicodeDecodeError 文件 Lib/mimetypes.py 中的 bug, 通过以下 patch 修复: Index: Lib/mimetypes. ...
- BZOJ1369/BZOJ2865 【后缀数组+线段树】
Description XX在进行字符串研究的时候,遇到了一个十分棘手的问题. 在这个问题中,给定一个字符串S,与一个整数K,定义S的子串T=S(i, j)是关于第K位的识别子串,满足以下两个条件: ...
- js获取 gps坐标
if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(pos) { model.address. ...
- HDU 4135:Co-prime(容斥+二进制拆分)
Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- C#使用zookeeper
C#使用zookeeper https://blog.csdn.net/XuWei_XuWei/article/details/80611659 1.简述 zookeeper适用于分布式锁,配置管理, ...
- PyCharm首次使用(Hell world!)
作为PyCharm编辑器的起步,我们理所当然的先写一个Hello word,并运行它.(此文献给对IDE不熟悉的初学者) 1,新建一个项目 File --> New Project... 2,新 ...
- 一键分享到各个SNS插件
使用百度分享:http://share.baidu.com/code/advance#toid 例: HTML: <div class="bdsharebuttonbox" ...
- 利用python 下paramiko模块无密码登录
利用python 下paramiko模块无密码登录 上次我个大家介绍了利用paramiko这个模块,可以模拟ssh登陆远程服务器,并且可以返回执行的命令结果,这次给大家介绍下如何利用已经建立的密钥 ...
- dbt 基本试用
dbt 是一个很不错的进行etl 中的t 处理的工具,灵活简单,我们需要写的就是select 语句 dbt 帮助我们进行处理 测试集成了graphql 以及使用docker 运行 安装 pip ins ...