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
View Code

 

 

 

 

 

 

 

# 基础需求:
#
#     让用户输入用户名密码
#     认证成功后显示欢迎信息
#     输错三次后退出程序
#
# 有一个问题这里,为什么要去根据名字定义登陆次数
# 每个名字登陆次数限制为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

 

posted @ 2017-09-04 14:39  guazhang  阅读(361)  评论(0)    收藏  举报