有购物小票内容如下: 牛奶:89.9元 火腿:15.9元 雪碧:39元 鲜花:112元 首先定义一个字符串保存购物小票的内容,然后通过常用的字符串方法和正则表达式获取每件商品名称及其对应的价格,按行打印出商品名称和价格,最后打印出总价,最终在控制台输出效果如下: 商品名称 价格(元) -------------------- 牛奶 89.9 火腿 15.9 雪碧 39 鲜花 112 -------------------- 总价 256.8 注:名称和价格之间可以用2个以上的制表符\t来实现对齐显示
时间: 2023-08-15 14:40:24 浏览: 40
好的,我会尽力回答你的问题。以下是针对你的问题的解决方案:
```python
import re
receipt = "牛奶:89.9元\n火腿:15.9元\n雪碧:39元\n鲜花:112元"
# 通过正则表达式匹配商品名称和价格
pattern = r'([^\n:]+):(\d+(?:\.\d+)?)元'
items = re.findall(pattern, receipt)
# 打印商品名称和价格
print("{:<10}\t{}".format("商品名称", "价格(元)"))
print("-" * 20)
total_price = 0
for item in items:
name, price = item
price = float(price)
print("{:<10}\t{:.1f}".format(name, price))
total_price += price
# 打印总价
print("-" * 20)
print("{:<10}\t{:.1f}".format("总价", total_price))
```
输出结果为:
```
商品名称 价格(元)
--------------------
牛奶 89.9
火腿 15.9
雪碧 39.0
鲜花 112.0
--------------------
总价 256.8
```
解释一下代码:
1. 定义一个字符串 `receipt`,保存购物小票的内容。
2. 使用正则表达式 `r'([^\n:]+):(\d+(?:\.\d+)?)元'` 匹配商品名称和价格。其中,`([^\n:]+)` 匹配除换行符和冒号以外的任意字符,`(\d+(?:\.\d+)?)` 匹配一个或多个数字,可包含一个小数点和小数部分。
3. 使用 `re.findall(pattern, string)` 函数获取所有匹配的结果,返回一个列表。
4. 通过循环遍历列表,获取每个商品的名称和价格,并累加总价。
5. 使用字符串格式化打印商品名称和价格。
6. 最后再使用字符串格式化打印总价。
希望这个解决方案对你有所帮助!