Python实现的购物车功能示例


Posted in Python onFebruary 11, 2018

本文实例讲述了Python实现的购物车功能。分享给大家供大家参考,具体如下:

这里尝试用python实现简单的购物车程序。。。

基本要求:

用户输入工资,然后打印购物菜单
用户可以不断的购买商品,直到余额不够为止
退出时打印用户已购买的商品和剩余金额。。。

代码:

#!/usr/env python
#coding:utf-8
import re,math
def get_customer_salary():
  while True:
    salary=raw_input('Please input your monthly salary(a positive integer):')
    if __is_valid_num(salary):
      return int(salary)
    else:
      print '[warn] Please input a valid number!'
def __is_valid_num(num):
  p=re.compile(r'^\d+$')
  m=p.match(num)
  if m:
    return True
  else:
    return False
def get_customer_selection():
  while True:
    selection=raw_input('Please enter the goods number you want to buy:')
    if __is_valid_num(selection):
      if __is_a_valid_selection(int(selection)):
        return int(selection)
      else:
        print '[warn] Please enter a valid selection number'
    else:
      print '[warn] Please enter a valid number!\n'
def __is_a_valid_selection(selection):
  if 1<=selection<=get_total_amount_of_products():
    return True
  else:
    return False
def get_products_list():
  return {'Flower':50,'Perfume':300,'Shoes':600,'Clothing':800,'Alcohol':300,
       'Makeup':800,'Bike':1500,'Car':200000,'Apartment':5000000}
def get_total_amount_of_products():
  return len(get_products_list())
def mapping_type_code_for_products():
  return ['Flower','Perfume','Shoes','Clothing','Alcohol','Makeup','Bike','Car','Apartment']
def get_product_price(type_code):
  return get_products_list()[get_product_name(type_code)]
def get_product_name(type_code):
  return mapping_type_code_for_products()[type_code-1]
def get_lowest_price_of_products():
  price_list=[]
  for k,v in get_products_list().items():
    price_list.append(v)
  return min(price_list)
def get_highest_price_of_produces():
  price_list=[]
  for k,v in get_products_list().items():
    price_list.append(v)
  return max(price_list)
def still_can_buy_something(left_money):
  if left_money<get_lowest_price_of_products():
    return False
  else:
    return True
def still_want_to_buy_something():
  while True:
    answer=raw_input('Do you still want to buy something?(y/n):')
    result=is_a_valid_answer(answer)
    if result=='yes':return True
    if result=='no':return False
    print '[warn] Please enter [yes/no] or [y/n]!\n'
def is_a_valid_answer(answer):
  yes_pattern=re.compile(r'^[Yy][Ee][Ss]$|^[Yy]$')
  no_pattern=re.compile(r'^[Nn][Oo]$|^[Nn]$')
  if yes_pattern.match(answer):return 'yes'
  if no_pattern.match(answer):return 'no'
  return False
def show_shopping_list():
  counter=1
  for i in mapping_type_code_for_products():
    print '''''(%d) %s: %s RMB''' % (counter,i+' '*(10-len(i)),str(get_products_list()[i]))
    counter+=1
def is_affordable(left_money,product_price):
  if left_money>=product_price:
    return True
  else:
    return False
def time_needed_to_work_for_buying_products(salary,price):
  result=float(price)/salary
  return get_formatting_time(int(math.ceil(result)))
def get_formatting_time(months):
  if months<12:return ('%d months' % months)
  years=months/12
  months=months%12
  return ('%d years,%d months' % (years,months))
#主程序从这里开始
if __name__=='__main__':
  salary=get_customer_salary() #获取月工资
  total_money=salary
  shopping_cart=[] #初始化购物车
  while True:
    show_shopping_list() #打印购物列表
    #判断剩余资金是否能够购买列表中的最低商品
    if still_can_buy_something(total_money):
      selection=get_customer_selection() #获取用户需要购买的商品编号
      product_price=get_product_price(selection)#获取商品的价格
      product_name=get_product_name(selection)#获取商品的名称
      if total_money>=product_price:
        total_money-=product_price
        #打印购买成功信息
        print 'Congratulations!You bought a %s successfully!\n' % product_name
        shopping_cart.append(product_name)#将商品加入购物车
        print 'You still have %d RMB left\n' % total_money #打印剩余资金
        #判断是否还想购买其他商品
        if not still_want_to_buy_something():
          print 'Thank you for coming!'
          break
      else:
        #输出还需要工作多久才能购买
        format_time=time_needed_to_work_for_buying_products(salary,product_price-total_money)
        print 'Sorry,you can not afford this product!\n'
        print "You have to work '%s' to get it!\n" % format_time
        #判断是否还想购买其他商品
        if not still_want_to_buy_something():break
    else:
      print 'Your balance is not enough and can not continue to buy anything.'
      break
  #打印购物车列表
  print 'Now,your balance is %d,and\nYou have buy %s' % (total_money,shopping_cart)

运行效果:

Python实现的购物车功能示例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python制作刷网页流量工具
Apr 23 Python
浅谈pandas用groupby后对层级索引levels的处理方法
Nov 06 Python
基于python实现KNN分类算法
Apr 23 Python
opencv与numpy的图像基本操作
Mar 08 Python
python学习开发mock接口
Apr 28 Python
Python生成一个迭代器的实操方法
Jun 18 Python
Python实现的ftp服务器功能详解【附源码下载】
Jun 26 Python
Python实现投影法分割图像示例(二)
Jan 17 Python
Python短信轰炸的代码
Mar 25 Python
Python实现一个论文下载器的过程
Jan 18 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 Python
pandas取dataframe特定行列的实现方法
May 24 Python
python PyTorch参数初始化和Finetune
Feb 11 #Python
Python装饰器用法示例小结
Feb 11 #Python
python PyTorch预训练示例
Feb 11 #Python
TensorFlow中权重的随机初始化的方法
Feb 11 #Python
python的staticmethod与classmethod实现实例代码
Feb 11 #Python
Python语言的变量认识及操作方法
Feb 11 #Python
利用Opencv中Houghline方法实现直线检测
Feb 11 #Python
You might like
php开启安全模式后禁用的函数集合
2011/06/26 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
强大的JavaScript响应式图表Chartist.js的使用
2017/09/13 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
Js面试算法详解
2018/04/08 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
python实现SOM算法
2018/02/23 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
《孔繁森》教学反思
2014/04/17 职场文书
美术兴趣小组活动总结
2014/07/07 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
主持稿开场白
2015/06/01 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
Python re.sub 反向引用的实现
2021/07/07 Python