パラメータから情報を抽出する

PythonBeginner
オンラインで実践に進む

はじめに

このプロジェクトでは、与えられた文章から数字を抽出し、それらの数字の平均を計算し、結果を小数点以下 2 桁で丸める方法を学びます。このプロジェクトは、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

🎯 タスク

このプロジェクトでは、以下のことを学びます。

  • 与えられた文章からすべての数字(整数と浮動小数点数の両方)を見つけるための正規表現の使い方
  • 一致した数字を文字列から浮動小数点数に変換する方法
  • 抽出された数字の平均を計算する方法
  • 平均結果を小数点以下 2 桁でフォーマットする方法
  • Python スクリプトでコマンドライン引数を扱う方法

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • 与えられた文章から数字を抽出できる Python スクリプトを書く
  • 抽出された数字の平均を計算する
  • 平均結果を小数点以下 2 桁でフォーマットする
  • コマンドラインからスクリプトを実行し、文章を引数として渡す

プロジェクト環境をセットアップする

このステップでは、プロジェクト環境をセットアップし、必要なファイルを作成する方法を学びます。

  1. ターミナルを開き、/home/labex/project ディレクトリに移動します。
  2. /home/labex/project ディレクトリに新しい Python ファイル find_num.py を作成します。
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)
    ## 平均を小数点以下 2 桁でフォーマットする
    average_formatted = "{:.2f}".format(average)
    return average_formatted

この関数は、文章を入力として受け取り、正規表現を使って文章からすべての数字(整数と浮動小数点数の両方)を抽出し、これらの数字の平均を計算し、結果を小数点以下 2 桁でフォーマットします。

メインロジックを実装する

このステップでは、スクリプトのメインロジックを実装する方法を学びます。

  1. find_num.py ファイルに次のコードを追加します。
if __name__ == "__main__":
    ## 分析対象の文章をコマンドライン引数(最初の引数、sys.argv[1])から読み取る
    text = sys.argv[1]
    ## 与えられた文章で calculate_average 関数を呼び出す
    average = calculate_average(text)
    ## 計算された平均を小数点以下 2 桁で表示する
    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

おめでとうございます!あなたはこのプロジェクトを完了しました。作成したスクリプトは、与えられた文章から数字を抽出し、平均を計算し、結果を小数点以下 2 桁に丸めることができます。

まとめ

おめでとうございます!このプロジェクトを完了しました。あなたは実験(Lab)をもっとたくさん行って技術力を向上させることができます。

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習