第2章 Python基础-字符编码&数据类型 购物车&多级菜单 作业

Posted IT技术随笔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第2章 Python基础-字符编码&数据类型 购物车&多级菜单 作业相关的知识,希望对你有一定的参考价值。

作业 

一、三级菜单

数据结构:
menu = {
    \'北京\':{
        \'海淀\':{
            \'五道口\':{
                \'soho\':{},
                \'网易\':{},
                \'google\':{}
            },
            \'中关村\':{
                \'爱奇艺\':{},
                \'汽车之家\':{},
                \'youku\':{},
            },
            \'上地\':{
                \'百度\':{},
            },
        },
        \'昌平\':{
            \'沙河\':{
                \'老男孩\':{},
                \'北航\':{},
            },
            \'天通苑\':{},
            \'回龙观\':{},
        },
        \'朝阳\':{},
        \'东城\':{},
    },
    \'上海\':{
        \'闵行\':{
            "人民广场":{
                \'炸鸡店\':{}
            }
        },
        \'闸北\':{
            \'火车站\':{
                \'携程\':{}
            }
        },
        \'浦东\':{},
    },
    \'山东\':{},
}
View Code
需求:
  • 可依次选择进入各子菜单
  • 可从任意一层往回退到上一层
  • 可从任意一层退出程序

所需新知识点:列表、字典

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 输入省份、城市、县名称

China = {
    \'河南省\': {
        \'焦作市\': [\'武陟\', \'温县\', \'博爱\'],
        \'郑州市\': [\'新郑\', \'荥阳\', \'中牟\'],
        \'开封市\': [\'兰考\', \'尉氏\', \'杞县\'],
    },
    \'广东省\': {
        \'广州市\': [\'越秀\', \'荔湾\', \'番禺\'],
        \'深圳市\': [\'福田\', \'罗湖\', \'龙岗\'],
        \'东莞市\': [\'莞城\', \'南城\', \'东城\'],
    },
}

exit_flag = False
while not exit_flag:  # 第1层循环
    print("\\33[31;1m---------------------------------\\33[1m")
    print("         \\33[31;1m欢迎您来到中国\\33[1m      ")
    print("\\33[31;1m---------------------------------\\33[1m")
    for Province in China:
        print(Province)
    print()
    choice_province = input("1.请输入您要前往的 省份 (输入q退出,输入b返回上级):")
    print()
    if choice_province == "q":
        exit_flag = True
    elif choice_province == "b":
        continue  # 跳出第1层循环的剩下语句,继续进行下一次循环(选择省份)
    elif choice_province in China:
        while not exit_flag:  # 第2层循环
            for City in China[choice_province]:
                print(City)
            print()
            choice_city = input("2.请输入您要前往的 市区 (输入q退出,输入b返回上级):")
            print()
            if choice_city == "q":
                exit_flag = True
            elif choice_city == "b":
                break  # 跳出整个第2层循环,重新进行第1层循环(选择省份)
            elif choice_city in China[choice_province]:
                while not exit_flag:  # 第3层循环
                    for County in China[choice_province][choice_city]:
                        print(County)
                    print()
                    choice_county = input("3.请输入您要前往的 县 (输入q退出,输入b返回上级):")
                    print()
                    if choice_county == "q":
                        exit_flag = True
                    elif choice_county == "b":
                        break  # 跳出整个第3层循环,重新进行第2层循环(选择市区)
                    elif choice_county in China[choice_province][choice_city]:
                        print("---------------------------------")
                        print("您现在的位置是:", choice_province, choice_city, choice_county)
                        print("---------------------------------")
                        exit_flag = True
                    else:
                        print("您输入的县不存在")
                        print()
                        continue
            else:
                print("您输入的市区不存在")
                print()
                continue
    else:
        print("您输入的省份不存在")
        print()
        continue
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 输入省份、城市、县序号

China = {
    \'河南省\': {
        \'焦作市\': [\'武陟\', \'温县\', \'博爱\'],
        \'郑州市\': [\'新郑\', \'荥阳\', \'中牟\'],
        \'开封市\': [\'兰考\', \'尉氏\', \'杞县\'],
    },
    \'广东省\': {
        \'广州市\': [\'越秀\', \'荔湾\', \'番禺\'],
        \'深圳市\': [\'福田\', \'罗湖\', \'龙岗\'],
        \'东莞市\': [\'莞城\', \'南城\', \'东城\'],
    },
}

