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获取豆瓣电影简介代码分享
Jan 16 Python
Python使用time模块实现指定时间触发器示例
May 18 Python
基于循环神经网络(RNN)的古诗生成器
Mar 26 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
python单例模式实例解析
Aug 28 Python
实例讲解Python脚本成为Windows中运行的exe文件
Jan 24 Python
Python完成毫秒级抢淘宝大单功能
Jun 06 Python
python3+PyQt5 实现Rich文本的行编辑方法
Jun 17 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
Python3列表List入门知识附实例
Feb 09 Python
Python读写Excel表格的方法
Mar 02 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 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 print EOF实现方法
2009/05/21 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
2019/02/21 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
[02:33]2018DOTA2亚洲邀请赛赛前采访——LGD
2018/04/04 DOTA
Python多线程编程简单介绍
2015/04/13 Python
python3中的md5加密实例
2018/05/29 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
python 中pyqt5 树节点点击实现多窗口切换问题
2019/07/04 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
关于Java String的一道面试题
2013/09/29 面试题
施工资料员的岗位职责
2013/12/22 职场文书
大学生思想汇报范文
2013/12/31 职场文书
养生餐厅创业计划书范文
2014/03/26 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
导游词300字
2015/02/13 职场文书
2014年底个人工作总结
2015/03/10 职场文书
销售合作意向书范本
2015/05/08 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL