Python の print 関数で出力を配置する方法

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

はじめに

Python プログラムを書く際に、出力をきれいかつ整理された形式で表示することは、コードの可読性とユーザー体験の両方にとって不可欠です。レポートを作成する場合、表形式のデータを表示する場合、あるいは単にコンソールに情報を印刷する場合でも、適切なテキストの配置により、出力がよりプロフェッショナルで読みやすくなります。

この実験では、Python でテキスト出力を配置し、書式設定するさまざまな手法を学びます。異なる配置方法を探索し、書式設定技術を練習し、実際のアプリケーションに適用できる構造的な表形式の表示を作成します。

Python での基本的な文字列配置

この最初のステップでは、Python でのテキスト配置の基本概念について学び、基本的な配置手法を実装します。

テキスト配置とは何か?

テキスト配置とは、与えられたスペース内でテキストがどのように配置されるかを指します。Python は、コンソールに印刷する際のテキストの配置を制御するいくつかのメソッドを提供しています。主な配置のタイプは 3 つあります。

  • 左配置:テキストは割り当てられたスペースの左側から始まります。
  • 右配置:テキストは割り当てられたスペースの右側で終わります。
  • 中央配置:テキストは割り当てられたスペース内で中央に配置されます。

最初の配置プログラム

基本的な配置手法を示す簡単な Python スクリプトを作成しましょう。

  1. LabEx 環境の WebIDE を開きます。

  2. WebIDE の「New File」アイコンをクリックして、/home/labex/project ディレクトリに basic_alignment.py という名前の新しいファイルを作成します。

  3. 以下のコードをファイルに追加します。

## basic_alignment.py
print("Basic String Alignment Examples")
print("-" * 30)

## Left alignment example
print("Left alignment:")
print("Python".ljust(20) + "|")
print("Programming".ljust(20) + "|")
print("Alignment".ljust(20) + "|")
print()

## Right alignment example
print("Right alignment:")
print("Python".rjust(20) + "|")
print("Programming".rjust(20) + "|")
print("Alignment".rjust(20) + "|")
print()

## Center alignment example
print("Center alignment:")
print("Python".center(20) + "|")
print("Programming".center(20) + "|")
print("Alignment".center(20) + "|")
  1. Ctrl+S を押すか、メニューから「File」>「Save」を選択してファイルを保存します。

  2. WebIDE でターミナルが開いていない場合は、「Terminal」メニューをクリックして「New Terminal」を選択してターミナルを開きます。

  3. Python インタープリタを使用してスクリプトを実行します。

cd ~/project
python3 basic_alignment.py
  1. 以下のような出力が表示されるはずです。
Basic String Alignment Examples
------------------------------
Left alignment:
Python              |
Programming         |
Alignment           |

Right alignment:
              Python|
         Programming|
           Alignment|

Center alignment:
       Python       |
     Programming    |
      Alignment     |

コードの理解

さっき作成したスクリプトは、Python での 3 つの基本的な文字列配置メソッドを示しています。

  • ljust(width):指定された幅のフィールド内で文字列を左寄せにします。
  • rjust(width):指定された幅のフィールド内で文字列を右寄せにします。
  • center(width):指定された幅のフィールド内で文字列を中央寄せにします。

各例では、割り当てられたスペースの境界を明確に示すために、各行の末尾に縦棒 (|) を追加しています。文字数の合計が 20 文字で同じままで、それぞれの場合でテキストの配置がどのように異なるかに注目してください。

異なる文字での文字列配置

文字列の寄せメソッドは、パディングに使用する埋め文字を指定するための 2 番目のパラメータを取ることもできます。これを実際に確認するために、スクリプトを変更しましょう。

  1. /home/labex/project ディレクトリに alignment_with_chars.py という名前の新しいファイルを作成します。

  2. 以下のコードをファイルに追加します。

## alignment_with_chars.py
print("String Alignment With Custom Characters")
print("-" * 40)

## Using different padding characters
print("Left alignment with dots:")
print("Python".ljust(20, '.') + "|")
print("Programming".ljust(20, '.') + "|")
print()

print("Right alignment with asterisks:")
print("Python".rjust(20, '*') + "|")
print("Programming".rjust(20, '*') + "|")
print()

print("Center alignment with hyphens:")
print("Python".center(20, '-') + "|")
print("Programming".center(20, '-') + "|")
  1. ファイルを保存して実行します。
python3 ~/project/alignment_with_chars.py
  1. 以下のような出力が表示されるはずです。
String Alignment Custom Custom Characters
----------------
Left alignment with dots:
Python..............|
Programming.........|

Right alignment with asterisks:
**************Python|
*********Programming|

Center alignment with hyphens:
-------Python------|
----Programming----|

これらの例は、異なるパディング文字を使用することで、配置されたテキストの外観をカスタマイズできることを示しています。

