python 作业1 三级菜单/购物车
1. 作业一
输入用户名和密码
认证成功显示登陆信息
错误三次后锁定
作业二
三级菜单
可依次进入各级菜单
1.北京
2.上海
3.HK
>>1
1.海淀
2.朝阳
3.昌平
>>3
1.沙河
2.回龙观
3.天通原
q: 推出 ,b :返回上一层
#!/usr/bin/env python # -*- coding: utf-8 -*- """ __title__ = '' __author__ = 'guazhang' __mtime__ = '9/11/17' """ # "" # 打印省、市、县三级菜单 # 可返回上一级 # 可随时退出程序 # # "" menu = { 'a':{ 'd':{ 'c':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龙观':{}, }, '朝阳':{}, '东城':{}, }, '上海':{ '闵行':{ "人民广场":{ '炸鸡店':{} } }, '闸北':{ '火车战':{ '携程':{} } }, '浦东':{}, }, '山东':{}, } exit_flag = False # 跳出整个循环的标志 当为True 就跳出大循环 while not exit_flag: for i in menu: # 打印出第一级菜单,让选择 print(i) p_name = input("p_name>>:").strip() # 输入要选择的省份名字 if p_name in menu: # 如果输入的省份名字再这个字典的key 里面就进可以进入下一级菜单 print("please input your select c name %s"%menu[p_name].keys()) # 打印出这个省份城市的名字 while not exit_flag: # 封装循环 第二级菜单 for i in menu[p_name]: # 打印第二级菜单城市名字 print(i) c_name = input("c_name>>:").strip() # 选择一个城市的名字 if c_name == "b": # b 返回上一级,就是跳出第二级循环 break elif c_name == "q": # 退出整个循环 exit_flag = True while not exit_flag: # 封装第三级循环 for i in menu[p_name][c_name]: # 打印第三级菜单里面区域的名字,就是第二级的值 print(i) e_name = input("e_name>>:").strip() # 选择一个 if e_name == "b": #判断输入值 break elif e_name == "q": exit_flag = True else: # 最后一层,只能是返回i或者退出,其他的就循环 print("\033[1;33;44myou have get the end,please quit[q] or back[b] !\033[0m") continue elif p_name == "b": # 第一级菜单返回 什么也不干, pass elif p_name == "q": # q 就退出 exit_flag = True else: #其他就一直循环 continue
# 基础需求: # # 让用户输入用户名密码 # 认证成功后显示欢迎信息 # 输错三次后退出程序 # # 有一个问题这里,为什么要去根据名字定义登陆次数 # 每个名字登陆次数限制为3次,如果前两个是用一个用户登陆的, # 第三次用一个新用户登陆,如果登陆失败就会把这个新用户锁定,这不是想要的,所以每个用户的登陆次数要分别记录, # 字典适合这个多信息记录根据key 可以找到对应的登陆次数 # # # alex :key ,123:passwd,0:count # # count =0 # passwd=123 # dict1={'alex':[passwd,count],'Tom':[passwd,count]} # # while True: # name = input("please input your name:") # password = int(input("please input your passwd")) # print(dict1[name][1]) # if not dict1[name] or dict1[name][1] > 2: # print("the name is None or more than 3 times") # break # if password == dict1[name][0]: # print("login ok") # break # else: # print("name or passwd error") # dict1[name][1] +=1 # print(dict1)
4. 作业四
# 可以支持多个用户登录(提示,通过列表存多个账户信息) # 用户3次认证失败后,退出程序,再次启动程序尝试登录时, # 还是锁定状态(提示: 需把用户锁定的状态存到文件里) count =0 passwd=123 dict1={'alex':[passwd,count],'Tom':[passwd,count]} while True: name = input("please input your name:") password = int(input("please input your password:")) if name not in dict1.keys(): print("name %s is not in dict"% name) break if dict1[name][1] >2: print("try more time and add blacklist") with open("blacklist.txt" ,"a") as f: f.write('%s|'%name) break with open("blacklist.txt","r") as f: l_user=f.read().split("|") if l_user == name: print("the name %s locked"%name) break if password == passwd: print("login ok") break else: print("id or passwd err") dict1[name][1]+=1 print(dict1)
购物车
#!/usr/bin/env python # -*- coding: utf-8 -*- """ __title__ = '' __author__ = 'guazhang' __mtime__ = '9/11/17' """ """ 用户名和密码存放于文件中,格式为:egon|egon123 启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表,失败则重新登录,超过三次则退出程序 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出,退出时,打印已购买商品和余额 1. 建一个文件保存用户名和密码 2.登陆次数 3.根据商品购买并结算 4.提示余额 """ msg_dic={ 'apple':10, 'tesla':100000, 'mac':3000, 'lenovo':30000, 'chicken':10, } count=cost=s = 0 #初始化值 with open("user_id.txt",'r') as f: # 读出user id 和密码 user_id=f.read().strip() print(user_id) user = user_id.split('|')[0] password = user_id.split('|')[1] print("user name is %s,password is %s"%(user,password)) flag = True # 设置跳出循环标志位 while flag: username= input("please input your name:").strip() # 输入id 和密码 paswd = input("please input your passwd:").strip() if username != user or paswd != password: # 不正确 就开始计数,大于3次就把标志位标为false,退出循环 print("your is or passwd wrong") s+=1 if s >2: flag = False else: print("login ok") # 登陆成功 wages = input("please input your wages:") # 输入工资 if not wages.isdigit(): # 不是纯数字型的就跳出循环 print("your wages is not number") flag =False print("the goods list %s"% msg_dic) # 打印商品信息 list_info=[] # 生成一个新列表记录买的商品 while flag: for i in msg_dic: # 打印商品名 print(i) goods = input("please select your goods:").strip() # 输入想要买的商品名 if goods not in msg_dic.keys(): # 不是商品,判断是不是想要退出,如果等于q 就跳出循环 if goods == "q": flag= False print('please input good name in list:')# 如果输入的不是商品名也不是q 就继续输入 continue count = input('please chose your count:').strip() # 输入购买个数 if not count.isdigit(): # 个数不是纯数字的就继续输入 print("your count must be number") continue list_info.append((goods,int(msg_dic[goods]),int(count))) # 纪律购买的商品信息 print('list_info',list_info) wages = int(wages) # 转换工资为整型,计算商品花费 for i in list_info: cost += int(i[1]) * int(i[2]) # 索引为1 的是商品价格,2 为购买个数,并转化为整形计算 if wages >= cost: # 判断工资和花费大小和剩余多少 print("you left %s"%(wages - cost)) elif wages < cost: # 如果钱不够就推迟循环和打印提示 print("\033[1;33;44myou don't have much money !\033[0m") flag =False

浙公网安备 33010602011771号