作业:
1. 用户先给自己的账户充钱:比如先充3000元。
2. 页面显示 序号 + 商品名称 + 商品价格,如:
电脑 1999
鼠标 10
…
n 购物车结算
3. 用户输入选择的商品序号,然后打印商品名称及商品价格,并将此商品,添加到购物车,用户还可继续添加商品。
4. 如果用户输入的商品序号有误,则提示输入有误,并重新输入。
5. 用户输入n为购物车结算,依次显示用户购物车里面的商品,数量及单价,若充值的钱数不足,则让用户删除某商品,直至可以购买,若充值的钱数充足,则可以直接购买。
6. 用户输入Q或者q退出程序。
7. 退出程序之后,依次显示用户购买的商品,数量,单价,以及此次共消费多少钱,账户余额多少。
message = """
电脑 1999
鼠标 10
耳机 388
n 购物车结算
"""
item_dic = {1: "电脑", 2: "鼠标", 3: "耳机"} # 创建商品名称字典
price_dic = {1: 1999, 2: 10, 3: 388} # 创建商品价格字典
# 依据商品名称字典创建购物车商品名称与商品数量字典
item_num_dic = {}
for i in range(len(item_dic.keys())):
defaul_num = [0] * len(item_dic.keys())
item_num_dic.setdefault(list(item_dic.values())[i], defaul_num[i])
total_budget = 0.0 # 购物车商品总计金额
item_name = [] # 购物车商品名称列表
my_purse = input("请输入存入金额:")
print(message)
item_num = input("请输入需要购买商品的编号:")
while True:
if item_num == "n":
if total_budget <= float(my_purse):
print("已购买商品:")
for i in range(len(item_name)):
print(str(i + 1) + ". " + item_name[i] + " " + str(item_num_dic[item_name[i]]))
print("总计:%f" % total_budget)
print("余额:%f" % (float(my_purse) - total_budget))
break
else:
item_num = input("已超预算,请删减购物车产品:")
# 当输入编号有效、超出预算且该商品购物车数量为1时,购物列表删掉该商品、商品数量减1、预算减去相应商品价格
if item_dic[int(item_num)] in item_name and total_budget > float(my_purse) and \
item_num_dic[item_dic[int(item_num)]] == 1:
item_num_dic[item_dic[int(item_num)]] -= 1
total_budget -= price_dic[int(item_num)]
item_name.pop(int(item_num) - 1)
# 当减去一个商品后,预算在可使用范围内时,结算并输出相应购物信息(切记退出循环)
if total_budget <= float(my_purse):
print("已购买商品:")
for i in range(len(item_name)):
print(str(i + 1) + ". " + item_name[i] + " " + str(item_num_dic[item_name[i]]))
print("总计:%f" % total_budget)
print("余额:%f" % (float(my_purse) - total_budget))
break
# 当减去一个商品后,还超预算,继续删减产品
else:
item_num = input("请继续删减购物车产品:")
# 当输入编号有效、超出预算且该商品购物车数量大于1时,购物列表不变、对应商品数量减1、预算减去相应商品价格
elif item_dic[int(item_num)] in item_name and total_budget > float(my_purse) and \
item_num_dic[item_dic[int(item_num)]] > 1:
item_num_dic[item_dic[int(item_num)]] -= 1
total_budget -= price_dic[int(item_num)]
# 判断当减去一个商品后,预算在可使用范围内时,结算并输出相应购物信息(切记退出循环)
if total_budget <= float(my_purse):
print("已购买商品:")
for i in range(len(item_name)):
print(str(i + 1) + ". " + item_name[i] + " " + str(item_num_dic[item_name[i]]))
print("总计:%f" % total_budget)
print("余额:%f" % (float(my_purse) - total_budget))
break
# 当减去一个商品后,还超预算,继续删减产品
else:
item_num = input("请继续删减购物车产品:")
# 直至不再超预算(切记退出循环)
elif item_dic[int(item_num)] in item_name and total_budget <= float(my_purse):
for i in range(len(item_name)):
print("已购买商品:")
print(str(i + 1) + ". " + item_name[i] + " " + str(item_num_dic[item_name[i]]))
print("总计:%f" % total_budget)
print("余额:%f" % (float(my_purse) - total_budget))
break
# 特殊情况:当输入参数无效时,提示重新输入
elif item_dic[int(item_num)] not in item_name:
item_num = input("内容有误,请重新输入:")
elif item_num in str(item_dic.keys()):
message1 = """
----购物车信息----
%s已添加到您的购物车,单价为%.2f""" % (item_dic[int(item_num)], price_dic[int(item_num)])
print(message1)
if item_dic[int(item_num)] in item_name:
item_num_dic[item_dic[int(item_num)]] += 1 # 若已有该产品,则只增加该产品购买数量
else:
item_name.append(item_dic[int(item_num)]) # 若没有该产品,则将该产品添加到购买列表
item_num_dic[item_dic[int(item_num)]] += 1 # 同时增加产品购买数量
total_budget += price_dic[int(item_num)] # 累计消费额
item_num = input("请继续输入商品编号:") # 继续购买
elif item_num.upper() == "Q":
print("已购买商品:")
for i in range(len(item_name)):
print(str(i + 1) + ". " + item_name[i] + " " + str(item_num_dic[item_name[i]]))
print("总计:%f" % total_budget)
print("余额:%f" % (float(my_purse) - total_budget))
break
else:
item_num = input("输入有误,请重新选择:")