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爆速講座


