003_模拟购物小程序

#_*_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,'张三'));

 


版权声明:本文为sjz64472418原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。