キーボードからユーザーの入力を受け取ると、プログラムは対話的で便利になります。
本稿ではPythonのinput()
の基本から、文字列整形、数値変換とエラー対策、実践パターンまでを、初心者の方でも段階的に理解できるように丁寧に解説します。
入力はすべて文字列で渡される点や、例外処理による安全な書き方をしっかり押さえましょう。
Python input()の基本と使い方
input()とは
できること
input()
は、ユーザーからキーボード入力を1行読み取り、その内容を返す関数です。
ユーザーに質問文やガイダンスを見せたい場合は、input()
の引数にプロンプト文字列を渡します。
入力は改行(Enter)で確定され、返り値は常に文字列です。
仕組みの要点
大まかな流れは表示→入力→文字列で返すです。
ユーザーが何も入力せずEnterを押すと、空文字列(""
)が返ります。
数値のように見える入力も、そのままでは数値ではありません。
基本の書き方とプロンプト
# ユーザーに名前を尋ねて挨拶する基本例
name = input("あなたの名前を入力してください: ") # プロンプトを表示
print("こんにちは、" + name + "さん!") # 受け取った文字列を結合して表示
# 実行例
あなたの名前を入力してください: 太郎
こんにちは、太郎さん!
プロンプトはユーザーに入力意図を示すメッセージです。
改行はEnter
が押されたときに確定され、改行文字自体は返り値には含まれません。
返り値は文字列
# 数字を入力しても戻り値は文字列であることを確認
age_text = input("年齢を入力してください: ")
print("値:", age_text)
print("型:", type(age_text)) # <class 'str'> が表示される
# 実行例
年齢を入力してください: 18
値: 18
型: <class 'str'>
返り値はstr
(文字列)です。
数値として計算に使う場合はint()
やfloat()
に変換する必要があります。
- 関連記事:文字列と数値の型を変換したい
よくあるつまずき
以下は初心者がつまずきやすいポイントです。
対策も一緒に整理します。
つまずき | 原因 | 対策 |
---|---|---|
数値計算でエラー | 文字列のまま加算している | int() やfloat() で変換する |
前後の空白が邪魔 | ユーザーがスペースや改行を入れる | strip() で除去する |
大文字小文字の差異 | 入力が"Yes" や"YES" など様々 | lower() またはcasefold() で統一する |
何も入っていない | 空文字が返る | 空判定して再入力を求める |
強制終了で落ちる | Ctrl+D (EOF)やCtrl+C | EOFError /KeyboardInterrupt を補足する |
数値変換前にstrip()
を行うなど、前処理の順序も重要です。
文字列の読み取りと整形
プロンプト文の作り方
分かりやすいガイダンス
プロンプトは入力の形式や例を具体的に含めると親切です。
締めの句読点や全角半角の統一も読みやすさに影響します。
# 良いプロンプトの例
email = input("メールアドレスを入力してください(例: user@example.com): ")
print("入力されたメール:", email)
# 実行例
メールアドレスを入力してください(例: user@example.com): user@example.com
入力されたメール: user@example.com
stripで空白を除去
空白の扱いを安定させる
前後に空白があると比較や変換に失敗します。
strip()
で前後の空白や改行を除去しましょう。
# strip()で前後の空白を除去
raw = input("国名を入力してください(例: Japan): ")
country = raw.strip() # 前後の空白や改行を除去
print("正規化:", country)
# 実行例
国名を入力してください(例: Japan): Japan
正規化: Japan
lowerで表記を統一
大文字小文字の違いを気にしない
lower()
で小文字化すると比較が安定します。
日本語には影響しませんが、英字の入力では有効です。
# lower()で比較を安定させる
ans = input("続行しますか? (y/n): ").strip().lower()
if ans == "y":
print("続行します。")
elif ans == "n":
print("中止します。")
else:
print("y か n を入力してください。")
# 実行例
続行しますか? (y/n): Y
続行します。
空入力の判定と再入力
入力を必須にする
空文字の場合はメッセージを出し、再入力を求めると親切です。
# 空入力を許さないループ
while True:
username = input("ユーザー名を入力してください(必須): ").strip()
if username:
break # 文字が1つ以上あればOK
print("ユーザー名は必須です。もう一度入力してください。")
print("登録ユーザー:", username)
# 実行例
ユーザー名を入力してください(必須):
ユーザー名は必須です。もう一度入力してください。
ユーザー名を入力してください(必須): alice
登録ユーザー: alice
数値の読み取りとエラー対策
int()で整数に変換
例: 年齢の整数入力
# 整数に変換してから計算する
age_text = input("年齢を入力してください(整数): ").strip()
age = int(age_text) # "18" -> 18 に変換
print("来年の年齢は", age + 1, "歳です。")
# 実行例
年齢を入力してください(整数): 18
来年の年齢は 19 歳です。
float()で小数に変換
例: 身長の小数入力
# 小数に変換して計算する
height_text = input("身長を入力してください(m、小数可 例: 1.68): ").strip()
height = float(height_text) # "1.68" -> 1.68
print("入力値は", height, "m です。")
# 実行例
身長を入力してください(m、小数可 例: 1.68): 1.68
入力値は 1.68 m です。
ValueErrorの原因
変換に失敗するパターン
int()
やfloat()
は、数値として解釈できない文字列でValueErrorを送出します。
例えば"12abc"
、""
、"1,000"
(カンマ付き)はエラーになります。
まずstrip()
で空白を除去し、必要ならreplace(",", "")
などの前処理を行います。
# ValueError の例示(実際には例外でプログラムが止まる)
bad = "12abc"
# int(bad) # これを実行すると ValueError: invalid literal for int() with base 10: '12abc'
print("この文字列は整数に変換できません:", bad)
# 実行例
この文字列は整数に変換できません: 12abc
- 関連記事:ある5大エラーの原因と対策
try-exceptで安全に変換
失敗しても落ちない読み取り関数
例外を捕捉して再入力を促すと、ユーザーに優しいプログラムになります。
# 例外処理で安全に整数を読み取る関数
def read_int(prompt: str) -> int:
while True:
text = input(prompt).strip()
try:
return int(text) # 正常時はそのまま返す
except ValueError:
print("整数を入力してください。例: 0, 1, 2 ...")
n = read_int("個数(整数)を入力してください: ")
print("受け取った整数:", n)
# 実行例
個数(整数)を入力してください: abc
整数を入力してください。例: 0, 1, 2 ...
個数(整数)を入力してください: 5
受け取った整数: 5
小数も同様に扱う
# 小数読み取りの安全版
def read_float(prompt: str) -> float:
while True:
text = input(prompt).strip()
try:
return float(text)
except ValueError:
print("小数で入力してください。例: 1.0, 0.5, -3.14")
x = read_float("重さ(kg)を入力してください: ")
print("受け取った小数:", x)
# 実行例
重さ(kg)を入力してください: 1,2
小数で入力してください。例: 1.0, 0.5, -3.14
重さ(kg)を入力してください: 1.2
受け取った小数: 1.2
- 関連記事:try-exceptで例外処理を実装する
範囲チェックとバリデーション
例: 1〜100の整数のみ許可
数値に変換できても、業務ルールに合わない値を弾く必要があります。
# 値域チェックを含む入力(1〜100の整数)
def read_int_in_range(prompt: str, lo: int, hi: int) -> int:
while True:
text = input(prompt).strip()
try:
value = int(text)
except ValueError:
print("整数で入力してください。")
continue
if lo <= value <= hi:
return value
print(f"{lo}〜{hi}の範囲で入力してください。")
score = read_int_in_range("スコア(1〜100): ", 1, 100)
print("スコア:", score)
# 実行例
スコア(1〜100): 150
1〜100の範囲で入力してください。
スコア(1〜100): ninety
整数で入力してください。
スコア(1〜100): 90
スコア: 90
- 関連記事:if文の基本と書き方
実践パターンとベストプラクティス
複数の値をsplitで読む
1行で複数入力を受け取る
スペース区切りで入力してもらい、split()
で分割します。
数値が必要ならマップして変換します。
# 3つの整数を1行で受け取る: 例) "10 20 30"
line = input("3つの整数をスペース区切りで入力してください: ").strip()
parts = line.split() # 空白で分割
if len(parts) != 3:
print("ちょうど3つの値を入力してください。")
else:
try:
a, b, c = map(int, parts) # 文字列リスト -> 整数に一括変換
print("合計:", a + b + c)
except ValueError:
print("すべて整数で入力してください。")
# 実行例
3つの整数をスペース区切りで入力してください: 10 20 x
すべて整数で入力してください。
デフォルト値を用意する
空なら既定値に置き換える
必須ではない項目は、空入力を既定値に置き換えると使いやすくなります。
# 空入力時にデフォルト値を使う
timeout_text = input("タイムアウト秒数を入力してください(未入力で30): ").strip()
timeout = int(timeout_text) if timeout_text else 30 # 空なら30
print("設定されたタイムアウト:", timeout, "秒")
# 実行例
タイムアウト秒数を入力してください(未入力で30):
設定されたタイムアウト: 30 秒
複数回の入力をwhileで繰り返す
終了コマンドで抜ける
特定の文字(例: q
)でループを抜ける設計は直感的です。
# 'q' で終了する入力ループ
while True:
cmd = input("コマンドを入力してください(終了は 'q'): ").strip().lower()
if cmd == "q":
print("終了します。")
break
print("受信:", cmd)
# 実行例
コマンドを入力してください(終了は 'q'): help
受信: help
コマンドを入力してください(終了は 'q'): q
終了します。
EOFErrorとKeyboardInterruptの対応
予期せぬ終了操作に強くする
ターミナルでCtrl+D
(UNIX系)やCtrl+Z
→Enter(Windows)はEOFError
、Ctrl+C
はKeyboardInterrupt
になります。
これを捕捉して後始末やメッセージを表示しましょう。
# 強制終了操作を丁寧に扱う
def safe_input(prompt: str) -> str | None:
try:
return input(prompt)
except EOFError:
print("\n入力が終了されました(EOF)。")
return None
except KeyboardInterrupt:
print("\n入力が中断されました(Ctrl+C)。")
return None
text = safe_input("コメントを入力してください: ")
if text is None:
print("処理を中断します。")
else:
print("受け取ったコメント:", text.strip())
# 実行例(例: Ctrl+C を押した場合)
コメントを入力してください:
入力が中断されました(Ctrl+C)。
処理を中断します。
まとめ
input()は「文字列を読み取る」ことが本質であり、実用のためには前処理(strip/lower)、数値変換(int/float)、例外処理(try-except)、バリデーション(範囲チェック)を組み合わせることが重要です。
プロンプトは分かりやすく、空入力や不正入力には再入力やデフォルト値で優しく対応しましょう。
さらにEOFError
やKeyboardInterrupt
を補足すると、現場で壊れにくい対話プログラムになります。
ここで学んだパターンをテンプレート化しておくと、今後のスクリプト作成がぐっと楽になります。