exit_flag = False
while not exit_flag:  # 第1层循环
    province_list = [] # 定义一个省份列表
    city_list = [] # 定义一个城市列表
    print("\\33[31;1m---------------------------------\\33[1m")
    print("         \\33[31;1m欢迎您来到中国\\33[1m      ")
    print("\\33[31;1m---------------------------------\\33[1m")
    for index,Province in enumerate(China,1):
        print("%s. %s" % (index,Province))
        province_list.append(Province) # 添加所有省份到省份列表中
    print()
    choice_province = input("一.请输入您要前往的省份序号 (输入q退出,输入b返回上级):")
    print()
    if choice_province == "q" or choice_province == "Q":
        exit_flag = True
    elif choice_province == "b" or choice_province == "B":
        continue  # 跳出第1层循环的剩下语句,继续进行下一次循环(选择省份)
    elif choice_province.isdigit():
        choice_province = int(choice_province)
        if choice_province >= 1 and choice_province <= len(province_list):
            while not exit_flag:  # 第2层循环
                for index,City in enumerate(China[province_list[choice_province-1]],1):
                    print("%s. %s" % (index,City))
                    city_list.append(City)  # 添加所有城市到城市列表中
                print()
                choice_city = input("二.请输入您要前往的城市序号 (输入q退出,输入b返回上级):")
                print()
                if choice_city == "q" or choice_city == "Q":
                    exit_flag = True
                elif choice_city == "b" or choice_city == "B":
                    break  # 跳出整个第2层循环,重新进行第1层循环(选择省份)
                elif choice_city.isdigit():
                    choice_city = int(choice_city)
                    if choice_city >=1 and choice_city <= len(city_list):
                        while not exit_flag:  # 第3层循环
                            for index,County in enumerate(China[province_list[choice_province-1]][city_list[choice_city-1]],1):
                                print("%s. %s" % (index, County))
                            print()
                            choice_county = input("三.请输入您要前往的县序号 (输入q退出,输入b返回上级):")
                            print()
                            if choice_county == "q" or choice_county == "Q":
                                exit_flag = True
                            elif choice_county == "b" or choice_county == "b":
                                break  # 跳出整个第3层循环,重新进行第2层循环(选择城市)
                            elif choice_county.isdigit():
                                choice_county = int(choice_county)
                                county_list = China[province_list[choice_province - 1]][city_list[choice_city - 1]] # 县列表
                                if choice_county >= 1 and choice_county <= len(county_list):
                                    print("---------------------------------")
                                    print("您现在的位置是:", province_list[choice_province-1],city_list[choice_city-1],county_list[choice_county-1])
                                    print("---------------------------------")
                                    exit_flag = True
                                else:
                                    print("您输入的县序号不存在")
                                    print()
                            else:
                                print("您输入的县序号不存在")
                                print()
                                continue
                    else:
                        print("您输入的城市序号不存在")
                        print()
                        continue
                else:
                    print("您输入的城市序号不存在")
                    print()
                    continue
        else:
            print("您输入的省份序号不存在")
            print()
    else:
        print("您输入的省份序号不存在")
        print()
        continue

 最终版本:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 三级菜单

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

current_layer = menu  # 最高层次为menu(是一个字典)
layer_list = []  # 存放每次进入的层次,用于退回上层
while True:
    for k in current_layer:  # 遍历字典key
        print("\\n", k)
    choice = input("\\n\\033[34;1m请输入您要前往的地址(输入q退出,输入b返回上级)>>>\\033[0m").strip()
    if choice == \'q\' or choice == \'Q\':  # 可从任意一层退出程序
        break
    elif choice == \'b\' or choice == \'B\':  # 可从任意一层往回退到上一层
        if not layer_list:
            print("\\n\\033[31;1m到顶了,哥\\033[0m\\n")
        else:
            current_layer = layer_list.pop()
    elif choice not in current_layer:
        print("\\n\\033[31;1m输入有误,请重新输入\\033[0m\\n")
    else:
        layer_list.append(current_layer)  # 在列表末尾追加当前层次(是一个字典)
        current_layer = current_layer[choice]  # 下一个层次(也就是下一次要遍历的字典)
        if not current_layer:
            print("\\n\\033[31;1m到底了,哥\\033[0m")
View Code

二、购物车程序

数据结构:
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
......
]
View Code
功能要求:

1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表

2、允许用户根据商品编号购买商品

3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒

4、可随时退出,退出时,打印已购买商品和余额

5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示

扩展需求:

1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买

2、允许查询之前的消费记录

