zoukankan      html  css  js  c++  java
  • python基础练习题

    购物车程序

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/3/6 21:01
    # @Author  : hyang
    # @Site    :
    # @File    : shop_cart.py
    # @Software: PyCharm
    
    """
    购物车程序
    数据结构:
    goods = [
    {"name": "电脑", "price": 1999},
    {"name": "鼠标", "price": 10},
    {"name": "游艇", "price": 20},
    {"name": "美女", "price": 998},
    ......
    ]
    
    功能要求:
    基础要求:
    
    1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表
    
    2、允许用户根据商品编号购买商品
    
    3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
    
    4、可随时退出,退出时,打印已购买商品和余额
    
    5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
    
    
    扩展需求:
    
    1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
    
    2、允许查询之前的消费记录
    """
    import os
    
    # 商品列表
    goods = [
        {"name": "电脑", "price": 1999},
        {"name": "鼠标", "price": 10},
        {"name": "游艇", "price": 20},
        {"name": "IPAD", "price": 1998},
        {"name": "手机", "price": 998},
        {"name": "玩具", "price": 50},
        {"name": "教科书", "price": 100}
    ]
    
    last_shop = []  # 上次购买数据
    last_bal = []  # 得到每次购买余额
    
    def is_shop(user):
        """
        判断该用户是否已消费数据
        :param user:
        :return:
        """
        flg = False
        if os.path.exists(r"user_shop.txt"):
            # 查询用户有购买记录
            with open(r"user_shop.txt", "r", encoding='utf-8') as f:
                for line in f:
                   if line.find(user) != -1:
                       flg = True
                       break
        else:  # 创建空文件
             with open(r"user_shop.txt", "w", encoding='utf-8') as f:
                 f.write("")
        return flg
    
    
    def login():
        """
        用户登录
        :return:
        """
        err_cnt = 0
        suc_user = ''  # 返回成功登录用户
        # 判断锁标志
        while err_cnt < 3:
            user = input('输入用户名: ')
            pwd = input('输入密码: ')
            if user == 'alex' and pwd == '123':
                print('登录成功')
                suc_user = user
                break
            else:
                print('登录失败')
            err_cnt += 1
        else:
            print('您登录失败已超过3次')
        return suc_user
    
    
    def check_salary():
        """
        检查收入
        :return:
        """
        while True:
            salary = input('输入工资: ')
            if salary.isdigit():
                break
            else:
                print('工资输入错误,请重新输入!')
        return int(salary)
    
    
    def shop(user, salary):
        """
        用户购物
        """
        shop_cart = []  # 购物车
        while True:
            print('-------商品列表--------')
            for index, value in enumerate(goods):
                print('商品编号:%s   商品名称:%s   商品价格:%s' % (index, value['name'], value['price']))
    
            choice = input('输入商品编号:---输入q退出购买 ')
            if choice.isdigit():
                choice = int(choice)
                if 0 <= choice < len(goods):
                    price = goods[choice]['price']
                    if (salary - price) > 0:
                        salary = salary - price
                        shop_cart.append(goods[choice])
                        print('33[1;32;40m购买商品编号:%s   购买商品名称:%s   购买商品价格:%s33[0m'
                              % (choice, goods[choice]['name'], goods[choice]['price']))
                        print('33[1;32;40m工资余额=%s33[0m' % salary)
                    else:
                        print('余额不足')
                        continue
                else:
                    print('商品编号不存在!')
    
            elif choice == 'q':
                print('33[1;31;40m-------本次购物退出--------33[0m')
                if len(shop_cart) > 0:
                    print('-------本次购买商品列表--------')
                    with open(r"user_shop.txt", "a+", encoding='utf-8') as f:
                        f.write("user:%s
    " % user)
                        for value in shop_cart:
                            shop_info = '购买商品名称:%s|购买商品价格:%s' % (value['name'], value['price'])
                            print('33[1;32;40m%s33[0m' % shop_info)
                            f.write(shop_info + "
    ")
                        bal_info = '工资余额:%s' % salary
                        print('33[1;32;40m%s33[0m'% bal_info)
                        f.write(bal_info + "
    ")
                break
    
    def get_shop(user):
        """
        读取文件得到用户已消费数据
        :param user:
        :return:
        """
        flg = False
        resume_goods = []  # 消费商品
        with open(r"user_shop.txt", "r", encoding='utf-8') as f:
            for line in f:
                if line.find("购买") != -1:
                    shop_li = line.split("|")
                    resume_goods.append([shop_li[0].split(":")[1].strip(), shop_li[1].split(":")[1].strip()])
                elif line.find("余额") != -1:
                    last_bal.append(line.split(":")[1].strip())
            print("33[1;32;40m历史购物:%s33[0m" % resume_goods)  # 带绿色输出
            print('33[1;32;40m还剩下余额:%s33[0m' % last_bal[-1]) # 带绿色输出
    
    
    if __name__ == '__main__':
        user = login()
        if user != '':
            print('{}登录成功'.format(user))
            while True:
                action = input('输入c查询消费记录,输入b购买商品,输入q退出:')
                if action == 'q':
                    print('33[1;31;40m---退出程序------33[0m')  # 带红色输出
                    get_shop(user)
                    break
                elif action == 'c':
                    if is_shop(user):
                        print("---查询之前的消费记录---")
                        get_shop(user)
                    else:
                        print("---查询之前无消费记录---")
                elif action == 'b':
                    if not is_shop(user):
                        salary = check_salary()
                    else:
                        salary = int(last_bal[-1])
                    print('您工资现有:', salary)
                    shop(user, salary)

    输出结果

    三级菜单程序

    #!/usr/bin/env python3 
    # -*- coding: utf-8 -*-
    # @Time    : 2018/3/1 9:38
    # @Author  : hyang
    # @File    : three_menu.py
    # @Software: PyCharm
    """
    可依次选择进入各子菜单
    可从任意一层往回退到上一层
    可从任意一层退出程序
    """
    menu = {
        '北京':{
            '海淀':{
                '五道口':{
                    'soho':{},
                    '网易':{},
                    'google':{}
                },
                '中关村':{
                    '爱奇艺':{},
                    '汽车之家':{},
                    'youku':{},
                },
                '上地':{
                    '百度':{},
                },
            },
            '昌平':{
                '沙河':{
                    '老男孩':{},
                    '北航':{},
                },
                '天通苑':{},
                '回龙观':{},
            },
            '朝阳':{},
            '东城':{},
        },
        '上海':{
            '闵行':{
                "人民广场":{
                    '炸鸡店':{}
                }
            },
            '闸北':{
                '火车站':{
                    '携程':{}
                }
            },
            '浦东':{},
        },
        '山东':{},
    }
    
    current_menu = menu  # 当前菜单
    last_menu = []  # 上层菜单
    prompt = "输入菜单名,进入子菜单
     输入'b',返回上层菜单
     输入'q',退出程序
    "
    while True:
        if len(current_menu) == 0:
            print('已经到最底层,该菜单下无节点')
        else:
            for k in current_menu:
                print('菜单->', k)
        input_str = input(prompt).strip()
        if input_str == 'q':
            print('退出程序')
            break
        elif input_str in current_menu:
            last_menu.append(current_menu)  # 保存上一层菜单
            current_menu = current_menu[input_str]  # 保存当前层
        elif input_str == 'b':
            if len(last_menu) != 0:
                current_menu = last_menu.pop()  # 弹出上一层菜单
            else:
                print('已经是顶层菜单')
        else:
            print('该节点菜单不存在')
            continue
  • 相关阅读:
    water——小根堆+BFS
    P5930 [POI1999]降水/SP212 WATER
    Blue Mary的战役地图——Hash表
    Antisymmetry(反对称)——Manacher
    数论基础
    可持久化数据结构(线段树,trie树)
    20200725模拟赛5题解
    vscode 如何创建git 新分支
    mysql 把一个数据库中的表数据复制到另一个数据库中
    shrio中的用法以及配置
  • 原文地址:https://www.cnblogs.com/xiao-apple36/p/8531715.html
Copyright © 2011-2022 走看看