洗礼灵魂,修炼python(76)--全栈项目实战篇(4)—— 购物车系统

要求:

1.基本符合日常购物车的要求(根据你的想法开放性提升功能)

2.展示商品信息,并且可随时上新商品

3.用户购买每一样商品时都对所剩的钱做一次对比,如果够则提示“已购买”,如果不够提示“余额不足”

4.最后结账的时候,打印出一共买了那些商品,以及用了多少钱,剩余多少钱

5.用户购买商品时,尽量多给一些提示用语,方便提示用户

 

分析:

1.这个没什么可说的,大家都购过物,根据平时的经验来实现功能即可

2.商品信息需要手动添加,用的数据类型是什么,根据你的习惯用字典,还是列表,还是元组

 

 

我希望你已经思考过怎么解决这个问题再看的下面:

 

同样的,相关文件和代码已发布到GitHub,后期优化也会继续发到github上,地址:传送门

 

 

代码:

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

# author:yangva
# datetime:2017/12/5 0005 18:00

from collections import Counter
import copy

# 商品可以随时上新,也可用另一个文本文档存储

shop_dict = {'1':{'iphoneX':6000},'2':{'MAC':9000},'3':{'coffee':50},'4':{'pythonbook':80},'5':{'CD':20}}

myshop_cart = [] #购物车

print('欢迎来到XXX购物平台!\n您看上哪个商品,输入商品对应的【id】即可购买,如果购物结束输入【quit】即可退出')
for i,m in shop_dict.items():
    for j,k in m.items():
        print('商品id:%s\t商品名:%s\t\t商品单价:%s'%(i,j,k))

salary = int(input('请输入您的透支额度:'))
temp = salary #作为缓存总额,用于后面总共消费多少作计算

while True:
    for i,m in shop_dict.items():
        for j,k in m.items():
            print('商品id:%s\t商品名:%s\t\t商品单价:%s'%(i,j,k))
    shopping = input('请输入商品id(退出请输入“quit”)>>>:')
    if shopping in shop_dict.keys():
        if salary < list(shop_dict[shopping].values())[0]:
            print('您的余额不足')
        else:
            salary -= list(shop_dict[shopping].values())[0]
            myshop_cart.append(list(shop_dict[shopping].keys())[0]) #把商品添加至购物车
            print('您已购买商品【%s】,剩余余额:%s\n'%(list(shop_dict[shopping].keys())[0],salary))
            if not salary:
                print('您的余额为0,不能再购买任何东西,程序已退出,欢迎下次光临')
                break
    elif shopping == 'quit': #购买结束,到收银台结账
        print('您一共购买了以下商品:')
        for i,j in dict(Counter(myshop_cart)).items():
            print('商品名:%s\t数量:%s'%(i,j))

        print('您总共消费了%s元,可用余额为%s元'%(temp-salary,salary))
        print('欢迎下次光临!')
        break
    else:
        print('您的输入有误,请查看是否有id为【%s】的商品'%shopping)

 

操作环境随你,windows还是ubuntu上都可以

 

效果测试:

(部分截图,完整的自己去尝试吧)

 

 

总结优化:

可以添加图形化界面;在客户购买商品的时候,可以不定时在客户购物时发布公告宣布上新或者打折促销的商品等等的,命题开放,自己去优化了

其实也很简单的,就用了下数据类型,input,以及循环语句就实现了,根本没有用到多高深的代码,前面的账户管理也是,现在都是初级阶段,简单是应该的,慢慢来

 

 

 

posted @ 2017-12-14 11:08  Eeyhan  阅读(219)  评论(0编辑  收藏  举报