整列のための高度な書式設定方法

前のステップでは、ljust(), rjust(), center() メソッドを使った基本的な文字列整列について学習しました。今回は、Python で利用可能なより強力で柔軟な書式設定方法を掘り下げてみましょう。

Python の文字列書式設定方法

Python は、文字列をフォーマットするいくつかの方法を提供しています。

  1. 旧形式書式設定 (% 演算子を使用)
  2. str.format() メソッド
  3. F-strings (フォーマット済み文字列リテラル、Python 3.6 以降で利用可能)

各方法では、テキストの整列やさまざまなデータ型のフォーマットを行う方法を提供しています。一つずつ見ていきましょう。

1. 旧形式書式設定 (% 演算子)

これは、Python の最も古い文字列書式設定方法で、C の printf() 関数と似ています。

  1. /home/labex/project ディレクトリに old_style_formatting.py という名前の新規ファイルを作成します。
## old_style_formatting.py
print("旧形式文字列書式設定")
print("-" * 30)

## % 書式設定による左寄せ
print("左寄せ:")
print("%-15s | %-10s" % ("Python", "言語"))
print("%-15s | %-10s" % ("JavaScript", "Web"))
print()

## % 書式設定による右寄せ
print("右寄せ:")
print("%15s | %10s" % ("Python", "言語"))
print("%15s | %10s" % ("JavaScript", "Web"))
print()

## 数字の書式設定
print("数値の書式設定:")
price = 125.5
tax_rate = 0.21
print("価格:$%8.2f" % price)
print("税率:%6.1f%%" % (tax_rate * 100))
print("税額:$%6.2f" % (price * tax_rate))
print("合計:$%8.2f" % (price * (1 + tax_rate)))
  1. ファイルを保存し、実行します。
python3 ~/project/old_style_formatting.py
  1. 以下の様な出力結果が表示されます。
旧形式文字列書式設定
------------------------------
左寄せ:
Python          | 言語
JavaScript      | Web

右寄せ:
         Python |    言語
     JavaScript |       Web

数値の書式設定:
価格: $   125.50
税率:   21.0%
税額: $ 26.36
合計: $   151.86

2. str.format() メソッド

str.format() メソッドは、% 演算子に比べてより柔軟な文字列書式設定方法を提供し、% 演算子の制限を解消するために導入されました。

  1. /home/labex/project ディレクトリに format_method.py という名前の新規ファイルを作成します。
## format_method.py
print("str.format() による文字列書式設定")
print("-" * 35)

## format による基本的な整列
print("基本的な整列:")
print("{:<15} | {:<10}".format("Python", "言語"))
print("{:>15} | {:>10}".format("Python", "言語"))
print("{:^15} | {:^10}".format("Python", "言語"))
print()

## カスタム埋め文字を使った整列
print("カスタム埋め文字:")
print("{:*<15} | {:.>10}".format("Python", "言語"))
print("{:#^15} | {:=^10}".format("Python", "言語"))
print()

## フィールド名を使った整列
print("フィールド名を使用:")
print("{name:<15} | {type:<10}".format(name="JavaScript", type="Web"))
print("{name:>15} | {type:>10}".format(name="Python", type="言語"))
print()

## 数値の書式設定
price = 125.5
tax_rate = 0.21
print("数値の書式設定:")
print("価格:${:8.2f}".format(price))
print("税率:{:6.1f}%".format(tax_rate * 100))
print("税額:${:6.2f}".format(price * tax_rate))
print("合計:${:8.2f}".format(price * (1 + tax_rate)))
  1. ファイルを保存し、実行します。
python3 ~/project/format_method.py
  1. 以下の様な出力結果が表示されます。
str.format() による文字列書式設定
-----------------------------------
基本的な整列:
Python          | 言語
         Python |    言語
    Python      |   言語

カスタム埋め文字:
Python********* | 言語...
#####Python##### | ==言語==

フィールド名を使用:
JavaScript      | Web
         Python |    言語

数値の書式設定:
価格: $  125.50
税率:   21.0%
税額: $ 26.36
合計: $  151.86

3. F-strings (Python 3.6 以降)

F-strings は、文字列リテラル内に式を埋め込む簡潔で便利な方法を提供します。文字 'f' で始まり、中括弧 {} を使って式を含めます。

  1. /home/labex/project ディレクトリに f_strings.py という名前の新規ファイルを作成します。
## f_strings.py
print("F-strings による文字列書式設定")
print("-" * 35)

language = "Python"
category = "言語"
version = 3.10
year = 2022

## F-strings による基本的な整列
print("基本的な整列:")
print(f"{language:<15} | {category:<10}")
print(f"{language:>15} | {category:>10}")
print(f"{language:^15} | {category:^10}")
print()

## 動的な幅指定
width1 = 15
width2 = 10
print("動的な幅:")
print(f"{language:<{width1}} | {category:<{width2}}")
print(f"{language:>{width1}} | {category:>{width2}}")
print()

## F-strings 内の式
print("F-strings 内の式:")
print(f"{language + ' ' + str(version):<15} | {year - 1991:>10} 年齢")
print()

## 数値の書式設定
price = 125.5
tax_rate = 0.21
print("数値の書式設定:")
print(f"価格:${price:8.2f}")
print(f"税率:{tax_rate * 100:6.1f}%")
print(f"税額:${price * tax_rate:6.2f}")
print(f"合計:${price * (1 + tax_rate):8.2f}")
  1. ファイルを保存し、実行します。
python3 ~/project/f_strings.py
  1. 以下の様な出力結果が表示されます。
F-strings による文字列書式設定
-----------------------------------
基本的な整列:
Python          | 言語
         Python |    言語
    Python      |   言語

動的な幅:
Python          | 言語
         Python |    言語

F-strings 内の式:
Python 3.1      |         31 年齢

数値の書式設定:
価格: $  125.50
税率:   21.0%
税額: $ 26.36
合計: $  151.86

書式設定方法の比較

各書式設定方法には利点があります。それぞれの使用方法を以下に示します。

  • % 演算子: レガシーコードや、古い Python バージョンとの互換性が必要な場合に使用します。
  • str.format() メソッド: % 書式設定よりも強力で、特に複雑な書式設定が必要な場合に適しています。
  • F-strings: 最も簡潔で読みやすいオプションであり、新しい Python コード (Python 3.6 以降) に推奨されます。

Python の現代的なトレンドは、可読性とパフォーマンスの利点から、可能な限り F-strings を使用する事です。

Python でフォーマットされたテーブルを作成する

様々な揃え方について学習したので、それらを活用してフォーマットされたテーブルを作成してみましょう。テーブルは、構造化されたデータを分かりやすい形式で表示する一般的な方法であり、適切な揃え方は、表形式の情報効果的に提示するために不可欠です。

固定幅列を持つシンプルなテーブル

固定幅列を使用してシンプルなテーブルを作成してみましょう。

  1. /home/labex/project ディレクトリに simple_table.py という名前の新規ファイルを作成します。
## simple_table.py
print("シンプルな固定幅テーブル")
print("-" * 50)

## データを定義
header = ["名前", "年齢", "都市", "職業"]
data = [
    ["John Smith", 34, "ニューヨーク", "医師"],
    ["Sarah Johnson", 28, "サンフランシスコ", "エンジニア"],
    ["Michael Brown", 42, "シカゴ", "教師"],
    ["Emily Davis", 31, "ボストン", "科学者"]
]

## ヘッダーを出力
print(f"{header[0]:<20} {header[1]:<8} {header[2]:<15} {header[3]:<15}")
print("-" * 60)

## 行を出力
for row in data:
    print(f"{row[0]:<20} {row[1]:<8} {row[2]:<15} {row[3]:<15}")
  1. ファイルを保存し、実行します。
python3 ~/project/simple_table.py
  1. 次のような整然としたテーブルが表示されます。
シンプルな固定幅テーブル
--------------------------------------------------
名前                 年齢      都市            職業
------------------------------------------------------------
John Smith           34       ニューヨーク        医師
Sarah Johnson        28       サンフランシスコ   エンジニア
Michael Brown        42       シカゴ         教師
Emily Davis          31       ボストン          科学者

複数の揃えタイプを持つ動的なテーブル

データの種類によって、最適な揃えスタイルは異なります。例えば、テキストは左揃え、数値は右揃えにするのが一般的です。混合揃えを使ったより洗練されたテーブルを作成してみましょう。

  1. /home/labex/project ディレクトリに dynamic_table.py という名前の新規ファイルを作成します。
## dynamic_table.py
print("混合揃えを持つ動的なテーブル")
print("-" * 50)

## データを定義
header = ["製品", "価格", "数量", "合計"]
products = [
    ["ノートパソコン", 1299.99, 3, 3899.97],
    ["マウス", 24.50, 10, 245.00],
    ["モニター", 349.95, 2, 699.90],
    ["キーボード", 49.99, 5, 249.95],
    ["ヘッドホン", 89.95, 4, 359.80]
]

## 列幅をコンテンツに基づいて計算
col_widths = [
    max(len(str(header[0])), max(len(str(row[0])) for row in products)) + 2,
    max(len(str(header[1])), max(len(f"${row[1]:.2f}") for row in products)) + 2,
    max(len(str(header[2])), max(len(str(row[2])) for row in products)) + 2,
    max(len(str(header[3])), max(len(f"${row[3]:.2f}") for row in products)) + 2
]

## ヘッダーを出力
print(f"{header[0]:<{col_widths[0]}}"
      f"{header[1]:>{col_widths[1]}}"
      f"{header[2]:>{col_widths[2]}}"
      f"{header[3]:>{col_widths[3]}}")
