介绍
在这个项目中,你将学习如何从给定文本中提取数字,计算这些数字的平均值,并将结果四舍五入到两位小数。这个项目将帮助你练习使用正则表达式以及在 Python 中处理命令行参数。
👀 预览
$ python3 ~/project/find_num.py "a11 b3.14c15 16"
11.29
$ python3 ~/project/find_num.py "a 5 b 6 c7 dd8 9"
7.00
$ python3 ~/project/find_num.py "ad1dg6dgd9dg4qwe10"
6.00
🎯 任务
在这个项目中,你将学习:
- 如何使用正则表达式在给定文本中找到所有数字(包括整数和浮点数)
- 如何将匹配到的数字从字符串转换为浮点数
- 如何计算提取出的数字的平均值
- 如何将平均值结果格式化为两位小数
- 如何在 Python 脚本中处理命令行参数
🏆 成果
完成这个项目后,你将能够:
- 编写一个 Python 脚本,从给定文本中提取数字
- 计算提取出的数字的平均值
- 将平均值结果格式化为两位小数
- 从命令行运行脚本并将文本作为参数传递
设置项目环境
在这一步中,你将学习如何设置项目环境并创建必要的文件。
- 打开一个终端并导航到
/home/labex/project目录。 - 在
/home/labex/project目录中创建一个名为find_num.py的新 Python 文件。
cd /home/labex/project
touch find_num.py
- 在文本编辑器中打开
find_num.py文件。
导入所需模块
在这一步中,你将学习如何为项目导入必要的模块。
- 在
find_num.py文件开头添加以下代码:
import re ## 导入正则表达式模块
import sys ## 导入用于处理命令行参数的 sys 模块
这些模块将用于处理正则表达式和命令行参数。
定义计算平均值函数
在这一步中,你将学习如何定义一个函数来计算给定文本中数字的平均值。
- 将以下函数添加到
find_num.py文件中:
def calculate_average(text):
## 使用正则表达式模式在文本中查找所有浮点数和整数
numbers = re.findall(r"[-+]?\d*\.\d+|\d+", text)
## 使用列表推导式将匹配到的数字从字符串转换为浮点数
numbers = [float(num) for num in numbers]
## 计算这些数字的平均值
average = sum(numbers) / len(numbers)
## 将平均值格式化为保留两位小数
average_formatted = "{:.2f}".format(average)
return average_formatted
此函数以文本作为输入,使用正则表达式从文本中提取所有数字(包括整数和浮点数),计算这些数字的平均值,并将结果格式化为保留两位小数。
实现主要逻辑
在这一步中,你将学习如何实现脚本的主逻辑。
- 将以下代码添加到
find_num.py文件中:
if __name__ == "__main__":
## 从命令行参数(第一个参数,sys.argv[1])读取要分析的文本
text = sys.argv[1]
## 使用提供的文本调用 calculate_average 函数
average = calculate_average(text)
## 打印保留两位小数的计算出的平均值
print(average)
这段代码检查脚本是否作为主程序运行(if __name__ == "__main__":)。如果是,它从命令行参数(第一个参数,sys.argv[1])读取要分析的文本,使用提供的文本调用calculate_average函数,并打印计算出的平均值。
测试脚本
在这一步中,你将学习如何使用提供的示例来测试脚本。
- 保存
find_num.py文件。 - 使用提供的示例运行脚本:
python3 /home/labex/project/find_num.py "a11 b3.14c15 16"
python3 /home/labex/project/find_num.py "a 5 b 6 c7 dd8 9"
python3 /home/labex/project/find_num.py "ad1dg6dgd9dg4qwe10"
输出应与预期结果匹配:
11.29
7.00
6.00
恭喜!你已完成该项目。你创建的脚本现在可以从给定文本中提取数字、计算平均值并将结果四舍五入到两位小数。
总结
恭喜!你已完成此项目。你可以在 LabEx 中练习更多实验来提升你的技能。



