#_*_coding:utf-8_*_
'''
写程序:购物车程序
需求:
1.启动程序后,让用户输入工资,然后打印商品列表
2.允许用户根据商品编号购买商品
3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4.用户可一直购买商品,也可以随时退出,退出时,打印已购买的商品和余额
'''
import random;
print("尊敬的顾客,欢迎光临本店!");
#读取用户的输入 a=input("xxxx:")
sar = 0;
while sar <= 0 :
try:
sar = int(input("请输入您的工资金额:"));
except ValueError:
print("请输入数字!");
#定义一个商品列表
products = ["毛巾","牙膏","沐浴露","洗头膏","电饭锅","金龙鱼","酱油","醋","足球","篮球","电冰箱","洗衣机","电视机"];
offerlist = {};
shopcart = {};
#初始化商品列表
for i,val in enumerate(products):
price = random.randint(3,100);
offerlist[i+1] = (val,price);
#打印商品列表:
print("======商品列表=======");
print("商品编号 \t商品名称 \t品价格");
for i in range(len(offerlist)):
val = offerlist.get(i+1);
print("%d\t%s\t%d" % (i+1,val[0],val[1]));
goon = True;
mark = "";
while goon:
mark=input("请选择您要购买的商品编号:");
if mark == "quit":
goon = False;
break;
try:
val = offerlist.get(int(mark));
except ValueError:
print("请输入正确的数字编号!");
continue;
if val:
#当商品编号存在时,并且用户金额不足时
if val[1] > sar:
print("对不起,您的当前余额为【%d】,无法购买该商品,请选择其他商品或结束购买,退出请输入 “quit”!" % sar);
continue;
else:
cnt = shopcart.get(val[0]);
shopcart[val[0]]=(cnt+1 if cnt else 1);
sar-=val[1];
print("您已将编号【%s】的商品【%s】加入到购物车中,当前已有%d件【%s】,您的余额为【%d】" % (mark,val[0],shopcart[val[0]],val[0],sar));
else:
print("对不起,您选择的编号为%s的商品不存在,请重新选择商品或退出,退出请输入 “quit”" % mark);
print("你购买的商品如下:")
#打印商品列表:
summary=0;
print("商品编号 \t商品名称 \t商品单价\t商品数量\t小计");
for i,key in enumerate(shopcart):
code = 0;
price = 0;
cnt = shopcart[key];
tal = 0;
for j in range(len(offerlist)):
val = offerlist.get(j+1);
if val[0] == key:
code = j+1;
price = val[1];
tal = cnt*val[1];
print("%s\t%s\t%d\t%d\t%d" % (code,key,price,cnt,tal));
summary+=tal;
print("感谢您光临本店,您本次共计消费:%d元,您的余额为%d源!" % (summary,sar));
=======================================执行结果================================================


总结:
1.使用随机数需要导入类库import ramdom,获取一个1到100之间的整数,random.randint(1,100)
2.异常的捕获与处理使用try except
3.while循环结构
while True/False:
循环体....
4.列表的使用,使用[]进行声明
增:append insert 删:pop remove del 查:a[0] a[0:2] 改:a[0]=xx
定义一个列表:
![]()
添加一个元素“wangwu",单引号与双引号效果相同。

在指定的位置插入一个元素:a.insert(3,'wangwu')

删除列表中'lisi'元素:a.remove('lisi') #按照元素值删除,如果有多个的话顺序删除第一个。

删除列表中倒数第二个元素(1):del a[-2] #按照索引删除

获取列表中第三个元素(3):a[2] 第n个元素a[n-1]

获取列表中'wangwu','zhangsan':列表的切片 a[3:5]

将列表中第五个元素'zhangsan'替换成'张三':a[4]='张三'

删除列表中最后一个元素并返回:a.pop()

循环变量列表并获取列表中元素的下标:for i,val in enumerate(a):
5.字典的使用a={xx:xxx}
字典中的key可以是数值或者字符串,但必须唯一。值可以是单个元素(字符串、数字),也可以是列表、元组、字典以嵌套形式存在。

遍历字典中的值:
for key in a:
val=a.get(key)
print(key,val)

for i in range(len(a)):
val=a.get(i+1);
print(key,val);

给字典中添加一个键值对"10:'张三'"
a[10]='宋七'

删除key为3的值:a.pop(3)

6.元组的定义:a=(1,2,3),元组也叫只读列表,它存放的是一组值,一旦创建就不能修改了。
7.格式化打印:
%s:字符串占位符
%d:数值占位符
print("这是一个数字测试%d,这是一个字符串测试%s" % (100,'张三'));
![]()