'''
作业:购物车
1. 用户先给自己的账户充钱:比如先充3000元。
2. 页面显示 序号 + 商品名称 + 商品价格,如:
1 电脑 1999
2 鼠标 10
…
n 购物车结算
3. 用户输入选择的商品序号,然后打印商品名称及商品价格,并将此商品,添加到购物车,用户还可继续添加商品。
4. 如果用户输入的商品序号有误,则提示输入有误,并重新输入。
5. 用户输入n为购物车结算,依次显示用户购物车里面的商品,数量及单价,若充值的钱数不足,则让用户删除某商品,直至可以购买,若充值的钱数充足,则可以直接购买。
6. 用户输入Q或者q退出程序。
7. 退出程序之后,依次显示用户购买的商品,数量,单价,以及此次共消费多少钱,账户余额多少。
'''
# 定义商品列表
goods = {
1: {'name': '电脑', 'price': 1999},
2: {'name': '鼠标', 'price': 10},
3: {'name': '键盘', 'price': 50},
4: {'name': '显示器', 'price': 1000},
}
# 定义我的账户
my = {
'account_balance': 0, # 账户余额默认为0
'shopping_cart': {}, # 购物车默认为空
'order': {} # 订单默认为空
}
# 按照商品序号存储购买数量
dic1 = {
1: {'name': '电脑', 'price': 1999, 'num': ''},
2: {'name': '鼠标', 'price': 10, 'num': ''},
3: {'name': '键盘', 'price': 50, 'num': ''},
4: {'name': '显示器', 'price': 1000, 'num': ''},
}
# 用户进行充值
while True:
charge = input('账户余额为0 ,请您充值:') # 首先进行账户充值
if charge.strip().replace('.', '', 1).isdigit():
my['account balance'] = charge
charge = int(charge)
print('恭喜您,充值成功' + ',' + '账户余额为' + my['account balance'])
break
else:
print('您的充值失败,请您重新充值')
continue
# 商品页面显示
for k, v in goods.items():
print(k, v['name'], v['price'])
count = 0
balance = 0
while True:
goods_serial_number = input('请选择您购买的商品序号:').upper()
# 用户输入Q或者q退出购买程序
if goods_serial_number == 'Q':
if my['shopping_cart'] == '':
print('账户余额:'+str(balance))
print('总共花费金额:' + str(charge - balance))
elif my['shopping_cart'] != '':
for k,v in dic1.items():
if k in my['shopping_cart'].items():
dic1[k]['name'] =my['shopping_cart'][k]
print(v['name'],v['price'],v['num'])
print('总共花费金额:'+ str(charge - balance))
print('账户余额:'+str(balance))
break
# 用户输入n进行购物车结算
elif goods_serial_number == 'N':
for i in dic1.keys():
if i in my['shopping_cart'].keys():
dic1[i]['num'] = my['shopping_cart'][i]
for l in dic1.keys(): # 依次显示用户购物车里面的商品,数量及单价
if l in my['shopping_cart'].keys():
msg = '''
---------------------购买信息------------------
商品名称:%(name)s 商品数量:%(num)s 商品单价:%(price)s
--------------------end---------------------
''' % dic1[l]
print(msg)
else:
pass
# 计算各个商品的总价
for k in dic1:
if k in my['shopping_cart']:
count = dic1[k]['num'] * dic1[k]['price'] + count # 计算花费金额
balance = charge - count # 计算账户余额
if balance >= 0:
print('恭喜您,购买成功!')
elif balance < 0:
print('余额不足,请删除部分商品。')
while balance < 0:
del_goods_serial_number = input('请输入删除物品的序号:').upper()
if (del_goods_serial_number == 'Q' )or (del_goods_serial_number == 'N'):
break
elif del_goods_serial_number.isdigit():
if int(del_goods_serial_number) in my['shopping_cart'] :
if my['shopping_cart'][int(del_goods_serial_number)] >= 1 :
my['shopping_cart'][int(del_goods_serial_number)] = my['shopping_cart'][int(del_goods_serial_number)] - 1
print(my['shopping_cart'])
balance = balance + dic1[int(del_goods_serial_number)]['num'] * dic1[int(del_goods_serial_number)]['price']
else:
print('购物车中已经无该商品,请重新选择')
else:
print('购物车中无该商品,请重新选择')
continue
else:
print('恭喜你,购买成功')
elif goods_serial_number.isdigit() == False:
print("商品序号输入有误,请重新输入!")
continue
elif int(goods_serial_number) in goods:
goods_serial_number = int(goods_serial_number)
if goods_serial_number in my['shopping_cart']:
my['shopping_cart'][goods_serial_number] = int(my['shopping_cart'][goods_serial_number]) + 1
else:
my['shopping_cart'].setdefault(goods_serial_number)
my['shopping_cart'][goods_serial_number] = 1
print(my['shopping_cart'])