码迷,mamicode.com
首页 > 编程语言 > 详细

python基础练习题

时间:2018-03-09 01:43:02      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:return   失败   exist   coding   分享   resume   消费   依次   info   

购物车程序

#!/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(输入商品编号: )
        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(\033[1;32;40m购买商品编号:%s   购买商品名称:%s   购买商品价格:%s\033[0m
                          % (choice, goods[choice][name], goods[choice][price]))
                    print(\033[1;32;40m工资余额=%s\033[0m % salary)
                else:
                    print(余额不足)
                    continue
            else:
                print(商品编号不存在!)

        elif choice == q:
            print(\033[1;31;40m-------本次购物退出--------\033[0m)
            if len(shop_cart) > 0:
                print(-------本次购买商品列表--------)
                with open(r"user_shop.txt", "a+", encoding=utf-8) as f:
                    f.write("user:%s\n" % user)
                    for value in shop_cart:
                        shop_info = 购买商品名称:%s|购买商品价格:%s % (value[name], value[price])
                        print(\033[1;32;40m%s\033[0m % shop_info)
                        f.write(shop_info + "\n")
                    bal_info = 工资余额:%s % salary
                    print(\033[1;32;40m%s\033[0m% bal_info)
                    f.write(bal_info + "\n")
            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("\033[1;32;40m历史购物:%s\033[0m" % resume_goods)  # 带绿色输出
        print(\033[1;32;40m还剩下余额:%s\033[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(\033[1;31;40m---退出程序------\033[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 = "输入菜单名,进入子菜单\n 输入‘b‘,返回上层菜单\n 输入‘q‘,退出程序\n"
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

 

python基础练习题

标签:return   失败   exist   coding   分享   resume   消费   依次   info   

原文地址:https://www.cnblogs.com/xiao-apple36/p/8531715.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!