python开发购物车
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开发购物车的更多相关文章
- Python开发 第01课 Python 简介
一.Python 介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...
- python开发环境搭建
虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...
- 【Machine Learning】Python开发工具:Anaconda+Sublime
Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...
- Python开发工具PyCharm个性化设置(图解)
Python开发工具PyCharm个性化设置,包括设置默认PyCharm解析器.设置缩进符为制表符.设置IDE皮肤主题等,大家参考使用吧. JetBrains PyCharm Pro 4.5.3 中文 ...
- Python黑帽编程1.2 基于VS Code构建Python开发环境
Python黑帽编程1.2 基于VS Code构建Python开发环境 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...
- Eclipse中Python开发环境搭建
Eclipse中Python开发环境搭建 目 录 1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...
- Python开发:环境搭建(python3、PyCharm)
Python开发:环境搭建(python3.PyCharm) python3版本安装 PyCharm使用(完全图解(最新经典))
- Python 开发轻量级爬虫08
Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓 ...
- Python 开发轻量级爬虫07
Python 开发轻量级爬虫 (imooc总结07--网页解析器BeautifulSoup) BeautifulSoup下载和安装 使用pip install 安装:在命令行cmd之后输入,pip i ...
随机推荐
- 977. Squares of a Sorted Array有序数组的平方
网址:https://leetcode.com/problems/squares-of-a-sorted-array/ 双指针法 把左端的元素和右端的元素比较后挑出绝对值大的,将其平方放入ans中,并 ...
- Android studio 中,遇到报错:ERROR: x86_64 emulation currently requires hardware acceleration! CPU acceleration status:HAXM must be updated(version 1.1.1<6.0.1)的解决方法
在 Android SDK 的安装目录下找到intelhaxm-android.exe安装即可.忘记目录位置直接在“计算机”中搜索,如果没有,返回Android studio 的“设置”,找到 这个图 ...
- excel表格中,怎么根据一列重复的数据求对应另一列总和
如下: 求出姓名对应分数总和对应 : 首先复制一份Sheet2 对Sheet1进行操作选中A列姓名 数据->删除重复项->以前选中区域排序->删除重复项 然后删除对应成绩项选中张三对 ...
- C#mvc下拉框绑定
控制器 ViewData["select1"] = new SelectList(b.bd(),"names","names"); 视图 @ ...
- Effective java第17条:要么为继承而设计,并提供文档说明,要么就禁止继承
不要过度设计. 面向对象编程,从一开始被洗脑难免在上手写代码时都会首先思考有没有公共方法啊,能不能把两个类抽象成一个父类再继承啊等,慎重使用继承,当要使用继承时一定要在文档注释中写明重写这个方法会给其 ...
- ubuntu 网络配置
检查网络配置命令:ifconfig 一.通过配置文件配置 新手没怎么用过Ubuntu,所以走了不少弯路,网上找了很多方法,大都没对我起到帮助作用,所以把自己的配置方法写一写. Ubuntu上连了两块网 ...
- Spring Boot重要内容
首先POM配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- 关于使用JPA中@Query注解传递表名/视图名参数的问题
因碰到需要动态查询不同视图的结果,自己尝试使用@Query注解中传递视图名称参数: @Query("select * from ?1") List<Object> ge ...
- Erlang-接口技术
系统的构建一定会设计到简历接口,让他与不同的语言的应用程序之间简历系统的联系.这就叫做erlang的接口技术. 接口技术的三种实现方法: 1.让程序以外部操作系统进行的形式在Erlang虚拟机以外运行 ...
- java基础(4)继承和多态
1 继承 1.1 继承概述 继承要解决的问题:共性抽取 1.2 继承的格式 class 父类 { ... } class 子类 extends 父类 { ... } 1.3 继承中成员变量的特点(变 ...