文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python 购物车程序

2023-01-30 21:57

关注

需求:


1.启动程序后,让用户输入工资,然后打印商品列表

2.允许用户根据商品编号购买商品

3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 

4.可随时退出,退出时,打印已购买商品和余额


首先分析第1条,输入工资,只需要执行一次即可,所以它是在循环外层的。

另外得判断,输入的是否是数字,需要用到isdigit()方法

salary = input("请输入你的工资:")
#isdigit() 判断是否是数字
if salary.isdigit():
    #用户输入的转换为数字
    salary = int(salary)
else:
    print("输入错误,请输入数字!")

执行程序,当输入的不是数字时,就会有提示

请输入你的工资:wrwr
输入错误,请输入数字!


第2条,需要循环商品的编号、名称、价格

可以用2个列表,来分别存放商品名称和价格

product = ['Iphone','Mac Pro','Bike']
price = [5800,9800,800]

不推荐这么做,如果一旦商品顺序更换了,那么价格就不对了。

可以用列表加元组的方式来完成

product_list = [
    ('Iphone',5800),
    ('Mac Pro',9800),
    ('Bike',800),
    ('Watch',10600),
    ('Coffee',31),
    ('Python',120),
]

那么问题来了,商品编号,怎么办呢?

列表的元素都是有索引的,用索引来代替商品编号


enumerate()是python的内置函数

enumerate将其组成一个索引序列,利用它可以同时获得索引和值

product_list = [
    ('Iphone',5800),
    ('Mac Pro',9800),
    ('Bike',800),
    ('Watch',10600),
    ('Coffee',31),
    ('Python',120),
]
for index, item in enumerate(product_list):
    print(index, item)

index和item 分别对应索引和值

执行输出

0 ('Iphone', 5800)

1 ('Mac Pro', 9800)

2 ('Bike', 800)

3 ('Watch', 10600)

4 ('Coffee', 31)

5 ('Python', 120)


购买商品是一个持续过程,可以连续购买,这个时候,需要用到while循环

#商品列表
product_list = [
    ('Iphone',5800),
    ('Mac Pro',9800),
    ('Bike',800),
    ('Watch',10600),
    ('Coffee',31),
    ('Python',120),
]
salary = input("请输入你的工资:")
#isdigit() 判断是否是数字
if salary.isdigit():
    #用户输入的转换为数字
    salary = int(salary)
    while True:
        # 打印商品列表
        for index, item in enumerate(product_list):
            print(index, item)
        break
else:
    print("输入错误,请输入数字!")

执行程序,效果如下:

shop1.gif

用户输入完工资之后,需要打印商品列表,输入指定的商品编号

#商品列表
product_list = [
    ('Iphone',5800),
    ('Mac Pro',9800),
    ('Bike',800),
    ('Watch',10600),
    ('Coffee',31),
    ('Python',120),
]
salary = input("请输入你的工资:")
#isdigit() 判断是否是数字
if salary.isdigit():
    #用户输入的转换为数字
    salary = int(salary)
    while True:
        # 打印商品列表
        for index, item in enumerate(product_list):
            print(index, item)
        user_choice = input("请输入购买的商品编号:")
        # 判断商品编号是否是数字
        if user_choice.isdigit():
            user_choice = int(user_choice)
            # 判断编号是否小于商品列表的长度以及大于等于0
            if user_choice < len(product_list) and user_choice >= 0:
                # 用户选择的商品信息
                p_item = product_list[user_choice]
            else:
                print("商品编号不存在!")
        else:
            print("编号错误,请输入数字!")
else:
    print("输入错误,请输入数字!")

执行程序,效果如下:

shop2.gif

第3点要求: 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 

在循环外层,需要加一个购车车列表,存放购买的商品

#购物车列表,默认是空的
shopping_list = []

下面开始扣款

#商品列表
product_list = [
    ('Iphone',5800),
    ('Mac Pro',9800),
    ('Bike',800),
    ('Watch',10600),
    ('Coffee',31),
    ('Python',120),
]
#购物车列表,默认是空的
shopping_list = []
salary = input("请输入你的工资:")
#isdigit() 判断是否是数字
if salary.isdigit():
    #用户输入的转换为数字
    salary = int(salary)
    while True:
        # 打印商品列表
        for index, item in enumerate(product_list):
            print(index, item)
        user_choice = input("请输入购买的商品编号:")
        # 判断商品编号是否是数字
        if user_choice.isdigit():
            user_choice = int(user_choice)
            # 判断编号是否小于商品列表的长度以及大于等于0
            if user_choice < len(product_list) and user_choice >= 0:
                # 用户选择的商品信息
                p_item = product_list[user_choice]
                # p_item[1] 商品价格,判断是否小于等于工资,代表买的起
                if p_item[1] <= salary:
                    # 扣钱,等同于salary = salary - p_item[1]
                    salary -= p_item[1]
                    # 将商品信息(元组)写入列表
                    shopping_list.append(p_item)
                    print("商品%s已加入到购车,您的余额还剩 %s" % (p_item, salary))
                else:
                    print("你的余额为 %s ,无法购买此商品!" %(salary))
            else:
                print("商品编号不存在!")
        else:
            print("编号错误,请输入数字!")
