洗礼灵魂,修炼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,以及循环语句就实现了,根本没有用到多高深的代码,前面的账户管理也是,现在都是初级阶段,简单是应该的,慢慢来
洗礼灵魂,修炼python(76)--全栈项目实战篇(4)—— 购物车系统的更多相关文章
- 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡+商城项目(模拟京东淘宝)
本次项目相当于对python基础做总结,常用语法,数组类型,函数,文本操作等等 本项目在博客园里其他开发者也做过,我是稍作修改来的,大体没变的 项目需求: 信用卡+商城: A.信用卡(类似白条/花呗) ...
- 洗礼灵魂,修炼python(73)--全栈项目实战篇(1)——【转载】前提准备之学习ubuntu
本篇是为项目实战做准备,学习Linux是必备的,不然都不好意思叫全栈对吧?下面是一位资深大神写的文章,够详细,我也不用浪费时间再写了 原文链接:Ubuntu学习——第一篇 内容: 一. Ubuntu简 ...
- 洗礼灵魂,修炼python(78)--全栈项目实战篇(6)—— 多级目录菜单之地址管理系统
相信各位都在在网上买过东西吧?那么今天我的主题就是写个在线购物系统,是不可能的,哈哈(后期确实有这个项目),那么购物都填写过快递地址吧?然后网上查个地址都有地址管理吧? 要求: 1.打印出省.市.县等 ...
- 洗礼灵魂,修炼python(86)--全栈项目实战篇(12)—— 利用socket实现文件传输/并发式聊天
由于本篇博文的项目都很简单,所以本次开个特例,本次解析两个项目,但是都很简单的 项目一:用socket实现文件传输 本项目很简单,作为小项目的预热的,前面刚学完socket,这里马上又利用socket ...
- 洗礼灵魂,修炼python(80)--全栈项目实战篇(8)—— 计算器
用正则表达式开发一个计算器,计算用户给定的一串带有加减乘除的公式. 要求:不能使用eval转换字符串 分析: 要求简单,就是计算混合运算,但是不能使用eval直接转换,主要就是把整个式子中的小括号优先 ...
- 洗礼灵魂,修炼python(79)--全栈项目实战篇(7)—— 多级目录菜单之地址管理系统升级版
要求: 1.在上一篇的地址管理系统的基础上做升级改动 2.添加增删改的功能 3.尽量的贴近生活常识中的地址管理 分析: 需求不用多说了,干就完了 相关文件源码地址:github 这次由于要有增删改的操 ...
- 洗礼灵魂,修炼python(77)--全栈项目实战篇(5)—— ATM自动存取机系统
要求: 1.完成常识中的ATM存取款机功能 2.把ATM机故障考虑进去 3.不能直接输入账户名和卡号等等信息,模拟出插银行卡让ATM机自动读取卡信息 4.密码验证超过三次错误即锁定账户 5.操作类型有 ...
- 洗礼灵魂,修炼python(75)--全栈项目实战篇(3)—— 账户注册登录管理系统
要求: 1.系统可以创建用户和登录用户,根据用户的输入不同,做出不同的反应(创建还是登录) 2.创建用户不能创建已存在的用户名 3.登录用户的操作最多只能有三次,超过三次冻结账户,每使用一次提示用户还 ...
- 洗礼灵魂,修炼python(81)--全栈项目实战篇(9)—— 购物商城登录验证系统
都在线购物过吧?那么你应该体验过,当没有登录账户时,点开购物车,个人中心,收藏物品等的操作时,都会直接跳转到登录账户的界面,然后如果登录一次后就不用再登录,直到用户登出. 是的,本次项目就是做一个登录 ...
随机推荐
- iOS逆向开发(3):锁定APP的目标类与函数 | reveal | lldb | debugserver | 远程调试
之前介绍了怎么获取APP的所有类的结构信息,这个有什么用呢?用处大了,比如以这一步为基础,下一步通过注入来做更多研究工作. 注入的最小单位是函数,实际上,编译执行的程序在编译后,类就不复存在了,留下来 ...
- python 要掌握面向对象,你得会做这些题
1,面向对象三大特性,各有什么用处,说说你的理解. 继承:解决代码重用问题 多态:多态性,可以在不考虑对象类型的情况下而直接使用对象 封装:明确的区分内外,控制外部对隐藏属性的操作行为,隔离复杂度 2 ...
- [PHP] php + phpstudy + phpstrom + xdebug + postman开启调试
主体 php + phpstudy + phpstrom + xdebug + postman + vue + chrome 使用的是前后端分离的开发方式,vue 在 webpack 通过代理进行请求 ...
- 在Fragment中保存WebView状态
http://www.lucazanini.eu/2013/android/how-to-save-the-state-of-a-webview-inside-a-fragment-of-an-act ...
- ASP.NET登录验证
protected void btnLogin_Click(object sender, EventArgs e) { string username = txtUserName.Value.Trim ...
- Android Studio 基础控件使用
TextView android:gravity="center" //文字对其方式 top bottom left right center android:textColor= ...
- [Linux] PHP-FPM开启慢日志记录
fpm:FastCGI Process Manager 是一种替代的PHP FastCGI实现,对于负载较重的站点非常有用. .先进的进程控制,优雅的停止启动 .能够使用不同的uid/gid/chro ...
- [android] 显示意图激活另外一个activity
可以使用跳转的方式类似javaweb来实现界面转换 显示意图就是必须要指定开启组件的具体信息,包名,组件名,组件的class 新建一个类TwoActivity ,继承Activity类,重写onCre ...
- 6.3 OrderBy 优化
1. 创建实例 create table tblA( age int, birth TIMESTAMP not null ); insert into tblA(age,birth) values(2 ...
- Reinforcement Learning: An Introduction读书笔记(4)--动态规划
> 目 录 < Dynamic programming Policy Evaluation (Prediction) Policy Improvement Policy Iterat ...