python-文本处理购物清单数据!

244 阅读2分钟

直接上代码,解释在注释,不懂评论留言,必回

'''
4\. 有一份长长的购物清单,格式如下;
--------------------
****     180.90       88折
****      10.25       65折
****      56.14        9折
****     104.65        9折
…
****     289.69       8折

以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。
假设只允许用现金购买,那么应最少准备多少张100元的钞票(5200)
'''
import re
fpath = "C:/Users/Lenovo/Desktop/购物清单.txt"

with open(fpath,'r',encoding='utf-8') as f:
    countprice=0
    for contents in f:
        #将* 折全部替换为空
        pricelines = re.sub("[*折]","",contents)
        #将半价替换为5,相当于5折  方便统一计算
        pricelines = pricelines.replace("半价","5")
        #删除前后空格
        pricelines = pricelines.strip()
        #按中部空格分隔,返回list
        pricelines = pricelines.split()
        if pricelines:
            #根据题意,我们知道,后面是为打折数目
            #8折 处理掉折 就只有8这个字符
            #所以此时是一个位数len之后 为1
            #根据条件判断除以100 还是除以10
            #然后就出来了当前物品的打折之后的价格
            if len(pricelines[1]) == 1:
                countprice+=float(pricelines[1])*float(pricelines[0])/10
            else:
                countprice+=float(pricelines[1])*float(pricelines[0])/100
    #打印一共需要多少钱
    print("一共需要{:.2f}元".format(countprice))
    temp = int(countprice)%100
    #不能整除的话,需要在原来的基础上加一张100元
    #例如5363肯定需要54张才够呀
    if temp != 0 :
       print("一共需要{}张100元".format(int(countprice//100) +1))
    else:
       print("一共需要{}张100元".format(int(countprice//100)) )

测试数据

请保存本地txt文件格式,可自行更换文件路径,操作文件
**** 180.90 88折
**** 10.25 65折
**** 56.14 9折
**** 104.65 9折
**** 100.30 88折
**** 297.15 半价
**** 26.75 65折
**** 130.62 半价
**** 240.28 58折
**** 270.62 8折
**** 115.87 88折
**** 247.34 95折
**** 73.21 9折
**** 101.00 半价
**** 79.54 半价
**** 278.44 7折
**** 199.26 半价
**** 12.97 9折
**** 166.30 78折
**** 125.50 58折
**** 84.98 9折
**** 113.35 68折
**** 166.57 半价
**** 42.56 9折
**** 81.90 95折
**** 131.78 8折
**** 255.89 78折
**** 109.17 9折
**** 146.69 68折
**** 139.33 65折
**** 141.16 78折
**** 154.74 8折
**** 59.42 8折
**** 85.44 68折
**** 293.70 88折
**** 261.79 65折
**** 11.30 88折
**** 268.27 58折
**** 128.29 88折
**** 251.03 8折
**** 208.39 75折
**** 128.88 75折
**** 62.06 9折
**** 225.87 75折
**** 12.89 75折
**** 34.28 75折
**** 62.16 58折
**** 129.12 半价
**** 218.37 半价
**** 289.69 8折

本题相关资料传送门

源码地址