python实现简单登陆系统
作者:zerolouise 发布时间:2023-05-25 06:50:49
标签:python,登陆系统
新手,虽然比较简单的东西,但是弄了我很久。
很多不完善的地方,比如锁定用户,同一用户输入错三次密码就会锁定,但是如果在第二第三次换了用户再输入原来的用户,则计数会重新计算。
另外不存在的用户输入密码错误次数过多也会被锁定,然后还能创建一个被锁定的用户,这个就不搞了,只要检测一下是否存在用户名就可以了。
暂时想到了解决办法是在一个专用的文件里面增加一个专用的计数变量,舍弃blocklist这个文件,但是不懂怎么操作,先留着。
虽然python没有像C一样的main函数作为程序入口,姑且弄了一个,方便看懂
'''登陆系统
要求:
1、可以选择创建新的用户
2、可以登陆原有的用户
3、输入密码错误三次后用户则被锁定'''
flag=True #循环控制符
def createuser():
f=open('userlist.txt','r')#打开已存在用户的文件,假设文件已经存在
flag=True
name=f.readlines()
f.close()
while flag:
username=input('username:')
flag2=False#用户名已存在的标记符
for line in name:
if(username==line.split('*')[0]):
flag2=True
print("用户名已存在,请重新输入")
if flag2!=True:
f=open('userlist.txt','a')#创建新的用户
f.write('\n'+username)
f.write('*')
password=input('password:')
f.write(password)
f.close()
break
main()
def login():#登入函数,输入密码错误三次则锁定用户
count=0#密码错误计数,3次则锁定
f=open('userlist.txt','r')
info=f.readlines()
f.close()
user=None#重复用户标记符
while flag:
flag2=False
f2=open('blocklist.txt', 'r')
block_name=f2.readlines()
f2.close()
username=input('username:')
if user==None:#user没有使用过,则直接赋予输入的用户名
user=username
elif user!=username:#如果下一次输入的用户名不一样,则记录上一次的用户名,同时计数清零
user=username
count=0;
for line in block_name:#检查用户名是否被锁定,锁定则返回主菜单
if username==line.strip('\n'):
print('该用户已经被锁定,请联系管理员')
main()
password=input('password:')
for line in info:
if(username==line.split('*')[0]and password==line.split('*')[1].strip('\n')):
print('登入成功!')
flag2=True
if flag2==False:
count+=1
print("用户名或密码错误,请重新输入")
if count==3:#错误三次,把用户名添加到锁定列表中
print('密码错误次数过多,该用户已被锁定')
f3=open('blocklist.txt','a')
f3.write('\n'+username)
f3.close()
count=0#加入黑名单后重置计数
main()#加入黑名单后退回主菜单
info='''
------请输入相关数字-----
1.创建新的用户
2.登陆已有用户
3.退出程序
'''
def main():
print(info)
while flag:
i=input()
if i=='1':
createuser()
break
elif i=='2':
login()
break
elif i=='3':
exit()
else:
print("请输入正确的数字.")
main()#程序入口
来源:https://blog.csdn.net/zerolouise/article/details/79586201?utm_source=blogxgwz5
0
投稿
猜你喜欢
- 前两天在帮朋友整理他的主页空间时候,发现的一点关于MySQL可能大家都会忽略的问题:我们知道,在安装完MySQL后,它会自动创建一个root
- 在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT 语句。但是我们常常会遇到这样情况
- 这里介绍了5中python获取window桌面路径的方法,获取这个路径有什么用呢?一般是将程序生成的文档输出到桌面便于查看编辑。前两个方法是
- 一、安装FastDFS1-1:执行docker命令安装# 安装trackerdocker run -dti --network=host -
- 记录下第一次使用Python读写文件的过程,虽然很简单,第一次实现其实也有些注意的事项。单个文件的读操作:我们先假设一个需求如下:读取一个t
- '****'函数名称: strReplace(Str)'函数功能: 过滤单引号'参数说明: Str 
- 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、状态等。Python 的原生类型(Built
- 本文实例讲述了Python实现返回数组中第i小元素的方法。分享给大家供大家参考,具体如下:#! /usr/bin/env python#co
- 大部分服务器管理员知道MySQL数据库管理系统(RDBMS)是高度灵活的软件块,带有范围广阔的启动选项,可以用来修改相关行为。然而,大部分人
- MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。它的特点是高性能、易部
- 今天分享 3 个 Python 编程小技巧,来看看你是否用过?1、如何按照字典的值的大小进行排序我们知道,字典的本质是哈希表,本身是无法排序
- 在小飞的博客上看到他写了一篇关于reset.css的文章,文章中关于css的部分分析的非常不错,但对于文中关于强调把CSS分别配置,对每一个
- Adodb.Stream是ADO的Stream对象,提供存取二进制数据或者文本流,从而实现对流的读、写和管理等操作. 组件:&qu
- 游戏开始前的注意事项1:游戏《外星人入侵》将包含很多文件,请在你的D盘中新建一个空文件夹,并将其命名为alien_invasion.请务必将
- 阅读之前:在看文章具体内容之前,希望你可以 先打开IE8,打开http://www.taobao.com,然后在地址栏里输入:javascr
- Javascript函数类型判断完美解决方案在判断函数类型时,我们通常使用typeof方法,一般情况下,它会得到我们所预想的效果。但是,有一
- python PIL 将数组值转成图片安装 PIL 包pip install pillow将二维数据转换成单通道图片from PIL imp
- PDO::preparePDO::prepare — 准备要执行的SQL语句并返回一个 PDOStatement 对象(PHP 5 >
- 准备下载安装Python3官网下载即可,选择合适的版本:https://www.python.org/downloads/安装一直下一步即可
- 有的时候,可能会遇到表格中出现重复的索引,在操作重复索引的时候可能要注意一些问题。一、判断索引是否重复a、Series索引重复判断s = S