本文章自创,含有用户登录,注册,且包含图形界面,大家可以把图形界面这部分当成模板进行学习,大家互相学习,有不对的在评论区指出,谢谢大家。 记得点个关注,谢谢你。
# 登录和注册功能的合并
# 专门定义数据变量,存放已经注册的用户信息
import PySimpleGUI as sg
userlist = [] # 存放所有的用户名
pwdlist = [] # 存放所有的用户密码
blacklist = [] # 存放所有的黑名单用户
#存文件 将文件写入列表 在进行判断
# 读取所有数据的方法
"""def readallusers():
# 读取所有的注册信息 使用a+模式打开文件,在调整指针位置,防止文件不存在时报错
with open('./user.txt','w+') as fp:
fp.seek(0) # 调整当前的的指针位置到文件头部
res = fp.readlines() # 按照每一行读取所有的用户数据
for i in res: # 循环读取的每一行数据
r = i.strip() # 处理每一个换行 admin:123\n ==> admin:123
arr = r.split(':') # admin:123 ==> ['admin','123']
userlist.append(arr[0]) # 把用户名追加到 用户名列表中
pwdlist.append(arr[1]) # 把用户对应的密码 追加到 用户密码 列表中
# 获取黑名单数据
with open('./black.txt','w+',encoding='utf-8') as fp:
fp.seek(0)
res = fp.readlines()
for i in res:
blacklist.append(i.strip())
"""
def panduan():
danger = ["傻", "蠢", "笨", "呆", "愚"]#判断是否含有敏感词,可以修改
username = input('欢迎注册,请输入用户名:')
usernames = list(username)#将字符串变为单个字符
k=1
while k:
for i in usernames:
if i in danger:
print("重新输入用户名,含有关键字")
k=0
break
else:
print("名称合理")
# 封装一个函数 完成注册功能
def register():
layout = [
[sg.Text('请输入您的信息')],
[sg.Text('账号'), sg.InputText()],
[sg.Text('密码'), sg.InputText()],
[sg.Button('确定'), sg.Button('取消')]
]
window = sg.Window('Python GUI', layout)
while True:
event, values = window.read()
if event == None:#差 关闭窗口结束输入
break
if event == '确定':#确定进行赋值
c = values[0]
d = values[1]
window.close()
# 定义一个变量。用于控制外循环
site = True
# 循环执行 用户名输入操作
while site:
# 用户输入用户名
username = c
# 用户名需要检测是否已经存在
if username in userlist:
print('当前用户名已经存在,请更换用户名')
site=False
else:
# 循环输入密码,如果都正确,循环结束,
while True:
# 输入密码
pwd = d
# 检测密码从长度不能低于3位
if len(pwd) >= 3:
# 输入确认密码
repwd = input('请输入确认密码:')
# 检测确认密码是否和密码一致
if pwd == repwd:
# 用户名和密码都正确,就可以写入文件 用户名:密码
# 打开文件,写入数据
with open('./user.txt','w+',encoding='utf-8') as fp:
fp.write(f'{username}:{pwd}\n')
print(f'注册成功:用户名:{username}')
# 结束循环
# 结束外循环
site = False
# 结束内循环
break
else:
print('两次密码不一致,请重新输入')
else:
print('密码格式不正确')
# 封装函数实现登录功能
def login():
# 定义变量 控制登录的外循环
islogin = True
# 定义变量,用户密码的错误次数的检测
errornum = 3
with open('./user.txt','r') as fp:
fp.seek(0) # 调整当前的的指针位置到文件头部
res = fp.readlines() # 按照每一行读取所有的用户数据
for i in res: # 循环读取的每一行数据
r = i.strip() # 处理每一个换行 admin:123\n ==> admin:123
arr = r.split(':') # admin:123 ==> ['admin','123']
userlist.append(arr[0]) # 把用户名追加到 用户名列表中
pwdlist.append(arr[1]) # 把用户对应的密码 追加到 用户密码 列表中
#print(userlist[0])
# 获取黑名单数据
with open('./black.txt','w+',encoding='utf-8') as fp:
fp.seek(0)
res = fp.readlines()
for i in res:
blacklist.append(i.strip())
#用户登录页面
layout = [
[sg.Text('请输入您的信息')],
[sg.Text('账号'), sg.InputText()],
[sg.Text('密码'), sg.InputText()],
[sg.Button('确定'), sg.Button('取消')]
]
window = sg.Window('Python GUI', layout)
while True:
event, values = window.read()
if event == None: # 差 关闭窗口结束输入
break
if event == '确定': # 确定进行赋值
c = values[0]
d = values[1]
window.close()
# 循环执行用户的登录
while islogin:
# 获取用户登录时输入的用户名
username = c
# 检测当前用户名是否存在
if username in userlist:
# 检测用户是否属于锁定状态? 判断是否在黑名单中
if username in blacklist:
print('当前用户属于锁定状态,不可登录,请去忏悔把。。。')
else:
# 定义循环,执行密码输入
while True:
# 让用户输入密码
pwd = d
# 获取用户名在用户列表中的索引,获取位置一一对应
inx = userlist.index(username)
# 检测用户输入的密码是否正确
if pwd == pwdlist[inx]:
print('登录成功')
# 结束循环
islogin = False # 结束外循环变量
break # 结束内循环
else:
# 密码错误,则修改次数变量
errornum -= 1
# 判断当前的密码错误次数 == 0
if errornum == 0:
print('曾经有那么几次机会摆在你的面前。你没有把握住,恭喜你,成功的锁定了你的账户,请联系相关人员进行忏悔把!')
# 如何才能锁定账户信息? 把需要锁卡的用户拉入黑名单
with open('./black.txt','w+',encoding='utf-8') as fp:
fp.write(username+'\n')
# 结束循环
islogin = False # 结束外循环变量
break # 结束内循环
else:
print(f'密码输入错误,请重新输入密码,你还有{errornum}次机会')
else:
#用户名不存在
print('用户名错误,请重新输入')
# 判断当前的脚本是否作为一个主进程脚本在执行
if __name__ == '__main__':
# 调用初始化方法,加载数据
#readallusers()
while True:
vars = '''
***************************************
** 登录(1) 注册(2) 判断(3) 退出(4) **
***************************************
'''
print(vars)
# 让用户选择对应的操作
num = input('请输入对应的序号,体验功能:')
if num == '1':
login()
if num == '2':
register()
if num == '3':
panduan()
if num == '4':
print("谢谢使用,再见")
break