直接上代码,解释在注释,不懂评论留言,必回
'''
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折