要求:

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. Unity3D热更新之LuaFramework篇[01]--从零开始

    前言 因工作关系,需要对手头的项目进行热更新支持.了解后发现,Lua的几个变种:XLua.ToLua(原uLua)和Slua都可以做Unity热更,而ToLua更是提供了一个简易的热更框架--LuaF ...

  2. Go实用开源库收集

    框架 https://github.com/go-martini/martini 图形验证码 https://github.com/dchest/captcha ORM https://github. ...

  3. 基于jQuery消息提示框插件Tipso

    今天要分享的这款jQuery消息提示框插件名叫Tipso,它的特点是可以定义提示框的显示位置,以及动态改变提示框的提示内容,应该说是一款相当灵活的jQuery消息提示框插件.效果图如下: 在线预览   ...

  4. 浅析JavaScript之数组

    一  概述 JavaScript数组同后端语言一样,具有它自己的数据结构,归根结底,这种数据结构,本质就是一种集合. 在后端语言中(如java,.net等),数组是这样定义的:数组是用来存储相同数据类 ...

  5. PHP开发中bcscale timezone charset的设定

    关于php的开发,有几个细节设定,需要知悉下:在项目的init.php 或 index.php 或 api.php 1. bcscale(18); 表示bc函数,默认小数点位数. 没有设定的话,默认为 ...

  6. linux磁盘管理增加,扩容

    一.磁盘空间不足,添加新的磁盘 一般来说,当我们在服务上插入新的磁盘时,服务器是会对磁盘进行识别的.但是,有的时候服务器并没有对这些新插入的磁盘进行识别.这时,我们可以通过重启服务器,来使服务器重新加 ...

  7. .Net C# 使用Redis

    Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主 ...

  8. Centos 7.6搭建LAMP,部署zabbix监控环境

    一.安装环境 LAMP 1.安装apache yum install -y httpd httpd服务开机进行自启:systemctl enable httpd 启动httpd服务:systemctl ...

  9. 12. ReadWriteLock 读写锁

    package com.gf.demo11; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent. ...

  10. JavaScript 笔记(一)

    Number 1.2345e3=1.2345*1000 NaN//not a num 无法计算结果 Infinity //无限大 数组 var arr=[1,2,'hello'] 下标从0开始 对象 ...