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 14 Python
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
Django2.1.3 中间件使用详解
Nov 26 Python
python使用suds调用webservice接口的方法
Jan 03 Python
使用Python自动化破解自定义字体混淆信息的方法实例
Feb 13 Python
Django 配置多站点多域名的实现步骤
May 17 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
python 实现屏幕录制示例
Dec 23 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
python 浮点数四舍五入需要注意的地方
Aug 18 Python
利用Python过滤相似文本的简单方法示例
Feb 03 Python
python自动生成sql语句的脚本
Feb 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的库,结果发现很多东西
2006/12/31 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
php图像生成函数之间的区别分析
2012/12/06 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
Python中os和shutil模块实用方法集锦
2014/05/13 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
总结python爬虫抓站的实用技巧
2016/08/09 Python
Python subprocess模块常见用法分析
2018/06/12 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
利用python汇总统计多张Excel
2020/09/22 Python
python中random模块详解
2021/03/01 Python
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
应届大学生自荐信格式
2013/09/21 职场文书
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
魅力教师事迹材料
2014/01/10 职场文书
最新会计专业求职信范文
2014/01/28 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
分家协议书
2014/04/21 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript