Python print文マスターガイド:初心者から上級者まで完全攻略!

 

基礎編

基本的な使い方

# 最も基本的な使い方
print("Hello, World!")

# 変数の出力
name = "太郎"
print(name)

# 複数の値を出力
print("名前:", name, "年齢:", 25)

データ型の出力

# 文字列
print("これは文字列です")

# 数値
print(42)
print(3.14)

# リスト
numbers = [1, 2, 3, 4, 5]
print(numbers)

# 辞書
person = {"name": "花子", "age": 30}
print(person)

# ブール値
print(True)
print(False)

中級編

sepパラメータ(区切り文字の指定)

# デフォルトはスペース
print("A", "B", "C")  # A B C

# カンマで区切る
print("A", "B", "C", sep=",")  # A,B,C

# ハイフンで区切る
print("A", "B", "C", sep="-")  # A-B-C

# 区切り文字なし
print("A", "B", "C", sep="")  # ABC

endパラメータ(末尾文字の指定)

# デフォルトは改行
print("Hello")
print("World")
# Hello
# World

# 改行しない
print("Hello", end=" ")
print("World")
# Hello World

# カスタム末尾文字
print("Processing", end="...")
print("Done!")
# Processing...Done!

fileパラメータ(出力先の指定)

import sys

# 標準エラー出力に出力
print("エラーメッセージ", file=sys.stderr)

# ファイルに出力
with open("output.txt", "w", encoding="utf-8") as f:
    print("ファイルに書き込み", file=f)

flushパラメータ(バッファリング制御)

import time

# バッファをフラッシュして即座に出力
for i in range(5):
    print(f"処理中... {i+1}", end="", flush=True)
    time.sleep(1)
    print("\r", end="", flush=True)  # カーソルを行頭に戻す

文字列フォーマット

f-string(推奨)

name = "山田"
age = 25
score = 85.6

# 基本的な使い方
print(f"名前: {name}, 年齢: {age}")

# 式も使用可能
print(f"来年の年齢: {age + 1}")

# フォーマット指定
print(f"スコア: {score:.1f}点")  # 小数点1桁
print(f"パーセント: {score:.0%}")  # パーセント表示

.format()メソッド

# 位置指定
print("名前: {}, 年齢: {}".format(name, age))

# インデックス指定
print("年齢: {1}, 名前: {0}".format(name, age))

# キーワード指定
print("名前: {n}, 年齢: {a}".format(n=name, a=age))

%フォーマット(レガシー)

# 文字列: %s, 整数: %d, 浮動小数点: %f
print("名前: %s, 年齢: %d, スコア: %.1f" % (name, age, score))

上級テクニック

動的な文字幅調整

# 右寄せ、左寄せ、中央寄せ
text = "Python"
print(f"|{text:>10}|")  # 右寄せ(10文字幅)
print(f"|{text:<10}|")  # 左寄せ(10文字幅)
print(f"|{text:^10}|")  # 中央寄せ(10文字幅)

# 埋め文字の指定
print(f"|{text:*>10}|")  # *で埋める
print(f"|{text:-^10}|")  # -で埋める

数値のフォーマット

number = 1234567.89

# 桁区切り
print(f"{number:,}")  # 1,234,567.89
print(f"{number:_}")  # 1_234_567.89

# 符号の表示
positive = 42
negative = -42
print(f"{positive:+}")  # +42
print(f"{negative:+}")  # -42

# ゼロパディング
print(f"{42:05}")  # 00042

# 進数変換
num = 255
print(f"2進数: {num:b}")   # 11111111
print(f"8進数: {num:o}")   # 377
print(f"16進数: {num:x}")  # ff
print(f"16進数: {num:X}")  # FF

複雑なデータ構造の出力

import json
from pprint import pprint

# 辞書の美しい出力
data = {
    "users": [
        {"name": "太郎", "age": 25, "skills": ["Python", "JavaScript"]},
        {"name": "花子", "age": 30, "skills": ["Java", "C++"]}
    ]
}

# JSON形式で出力
print(json.dumps(data, ensure_ascii=False, indent=2))

# pprintを使用
pprint(data, width=50, depth=2)

カスタムクラスのprint対応

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __str__(self):
        return f"Person(name='{self.name}', age={self.age})"
    
    def __repr__(self):
        return f"Person('{self.name}', {self.age})"

person = Person("太郎", 25)
print(person)      # __str__が呼ばれる
print(repr(person))  # __repr__が呼ばれる

プログレスバーの実装

import time
import sys

def progress_bar(total, current, bar_length=50):
    percent = current / total
    filled_length = int(bar_length * percent)
    bar = '█' * filled_length + '-' * (bar_length - filled_length)
    
    print(f'\r進捗: |{bar}| {percent:.1%} ({current}/{total})', 
          end='', flush=True)
    
    if current == total:
        print()  # 完了時に改行

# 使用例
total_items = 100
for i in range(total_items + 1):
    progress_bar(total_items, i)
    time.sleep(0.05)

ログレベル対応の出力

import sys
from datetime import datetime

class Logger:
    def __init__(self):
        self.levels = {
            'DEBUG': '\033[36m',    # シアン
            'INFO': '\033[32m',     # 緑
            'WARNING': '\033[33m',  # 黄
            'ERROR': '\033[31m',    # 赤
            'RESET': '\033[0m'      # リセット
        }
    
    def log(self, level, message):
        timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        color = self.levels.get(level, '')
        reset = self.levels['RESET']
        
        output = sys.stdout if level in ['DEBUG', 'INFO'] else sys.stderr
        print(f"{color}[{timestamp}] {level}: {message}{reset}", file=output)

logger = Logger()
logger.log('INFO', 'プログラム開始')
logger.log('WARNING', '警告メッセージ')
logger.log('ERROR', 'エラーが発生しました')

デバッグ用の高度なprint

import inspect

def debug_print(*args, **kwargs):
    # 呼び出し元の情報を取得
    frame = inspect.currentframe().f_back
    filename = frame.f_code.co_filename.split("/")[-1]
    line_number = frame.f_lineno
    function_name = frame.f_code.co_name
    
    print(f"[DEBUG] {filename}:{line_number} in {function_name}()", end=" ")
    print(*args, **kwargs)

# 使用例
def sample_function():
    x = 42
    debug_print("xの値:", x)

sample_function()

パフォーマンス測定

import time
from contextlib import contextmanager

@contextmanager
def timer(description="処理"):
    start = time.time()
    print(f"{description}を開始...", end="", flush=True)
    try:
        yield
    finally:
        elapsed = time.time() - start
        print(f" 完了 ({elapsed:.3f}秒)")

# 使用例
with timer("データ処理"):
    time.sleep(1)  # 何らかの処理

まとめ

print文は単純に見えますが、適切に使うことで:

  • デバッグが効率的になる
  • ユーザーフレンドリーな出力が作れる
  • ログ機能を実装できる
  • プログラムの進捗を視覚化できる

これらのテクニックを組み合わせることで、より洗練されたPythonプログラムを作成できます。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座