1 业务需求

商品中心

显示库存的商品

商品能够加入到购物车

个人中心

购物车

修改购物车的商品

下单

完成的订单

订单详情

账户余额

2 代码实现

 # 定义全局变量信息
# 商品编号信息
goods_num = {'G1': '皮鞋', 'G2': '皮带', 'G3': '帽子', 'G4': '笔记本'}
# 商品单价
goods_price = {'皮鞋': 165, '皮带': 99, '帽子': 49, '笔记本': 3999}
# 购物车
shopping_car = {}
# 完成的订单
already_paid = {}
# 个人编号的功能
IdCenter_Num = {'M1':"shopping_car", 'M2':"already_paid"}
# 个人中心的功能
IdCenter_dict = {"shopping_car": shopping_car, 'already_paid': already_paid}
# 账户余额
AccountBalance = [400, ] # 商品选择页面
def GoodsFunction():
# 打印商品编号,商品以及对应价格,供选择
print('序号\t\t\t商品\t\t\t价格')
for i in goods_num:
print('%s\t\t\t%s\t\t\t%s' % (i, goods_num.get(i), goods_price.get(goods_num.get(i))))
result = input("请输入序号:").strip()
# 判断传入参数
if result == '':
print("Error:不能为空")
elif result == '' or result == "":
return result
elif result in goods_num:
goodname = goods_num.get(result)
# 参数为商品编号,传入到AddGood()函数
AddGood(goodname)
else:
print("Error:指令错误,请重新输入")
return '' # 加入购物车
def AddGood(goodname):
N_1 = int(input('请输入%s的数量:' % goodname))
if N_1 > 0:
# 判断商品元素是否存在,存在则修改数量,不存在则追加
if goodname in shopping_car:
shopping_car[goodname] = N_1
print(shopping_car)
else:
shopping_car.update({goodname:N_1})
print(shopping_car)
else:
print('Error:商品数量有误') # 个人中心
def GoIdCenter():
print("欢迎来到个人中心,\n序号\t选项")
for i in IdCenter_Num:
print('%s\t\t%s' % (i, IdCenter_Num.get(i)))
print("\n账户余额:%s\n0\t商品页\n1\t个人中心(购物车、订单、余额)" % AccountBalance[0])
result = input("请输入序号:").strip()
if result == '':
print("Error:不能为空,请重新输入!")
elif result == '' or result == '':
return result
elif result in IdCenter_Num:
if result == 'M1':
# 购物车操作函数,flag作为操作标识,如果返回不为空则将返回值在此返回并跳出循环
flag = ''
while True:
flag = ShopCartFun()
if flag != '':
return flag
continue
elif result == 'M2':
# 订单查看函数
GoodOrder()
return 1
else:
print("Error:指令错误,请重新输入!")
return '' # 购物车操作
def ShopCartFun():
# 判断购物车是否为空
if shopping_car:
print('购物车\n商品名\t\t数量\t\t单价\t\t总价')
for i in shopping_car:
# 打印购物车商品详单
print('%s\t%s\t\t%s\t\t%s' % (i, shopping_car.get(i), goods_price.get(i), shopping_car.get(i) * goods_price.get(i)))
else:
print("你的购物车空旷如也")
print('\n0\t商品页\n1\t个人中心(购物车、订单、余额)\n2\t清空购物车\n3\t结账\n修改商品数量请输入商品名。')
result = input("请输入:").strip()
if result == '':
print("不能为空,请重新输入")
elif result == '' or result == '' or result == '':
# 3为结账选项,返回到主函数,调用结账函数
return result
elif result in shopping_car:
# 修改商品数量,再次调用AddGood()函数
AddGood(result)
else:
print("指令错误,请重新输入")
return '' # 结账函数
def CheckOut():
# 购物车金额合计
Total = 0
for i in shopping_car:
Total += shopping_car.get(i) * goods_price.get(i)
print(Total)
# 判断是否满足结账条件
if Total > AccountBalance[0]:
print("余额不足")
else:
import time
# 生成时间戳,作为订单号
Date = int(time.time())
# 生成订单呢
already_paid.update({Date:shopping_car})
# 扣款
AccountBalance[0] = AccountBalance[0] - Total
# 购物车清空
shopping_car.clear()
return '' # 查看订单详情
def GoodOrder():
if already_paid:
print('完成订单\n订单号')
for i in already_paid:
print(i)
print('\n0\t商品页\n1\t个人中心(购物车、订单、余额)')
N_2 = int(input('\n输入要查看的订单号:').strip())
if N_2 == '':
print('不能为空,请重新输入')
elif N_2 == '' or N_2 == '':
return N_2
elif N_2 in already_paid:
print('订单%s详情商品名\t数量\t总价'%N_2)
for i in already_paid.get(N_2):
print('%s\t%s\t%s' % (i, already_paid.get(N_2).get(i), goods_price.get(i) * already_paid.get(N_2).get(i)))
else:
print('输入有误') if __name__ == "__main__":
N = GoodsFunction()
while True:
if N == '':
N = GoodsFunction()
elif N == '':
N = GoIdCenter()
elif N == '':
shopping_car = {}
N = GoodsFunction()
elif N == '':
N = CheckOut()

