专栏首页奔跑的键盘侠Python——购物车程序(列表的应用)

Python——购物车程序(列表的应用)

购物车基本功能:
1.展示购物清单、价格信息。
2.由客户选择商品序号、加入购物车。
3.结束购物后,展示购物车中的商品信息,余额信息。
其他规则:所选商品价格超出当前余额时,提示钱不够;
                直到客户输入quit,退出购物;

# !/usr/bin/env python3.6
# -*- coding: utf-8 -*-
# __author__:  Ed Frey
# Date: 18/7/24

# 购物车程序

salary = 20000

goods_list = ['iphone6s', 'macbook', 'coffee', 'python book', 'bicycle']
goods_price = [5800, 9000, 32, 80, 1500]
print('-------the list of goods and price------')
for i in goods_list:
    print("%d.\t%s\t%d" % (goods_list.index(i) + 1, i, goods_price[goods_list.index(i)]))
print('-' * 40)

bicycle = []
list = ['1', '2', '3', '4', '5']
balance = salary

while True:
    select = input("please choose the number of goods(input quit to exit):")

    if select in list:
        select = int(select) - 1

        if balance < goods_price[select]:
            print('your balance is not enough,%d' % balance)
        else:
            bicycle.append(goods_list[select])
            balance -= goods_price[select]
            print('''%s\t%d
has been put into your bicycle,the current balance is %d
                  ''' % (goods_list[select], int(goods_price[select]), balance))
    elif select == 'quit':
        print('your purchase list:')

        for i in goods_list:
            if i in bicycle:
                j=bicycle.count(i)
                print("%s\t%d\t*%d" % (i, goods_price[goods_list.index(i)],j))
        print('\r\nyour balance is %d\r\nYour are welcome!' % balance)
        break
    else:
        print('invalid input! please input again.')

运行结果:

上面的代码,刚学完列表的时候写的,其实存在很多问题:比如商品、价格做到2个列表里,每次索引起来很麻烦,万一不小心价格顺序改一下,大厦直接坍塌,所以要做一个嵌套的列表;另外就是在输出购物清单时,那个来回索引很容易绕晕;还有新函数enumerate生成序号、 .isdigit()判断是否数字的应用。

修改完善后的代码如下:

salary = 20000
goods_list = [
    ('iphone6s',5800),
    ('macbook',9000),
    ('coffee',32),
    ('python book',80),
    ('bicycle',1500)]
bicycle = []
balance = salary

while True:
    print('-------the list of goods and price------')
    for i, v in enumerate(goods_list, 1):# enumerate函数可以加序号,第二个参数是第一个序号初始值,如果为空从0开始。
        print(i, '>>>', v)
    print('-' * 40)
    select = input("please choose the number of goods(input quit to exit):")

    if select.isdigit():
        select = int(select) - 1
        if select in range(len(goods_list)):#len函数的使用,便于商品列表更新,不需要再维护可选商品序号。
            if balance < goods_list[select][1]:
                print('your balance is not enough,%d' % balance)
            else:
                bicycle.append(goods_list[select])
                balance -= goods_list[select][1]
                print('''%s
has been put into your bicycle,the current balance is %d
                      ''' % (goods_list[select], balance))
        else:
            print('invalid input! please input again.')
    elif select == 'quit':
        print('————————————————————————————————————————————————————————\r\nyour purchase list:')
        for i in goods_list:
            if i in bicycle:    #将加入购物车中的商品进行分类计数、展示
                j=bicycle.count(i)
                print("%s\t*%d" % (i,j))
        print('\r\nyour balance is %d\r\nYour are welcome!' % balance)
        break
    else:
        print('invalid input! please input again.')

运行结果如下:

本文分享自微信公众号 - 奔跑的键盘侠(runningkeyboardhero)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python—字符串常用的格式化方法

    其实如果要通读字符串的所有方法,只需要在pycharm中输入st.就会自动弹出字符串的方法列表,挨个试过去就知道了

    Ed_Frey
  • Python-选择结构程序设计

    最近愈发觉得时间紧迫,毕业后参加工作以来,按键精灵断断续续学习了好多年,属于三天打鱼两天晒网这种类型,所以高不成低不就。so,最近必须加快步伐,赶赶进度,不能在...

    Ed_Frey
  • Python——关于path的坑

    学习语言,基本都会碰到关于路径拼接的语法,对于业余选手来讲,可能会比较困惑,包括我在内,直到某一天才顿悟…… 雷爆了。。

    Ed_Frey
  • 04-移动端开发教程-在线字体图标

    在IE4开始微软就已经开始支持在线字体,不过没有流行起来,直到CSS3新增加了font-face模块,正式纳入了web开发的标准。也渐渐流行起来而且发掘了很多其...

    老马
  • 04-移动端开发教程-在线字体

    在IE4开始微软就已经开始支持在线字体,不过没有流行起来,直到CSS3新增加了font-face模块,正式纳入了web开发的标准。也渐渐流行起来而且发掘了很多其...

    老马
  • python网络爬虫(1)静态网页抓取

    POST请求发送表单信息,密码不显示在URL中,数据字典发送时自动编码为表单形式。

    嘘、小点声
  • Python基础入门笔记(一)

    既然学习 Python,那么至少得了解下这门语言,知道 Python 代码执行过程吧。Python 的历史有兴趣的百度百科下就有,这个不多说了。

    用户2398817
  • 时间序列芯片数据分析极详细完整流程

    写在前面:从.CEL格式原始数据下载,到最终关键基因筛选(非hub基因)和初步验证,整个流程,目录还会增加。会涉及R及众多R包(最关键的是maSigpro和WG...

    Y大宽
  • Vue 应用单元测试的策略与实践 02 - 单元测试基础

    在上一篇文章当中我们介绍了单元测试的意义,以及为何选择 Facebook 的 Jest 作为我们的测试框架。现在就让我们一起来学习如何编写最基础的单元测试。

    JimmyLv_吕靖
  • Java常见排序算法详解——选择排序

    是一种简单直观的排序算法。每一次遍历时选取关键字最小(或最大)的记录作为有序序列的第i个记录。

    Demo_Yang

扫码关注云+社区

领取腾讯云代金券