[基础语法] python语法之列表、判断、循环例子

购物车案例

已发布:

问题描述:一个水果店卖有6种水果,分别是苹果、香蕉、梨、桃子、草莓、菠萝。价格(元\斤)分别为:21、10、14、66、80、6。以上价格仅是作为练习的数据,不具有现实意义

要求:按照一定的格式输出商品的种类和价格。用户通过输入商品的序号,把商品加到购物车。结账时显示购物车中的商品,并输出总金额。

整体框架

购物车案例有三个要求:

  • 输出商品的列表(有序号、商品名、单价)、并且要看上去整齐
  • 提示用户选择要购买的商品,并将其加入购物车
  • 结账时:显示购物车的内容、计算总金额。输出时要求整齐。

考虑以上要求,在设计代码框架时首先就需要思考如何存取数据的问题。有两个数据是全局都需要用到的:商品的名称和单价、购物车的内容。同时还要思考,在客户把商品加入到购物车时,在购物车数据中存储的数据内容是什么,是存储商品的序号?还是存储商品的全部信息?

目前已经学习了列表,那么考虑用列表存储商品的信息和购物车的信息。并且购物车只存储商品的序号。
整体框架代码如下:

products = [["苹果", 21], ["香蕉", 10], ["梨", 14], ["桃子", 66], ["草莓", 80], ["菠萝", 6]]  # 商品的信息
shopping_cart = []  # 存放购物车的序号
if __name__ == "__main__":
    print_pro()  # 打印商品列表
    buy_sth()  # 向购物车中添加商品
    print_cart()  # 打印购物车中商品的信息,并计算总金额

打印商品列表

商品信息是使用列表进行存储的,每个商品的名称和单价也是一个列表,那么就可以通过for循环使用下标进行打印商品的信息和价格。代码如下:

def print_pro():
    print("-" * 7, end="")
    print("商品列表", end="")
    print("-" * 7)
    for i, prod in enumerate(products):   # 列表可以通过枚举类型enumerate,来同时输出下标,和元素
        print(i, end="\t")
        print(prod[0], end="\t")
        print(prod[1])

将商品加入购物车

在打印商品列表时,每个商品的前面都有其对应的序号,通过输入序号,来选择其对应得商品,加入购物车。商品一种有6个,序号范围是[0, 6),因此如果输入其他的字符,就是结账,打印购物车。

def buy_sth():
    while True:
        num = int(input("请输入要加入购物车的商品序号;输入其他数字,打印购物车。"))  # input输入的格式都是str,因此要使用int()进行类型强制转换。
        if num in range(0, 6):
            shopping_cart.append(num)
        else:
            return

打印购物车、计算总金额

购物车中存放的是商品的序号,同时也是商品在商品列表中的下标,因此可以通过购物车中存放的序号直接获取商品的信息,并将其打印出来。

def print_cart():
    print("-" * 7, end="")
    print("购物车列表", end="")
    print("-" * 7)
    total = 0
    for num in shopping_cart:
        print(num, end="\t")
        print(products[num][0], end="\t")
        print(products[num][1])
        total += products[num][1]
    print("-" * 20)
    print("\t" * 4 + "共记:%d元" % total)

完整代码

products = [["苹果", 21], ["香蕉", 10], ["梨", 14], ["桃子", 66], ["草莓", 80], ["菠萝", 6]]
shopping_cart = []

def print_pro():
    print("-" * 7, end="")
    print("商品列表", end="")
    print("-" * 7)
    for i, prod in enumerate(products):   # 列表可以通过枚举类型,来同时输出下标,和元素
        print(i, end="\t")
        print(prod[0], end="\t")
        print(prod[1])


def buy_sth():
    while True:
        num = int(input("请输入要加入购物车的商品序号;输入其他数字,打印购物车。"))
        if num in range(0, 6):
            shopping_cart.append(num)
        else:
            return


def print_cart():
    print("-" * 7, end="")
    print("购物车列表", end="")
    print("-" * 7)
    total = 0
    for num in shopping_cart:
        print(num, end="\t")
        print(products[num][0], end="\t")
        print(products[num][1])
        total += products[num][1]
    print("-" * 20)
    print("\t" * 4 + "共记:%d元" % total)


if __name__ == "__main__":
    print_pro()
    buy_sth()
    print_cart()

运行结果如下:
在这里插入图片描述

另外说明

从上面程序运行的结果可以看出,这个代码有很大的改进空间:在商品列表中可以加上表头、在购物车列表中,相同种类的可以合并为数量等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值