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项目发布为exe可执行程序过程分享
Oct 23 Python
TensorFlow神经网络优化策略学习
Mar 09 Python
Pipenv一键搭建python虚拟环境的方法
May 22 Python
python实现NB-IoT模块远程控制
Jun 20 Python
python使用turtle库绘制树
Jun 25 Python
Windows 64位下python3安装nltk模块
Sep 19 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
pycharm无法导入本地模块的解决方式
Feb 12 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
Jun 15 Python
Python 生成短8位唯一id实战教程
Jan 13 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 Python
python 三边测量定位的实现代码
Apr 22 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实现Socket服务器的代码
2008/04/03 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
php二维数组合并及去重复的方法
2015/03/04 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
关于document.cookie的使用javascript
2008/04/11 Javascript
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
js实现日期级联效果
2014/01/23 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
Python3实现转换Image图片格式
2018/06/21 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
Python高级property属性用法实例分析
2019/11/19 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
python语言的优势是什么
2020/06/17 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
C,C++的几个面试题小集
2013/07/13 面试题
链表面试题-一个链表的结点结构
2015/05/04 面试题
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
焊接专业毕业生求职信
2013/10/01 职场文书
《新型玻璃》教学反思
2014/04/13 职场文书
美术教师个人工作总结
2015/02/06 职场文书
党员转正大会主持词
2015/07/02 职场文书
2016年党建工作简报
2015/11/26 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
python析构函数用法及注意事项
2021/06/22 Python