自己用if和while写了一个算是购物的代码玩玩,首先是输入购物卡余额(只是虚拟,现实一般是最后刷卡),然后选择商品,当余额不足时会提示你,并且可以输入数字充值余额,如果不充值就会退出循环。
用了if、while、格式化输出(个人觉得这种情况用%s会比format好用,代码量会少一些)以及一些dict、list的操作方法,list去重用的是转为set再转list的方法。
这个购物代码也可以扩展,比如在外面再套一个大框架,分为管理员入口和顾客入口。
管理员通过预设的账户密码登陆后可以增加删除商品(增加建议用dict[key],如果是setdefault出现重复key会无法更新;删除用pop可以实现类似的上下架功能,可以用get查重再上架,也可以使用del dict[key]直接永久删除)
顾客区域通过输预设的购物卡号和密码来进入,余额可以改为购物卡预设而非手动输入,每次购物完成再把购物卡余额也进行更改,余额不足也可以改为删除余额不足的购物卡号,充值相当于新增了一个购物卡,可以使用dict内嵌套list来实现购物卡的管理(增删改)
这种拓展有兴趣的也可以在我的代码基础上改改(我不写绝对不是因为懒....口亨~)
代码如下:
ware = {1:['游艇',60],2:['飞机',80],3:['火箭',110],4:['别墅',190],5:['豪宅',300]}
shop = []
pay = 0
while 1:
money = input('请输入您的购物卡余额(数字):\n>>>').upper().strip()
if money.isdigit():
print('输入成功,您现在可以选购商品了!')
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n')
money = int(money)
break
else:
print('输入有误请重新输入')
while 1:
for x,y in ware.items():
print('\n商品序号:%d,商品名称:%s,商品价格:%d元。'%(x,y[0],y[1]))
need = input('\n请输入您需要的商品序号,按Q退出:\n>>>').upper().strip()
if need.isdigit():
need = int(need)
if ware.get(need):
pay = pay + int(ware[need][1])
if money < pay:
print('\n您的余额不足,请充值')
yorn = input('\n如需充值请输入:‘Y’,不充值请按其他键\n>>>')
if yorn.upper().strip() =='Y':
while 1:
recharge = input('请输入充值金额\n>>>').strip()
if recharge.isdigit():
money = money + int(recharge)
print('充值成功,充值金额%s元'%(recharge))
break
else:
print('输入错误,请重试')
else:
print('感谢惠顾,欢迎下次光临!')
break
shop.append(ware[need][0])
shop = list(set(shop))
if money == pay:
print('您将%s放入了您的购物车,价格为%d元'%(ware[need][0],ware[need][1]))
print('您现在已经购买了%s,总计%d元,您的余额已不足无法继续购物'%(shop,pay))
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
if money > pay:
print('您将%s放入了您的购物车,价格为%d元'%(ware[need][0],ware[need][1]))
print('您现在已经购买了%s,总计%d元,余额还有%d元'%(shop,pay,money-pay))
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
else:
print('您输入的有误,请重新输入')
elif need == 'Q':
print('欢迎您下次光临')
break
else:
print('您输入的有误,请重新输入')