学习Python-实践1:购物车程序

购物车程序应该是这十几天正式开始学python做的第一个稍有难度综合性练习。

程序要求:

'''
1.自定义一个商品列表,并按以下格式打印该列表
e.g.:
------  商品列表 ------
0  iphone    6888
1  MacPro    14800
2  小米6      2499
3  Coffee    31
4  Book      60
5  Nike      699
2.	提示用户输入预算,并在每次购买时查看余额是否充足。
不足时,提示“余额不足”。
3.	根据上面的products列表写一个循环,不断询问用户想买什么,
用户选择一个商品编号,就把对应的商品添加到购物车里,
最终用户输入q退出时,打印购买的商品列表。
4.	购买结束时,输出全部购买产品的编码、名称、单价和数量,
并在最后集中显示“总计”和“余额”
例如:
请输入您的预算:10000
------  商品列表 ------
0  iphone    6888
1  MacPro    14800
2  小米6      2499
3  Coffee    31
4  Book      60
5  Nike      699
请选择您要购买的商品编码:1
您的余额不足。
------  商品列表 ------
0  iphone    6888
1  MacPro    14800
2  小米6      2499
3  Coffee    31
4  Book      60
5  Nike      699
请选择您要购买的商品编码:0
已将iphone放入购物车。
------  商品列表 ------
0  iphone    6888
1  MacPro    14800
2  小米6      2499
3  Coffee    31
4  Book      60
5  Nike      699
请选择您要购买的商品编码:q
------  购物清单 ------
编码    商品名称   单价   数量	
0  		iphone    6888	 1
----------------------------
总金额                  6888元
找零                    3112元
感谢您的惠顾。
```
'''

实践过程: 

第一次尝试:

一开始无从下手,只勉强完成了第一步、第二步,在后两步思考了很长时间,经过各种试错,才勉强使整个程序能运行。

有些小瑕疵,比如预支金额不足时仍在购物小票中添加商品数量、同一商品多次重复占用多个序号、购物清单的内容不对齐等。

products =  [["iphone",6888],["MacPro",14800],["小米13",4299],
["Coffee",30],["Book",60],["Nike",699],["G-SHOCK GA-400GB-1A9",1299],
["HP Elitebook AMD",6299],["Casio fx-999 CNCW",169]]
#TODO:输出商品列表
def menu ():
   print("{:-^18}".format(" 商品列表 "))
   for i in range(9):  
          a = f"{i+1}        {products[i][0]}        {products[i][1]}"
          print(a)
          i +=1  
          a 
#TODO:添加购物小票开头
def shoplist():
     print("{:-^20}".format("  购物小票 "))
     print("序号 商品名称 单价 数量")

#TODO: 不重复的往购物小票中添加商品项
def func(x):  
      list1 = []
      for i in x:
        if i not in list1:
           list1.append(i)
      return list1

#TODO: 添加商品
sum_money = 0
all_money = int(input("请输入您预支付的金额:"))
quantity = {}
shoplist1 = []
menu ()
  
while True:
   KeyIn = input("\n请选择您要选购的商品(请选择商品前的编号(1-6),退出请按'q'):")
   if KeyIn != 'q':
      for i in KeyIn:
            quantity[i] = KeyIn.count(i)
            products[int(i)-1].append(quantity[i])
      shoplist1.append(products[int(i)-1])
      sum_money += products[int(i)-1][1]
      #TODO: 超出则弹出购物车中最后一个商品,并在商品总金额中减去相应金额
      if sum_money > all_money:
           print("{:*^25}".format("余额不足"))
           shoplist1.pop()
           sum_money -= products[int(i)-1][1]
           
          #TODO: 如未超出,则添加商品,并展示当前商品总额
      else:
           print(f"已将{products[int(i)-1][0]}放入购物车")
           print('总计:',sum_money)
      shoplist()
      for a,b in enumerate(func(shoplist1)):
           print(a+1,b[0],b[1],b.count(1))
#TODO: 展示最终购物小票
   else:
      shoplist()
      for a,b in enumerate(func(shoplist1)):
            print(a+1,b[0],b[1],f"{b.count(1)}件")
      print('-' * 30)
      print(f"总计:        {sum_money}元")
      print(f"找零:         {all_money -sum_money}元")
      print("感谢您的光临!\n")
      exit()

第二次尝试:

处理了预支金额不足时仍在购物小票中添加数量、同一商品多次重复占用多个序号两个小问题。

​
products = [["iphone",6888],["MacPro",14800],["小米13",4299],["Coffee",30]
,["Book",60],["Nike",699],["G-SHOCK GA-400GB-1A9",1299],
["HP Elitebook 845 Gen 10 AMD",6299],["Casio fx-999 CNCW",169]]
quantity = {}
shop_basket = []

def itemlist():
    print(" 商品列表 ".center(18,'-'))
    for i in range(9):
        print(f"{i+1}   {products[i][0]}    {products[i][1]}")
        i += 1
def shop_list():
    print("购物小票".center(18, '-'))
    print("序号  商品名 单价 数量")
 
def func1(x):
    list1 = []
    for i in x :
        if i not in list1:
            list1.append(i)
    return list1   
    
# TODO:添加商品
sum_money = 0
budget = int(input("请输入您的预支付金额:"))

itemlist()
while True:
    input1 =input("请您输入选择所需商品(输入商品序号1~9,如需退出,请输入'q'。):")
    if input1 != 'q':
        #TODO:添加商品数量
        for i in input1:
            quantity[i] = input1.count(i)
            products[int(i)-1].append(quantity[i])
        sum_money += products[int(i)-1][1]
        shop_basket.append(products[int(i)-1])
        # TODO: 如超出预支付金额,舍弃购物车内最后一个商品
        if sum_money > budget:
            print("余额不足".center(20,"x"))
            sum_money -= products[int(i)-1][1]
            print("当前余额:",budget - sum_money)
            shop_basket.pop()
            products[int(i)-1][2] -= 1
        # TODO: 如果预支付金额足够,则添加该件商品,并显示余额以及正在创建的购物小票
        else:
            print(f"{products[int(i)-1][0]}已添加至您的购物车中。")
            print("余额:",budget-sum_money)
     
        shop_list()
        for a,b in enumerate(func1(shop_basket)):
            print(a+1,b[0],b[1],b.count(1))
     else:
        print("最终的购物小票如下:\n")
        shop_list()
        for a,b in enumerate(func1(shop_basket)):
                print(a+1,b[0],b[1],b.count(1))
        print("-" * 40)
        print("总金额",  sum_money)
        print("找零:", budget - sum_money)
        print("感谢您的光临,祝您生活愉快!")
        exit()


​

不足/改进之处:

-代码过于凌乱,不够美观 (希望大佬指点)

-购物清单的内容不对齐

-对一些函数的用法还不熟悉,对字符串的格式化处理掌握欠佳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值