从参数中提取信息

PythonBeginner
立即练习

介绍

在这个项目中,你将学习如何从给定文本中提取数字,计算这些数字的平均值,并将结果四舍五入到两位小数。这个项目将帮助你练习使用正则表达式以及在 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 脚本,从给定文本中提取数字
  • 计算提取出的数字的平均值
  • 将平均值结果格式化为两位小数
  • 从命令行运行脚本并将文本作为参数传递

设置项目环境

在这一步中,你将学习如何设置项目环境并创建必要的文件。

  1. 打开一个终端并导航到/home/labex/project目录。
  2. /home/labex/project目录中创建一个名为find_num.py的新 Python 文件。
cd /home/labex/project
touch find_num.py
  1. 在文本编辑器中打开find_num.py文件。
✨ 查看解决方案并练习

导入所需模块

在这一步中,你将学习如何为项目导入必要的模块。

  1. find_num.py文件开头添加以下代码:
import re  ## 导入正则表达式模块
import sys  ## 导入用于处理命令行参数的 sys 模块

这些模块将用于处理正则表达式和命令行参数。

✨ 查看解决方案并练习

定义计算平均值函数

在这一步中,你将学习如何定义一个函数来计算给定文本中数字的平均值。

  1. 将以下函数添加到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

此函数以文本作为输入,使用正则表达式从文本中提取所有数字(包括整数和浮点数),计算这些数字的平均值,并将结果格式化为保留两位小数。

✨ 查看解决方案并练习

实现主要逻辑

在这一步中,你将学习如何实现脚本的主逻辑。

  1. 将以下代码添加到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函数,并打印计算出的平均值。

✨ 查看解决方案并练习

测试脚本

在这一步中,你将学习如何使用提供的示例来测试脚本。

  1. 保存find_num.py文件。
  2. 使用提供的示例运行脚本:
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 中练习更多实验来提升你的技能。