洗礼灵魂,修炼python(75)--全栈项目实战篇(3)—— 账户注册登录管理系统
要求:
1.系统可以创建用户和登录用户,根据用户的输入不同,做出不同的反应(创建还是登录)
2.创建用户不能创建已存在的用户名
3.登录用户的操作最多只能有三次,超过三次冻结账户,每使用一次提示用户还有多少次机会
4.认证用户成功后显示欢迎用语
分析:
1.根据用户输入不同,做出不同反应,那么则可以使用一个变量来接受用户输入的值,然后用if判断,如果是什么就是什么
2.创建用户输入的用户名要和已存在的用户名(包括冻结用户名和正常用户名)做对比,那么就得有个容器来存储已存在的用户数据,并且每次使用此系统时,都要调用一次这个容器,当创建好用户后又要更新用户数据
3.登录操作只能有三次,那么可以使用循环语句,for i in range(3)或者while True,在while了三次之后break跳出循环
4.最后认证用户就简单了,用户名和对应的密码与存放用户数据的容器内的一致就print下认证成功
开始写代码:
本项目所有相关文件及代码我已发布到GitHub上:传送门(这是我之前做的,不过实现效果基本和本项目一致)
我希望你自己已经事先经过思考并实践雇了再看以下代码:
1.准备四个文件(这些文事先是手动创建的),两个文本文档用于保存数据,一个作为正常用户保存数据,一个作为冻结用户保存数据 ,一个主程序py文件,一个解冻用户py文件。
2.在什么操作系统环境使用随便你,我这个是通用的
正常用户数据文档为database.txt,数据如下:(显示不正常是因为有中文,不影响操作)
1 | { '�������Գ' : 'abc@1234' , '�����ũ' : 'test.com' , 'programmer' : 'a123@.com' , 'test' : 'test@1234' , 'coder' : 'Iwasacoder' , 'forloop' : 'testasdf' } |
冻结用户诗句文档为free.txt,数据如下:
1 | { 'coder' : 'python558' , 'yang' : 'yang1234' , 'ling' : 'python@415' } |
主程序mylogin_and_register.py代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #-*- coding:utf-8 -*- # import json # data=json.loads(f.read().replace("'",'"')) #将字符串里的单引号替换成双引号,带u'的字符串,u也要去掉 # print(type(data)) # f.close() f = open ( 'database.txt' , 'r' ) database = eval (f.read()) f.close() f2 = open ( 'free.txt' , 'r' ) free = eval (f2.read()) f.close() print ( 'Welcome to login xx system/欢迎使用XX登录系统' ) kw = input ( '您想注册账户/登录账户,注册请输入【R】键,登录请输入【L】键:' ) if kw = = 'R' : #注册账户 print ( 'register account:' ) username = input ( 'please enter your name/请输入您的账户名:' ) while username in database.keys() or username in free.keys(): #如果昵称与已存在的账户名重复,提示重新取名 print ( 'The "%s" you entered already exists. Please enter a different one/您输入的"%s"已被使用,请输入其他帐户名' % (username,username)) username = input ( 'please enter your name/请输入您的账户名:' ) else : password = input ( 'please enter your password/请输入您的密码:' ) while len (password)< 8 : #密码规则 print ('Your password is too simple, at least 8 digits. We recommend that you enter letters, numbers, special symbol combinations / 您的密\ 码过于简单,需要至少 8 位数,我们建议你输入字母,数字,特殊符号组合') password = input ( 'please enter your password/请输入您的密码:' ) else : database[username] = password f = open ( 'database.txt' , 'w' ) f.write( str (database)) f.close() print ( 'Registered account success/注册账户成功' ) '使用while循环' if kw = = 'L' : #登录账户 count3 = 0 while count3< 3 : username = input ( 'please enter your name/请输入您的账户名:' ) password = input ( 'please enter your password/请输入您的密码:' ) if username in database.keys() and password = = database[username]: print ( '登录成功' ) break elif count3 = = 2 : if username not in database.keys(): pass else : free[username] = database.pop(username) f2 = open ( 'free.txt' , 'w' ) f2.write( str (free)) f2.close() print ( '很抱歉,您的次数已用完,账户已锁定,程序将退出' ) else : print ( '登录失败,请检查你的帐户名和密码。三次登录失败账户将锁定,您还有%d次机会' % ( 2 - count3)) count3 + = 1 if count3 = = 3 : rerun = input ( '您是我们的VIP客户,现在官方给您无限次登录机会,并且账户不会被冻结,您需要继续登录吗?[y/n]:' ) if rerun = = 'y' : count3 = 0 '使用for循环' # count2=3 #做为登录次数计数 # if kw == 'L':#登录账户 # for i in range(3): # username=input('please enter your name/请输入您的账户名:') # password=input('please enter your password/请输入您的密码:') # count2-=1 # if username in database.keys() and password == database[username]: # print('登录成功') # break # elif i ==2: # if username not in database.keys(): # pass # else: # free[username]=database.pop(username) # f2=open('free.txt','w') # f2.write(str(free)) # f2.close() # print('很抱歉,您的次数已用完,账户已锁定,程序将退出') # else: # print('登录失败,请检查你的帐户名和密码。三次登录失败账户将锁定,您还有%d此机会'%count2) if kw not in ( 'R' , 'L' ): print ( '输入有误' ) |
解冻用用户unfree.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #-*- coding:utf-8 -*- f = open ( 'database.txt' , 'r' ) database = eval (f.read()) f.close() f = open ( 'free.txt' , 'r' ) free = eval (f.read()) f.close() username = input ( '请输入您需要解冻的帐户名:' ) database[username] = free.pop(username) f = open ( 'database.txt' , 'w' ) f.write( str (database)) f.close() print ( '帐户名%s已经解冻,可以正常登录了' % username) |
总结:
其实很简单对吧,然后有个很巧妙的eval()用法,要注意了,比pickle和json模块来的更方便,不过数据够大,还是建议用json或者pickle吧。
你说这代码还可以优化吗?当然可以,文件是手动创建的,你可以实现自动创建加自动增删数据;你可以加入图形化界面;加入广告操作;加入不同等级的用户分配不同的权限;可以去掉使用文本文档来存储数据,而把数据对接到数据库里等等的,代码只作为参考,如果你们有更好的代码自然不错。
分类:
洗礼灵魂,修炼python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】