2.1.4 入力と出力

このページを終えたら、この evidence card を残します。
- 概念
- 変数、型、演算子、入力/出力、分岐、ループ、構造、関数、またはモジュール
- コード
- この概念のための最小限の実行可能な Python スニペット
- 出力
- 印字値、型、branch結果、loop trace、または返り値
- 失敗確認
- 型不一致、インデント、オフバイワン、可変データ、または import パスの問題
- 期待される成果
- 概念が機能することを証明するコードと出力結果
この節の位置づけ
Section titled “この節の位置づけ”この節では、プログラムがユーザーとやり取りできるようになります。input で情報を受け取り、print で結果を表示し、さらに f-string を使った整った出力まで学びます。これは、今後のコマンドラインツール、API のデバッグ、結果表示の土台になります。
print()のさまざまな使い方とフォーマット付き出力を理解するinput()でユーザー入力を受け取れるようになる- f-string の高度な書式設定を理解する
- 簡単な対話型プログラムを書けるようになる
Python を学び始めたら、まずはこの流れをつかめば十分です。プログラムが入力を受け取り、少し処理して、結果を出力する。後半で出てくる CLI、API、RAG、Agent も、本質的にはこの流れのくり返しです。
まずは小さなプログラムを見てみよう
Section titled “まずは小さなプログラムを見てみよう”service = input("サービス名を入力してください: ")latency_ms = int(input("レイテンシ(ms)を入力してください: "))
print(f"サービス: {service}")print(f"秒に直したレイテンシ: {latency_ms / 1000:.2f}")print(f"10 ms 後のアラートしきい値: {latency_ms + 10} ms")実行結果:
| 項目 | 値 |
|---|---|
| サービス入力 | ログイン API |
| レイテンシ入力 | 185 ms |
| 秒に直した値 | 0.18 |
| アラートしきい値 | 195 ms |
これが最も基本的な入出力です。input() がデータの受け取りを担当し、print() が結果の表示を担当します。
print() の詳しい使い方
Section titled “print() の詳しい使い方”print() は、あなたが最もよく使う関数です。
print() の基本
Section titled “print() の基本”# 文字列を出力print("Hello, World!")
# 数字を出力print(42)print(3.14)
# 変数を出力name = "Python"print(name)
# 式の結果を出力print(1 + 2 + 3) # 6複数の値を出力する
Section titled “複数の値を出力する”# カンマ区切りにすると、print が自動でスペースでつなぐprint("サービス:", "ログイン API", "レイテンシ:", 185, "ms")# 出力: サービス: ログイン API レイテンシ: 185 ms
# 区切り文字を自分で指定するprint("2026", "01", "15", sep="-")# 出力: 2026-01-15
print("lint", "test", "deploy", sep=" | ")# 出力: lint | test | deploy改行を制御する
Section titled “改行を制御する”# デフォルトでは 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(" 完了!")# 出力: 読み込み中... 完了!特殊文字を出力する
Section titled “特殊文字を出力する”# 改行文字 \nprint("1行目\n2行目\n3行目")# 出力:# 1行目# 2行目# 3行目
# タブ文字 \t(整列に使う)print("タスク\t担当者\t状態")print("ログイン API\tMina\t完了")print("ダッシュボード UI\tKai\t進行中")# 出力:# タスク 担当者 状態# ログイン API Mina 完了# ダッシュボード UI Kai 進行中
# バックスラッシュそのもの \\print("ファイルパス: C:\\Users\\Desktop")
# raw 文字列(エスケープを処理しない)print(r"ファイルパス: C:\Users\Desktop") # r プレフィックスは raw 文字列を表すf-string の書式設定(重要)
Section titled “f-string の書式設定(重要)”f-string は Python 3.6 で導入された文字列の書式設定方法で、現在もっともおすすめの方法です。
f-string の基本
Section titled “f-string の基本”service = "ログイン API"owner = "Mina"latency_ms = 92.567
# 文字列の前に f を付け、波かっこに変数名を書くprint(f"{service} は {owner} が担当しています")# 出力: ログイン API は Mina が担当しています
# 波かっこの中には任意の式を書けるprint(f"次のリトライ番号は {2 + 1} です")print(f"サービス名は {len(service)} 文字です")print(f"100 ms 目標内ですか?{'はい' if latency_ms < 100 else 'いいえ'}")数値の書式設定
Section titled “数値の書式設定”これは f-string のとても強力な機能の 1 つです。
# 小数点以下の桁数を指定するpi = 3.141592653589793print(f"π = {pi:.2f}") # 3.14(小数点以下 2 桁)print(f"π = {pi:.4f}") # 3.1416(小数点以下 4 桁)
# パーセント表示accuracy = 0.8734print(f"正解率: {accuracy:.1%}") # 87.3%print(f"正解率: {accuracy:.2%}") # 87.34%
# 3 桁ごとの区切りpopulation = 1400000000print(f"人口: {population:,}") # 1,400,000,000print(f"人口: {population:_}") # 1_400_000_000
# 科学技術計数法speed_of_light = 299792458print(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 話配置と埋め文字
Section titled “配置と埋め文字”# 左寄せ、右寄せ、中央寄せ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"{'サービス':<16}{'レイテンシ':>10}")print("-" * 20)print(f"{'ログイン API':<16}{95:>10}")print(f"{'検索 API':<16}{187:>10}")print(f"{'Worker':<16}{42:>10}")出力:
サービス レイテンシ--------------------ログイン API 95検索 API 187Worker 42書式設定の早見表
Section titled “書式設定の早見表”| 書式 | 意味 | 例 | 結果 |
|---|---|---|---|
:.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() でユーザー入力を受け取る
Section titled “input() でユーザー入力を受け取る”input() はプログラムを一時停止し、ユーザーの入力を待ちます。そして、入力された内容を文字列として返します。
input() の基本
Section titled “input() の基本”# input() の戻り値は常に文字列!service = input("サービス名を入力してください: ")print(f"{service} を確認しています!")print(type(service)) # <class 'str'>重要: input() の戻り値は文字列
Section titled “重要: input() の戻り値は文字列”# よくある落とし穴latency = input("レイテンシ(ms)を入力してください: ") # ユーザーが 185 を入力print(type(latency)) # <class 'str'>、int ではない!
# そのまま数値計算すると問題になる# print(latency + 10) # エラー!文字列に数字は足せない
# 正しい方法: 先に型変換するlatency = int(input("レイテンシ(ms)を入力してください: ")) # 入力と同時に整数へ変換print(f"アラートしきい値: {latency + 10} ms")
# 浮動小数点数が必要な場合timeout = float(input("タイムアウト秒数を入力してください: "))print(f"タイムアウトは {timeout} 秒です")不正な入力を処理する
Section titled “不正な入力を処理する”ユーザーは、予想と違う内容を入力することがあります。
# ユーザーが数字ではなく "abc" を入力した場合# latency_ms = int(input("レイテンシを ms で入力してください: ")) # ValueError になる!
# 安全な方法(後で例外処理を学ぶと、もっときれいに書ける)user_input = input("数字を 1 つ入力してください: ")if user_input.isdigit(): number = int(user_input) print(f"入力した数字は: {number} です")else: print("有効な数字ではありません!")例 1: 簡易電卓
Section titled “例 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 学習レポート生成器
Section titled “例 2: AI 学習レポート生成器”# 学習結果データを模擬するmodel_name = "ResNet-50"total_epochs = 100train_accuracy = 0.9534val_accuracy = 0.9187train_loss = 0.1245val_loss = 0.2891training_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_accuracyif 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% |
ハンズオン練習
Section titled “ハンズオン練習”練習 1: プロジェクト状態カード
Section titled “練習 1: プロジェクト状態カード”機能名、担当者、完了タスク数、総タスク数を受け取り、フォーマットされたプロジェクト状態カードを生成するプログラムを書いてみましょう。
feature = input("機能名: ")owner = input("担当者: ")completed_tasks = int(input("完了タスク数: "))total_tasks = int(input("総タスク数: "))progress = completed_tasks / total_tasks
# 下にプロジェクト状態カードを作成するprint("=" * 34)print(f"機能: {feature}")print(f"担当者: {owner}")print(f"進捗: {progress:.1%}")print(f"残りタスク: {total_tasks - completed_tasks}")print("=" * 34)練習 2: プロジェクト見積もり表
Section titled “練習 2: プロジェクト見積もり表”# タスク情報を入力するtask1 = "API エンドポイント"hours1 = 5.0rate1 = 40
task2 = "UI 仕上げ"hours2 = 3.5rate2 = 40
# プロジェクト見積もり表を出力する。要件:# 1. タスク名は左寄せ、数字は右寄せ# 2. 各タスクのコストを表示する# 3. 最後に合計を表示する# ヒント: f-string の配置機能を使うsubtotal1 = hours1 * rate1subtotal2 = hours2 * rate2total = subtotal1 + subtotal2
print("=" * 46)print(f"{'タスク':<18}{'時間':>8}{'単価':>6}{'コスト':>12}")print("-" * 46)print(f"{task1:<18}{hours1:>8.1f}{rate1:>6}{subtotal1:>12.2f}")print(f"{task2:<18}{hours2:>8.1f}{rate2:>6}{subtotal2:>12.2f}")print("-" * 46)print(f"{'合計':<32}{total:>14.2f}")練習 3: レイテンシ単位変換器
Section titled “練習 3: レイテンシ単位変換器”ユーザーにミリ秒のレイテンシを入力してもらい、対応する秒数と分数を出力するプログラムを書きましょう。
latency_ms = float(input("レイテンシ(ms)を入力してください: "))# 1000 ミリ秒 = 1 秒# 60 秒 = 1 分seconds = latency_ms / 1000minutes = seconds / 60print(f"{latency_ms:.2f} ms = {seconds:.2f} 秒")print(f"{latency_ms:.2f} ms = {minutes:.2f} 分")参考実装と解説
input()は文字列を返します。完了/総タスク数はint()、レイテンシはfloat()に変換してから計算します。- 状態カードの出力には上下の区切り線を入れ、内容はユーザーが入力した値を反映させます。
- 見積もり表は列をそろえ、与えられたデータでコスト
200.00、140.00、合計340.00を表示します。 latency_ms = 2500のとき、秒数は2.50、分数は約0.04です。- 変換に失敗したら、空入力、数字以外の入力、全角数字、数値欄に単位まで入れていないかを確認します。
| 関数/文法 | 用途 | 重要ポイント |
|---|---|---|
print() | 情報を出力する | sep で区切り文字、end で末尾を変更できる |
input() | ユーザー入力を受け取る | 戻り値は必ず文字列 |
f"..." | 文字列を整形する | {変数:書式} で表示方法を調整できる |
int() / float() | 型変換 | input() の後に変換が必要になることが多い |