print() の応用編を詳しくまとめます。
変数を使った出力、フォーマット文字列(f-string / format / 旧式 %)、リスト・辞書の見やすい表示、ファイル出力、進捗表示など、実用的なテクニックを例題つきで解説します。コードはそのままコピーして実行できます。
応用①:変数を使った出力(基本復習+便利ワザ)
name = "花子"
age = 12
price = 1234.5678
Python- シンプル(カンマで複数引数)
print("名前:", name, "年齢:", age) # 自動でスペースが入る
Python*(アンパック)でリストの中身を渡す
items = ["りんご", "みかん", "バナナ"]
print(*items) # りんご みかん バナナ
print(*items, sep=", ") # りんご, みかん, バナナ
Python- 変数名と値を自動で表示(Python 3.8+)
x = 10
print(f"{x=}") # 出力例: x=10
Python応用②:フォーマット文字列(見やすく整形する方法)
1) f-string(推奨、読みやすい)
name = "花子"
age = 12
price = 1234.5678
print(f"{name}さんは{age}歳です。")
print(f"合計: {price:.2f} 円") # 小数点以下2桁
print(f"{price:,.2f} 円") # 千の位にカンマ
print(f"{'商品':<10}{'単価':>8}") # 左寄せ/右寄せ(見出し)
print(f"{'りんご':<10}{price:8.2f}") # 幅指定・揃え
Python書式の意味(抜粋)
:.2f→ 小数点以下 2 桁の浮動小数点:,→ 千区切りコンマ:>8:<10:^10→ 右寄せ・左寄せ・中央寄せ(幅 8/10)
2) str.format()(互換性あり)
print("{}さんは{}歳です。".format(name, age))
print("{:>10} {:,.2f}".format("金額", price))
# 辞書を展開
person = {"name":"太郎","age":20}
print("{name}は{age}歳です。".format(**person))
Python3) 旧スタイル %(古いコードを読むと出てくる)
print("%sは%d歳です。%.1f円" % (name, age, price))
Python応用③:リスト・辞書を“見やすく”出力する
そのまま print(list_or_dict) でも十分だが、可読性を上げる方法を覚えておくと便利。
1) join と map を組み合わせて表示(リストの要素が文字列でない場合)
nums = [1,2,3,4]
print(" ".join(map(str, nums))) # "1 2 3 4"
Python2) pprint(pretty print)で辞書を整形表示
from pprint import pprint
data = {"name":"太郎","scores":[100,95,80],"info":{"age":20,"city":"Tokyo"}}
pprint(data)
Python3) json.dumps で Unicode 文字をきれいに、インデント付きで出す(日本語をそのまま表示)
import json
print(json.dumps(data, ensure_ascii=False, indent=2))
Python4) ループで表形式に整形
people = [{"name":"太郎","age":20},{"name":"花子","age":19}]
print(f"{'名前':<6} {'年齢':>3}")
for p in people:
print(f"{p['name']:<6} {p['age']:>3}")
Python応用④:ファイルへ出力(file=)
print() は file 引数でファイルオブジェクトに書き込めます。
with open("out.txt", "w", encoding="utf-8") as f:
print("ファイルに書き込むテキスト", file=f)
# または既存ファイルへ追記
with open("out.txt", "a", encoding="utf-8") as f:
print("追加の行", file=f)
Python応用⑤:即時反映・バッファ制御(flush=True)
長時間かかる処理で進行状況を出すときなど:
import time
for i in range(3):
print(i, end=" ", flush=True)
time.sleep(1)
# flush=True で即表示される(通常はバッファに残る可能性がある)
Python応用⑥:プログレス(進捗)表示・同じ行を上書きする方法
ターミナルで同じ行を更新して進捗表示を作る例:
import time
for i in range(101):
print(f"\rProgress: {i}%", end="", flush=True)
time.sleep(0.02)
print() # 最後に改行
Python\r(キャリッジリターン)で行頭に戻し、end="" と flush=True で即時上書き表示。
応用⑦:オブジェクトの表示(__str__ と __repr__)
print(obj)はobj.__str__()を呼ぼうとし、存在しなければ__repr__()を使う。- デバッグ時は
repr(obj)や!rフォーマットが便利:
class Point:
def __repr__(self):
return "Point(1,2)"
p = Point()
print(p) # Point(1,2)
print(f"{p!r}") # repr 表示
Python応用⑧:ログ代わりに print を使うときの注意
学習段階は print() で大丈夫ですが、プロジェクトが大きくなったら logging モジュールを使いましょう(ログレベル/ファイル出力/フォーマットの管理が楽になります)。
応用⑨:表(テーブル)をきれいに出す(簡易)
小さなテーブルならフォーマットで揃える:
rows = [("商品", "単価", "個数"), ("りんご", 120, 3), ("みかん", 80, 5)]
for name, price, cnt in rows:
print(f"{name:<8}{price:>6}円{cnt:>4}個")
Python練習問題(解答付き)
短めの問題で確認してみましょう。
Q1
items = ["A","B","C"] を A|B|C のように表示するコードを書け。
A1
items = ["A","B","C"]
print("|".join(items))
# または
print(*items, sep="|")
PythonQ2
data = {"name":"太郎","age":20,"scores":[100,90]} を日本語で読みやすくインデント付き JSON 表示するコードを書け。
A2
import json
print(json.dumps(data, ensure_ascii=False, indent=2))
PythonQ3
price = 1234567.89 を 1,234,567.89 のように千区切りで小数点2桁にして表示する f-string を書け。
A3
price = 1234567.89
print(f"{price:,.2f}")
PythonQ4
リスト nums = [1,2,3,4] を 1 2 3 4 と表示する方法を 2 通り書け。
A4
nums = [1,2,3,4]
print(*nums) # 方法1
print(" ".join(map(str, nums))) # 方法2
PythonQ5
進捗表示の簡単なサンプル(0〜100%)を書け(1%ごとに 0.01 秒待つ)。
A5
import time
for i in range(101):
print(f"\rProgress: {i}%", end="", flush=True)
time.sleep(0.01)
print()
Pythonよくあるつまずき・ヒント
joinは文字列同士にしか使えない →map(str, ...)で変換する。print(a, b)とprint(str(a) + str(b))は挙動が異なる(前者はスペース有り、後者は連結)。- f-string 内のフォーマット指定(
{var:,.2f})は強力。慣れておくと見栄えの良い出力が簡単に作れる。 - 多量のログは
printではなくloggingを検討する(後でフィルタや出力先を切り替えやすい)。