else:
    print("输入错误,请输入数字!")

执行程序,效果如下:

shop3.gif

显示余额的时候,可以显示为红色

把print()里面的%s 替换为下面的代码即可

31表示红色,32表示绿色

41表示红色背景,42表示绿色背景

\033[31;1m%s\033[0m

可以余额不足时,用红色背景文字提示

完整代码如下:

#商品列表
product_list = [
    ('Iphone',5800),
    ('Mac Pro',9800),
    ('Bike',800),
    ('Watch',10600),
    ('Coffee',31),
    ('Python',120),
]
#购物车列表,默认是空的
shopping_list = []
salary = input("请输入你的工资:")
#isdigit() 判断是否是数字
if salary.isdigit():
    #用户输入的转换为数字
    salary = int(salary)
    while True:
        # 打印商品列表
        for index, item in enumerate(product_list):
            print(index, item)
        user_choice = input("请输入购买的商品编号:")
        # 判断商品编号是否是数字
        if user_choice.isdigit():
            user_choice = int(user_choice)
            # 判断编号是否小于商品列表的长度以及大于等于0
            if user_choice < len(product_list) and user_choice >= 0:
                # 用户选择的商品信息
                p_item = product_list[user_choice]
                # p_item[1] 商品价格,判断是否小于等于工资,代表买的起
                if p_item[1] <= salary:
                    # 扣钱,等同于salary = salary - p_item[1]
                    salary -= p_item[1]
                    # 将商品信息(元组)写入列表
                    shopping_list.append(p_item)
                    print("商品%s已加入到购车,您的余额还剩 \033[31;1m%s\033[0m" % (p_item, salary))
                else:
                    print("\033[41;1m你的余额为 %s ,无法购买此商品!\033[0m" %(salary))
            else:
                print("商品编号不存在!")
        else:
            print("编号错误,请输入数字!")
else:
    print("输入错误,请输入数字!")

执行效果如下:

blob.png


第4点要求: 可随时退出,退出时,打印已购买商品和余额

退出直接用exit()即可

为了减少图片的长度,我只留了3个商品

完整代码如下:

#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'

#商品列表
product_list = [
    ('Iphone',5800),
    ('Mac Pro',9800),
    ('Bike',800),
]
#购物车列表,默认是空的
shopping_list = []
salary = input("请输入你的工资:")
#isdigit() 判断是否是数字
if salary.isdigit():
    #用户输入的转换为数字
    salary = int(salary)
    while True:
        # 打印商品列表
        for index, item in enumerate(product_list):
            print(index, item)
        user_choice = input("请输入购买的商品编号:")
        # 判断商品编号是否是数字
        if user_choice.isdigit():
            user_choice = int(user_choice)
            # 判断编号是否小于商品列表的长度以及大于等于0
            if user_choice < len(product_list) and user_choice >= 0:
                # 用户选择的商品信息
                p_item = product_list[user_choice]
                # p_item[1] 商品价格,判断是否小于等于工资,代表买的起
                if p_item[1] <= salary:
                    # 扣钱,等同于salary = salary - p_item[1]
                    salary -= p_item[1]
                    # 将商品信息(元组)写入列表
                    shopping_list.append(p_item)
                    print("商品%s已加入到购车,您的余额还剩 \033[31;1m%s\033[0m" % (p_item, salary))
                else:
                    print("\033[41;1m你的余额为 %s ,无法购买此商品!\033[0m" %(salary))
            else:
                print("商品编号不存在!")
        #当输入q的时候
        elif user_choice == 'q':
            #打印商品列表
            print("---已购买的商品列表---")
            for p in shopping_list:
                print(p)
            #打印余额
            print("您的余额还剩 \033[31;1m%s\033[0m" % salary)
            #程序退出
            exit()
        else:
            print("编号错误,请输入数字!")
else:
    print("输入错误,请输入数字!")

执行效果如下:

shop4.gif

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