2.1.4 入力と出力

この節の位置づけ
この節では、プログラムがユーザーとやり取りできるようになります。input で情報を受け取り、print で結果を表示し、さらに f-string を使った整った出力まで学びます。これは、今後のコマンドラインツール、API のデバッグ、結果表示の土台になります。
学習目標
print()のさまざまな使い方とフォーマット付き出力を理解するinput()でユーザー入力を受け取れるようになる- f-string の高度な書式設定を理解する
- 簡単な対話型プログラムを書けるようになる
Python を学び始めたら、まずはこの流れをつかめば十分です。プログラムが入力を受け取り、少し処理して、結果を出力する。後半で出てくる CLI、API、RAG、Agent も、本質的にはこの流れのくり返しです。
まずは小さなプログラムを見てみよう
name = input("あなたの名前を入力してください: ")
age = int(input("あなたの年齢を入力してください: "))
print(f"こんにちは、{name} さん!")
print(f"あなたはおよそ {2026 - age} 年生まれです")
print(f"10 年後には {age + 10} 歳になります")
実行結果:
あなたの名前を入力してください: 小明
あなたの年齢を入力してください: 25
こんにちは、小明 さん!
あなたはおよそ 2001 年生まれです
10 年後には 35 歳になります
これが最も基本的な入出力です。input() がデータの受け取りを担当し、print() が結果の表示を担当します。
print() の詳しい使い方
print() は、あなたが最もよく使う関数です。
print() の基本
# 文字列を出力
print("Hello, World!")
# 数字を出力
print(42)
print(3.14)
# 変数を出力
name = "Python"
print(name)
# 式の結果を出力
print(1 + 2 + 3) # 6
複数の値を出力する
# カンマ区切りにすると、print が自動でスペースでつなぐ
print("名前:", "小明", "年齢:", 25)
# 出力: 名前: 小明 年齢: 25
# 区切り文字を自分で指定する
print("2026", "01", "15", sep="-")
# 出力: 2026-01-15
print("apple", "banana", "cherry", sep=" | ")
# 出力: apple | banana | cherry
改行を制御する
# デフォルトでは print のたびに改行される
print("1行目")
print("2行目")
# 出力:
# 1行目
# 2行目
# end 引数で末尾の文字を変更する
print("Hello", end=" ")
print("World")
# 出力: Hello World(同じ行に表示)
# end を使って簡単な進捗表示をする
print("読み込み中", end="")
print(".", end="")
print(".", end="")
print(".", end="")
print(" 完了!")
# 出力: 読み込み中... 完了!
特殊文字を出力する
# 改行文字 \n
print("1行目\n2行目\n3行目")
# 出力:
# 1行目
# 2行目
# 3行目
# タブ文字 \t(整列に使う)
print("名前\t年齢\t都市")
print("張三\t25\t北京")
print("李四\t30\t上海")
# 出力:
# 名前 年齢 都市
# 張三 25 北京
# 李四 30 上海
# バックスラッシュそのもの \\
print("ファイルパス: C:\\Users\\Desktop")
# raw 文字列(エスケープを処理しない)
print(r"ファイルパス: C:\Users\Desktop") # r プレフィックスは raw 文字列を表す
f-string の書式設定(重要)
f-string は Python 3.6 で導入された文字列の書式設定方法で、現在もっともおすすめの方法です。
f-string の基本
name = "小明"
age = 25
score = 92.567
# 文字列の前に f を付け、波かっこに変数名を書く
print(f"私は{name}です。{age}歳です")
# 出力: 私は小明です。25歳です
# 波かっこの中には任意の式を書ける
print(f"来年は {age + 1} 歳です")
print(f"名前の文字数は {len(name)} 文字です")
print(f"合格しましたか?{'はい' if score >= 60 else 'いいえ'}")
数値の書式設定
これは f-string のとても強力な機能の 1 つです。
# 小数点以下の桁数を指定する
pi = 3.141592653589793
print(f"π = {pi:.2f}") # 3.14(小数点以下 2 桁)
print(f"π = {pi:.4f}") # 3.1416(小数点以下 4 桁)
# パーセント表示
accuracy = 0.8734
print(f"正解率: {accuracy:.1%}") # 87.3%
print(f"正解率: {accuracy:.2%}") # 87.34%
# 3 桁ごとの区切り
population = 1400000000
print(f"人口: {population:,}") # 1,400,000,000
print(f"人口: {population:_}") # 1_400_000_000
# 科学技術計数法
speed_of_light = 299792458
print(f"光速: {speed_of_light:.2e} m/s") # 3.00e+08 m/s
# 整数を 0 埋めする
for i in range(1, 4):
print(f"第 {i:03d} 話") # 第 001 話、第 002 話、第 003 話
配置と埋め文字
# 左寄せ、右寄せ、中央寄せ
name = "Python"
print(f"|{name:<20}|") # |Python | 左寄せ
print(f"|{name:>20}|") # | Python| 右寄せ
print(f"|{name:^20}|") # | Python | 中央寄せ
# 指定した文字で埋める
print(f"|{name:*<20}|") # |Python**************|
print(f"|{name:*>20}|") # |**************Python|
print(f"|{name:*^20}|") # |*******Python*******|
# 実用例: 簡単な表を出力する
print(f"{'名前':<10}{'点数':>10}")
print("-" * 20)
print(f"{'張三':<10}{95:>10}")
print(f"{'李四':<10}{87:>10}")
print(f"{'王五':<10}{92:>10}")
出力:
名前 点数
--------------------
張三 95
李四 87
王五 92
書式設定の早見表
| 書式 | 意味 | 例 | 結果 |
|---|---|---|---|
:.2f | 小数点以下 2 桁まで | f"{3.14159:.2f}" | 3.14 |
:.1% | パーセント表示(小数 1 桁) | f"{0.873:.1%}" | 87.3% |
:, | 3 桁区切り | f"{1000000:,}" | 1,000,000 |
:.2e | 科学技術計数法 | f"{12345:.2e}" | 1.23e+04 |
:03d | 3 桁まで 0 埋め | f"{5:03d}" | 005 |
:<10 | 左寄せ、幅 10 | f"{'hi':<10}" | hi________ |
:>10 | 右寄せ、幅 10 | f"{'hi':>10}" | ________hi |
:^10 | 中央寄せ、幅 10 | f"{'hi':^10}" | ____hi____ |
input() でユーザー入力を受け取る
input() はプログラムを一時停止し、ユーザーの入力を待ちます。そして、入力された内容を文字列として返します。
input() の基本
# input() の戻り値は常に文字列!
name = input("あなたの名前を入力してください: ")
print(f"こんにちは、{name} さん!")
print(type(name)) # <class 'str'>
重要: input() の戻り値は文字列
# よくある落とし穴
age = input("年齢を入力してください: ") # ユーザーが 25 を入力
print(type(age)) # <class 'str'>、int ではない!
# そのまま数値計算すると問題になる
# print(age + 1) # エラー!文字列に数字は足せない
# 正しい方法: 先に型変換する
age = int(input("年齢を入力してください: ")) # 入力と同時に整数へ変換
print(f"来年は {age + 1} 歳です")
# 浮動小数点数が必要な場合
height = float(input("身長(メートル)を入力してください: "))
print(f"あなたの身長は {height} メートルです")
不正な入力を処理する
ユーザーは、予想と違う内容を入力することがあります。
# ユーザーが数字ではなく "abc" を入力した場合
# age = int(input("年齢を入力してください: ")) # ValueError になる!
# 安全な方法(後で例外処理を学ぶと、もっときれいに書ける)
user_input = input("数字を 1 つ入力してください: ")
if user_input.isdigit():
number = int(user_input)
print(f"入力した数字は: {number} です")
else:
print("有効な数字ではありません!")
総合例
例 1: 簡易電卓
print("=== 簡易電卓 ===")
num1 = float(input("1つ目の数を入力してください: "))
num2 = float(input("2つ目の数を入力してください: "))
print(f"\n計算結果:")
print(f"{num1} + {num2} = {num1 + num2}")
print(f"{num1} - {num2} = {num1 - num2}")
print(f"{num1} × {num2} = {num1 * num2}")
if num2 != 0:
print(f"{num1} ÷ {num2} = {num1 / num2:.2f}")
else:
print("0 で割ることはできません!")
例 2: AI 学習レポート生成器
# 学習結果データを模擬する
model_name = "ResNet-50"
total_epochs = 100
train_accuracy = 0.9534
val_accuracy = 0.9187
train_loss = 0.1245
val_loss = 0.2891
training_hours = 2.5
# フォーマット済みのレポートを作成する
print("=" * 40)
print(f"{'モデル学習レポート':^40}")
print("=" * 40)
print(f"モデル名: {model_name}")
print(f"学習回数: {total_epochs}")
print(f"学習正解率: {train_accuracy:.2%}")
print(f"検証正解率: {val_accuracy:.2%}")
print(f"学習損失: {train_loss:.4f}")
print(f"検証損失: {val_loss:.4f}")
print(f"学習時間: {training_hours:.1f} 時間")
print("-" * 40)
# モデルの状態を判定する
gap = train_accuracy - val_accuracy
if gap > 0.05:
print(f"⚠️ 過学習のリスク: 学習/検証の差 {gap:.2%}")
else:
print(f"✅ モデルの状態は良好です: 学習/検証の差 {gap:.2%}")
print("=" * 40)
出力:
========================================
モデル学習レポート
========================================
モデル名: ResNet-50
学習回数: 100
学習正解率: 95.34%
検証正解率: 91.87%
学習損失: 0.1245
検証損失: 0.2891
学習時間: 2.5 時間
----------------------------------------
⚠️ 過学習のリスク: 学習/検証の差 3.47%
========================================
ハンズオン練習
練習 1: 自己紹介生成器
ユーザーの名前、年齢、都市、趣味を受け取り、フォーマットされた自己紹介を生成するプログラムを書いてみましょう。
name = input("あなたの名前: ")
age = int(input("あなたの年齢: "))
city = input("あなたの都市: ")
hobby = input("あなたの趣味: ")
# 下に自己紹介を作成する
print("=" * 30)
print(f"こんにちは、私の名前は {name} です。")
print(f"{age} 歳で、{city} に住んでいます。")
print(f"趣味は {hobby} です。")
print("=" * 30)
練習 2: 買い物レシート
# 商品情報を入力する
item1 = "Python 教材"
price1 = 59.9
qty1 = 2
item2 = "ノート"
price2 = 15.5
qty2 = 3
# 買い物レシートを出力する。要件:
# 1. 商品名は左寄せ、価格は右寄せ
# 2. 各商品の小計を表示する
# 3. 最後に合計を表示する
# ヒント: f-string の配置機能を使う
練習 3: 単位変換器
ユーザーにキロメートル数を入力してもらい、対応するマイル数とメートル数を出力するプログラムを書きましょう。
km = float(input("キロメートル数を入力してください: "))
# 1 km = 0.621371 mile
# 1 km = 1000 m
# コードを補完し、出力は小数点以下 2 桁にする
まとめ
| 関数/文法 | 用途 | 重要ポイント |
|---|---|---|
print() | 情報を出力する | sep で区切り文字、end で末尾を変更できる |
input() | ユーザー入力を受け取る | 戻り値は必ず文字列 |
f"..." | 文字列を整形する | {変数:書式} で表示方法を調整できる |
int() / float() | 型変換 | input() の後に変換が必要になることが多い |
入力と出力は、プログラムが外の世界とやり取りするための窓口です。 input() によってプログラムは柔軟になり(入力が違えば結果も変わる)、print() と f-string によって出力は見やすく、きれいになります。コードを書くときは、途中経過を確認するために print() をよく使いましょう。これは最も基本的なデバッグ方法です。