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


猜你喜欢
- transpose() 这个函数如果括号内不带参数,就相当于转置,和.T效果一样,而今天主要来讲解其带参数。我们看如下一个numpy的数组:
- vue在data中定义图片相对路径:data() { return { active: 1, ico
- pycharm出现no module named xlwt问题首先声明,我是初学者,今天按照书上步骤,创建Excel文件,当我的xlwt安装
- 说明1、Task是Future的子类,Task是对协程的封装,我们把多个Task放在循环调度列表中,等待调度执行。2、Task对象可以跟踪任
- watch除了可以监听数据的变化,路由的变化也能被其监听到效果如下:具体代码当路由发生变化后,在watch中写具体的业务逻辑let vm =
- 本文通过实例代码介绍了如何在jscript和vbscript中使用操作FileSystemObject(fso)对象模式来编程.
- 1.使用open()函数打开文件夹在读取一个文件的内容之前,需要先打开这个文件。在Python程序中可以通过内置函数open()来打开一个文
- 微信小程序实现一个简单的select下拉框,供大家参考,具体内容如下用的是transform过渡,没用动画看看效果废话不多说,直接上代码wx
- Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。分页一般和表格一起用,分页链接作为表格的一部分,将分页链
- 我们在 Bitcoin SV 上实现了一个数独游戏智能合约,利用之前介绍过的一种合约范式可以将游戏中寻找解题方案的过程外包上链。因为求解数独
- php输出文字乱码的解决办法:在php文件最开头写上:<?phpheader('Content-type: text/html
- Python——re模块 简介定义:re模块称为正则表达式;作用:创建一个"规则表达式",用于验证和查找符合规
- 目录uni-app 介绍html部分js部分创建实例开始录音结束录音播放录音暂停播放提交录音到后端重新录制onLoad部分计时器数据部分un
- 目录问题复现隐式转换总结参考问题在工作中发现,有一个接口只执行一条SQL查询语句,并且SQL明明使用了主键列,但是速度很慢。在MySQL中E
- Python3.5 版本引入了类型提示(Type Hints),它允许开发者在代码中显式地声明变量、函数、方法等的类型信息。这种类型声明不会
- 程序运行前加载1.导包前面加下划线,运行前加载2.把要加载的写在init函数里面路由设置路由的作用:根据不同的请求指定不同的控制器路由函数:
- 作为一个运维开发,不像业务开发只专注后端业务开发即可,常常需要自己来构建前端的东西,当然系统交互体验说的过去就行,要求也没有业务系统那么高。
- 写此篇文章,我花10块购买了域名ssw.ski。目的是编写python脚本,通过dnspod api获取个人域名内的dns解析记录,免登录实
- 调用:var pageChange = function (index) { &n
- 在索引列上使用函数使得索引失效的是常见的索引失效原因之一,因此尽可能的避免在索引列上使用函数。尽管可以使用基于函数的索引来解决索引失效的问题