メインコンテンツへスキップ

2.1.4 入力と出力

Python 入力処理と出力のフローチャート

この節の位置づけ

この節では、プログラムがユーザーとやり取りできるようになります。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("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
:03d3 桁まで 0 埋めf"{5:03d}"005
:<10左寄せ、幅 10f"{'hi':<10}"hi________
:>10右寄せ、幅 10f"{'hi':>10}"________hi
:^10中央寄せ、幅 10f"{'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() をよく使いましょう。これは最も基本的なデバッグ方法です。