洗礼灵魂,修炼python(75)--全栈项目实战篇(3)—— 账户注册登录管理系统

时间:2022-09-02 07:25:32

要求:

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,数据如下:(显示不正常是因为有中文,不影响操作)

{'�������Գ': 'abc@1234', '�����ũ': 'test.com', 'programmer': 'a123@.com', 'test': 'test@1234', 'coder': 'Iwasacoder', 'forloop': 'testasdf'}

冻结用户诗句文档为free.txt,数据如下:

{'coder': 'python558', 'yang': 'yang1234', 'ling': 'python@415'}

主程序mylogin_and_register.py代码:

#-*- 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:

#-*- 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(75)--全栈项目实战篇(3)—— 账户注册登录管理系统的更多相关文章

  1. 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡&plus;商城项目(模拟京东淘宝)

    本次项目相当于对python基础做总结,常用语法,数组类型,函数,文本操作等等 本项目在博客园里其他开发者也做过,我是稍作修改来的,大体没变的 项目需求: 信用卡+商城: A.信用卡(类似白条/花呗) ...

  2. 洗礼灵魂,修炼python(73)--全栈项目实战篇(1)——【转载】前提准备之学习ubuntu

    本篇是为项目实战做准备,学习Linux是必备的,不然都不好意思叫全栈对吧?下面是一位资深大神写的文章,够详细,我也不用浪费时间再写了 原文链接:Ubuntu学习——第一篇 内容: 一. Ubuntu简 ...

  3. 洗礼灵魂,修炼python(78)--全栈项目实战篇(6)—— 多级目录菜单之地址管理系统

    相信各位都在在网上买过东西吧?那么今天我的主题就是写个在线购物系统,是不可能的,哈哈(后期确实有这个项目),那么购物都填写过快递地址吧?然后网上查个地址都有地址管理吧? 要求: 1.打印出省.市.县等 ...

  4. 洗礼灵魂,修炼python(86)--全栈项目实战篇(12)—— 利用socket实现文件传输&sol;并发式聊天

    由于本篇博文的项目都很简单,所以本次开个特例,本次解析两个项目,但是都很简单的 项目一:用socket实现文件传输 本项目很简单,作为小项目的预热的,前面刚学完socket,这里马上又利用socket ...

  5. 洗礼灵魂,修炼python(80)--全栈项目实战篇(8)—— 计算器

    用正则表达式开发一个计算器,计算用户给定的一串带有加减乘除的公式. 要求:不能使用eval转换字符串 分析: 要求简单,就是计算混合运算,但是不能使用eval直接转换,主要就是把整个式子中的小括号优先 ...

  6. 洗礼灵魂,修炼python(79)--全栈项目实战篇(7)—— 多级目录菜单之地址管理系统升级版

    要求: 1.在上一篇的地址管理系统的基础上做升级改动 2.添加增删改的功能 3.尽量的贴近生活常识中的地址管理 分析: 需求不用多说了,干就完了 相关文件源码地址:github 这次由于要有增删改的操 ...

  7. 洗礼灵魂,修炼python(77)--全栈项目实战篇(5)—— ATM自动存取机系统

    要求: 1.完成常识中的ATM存取款机功能 2.把ATM机故障考虑进去 3.不能直接输入账户名和卡号等等信息,模拟出插银行卡让ATM机自动读取卡信息 4.密码验证超过三次错误即锁定账户 5.操作类型有 ...

  8. 洗礼灵魂,修炼python(81)--全栈项目实战篇(9)—— 购物商城登录验证系统

    都在线购物过吧?那么你应该体验过,当没有登录账户时,点开购物车,个人中心,收藏物品等的操作时,都会直接跳转到登录账户的界面,然后如果登录一次后就不用再登录,直到用户登出. 是的,本次项目就是做一个登录 ...

  9. 洗礼灵魂,修炼python(76)--全栈项目实战篇(4)—— 购物车系统

    要求: 1.基本符合日常购物车的要求(根据你的想法开放性提升功能) 2.展示商品信息,并且可随时上新商品 3.用户购买每一样商品时都对所剩的钱做一次对比,如果够则提示“已购买”,如果不够提示“余额不足 ...

随机推荐

  1. 用jquery编写的tab插件

    用jquery编写的tab插件 源码 $.fn.ss_tab = function (options) { var box = $(this); var btns = $(this).find(&qu ...

  2. ODI中通过配置表和自定义逆向工程获取数据库信息

    自定义逆向工程RKM 从配置表meta_db, meta_table, meta_column, meta_key中获取生产库的元数据信息.

  3. Web应用开发工具及语言需要具备的功能探索

    1 前言 最近一个多月在做Web项目,用到的技术有(也不算泄漏公司机密吧): 后台:Struts 2(with JSP/FreeMarker).Spring.Hibernate.MySQL.Web S ...

  4. 运行在TQ2440开发板上以及X86平台上的linux内核编译

    一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...

  5. iOS开发之MD5封装及应用

    一.MD5的封装 #define CC_MD5_DIGEST_LENGTH 16 - (NSString *)toMD5 { const char* input = [self UTF8String] ...

  6. 洛谷 P4016负载平衡问题【费用流】题解&plus;AC代码

    洛谷 P4016负载平衡问题 P4014 分配问题[费用流]题解+AC代码 负载平衡问题 题目描述 GG 公司有n个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n ...

  7. &lbrack;error&rsqb;error while loading shared libraries&colon; libpcre&period;so&period;1 解决

    nginx 安装好之后,启动的时候报错 [root@localhost nginx-1.6.2]# /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin ...

  8. 为什么比特币和以太坊未必真得比EOS更去中心化?

    在区块链行业里,有两派人一直在争论:一个是以比特币和以太坊为首的社群,另一个是以EOS为首的社群.这两群人一直在争论谁才是真正的未来,双方都认为自己这边更有未来.其中EOS抗争的重点就是100万TPS ...

  9. 大数据基础Hadoop 2&period;x入门

    hadoop概述 存储和分析网络数据 三大组件 MapReduce 对海量数据的处理 思想: 分而治之 每个数据集进行逻辑业务处理map 合并统计数据结果reduce HDFS 储存海量数据 分布式存 ...

  10. ASP&period;NET Web API 2&period;0 统一响应格式

    传统实现 在搭建 Web API 服务的时候,针对客户端请求,我们一般都会自定义响应的 JSON 格式,比如: { "Data" : { "Id" : 100, ...