Python练习代码-第十一章-字典练习

11.4.1 字符串转字典

正则,快速分割字符串为列表
map/eval 字符串转换
for循环条件简写

# 10.6.2/11.4.1 面包牛奶 
import re
# 字典创建
dict = {}
str1 = "牛奶,面包,可乐,饼干,糖果,水果"
str2 = "65,15,39,45,24,35.8"

# 1.字符串分割成列表 正则法
list1 = re.findall("[^,]+", str1)
list2 = re.findall("[^,]+", str2)
# 2.eval转换为数据的实际类型
list21 = list(map(eval, list2))
# print(list1,list21)

# 3. 字典赋值
for i, j in zip(list1, list21):
    dict[i] = j
# 4. 字典修改
dict["可乐"] = 60

# 4. 字典值求和
sum = sum(x for x in dict.values())
print("您购买%d件物品,共计:%.2f元" % (len(dict), sum))

11.4.2 银行卡加密码

fromkeys ,字典批量赋值

import re

dict,list1= {},[]

for i in range(610001,610101):
    list1.append(str(i))

dict = dict.fromkeys(list1,"000000")
print(dict)

11.4.3 超市售货统计程序

在这里插入图片描述
要求: 输出结果如下
在这里插入图片描述

dict0 = {1:"日期",2:"货品名称",3:"数量",4:"单价"}

dict1  = {"11月24日":["牛奶","方便面","糖果"],
          "11月25日":["牛奶","咖啡","饼干","火腿肠"],
          "11月26日":["奶茶","牛奶","方便面"]}

dict2  = {"牛奶":5.5,"方便面":4,"糖果":12,"咖啡":6,"饼干":6,"火腿肠":5,"奶茶":5}

dict3  = {"11月24日":{"牛奶":15,"方便面":25,"糖果":10},
          "11月25日":{"牛奶":25,"咖啡":5,"饼干":15,"火腿肠":10},
          "11月26日":{"奶茶":10,"牛奶":20,"方便面":15}}

for i,j in zip(dict3.keys(),dict3.values()):
    print(i)
    sum0 ,sumxl= 0,0
    for k in j.items():
        # 列表转换
        list1 = list(k)
        # 获取数量和单价 及单日求和
        dj = dict2.get(list1[0])
        xl = list1[1]
        sumxl += xl
        sum0 += xl * dj
        # 列表插入 为字符串拼接做准备
        list1.insert(1,"    "+dict0[3]) #文字数量
        list1.insert(2,": ")
        list1.append("    "+dict0[4]+": "+str(dj))#单价: 数值

        # 字符串转换及合并
        str1 = "".join(map(str,list1))
        # 输出商品数量
        print("  ",str1)
     # 输出当日货物及其卖价小计
    print("%s卖出的货物%d件,小计: %.2f元"%(i,sumxl,sum0))
        # print("%.2f"%( * dj))




# dict3  = {"11月24日":{"牛奶":{"数量":15,"单价":5.5},"方便面":{"数量":25,"单价":4},"糖果":{"数量":10,"单价":12}},
#           "11月25日":{"牛奶":{"数量":25,"单价":5.5},"咖啡":{"数量":5,"单价":6},"饼干":{"数量":15,"单价":6},"火腿肠":{"数量":10,"单价":5},},
#           "11月26日":{"奶茶":{"数量":10,"单价":5},"牛奶":{"数量":20,"单价":5.5},"方便面":{"数量":15,"单价":4}}
#           }