[Python学习日记-29] 开发基础练习2——三级菜单与用户登录

[Python学习日记-29] 开发基础练习2——三级菜单与用户登录

简介

三级菜单

用户登录

简介

        该练习使用了列表、字典、字符串等之前学到的数据类型,用于巩固实践之前学习的内容。

三级菜单

一、题目

数据结构:

menu = {
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '网易': {},
                'google': {},
            },
            '中关村': {
                '爱奇艺': {},
                '汽车之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {
                '新东方': {},
                '北航': {},
            },
            '天通苑': {},
            '回龙观': {},
        },
        '朝阳': {},
        '东城': {},
    },
    '上海': {
        '闵行': {
            '人民广场': {
                '炸鸡店': {}
            },
        },
        '闸北': {
            '火车站': {
                '携程': {},
            },
        },
        '浦东': {},
    },
    '山东': {},
}

需求:

  • 可依次选择进入各子菜单
  • 可从任意一层往回退到上一层
  • 可从任意一层退出程序

所需知识点:列表、字典

二、答案——普通版

v1.0.1:

menu = {'北京':{'海淀':{'五道口':{'soho':{},'网易':{},'google':{}},'中关村':{'爱奇艺':{},'汽车之家':{},'youku':{},},'上地':{'百度':{},},},'昌平':{'沙河':{'新东方':{},'北航':{},},'天通苑':{},'回龙观':{},},'朝阳':{},'东城':{},},'上海':{'闵行':{'人民广场':{'炸鸡店':{}}},'闸北':{'火车站':{'携程':{}}},'浦东':{},},'山东':{},
}while True:for k in menu:print(k)choice = input(">:").strip()if not choice:continueif choice in menu:while True: # 进入第二层for k in menu[choice]:print(k)choice2 = input(">>:").strip()if not choice2:continueif choice2 in menu[choice]:while True: # 进入第三层for k in menu[choice][choice2]:print(k)choice3 = input(">>>:").strip()if not choice3:continueif choice3 in menu[choice][choice2]:print("go to ",menu[choice][choice2][choice3])elif choice3.lower() == "b":breakelif choice3.lower() == "q":quit()else:print("节点不存在")elif choice2.lower() == "b":breakelif choice2.lower() == "q":quit()else:print("节点不存在")elif choice.lower() == "b":print("无路可退")elif choice.lower() == "q":quit()else:print("节点不存在")

代码输出如下: 

v1.0.2:

menu = {'北京':{'海淀':{'五道口':{'soho':{},'网易':{},'google':{}},'中关村':{'爱奇艺':{},'汽车之家':{},'youku':{},},'上地':{'百度':{},},},'昌平':{'沙河':{'新东方':{},'北航':{},},'天通苑':{},'回龙观':{},},'朝阳':{},'东城':{},},'上海':{'闵行':{'人民广场':{'炸鸡店':{}}},'闸北':{'火车站':{'携程':{}}},'浦东':{},},'山东':{},
}# 保存进入的每一层记录
current_layer = menu
layers = []
while True:for k in current_layer:# menu[北京]print(k)choice = input(">>:").strip()if not choice:continueif choice in current_layer:# menu[北京]layers.append(current_layer)# 进入下一层,保存当前层current_layer = current_layer[choice]# menu[北京][昌平]elif choice == 'b':if len(layers) != 0:current_layer = layers.pop()else:print("已经是顶层!")

代码输出如下: 

 

三、答案——进阶版

