前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 购物车程序

python 购物车程序

作者头像
py3study
发布2018-08-02 16:03:15
1K0
发布2018-08-02 16:03:15
举报
文章被收录于专栏:python3python3

需求:

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

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

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

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

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

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

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

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

代码语言:javascript
复制
请输入你的工资:wrwr
输入错误,请输入数字!

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

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

代码语言:javascript
复制
product = ['Iphone','Mac Pro','Bike']
price = [5800,9800,800]

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

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

代码语言:javascript
复制
product_list = [
    ('Iphone',5800),
    ('Mac Pro',9800),
    ('Bike',800),
    ('Watch',10600),
    ('Coffee',31),
    ('Python',120),
]

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

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

enumerate()是python的内置函数

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

代码语言:javascript
复制
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循环

代码语言:javascript
复制
#商品列表
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
shop1.gif

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

代码语言:javascript
复制
#商品列表
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
shop2.gif

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

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

代码语言:javascript
复制
#购物车列表,默认是空的
shopping_list = []

下面开始扣款

代码语言:javascript
复制
#商品列表
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
shop3.gif

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

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

31表示红色,32表示绿色

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

代码语言:javascript
复制
\033[31;1m%s\033[0m

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

完整代码如下:

代码语言:javascript
复制
#商品列表
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
blob.png

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

退出直接用exit()即可

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

完整代码如下:

代码语言:javascript
复制
#!/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
shop4.gif
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档