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爬取csdn博客访问量
Feb 14 Python
使用Python的Flask框架来搭建第一个Web应用程序
Jun 04 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
python中datetime模块中strftime/strptime函数的使用
Jul 03 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
打包python 加icon 去掉cmd黑窗口方法
Jun 24 Python
使用浏览器访问python写的服务器程序
Oct 10 Python
python实现图片二值化及灰度处理方式
Dec 07 Python
Python openpyxl 插入折线图实例
Apr 17 Python
简单的Python人脸识别系统
Jul 14 Python
python try...finally...的实现方法
Nov 25 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
Mar 03 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
香妃
2021/03/03 冲泡冲煮
php 模拟POST提交的2种方法详解
2013/06/17 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
smarty中js的调用方法示例
2014/10/27 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
python django中8000端口被占用的解决
2019/12/17 Python
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
html5的input的required使用中遇到的问题及解决方法
2018/04/24 HTML / CSS
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
学前教育专业毕业生自荐信
2013/10/03 职场文书
出国留学自荐信
2013/10/25 职场文书
实习生的自我评价
2014/01/08 职场文书
服务承诺书范文
2014/05/19 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
合作经营协议书范本
2014/09/16 职场文书
2014办公室副主任四风对照检查材料思想汇报
2014/09/20 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
高中生军训感言
2015/08/01 职场文书
中学图书馆工作总结
2015/08/11 职场文书
python自动化八大定位元素讲解
2021/07/09 Python
css3手动实现pc端横向滚动
2022/06/21 HTML / CSS