文章目录

  • 前言
  • 问题
  • 购物车



前言

记录一次小练习,根据用户选择添加商品进购物车,并计算金额结账。
刚开始我只是现实了将物品放入购物车里的小功能,并默认买一件。
之后,我又进行了反复思考,对于真实场景应当还要考虑购买数量(当然还要其他更多需要考虑的因素,笑😀),于是我调整了一下代码,经过反复调试最终成功实现,还是很开心的!

小插曲
之前有一个bug,我反复检查代码逻辑,语法等,卡了好久(初学不久),也上网找了,都没解决,一直想到了饭点,去吃了个饭回来,接着改还是没思路,要不不要这个实现数量的功能了?我还是心有不甘,我心想死马当活马医算了把判断语句由int改成char型去判断,一调试居然成了,真的十分开心!

bug就是当用户错误输入字母是报错:
ValueError: invalid literal for int() with base 10

请选择需要的商品前编号(逐一添加),输入q结束:9
您输入有误,请重新输入!
请选择需要的商品前编号(逐一添加),输入q结束:e
Traceback (most recent call last):
  File "e:\Python\Code\demo2.py", line 27, in <module>
    if x.isdigit and 0 <= int(x) <= 5:                #判断用户是否正确输入数字编号
ValueError: invalid literal for int() with base 10: 'e'

问题

python小票机 python购物小票_python小票机

购物车

products = [["iphone",6888],["Mac pro",14800],["小米6",1999],["Coffee",31],["Book",60],["Nike Air",699]]

#打印商品列表
print("{:5} 商品列表 {:>5}".format("-"*5,"-"*5))

x = 0
for i in products:
    print("{}   {}\t{}".format(x,i[0],i[1]))
    x += 1

cart = []  #购物车
count = 0  #买了几件
num = 0    #总共金额


while True:
    x = input("请选择需要的商品前编号(逐一添加),输入q结束:")
    if x.isdigit and "0" <= x <= "5":                #判断用户是否正确输入数字编号
        x = int(x)                                   #input为字符型需要强制类型转换
        cart.append(products[x][0])                  #购物车里添加商品
        count = input("请问需要多少?(输入数字回车)")
        count = int(count)
        num += (products[x][1] * count)
        print("请问还需要其他商品吗?(输入q收银结算)")
    elif x.isalpha and x == "q":                     #判断用户是否正确退出
        if num == 0:
            print("您无购买记录,欢迎下次光临!")
        else:
            print("您购买了以下商品:\n")
            for i in cart:                           #遍历购物车
                print(i+"\t"+str(count)+"个")        #打印商品以及商品数量
            print("-"*20+"\n")
            print("合计:{}元,欢迎下次光临!".format(num))   #合计金额
        exit(0)
    else:
        print("您输入有误,请重新输入!")             #判断用户非法输入

打印输出

----- 商品列表 -----
0   iphone      6888
1   Mac pro     14800
2   小米6       1999
3   Coffee      31
4   Book        60
5   Nike Air    699
请选择需要的商品前编号(逐一添加),输入q结束:0
请问需要多少?(输入数字回车)1
请问还需要其他商品吗?(输入q收银结算)
请选择需要的商品前编号(逐一添加),输入q结束:1
请问需要多少?(输入数字回车)1
请问还需要其他商品吗?(输入q收银结算)
请选择需要的商品前编号(逐一添加),输入q结束:5
请问需要多少?(输入数字回车)1
请问还需要其他商品吗?(输入q收银结算)
请选择需要的商品前编号(逐一添加),输入q结束:q
您购买了以下商品:

iphone  1个
Mac pro 1个
Nike Air        1个
--------------------

合计:22387元,欢迎下次光临!