要求:

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,以及循环语句就实现了,根本没有用到多高深的代码,前面的账户管理也是,现在都是初级阶段,简单是应该的,慢慢来

洗礼灵魂,修炼python(76)--全栈项目实战篇(4)—— 购物车系统的更多相关文章

  1. 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡+商城项目(模拟京东淘宝)

    本次项目相当于对python基础做总结,常用语法,数组类型,函数,文本操作等等 本项目在博客园里其他开发者也做过,我是稍作修改来的,大体没变的 项目需求: 信用卡+商城: A.信用卡(类似白条/花呗) ...

  2. 洗礼灵魂,修炼python(73)--全栈项目实战篇(1)——【转载】前提准备之学习ubuntu

    本篇是为项目实战做准备,学习Linux是必备的,不然都不好意思叫全栈对吧?下面是一位资深大神写的文章,够详细,我也不用浪费时间再写了 原文链接:Ubuntu学习——第一篇 内容: 一. Ubuntu简 ...

  3. 洗礼灵魂,修炼python(78)--全栈项目实战篇(6)—— 多级目录菜单之地址管理系统

    相信各位都在在网上买过东西吧?那么今天我的主题就是写个在线购物系统,是不可能的,哈哈(后期确实有这个项目),那么购物都填写过快递地址吧?然后网上查个地址都有地址管理吧? 要求: 1.打印出省.市.县等 ...

  4. 洗礼灵魂,修炼python(86)--全栈项目实战篇(12)—— 利用socket实现文件传输/并发式聊天

    由于本篇博文的项目都很简单,所以本次开个特例,本次解析两个项目,但是都很简单的 项目一:用socket实现文件传输 本项目很简单,作为小项目的预热的,前面刚学完socket,这里马上又利用socket ...

  5. 洗礼灵魂,修炼python(80)--全栈项目实战篇(8)—— 计算器

    用正则表达式开发一个计算器,计算用户给定的一串带有加减乘除的公式. 要求:不能使用eval转换字符串 分析: 要求简单,就是计算混合运算,但是不能使用eval直接转换,主要就是把整个式子中的小括号优先 ...

  6. 洗礼灵魂,修炼python(79)--全栈项目实战篇(7)—— 多级目录菜单之地址管理系统升级版

    要求: 1.在上一篇的地址管理系统的基础上做升级改动 2.添加增删改的功能 3.尽量的贴近生活常识中的地址管理 分析: 需求不用多说了,干就完了 相关文件源码地址:github 这次由于要有增删改的操 ...

  7. 洗礼灵魂,修炼python(77)--全栈项目实战篇(5)—— ATM自动存取机系统

    要求: 1.完成常识中的ATM存取款机功能 2.把ATM机故障考虑进去 3.不能直接输入账户名和卡号等等信息,模拟出插银行卡让ATM机自动读取卡信息 4.密码验证超过三次错误即锁定账户 5.操作类型有 ...

  8. 洗礼灵魂,修炼python(75)--全栈项目实战篇(3)—— 账户注册登录管理系统

    要求: 1.系统可以创建用户和登录用户,根据用户的输入不同,做出不同的反应(创建还是登录) 2.创建用户不能创建已存在的用户名 3.登录用户的操作最多只能有三次,超过三次冻结账户,每使用一次提示用户还 ...

  9. 洗礼灵魂,修炼python(81)--全栈项目实战篇(9)—— 购物商城登录验证系统

    都在线购物过吧?那么你应该体验过,当没有登录账户时,点开购物车,个人中心,收藏物品等的操作时,都会直接跳转到登录账户的界面,然后如果登录一次后就不用再登录,直到用户登出. 是的,本次项目就是做一个登录 ...

随机推荐

  1. 【干货】利用MVC5+EF6搭建博客系统(一)EF Code frist、实现泛型数据仓储以及业务逻辑

    习MVC有一段时间了,决定自己写一套Demo了,写完源码再共享. PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.框架搭建 二.创建数据库 1.创建一个空的EF code fr ...

  2. vue-08-axios-get-post-跨域

    1, 安装 cnpm install axios --save 2, 在main.js中引入 import Axios from 'axios' // 挂在在Vue上Vue.prototype.$ax ...

  3. 使用vue之directive设计列表加载更多

    背景 之前写过一篇<纯JS实现加载更多(VUE框架)>,它的逻辑思路比较清晰易懂,而今天看了一天公司项目的部分功能代码,发现同事们写的加载更多的功能更加的有趣,而且易于封装到一个组件当中, ...

  4. bash内置命令mapfile:读取文件内容到数组

    bash提供了两个内置命令:readarray和mapfile,它们是同义词.它们的作用是从标准输入读取一行行的数据,然后每一行都赋值给一个数组的各元素.显然,在shell编程中更常用的是从文件.从管 ...

  5. Mybatis的SqlSession运行原理

    前言 SqlSession是Mybatis最重要的构建之一,可以简单的认为Mybatis一系列的配置目的是生成类似 JDBC生成的Connection对象的SqlSession对象,这样才能与数据库开 ...

  6. C# 委托 事件

    一:什么叫委托 通过反射发现,委托其实是一个类,继承自System.MulticastDelegate,但是System.MulticastDelegate这个类是特殊类,不能被继承 二:委托的声明 ...

  7. git merge 和 git merge --no-ff的区别

    git merge –no-ff 可以保存你之前的分支历史.能够更好的查看 merge历史,以及branch 状态. git merge 则不会显示 feature,只保留单条分支记录. 比如:我当前 ...

  8. mysql使用存储过程&函数实现批量插入

    写这边文章的目的,是想结合mysql 存储过程+函数完成一个批量删除的功能吧...正好也好加深下对procedure和function的熟练操作吧...废话不多说,我就直接上表结构啦哈,如下: cre ...

  9. Redis 持久化之RDB和AOF

    Redis 持久化之RDB和AOF Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File).如果你想快速了解和使用RDB和AOF,可以直 ...

  10. Windows驱动匹配详解

    在Windows下,几乎所有的硬件设备都需要安装驱动后才能正常工作,我们重装系统后第一件事就是要为各设备安装好驱动,我们可以下载官方驱动手动安装,也可以让我Windows自动扫描安装,还可以使用驱动精 ...