# -*- coding:utf-8 -*-
layers = [{'北京': {'海淀': {'五道口': {'soho': {}, '网易': {}, 'google': {}}, '中关村': {'爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': {'百度': {}, }, }, '昌平': {'沙河': {'新东方': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': {'闵行': {'人民广场': {'炸鸡店': {}}}, '闸北': {'火车站': {'携程': {}}}, '浦东': {}, }, '山东': {}, }]
while True:[print(k) for k in layers[-1]] # menu[北京]choice = input(">>:").strip()if choice in layers[-1]:layers.append(layers[-1][choice]) # 进入下一层,保存当前层elif choice.lower() == 'b' and len(layers) > 1:del layers[-1]elif choice.lower() == 'q':quit("有缘再见")else:print("输入异常")

代码输出如下: 

用户登录

一、题目

基础需求:

  • 让用户输入用户名密码
  • 认证成功后显示欢迎信息
  • 输错三次后退出程序

升级需求:

  • 可以支持多个用户登录(提示:通过列表存多个账户信息)
  • 用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)

二、答案

1、基础需求版本

# -*- coding:utf-8 -*-_user = "alex"
_passwd = "abc123"count = 0while count < 3:username = input("Username:").strip()password = input("Password:").strip()if username == _user and password == _passwd:print("welcome ...")breakelse:print("Wrong username or password.")count += 1
else:print("Too many attempts.")# 连续输错三次,并不是输错三次
accounts = {'alex': ['abc123', 0],'jack': ['1413', 1],'rain': ['ddsss', 0]
}

代码输出如下: 

 

2、升级需求版本

user_data:(用于存储用户信息)

{'jove': ['abc123', 0], 'jack': ['1413', 0], 'rain': ['ddsss', 0]}        # 用户名:[密码,锁定状态]

# -*- coding:utf-8 -*-f = open('user_data','r')
accounts = eval(f.read())count = 0
last_username = None
is_same_user = Truewhile count < 3:username = input("Username:").strip()password = input("Password:").strip()if last_username is None:  # 这肯定是第一次last_username = usernameif last_username != username:  # 代表这一次输入的跟上一次用户不一致is_same_user = False  # 小旗子降下来if username in accounts:if accounts[username][1] == 0:  # 判断用户是否锁定if password == accounts[username][0]:print("welcome ...")breakelse:print("Wrong username or password.")else:print("Account was lock,pleace call Administrator.")else:print("Account not live.")count += 1
else:print("Too many attempts.")if is_same_user == True:  # 3次输入的一致,锁定用户accounts[username][1] = 1f = open('user_data','w')f.write(str(accounts))f.close()

代码输出如下: 

账号锁定后的文件状态:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149659.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

什么是unix中的fork函数?

一、前言 在本专栏之前的文档中已经介绍过unix进程环境相关的概念了&#xff0c;本文将开始介绍unix中一个进程如何创建出新进程&#xff0c;主要是通过fork函数来实现此功能。本文将包含如下内容&#xff1a; 1.fork函数简介 2.父进程与子进程的特征 3.如何使用fork创建新进程…

基于单片机的指纹打卡系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52RC&#xff0c;采用两个按键替代指纹&#xff0c;一个按键按下&#xff0c;LCD12864显示比对成功&#xff0c;则 采用ULN2003驱动步进电机转动&#xff0c;表示开门&#xff0c;另一个…

通俗讲解javascript的实例对象、原型对象和构造函数以及它们之间的关系

今天通俗讲解一下js的对象&#xff0c;因为要通俗&#xff0c;所以可能描述不甚准确。 在js中&#xff0c;想要创建一个对象&#xff0c;首先要写出构造函数&#xff08;跟其它的语言不太一样哦&#xff0c;其它语言一般都会先写一个class 类名&#xff09;。 构造函数写法如…

Transformer-LSTM网络的轴承寿命预测,保姆级教程终于来了!

概要 关于轴承寿命预测&#xff0c;网络上的文章、代码层出不穷&#xff0c;但是质量却是令人堪忧&#xff0c;有很多文章甚至存在误导嫌疑。本期代码是在小淘怒肝好几个夜晚整理出来的&#xff0c;本期代码可以帮你迅速掌握一个轴承寿命预测的全过程。 为了不误导我的读者朋…

YOLOv5独家改进:严重遮挡和重叠目标场景解决方案 | 一种新的自适应算法轻量级通道分割和变换(ALSS)模块,自适应特征提取优化策略

💡💡💡本文解决什么问题:红外检测场景存在严重遮挡和重叠目标时的局限性的问题点。 💡💡💡提出了一种新的自适应算法轻量级通道分割和变换(ALSS)模块。该模块采用自适应信道分裂策略优化特征提取,并集成信道变换机制增强信道间的信息交换。这改善了模糊特征的提…

【d48】【Java】【力扣】LCR 123. 图书整理 I

思路 方法1&#xff1a;放进list,将list倒置&#xff0c;利用stream&#xff0c;将list改为int类型 方法2&#xff1a;递归&#xff1a;递归通用思路&#xff1b;明确每一层做什么确定返回值确定什么地方接收下层的返回值 每一层&#xff1a;调用下层&#xff0c;然后把自己…

Oracle AI理论与实践,企业落地篇干货满满

最近也是看到了圈子里的一位DBA好友&#xff0c;领导安排的工作是让负责AI的落地&#xff0c;而且也作为他业绩考核的指标&#xff0c;作为1名15年的DBA老兵来说&#xff0c;让AI落地面临的困难重重。 AI已经逐渐侵入到实际的生活中&#xff0c;最近我也是参加了Oracle官方在中…

【py】计算字母出现次数 字典储存

代码 用于计算用户输入字符串中每个字母字符的出现频率&#xff1a; from collections import Counter def calculate_character_frequency(): # 获取用户输入的字符串 user_input input("请输入一个字符串&#xff1a;") # 将字符串转换为小写…

摄影社团管理系统

基于springbootvue实现的摄影社团管理系统 &#xff08;源码L文ppt&#xff09;4-075 第四章 系统概要设计 4.1系统设计原理 设计原理是指系统的设计来源&#xff0c;它将需求合理地分解为功能&#xff0c;并抽象地描述系统的模块和其下的功能。在功能模块化后&#xff…

DeiT(ICML2021):Data-efficient image Transformer,基于新型蒸馏且数据高效的ViT!

Training data-efficient image transformers & distillation through attention&#xff1a;通过注意力训练数据高效的图像转换器和蒸馏 论文地址&#xff1a; https://arxiv.org/abs/2012.12877 代码地址&#xff1a; https://github.com/facebookresearch/deit 这篇论文…

KDD2024 时序论文(Time Series)

1、Generative Pretrained Hierarchical Transformer for Time Series Forecasting paper: https://dl.acm.org/doi/abs/10.1145/3637528.3671855 code&#xff1a;GitHub - SiriZhang45/FRNet: Code Implementation of FRNet 2、Fredformer: Frequency Debiased Transforme…

一文教你分不清路由器、交换机、光猫的概念,协助你对路由模组选型

当谈论网络设备时&#xff0c;我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成部分&#xff0c;承担着连接、传输和管理数据的重要任务。在日常生活和工作中&#xff0c;我们几乎离不开它们的存在&#xff0c;无论是在家中上网、办公室内…

Java:日期操作

目录 1、生成20240605180212格式的时间2、Date类型转LocalDate类型3、LocalDate类型基本操作4、格式化日期格式5、String 与 LocalDateTime 之间的转换6、生成指定时间段内的时间列表 1、生成20240605180212格式的时间 String dateTime LocalDateTime.now().format(DateTimeF…

【成品论文】2024年华为杯研究生数学建模A题成品论文

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024年华为杯研赛A题保奖思路matlab/py代码成品论文等&#xff08;后续会更新完整 点击链接获取群聊【2024华为杯研赛资料汇总】&#xff1a;https://qm.q…

Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】

Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】 目录 Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】 一、简单介绍 二、状态模式&#xff08;State Pattern&#xff09; 1、什么时候使用状态模式 2、使用状态模式的…

力扣516-最长回文子序列(Java详细题解)

题目链接&#xff1a;力扣516-最长回文子序列 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 dp五部曲。 1.确定dp数组和i下标的含义。 2.确定递推公式。 3.dp初始化。 4.确定dp的遍历顺序。 5.如果没有ac打印dp数组 利于debug。 每…

接口测试Postman关联,断言,前置,参数化用法

一、Postman下载 我们直接搜索Postman官网下载即可 Postman API Platformhttps://www.postman.com/ 二、使用 下载安装完成后我们需要登录注册&#xff0c;按照Postman的指示进行注册登录&#xff0c;不登陆可能有些功能无法使用 登陆完成我们就可以开始对接口进行测试了 …

C++速通LeetCode中等第27题-二叉树展开为链表(两种迭代法)

迭代法一&#xff1a;额外容器&#xff0c;前序遍历暴力求解&#xff08;空间O(n)) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …

Tableau|一入门

一 什么是BI工具 BI 工具即商业智能&#xff08;Business Intelligence&#xff09;工具&#xff0c;是一种用于收集、整理、分析和展示企业数据的软件系统&#xff0c;其主要目的是帮助企业用户更好地理解和利用数据&#xff0c;以支持决策制定。 主要功能&#xff1a; 1.数据…