1.0版本

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 goods = [
 5     {"name": "电脑", "price": 3999},
 6     {"name": "鼠标", "price": 200},
 7     {"name": "游艇", "price": 2000},
 8     {"name": "美女", "price": 998},
 9     {"name": "T恤", "price": 599},
10 ]
11 
12 shopping_carts = []  # 初始购物车为空
13 money = 0  # 初始工资为空
14 money += int(input("请输入您的工资:"))  # 只能输入数字
15 exit_flag = False
16 
17 while not exit_flag:
18     print("\\n------------商品列表-----------\\n")  # 商品列表
19     for index, product in enumerate(goods, 1):
20         print("%s.%s %d" % (index, product[\'name\'], product[\'price\']))
21     print("\\n-------------------------------\\n")
22     product_id = input("请输入您要购买的商品编号(输入q可退出):")
23     if product_id.isdigit():
24         product_id = int(product_id)
25         if product_id >= 1 and product_id <= len(goods):
26             if money >= goods[product_id - 1][\'price\']:
27                 money -= goods[product_id - 1][\'price\']
28                 shopping_carts.append(goods[product_id - 1][\'name\'])
29                 print("\\n\\33[31;1m%s已加入购物车!\\33[1m\\n" % (goods[product_id - 1][\'name\']))
30             else:
31                 print("\\n\\33[31;1m抱歉,%s加入购物车失败!工资余额不足!\\33[1m\\n" % (goods[product_id - 1][\'name\']))
32                 # exit_flag =True
33         else:
34             print("商品标号有误,请重新输入")
35     elif product_id == "q":
36         if len(shopping_carts) > 0:
37             print("\\n\\33[31;1m您添加到购物车的商品如下:\\33[1m\\n")
38             for index, product_carts in enumerate(shopping_carts, 1):
39                 print("%s. %s" % (index, product_carts))
40         else:
41             print("\\n您的购物车为空!")
42         print("\\n\\33[31;1m您的工资余额为:%s 元!\\33[1m\\n" % (money))
43         exit_flag = True
44     else:
45         pass
View Code

1.1版本

#!/usr/bin/env python
# -*- coding:utf-8 -*-

goods = [
    {"name": "电脑", "price": 3999},
    {"name": "鼠标", "price": 200},
    {"name": "游艇", "price": 2000},
    {"name": "美女", "price": 998},
    {"name": "T恤", "price": 599},
]

exit_flag = False
shopping_carts = []  # 初始购物车为空
money = 0  # 初始工资为空

while True:
    salary = input("\\n请输入您的工资:")  # 工资只能是数字
    if salary.isdigit():
        money += int(salary)
        break
    else:
        print("\\n您的工资只能是数字")
        continue

while not exit_flag:
    print("\\n------------商品列表-----------\\n")  # 商品列表
    for index, product in enumerate(goods, 1):
        print("%s.%s %d" % (index, product[\'name\'], product[\'price\']))
    print("\\n-------------------------------\\n")
    product_id = input("请输入您要购买的商品编号(输入q可退出):")
    if product_id.isdigit():
        product_id = int(product_id)
        if product_id >= 1 and product_id <= len(goods):
            if money >= goods[product_id - 1][\'price\']:
                money -= goods[product_id - 1][\'price\']
                shopping_carts.append(goods[product_id - 1][\'name\'])
                print("\\n\\33[31;1m%s已加入购物车!\\33[1m\\n" % (goods[product_id - 1][\'name\']))
            else:
                print("\\n\\33[31;1m抱歉,%s加入购物车失败!工资余额不足!\\33[1m\\n" % (goods[product_id - 1][\'name\']))
                # exit_flag =True
        else:
            print("商品标号有误,请重新输入")
    elif product_id == "q":
        if len(shopping_carts) > 0:
            print("\\n\\33[31;1m您添加到购物车的商品如下:\\33[1m\\n")
            shopping_carts_delRepeat = list(set(shopping_carts))  # 购物车列表去重
            for index, product_carts in enumerate(shopping_carts_delRepeat, 1):
                print("%s. %s * %d" % (index, product_carts, shopping_carts.count(product_carts)))  # 显示同一商品数量
        else:
            print("\\n您的购物车为空!")
        print("\\n\\33[31;1m您的工资余额为:%s 元!\\33[1m\\n" % (money))
        exit_flag = True
    else:
        print("\\n输入有误,请重新输入")
View Code

1.2版本

userinfo.txt:

alex:456:0:400
wss:123:0:1150
jay:789:1:0
View Code

shopping_history.txt:

wss|2018-05-20 12:10:08|电脑
wss|2018-05-20 14:10:09|电脑
wss|2018-05-21 17:11:08|电脑
jay|2018-05-22 19:13:08|电脑
alex|2018-05-23 17:15:08|鼠标
wss|2018-05-23 19:06:24|鼠标
wss|2018-05-23 19:06:57|鼠标
wss|2018-05-23 19:11:46|鼠标
wss|2018-05-23 19:14:12|鼠标
wss|2018-05-23 19:14:30|鼠标
wss|2018-05-23 19:15:17|鼠标
alex|2018-05-23 19:16:12|鼠标
alex|2018-05-23 19:16:51|鼠标
View Code

README.txt

user_info.txt

    存储用户名、密码、锁定状态、工资余额

    wss:123:1:5800
    alex:456:0:55000
    jay:789:0:0
    
    用户名:密码:锁定状态(1代表锁定,0代表未锁定):工资余额
    
    wss是输错密码次数过多,被锁定的用户。
    alex是之前登陆过的用户,登陆之后可以看到工资余额,可继续购买。
    jay是从未登陆过的新用户,登陆之后需要输入工资,然后才能购买。
    
    
shopping_history.txt

    存储消费记录
    
    wss|2018-05-20 12:10:08|电脑
    wss|2018-05-20 14:10:09|电脑
    wss|2018-05-21 17:11:08|电脑
    jay|2018-05-22 19:13:08|电脑
    alex|2018-05-23 17:15:08|鼠标
    wss|2018-05-23 19:06:24|鼠标
    wss|2018-05-23 19:06:57|鼠标
    
    买家用户名|日期|商品名称
    
shoping.py

    主程序
    
    -------------------------------
    
    请输入用户名:alex

    请输入密码:456

    --------欢迎 alex 登陆商城--------

    您上次购物后的余额为:350 元!


    ------------商品列表------------

    1.电脑 4000
    2.鼠标 200
    3.游艇 20000
    4.美女 1000
    5.T恤 50

    -------------------------------

    【商品编号】购买商品
    【h】消费记录
    【m】余额查询
    【q】退出商城

    -------------------------------

    请输入您要的操作:h
    
    ---------您的消费记录----------

    用户 alex 2018-05-23 17:15:08 购买了 鼠标
    用户 alex 2018-05-23 19:16:12 购买了 鼠标
    用户 alex 2018-05-23 19:16:51 购买了 鼠标
    用户 alex 2018-05-23 19:16:52 购买了 鼠标
    用户 alex 2018-05-23 19:18:00 购买了 T恤
    用户 alex 2018-05-23 22:35:06 购买了 鼠标
    用户 alex 2018-05-25 18:12:41 购买了 鼠标
    用户 alex 2018-05-25 18:16:25 购买了 电脑
    用户 alex 2018-05-25 18:31:56 购买了 电脑
    用户 alex 2018-05-25 18:34:44 购买了 鼠标
    用户 alex 2018-05-25 18:36:02 购买了 鼠标
    用户 alex 2018-05-26 20:00:34 购买了 鼠标
    用户 alex 2018-05-26 20:00:37 购买了 美女
    用户 alex 2018-05-26 20:00:38 购买了 T恤

    -------------------------------
    
    请输入您要的操作:m

    您的工资余额为:350 元!
    
    -------------------------------
    
    请输入您要的操作:5

    T恤已购买成功!
    
    -------------------------------
    
    请输入您要的操作:q
    
    您本次没有购买东西!

    您的工资余额为:350 元!
    
    -------------------------------
    
View Code

shopping.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import os
import time


def select_user_info():
    # 读取用户信息文件,取出用户名、密码、锁定状态、余额组成一个用户信息字典user_info_dict
    with open(user_info_f_name, \'r\', encoding=\'utf-8\') as user_info_f:
        for line in user_info_f:  # 用户信息字符串
            user_info_list = line.strip().split(\':\')  # 将字符串转换为列表
            # print(user_info_list) # 用户信息列表
            _username = user_info_list[0].strip()  # 用户名
            _password = user_

以上是关于第2章 Python基础-字符编码&数据类型 购物车&多级菜单 作业的主要内容,如果未能解决你的问题,请参考以下文章

第2章 Java基础语法

Python开发入门14天集训营·第2章Python 数据类型字符编码学习-3级菜单

第3版emWin教程第26章 字符编码和点阵字体基础知识(重要)

第03章 变量

python开发基础:字符编码&文件操作

Python之路第03章:Python编码知识