3 个人理解

  任何事物都可分为两个维度,属性和方法,属性可理解数据结构,方法就是对数据结构操作的动作。

  确定数据的结构,数据结构是用来存存储数据的地方,它本身也是对象。

  一个函数的返回结果可能是另外一个函数形式参数。

  无论是面向对象还是面向过程的编程,都是需要立足于现实的业务逻辑。

  对于程序,我们需要多写多练习,当你回头看的时候,你会发现原来困扰你的问题会很简单。

4 思路来源

http://www.cnblogs.com/ikmi/p/6195065.html

python开发购物车的更多相关文章

  1. Python开发 第01课 Python 简介

    一.Python 介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...

  2. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  3. 【Machine Learning】Python开发工具:Anaconda+Sublime

    Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...

  4. Python开发工具PyCharm个性化设置(图解)

    Python开发工具PyCharm个性化设置,包括设置默认PyCharm解析器.设置缩进符为制表符.设置IDE皮肤主题等,大家参考使用吧. JetBrains PyCharm Pro 4.5.3 中文 ...

  5. Python黑帽编程1.2 基于VS Code构建Python开发环境

    Python黑帽编程1.2  基于VS Code构建Python开发环境 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...

  6. Eclipse中Python开发环境搭建

    Eclipse中Python开发环境搭建  目 录  1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...

  7. Python开发:环境搭建(python3、PyCharm)

    Python开发:环境搭建(python3.PyCharm) python3版本安装 PyCharm使用(完全图解(最新经典))

  8. Python 开发轻量级爬虫08

    Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓 ...

  9. Python 开发轻量级爬虫07

    Python 开发轻量级爬虫 (imooc总结07--网页解析器BeautifulSoup) BeautifulSoup下载和安装 使用pip install 安装:在命令行cmd之后输入,pip i ...

随机推荐

  1. 关于antd 日期组件只选择年份,设置mode=year无法获取value的解决办法

    antd3.0后的某个版本后终于支持了只选择年份的设置.当时2.x版本的时候还不支持只选择年份,我们项目中有这个只选择年份的需求,为了ui风格的一致,只好自己撸了一个. 如今真是普天同庆!

  2. vue去掉#——History模式

    打开index.js文件 加在 Vue.use(Router) export default new Router({ mode: 'history', ] }) 若有不明白请加群号:复制 69518 ...

  3. JQuery的常用选择器

    刚开始学JQuery写的如有错误欢迎批评指正 JQuery拥有的选择器可以让我们更快更方便找到想要的元素,然后对相应的元素进行操作 简单介绍一下一些常用的选择器: 1.基本选择器: 标签名选择器: $ ...

  4. fedora liveuser 切换root;su -l root

    安装完Fedora 14后,默认没有启用sudo,首先应该是对sudo进行设置.sudo的作用就是使当前非root用户在使用没有权限的命令时,直接在命令前加入sudo,在输入自己当前用户的密码就可以完 ...

  5. react源码探索

    react核心部分为 虚拟dom对象 虚拟dom差异化算法 单向数据流渲染 组件生命周期 事件处理 1) 虚拟dom对象: reactDOM.render(args,element); 这个方法第一个 ...

  6. inode 与black 特点与简介

    inodo为索引节点, 存放文件属性的信息(实际文件位置与容量信息 /black文件属性) 作用在格式化文件系统时候产生 创建一个文件就占用一个inode 数字相同为硬链接 black为实际数据/内容 ...

  7. MYSQL-8.0.11-WINX64(免安装版)配置

    1. 解压zip包到安装目录 首先,将mysql-8.0.11-winx64.zip 解压缩到 安装D:/mysql-8.0.11-winx64 目录下, 2.配置文件 在安装根目录下添加 my.in ...

  8. 2017年3月28日15:59:16 终于明白spring这套鬼东西是怎么玩的了

    先说重点,新东家公司的项目框架没有一样是我之前用过的,首先pm和我说的是一套微服务的概念,微服务不同于传统的功能模块实现,他将服务松散化分不到各个系统之间,这样也是实现分散压力的一种. 微服务是由sp ...

  9. SQLite相关异常

    SQLite的异常大多都和异常IO操作有关,这类异常通常在debug测试的时候难以发现通常和用户的操作有关系,根据我遇到的包括以下几种: 1.No transaction is active 这种情况 ...

  10. 第k大元素

    在数组中找到第k大的元素 样例 给出数组[9,3,2,4,8],第三大的元素是4 给出数组 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推 注意 你可以交换数组 ...