print("-" * sum(col_widths))

## 適切な揃えで行を出力
for product in products:
    print(f"{product[0]:<{col_widths[0]}}",
          f"${product[1]:.2f}".rjust(col_widths[1]),
          f"{product[2]}".rjust(col_widths[2]),
          f"${product[3]:.2f}".rjust(col_widths[3]))

## 集計を出力
total_quantity = sum(product[2] for product in products)
total_cost = sum(product[3] for product in products)
print("-" * sum(col_widths))
print(f"{'合計':<{col_widths[0]}}",
      f"".rjust(col_widths[1]),
      f"{total_quantity}".rjust(col_widths[2]),
      f"${total_cost:.2f}".rjust(col_widths[3]))
  1. このコードには修正が必要なエラーがあります。価格と合計列のフォーマットが正しくありません。修正しましょう。
## dynamic_table.py - 修正版
## ... (上記コードと同じ)
  1. 修正したファイルを保存し、実行します。
python3 ~/project/dynamic_table.py
  1. 初心者にも分かりやすく、より堅牢にするために、この例を簡略化しましょう。
## dynamic_table.py - 簡略化版
## ... (上記コードと同じ)
  1. この簡略化されたバージョンを前のファイルに上書きし、実行します。
python3 ~/project/dynamic_table.py
  1. 次のようなフォーマットされたテーブルが表示されます。
混合揃えを持つ動的なテーブル
--------------------------------------------------
製品            価格 ($)  数量   合計 ($)
-------------------------------------------------------
ノートパソコン      1299.99         3     3899.97
マウス              24.50        10      245.00
モニター           349.95         2      699.90
キーボード          49.99         5      249.95
ヘッドホン            89.95         4      359.80
-------------------------------------------------------
合計                                24     5454.62

財務報告書の作成

次に、より実用的な例として、読みやすさを高めるために揃え方を使った財務報告書を作成してみましょう。

  1. /home/labex/project ディレクトリに financial_report.py という名前の新規ファイルを作成します。
## financial_report.py
## ... (上記コードと同じ)
  1. ファイルを保存し、実行します。
python3 ~/project/financial_report.py
  1. 整然とした列揃えで構成された包括的な財務報告書が表示されます。
月次財務報告書
============================================================

収益計算書
----------------------------------------
項目              金額 ($)
----------------------------------------
給与                  5000.00
フリーランス仕事          1200.50
投資                  450.75
その他収入             300.00
----------------------------------------
総収入              6951.25


費用計算書
----------------------------------------
項目              金額 ($)
----------------------------------------
家賃                  1500.00
光熱費                250.30
食料品                600.45
交通費                200.00
保険                  300.00
娯楽                  150.25
貯蓄                  800.00
雑費                  300.00
----------------------------------------
総費用              4101.00


月次集計
----------------------------------------
総収入              6951.25
総費用              4101.00
----------------------------------------
純利益              2850.25

この月は2850.25ドルの貯蓄がありました!

この例は、適切な揃え方が複雑な財務情報をより読みやすく理解しやすくする方法を示しています。

主要なポイント

これらの例を通して、以下のことを学びました。

  1. 一貫した揃え方でシンプルな固定幅テーブルを作成する
  2. データの種類に基づいて異なる揃えタイプ(テキストは左揃え、数値は右揃え)を適用する
  3. 明確な視覚的構成を持つ実用的な現実世界のレポートを作成する
  4. 出力に対する正確な制御を実現するために文字列フォーマットメソッドを使用する

これらのスキルは、コンソール出力だけでなく、レポートの作成、ログファイルの作成、またはテキストベースのフォーマットでデータを提示する場合にも役立ちます。

まとめ

この実験では、Python でテキスト出力を配置および書式設定するためのさまざまな技術を学びました。

  • 基本的な文字列配置メソッド:ljust()rjust()center()
  • 異なる文字列書式設定アプローチ:% 演算子、str.format()、および f 文字列
  • 固定幅列を持つ構造化されたテーブルを作成する方法
  • データ型に基づいて異なる配置スタイルを適用する方法
  • 適切な書式設定で財務レポートなどの実用的なアプリケーションを作成する方法

これらのテキスト配置スキルは、シンプルなコマンドラインユーティリティから複雑なデータ処理システムまで、多くのアプリケーションで読みやすいプロフェッショナルな出力を作成するために不可欠です。Python でのテキスト配置を習得することで、プログラムのユーザー体験と読みやすさを大幅に向上させることができます。

Python の学習を続ける際には、クリーンで書式の整った出力は、プログラムの計算ロジックと同じくらい重要であることを忘れないでください。この実験で学んだ技術は、データを機能的で視覚的に魅力的な方法で提示するのに役立ちます。