python 购物车程序

发布时间:2018-02-23 15:12:44编辑:admin阅读(4013)

    需求:


    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

关键字

上一篇: python 元组

下一篇: python 字符串常用操作