閉じる

Pythonのinput()使い方: 文字列と数値の読み取りとエラー対策

キーボードからユーザーの入力を受け取ると、プログラムは対話的で便利になります。

本稿ではPythonのinput()の基本から、文字列整形、数値変換とエラー対策、実践パターンまでを、初心者の方でも段階的に理解できるように丁寧に解説します。

入力はすべて文字列で渡される点や、例外処理による安全な書き方をしっかり押さえましょう。

Python input()の基本と使い方

input()とは

できること

input()は、ユーザーからキーボード入力を1行読み取り、その内容を返す関数です。

ユーザーに質問文やガイダンスを見せたい場合は、input()の引数にプロンプト文字列を渡します。

入力は改行(Enter)で確定され、返り値は常に文字列です。

仕組みの要点

大まかな流れは表示→入力→文字列で返すです。

ユーザーが何も入力せずEnterを押すと、空文字列("")が返ります。

数値のように見える入力も、そのままでは数値ではありません。

基本の書き方とプロンプト

Python
# ユーザーに名前を尋ねて挨拶する基本例

name = input("あなたの名前を入力してください: ")  # プロンプトを表示
print("こんにちは、" + name + "さん!")             # 受け取った文字列を結合して表示
実行結果
# 実行例
あなたの名前を入力してください: 太郎
こんにちは、太郎さん!

プロンプトはユーザーに入力意図を示すメッセージです。

改行はEnterが押されたときに確定され、改行文字自体は返り値には含まれません。

返り値は文字列

Python
# 数字を入力しても戻り値は文字列であることを確認

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+CEOFError/KeyboardInterruptを補足する

数値変換前にstrip()を行うなど、前処理の順序も重要です。

文字列の読み取りと整形

プロンプト文の作り方

分かりやすいガイダンス

プロンプトは入力の形式や例を具体的に含めると親切です。

締めの句読点や全角半角の統一も読みやすさに影響します。

Python
# 良いプロンプトの例

email = input("メールアドレスを入力してください(例: user@example.com): ")
print("入力されたメール:", email)
実行結果
# 実行例
メールアドレスを入力してください(例: user@example.com): user@example.com
入力されたメール: user@example.com

stripで空白を除去

空白の扱いを安定させる

前後に空白があると比較や変換に失敗します。

strip()で前後の空白や改行を除去しましょう。

Python
# strip()で前後の空白を除去

raw = input("国名を入力してください(例: Japan): ")
country = raw.strip()  # 前後の空白や改行を除去
print("正規化:", country)
実行結果
# 実行例
国名を入力してください(例: Japan):   Japan   
正規化: Japan

lowerで表記を統一

大文字小文字の違いを気にしない

lower()で小文字化すると比較が安定します。

日本語には影響しませんが、英字の入力では有効です。

Python
# lower()で比較を安定させる

ans = input("続行しますか? (y/n): ").strip().lower()
if ans == "y":
    print("続行します。")
elif ans == "n":
    print("中止します。")
else:
    print("y か n を入力してください。")
実行結果
# 実行例
続行しますか? (y/n): Y
続行します。

空入力の判定と再入力

入力を必須にする

空文字の場合はメッセージを出し、再入力を求めると親切です。

Python
# 空入力を許さないループ

while True:
    username = input("ユーザー名を入力してください(必須): ").strip()
    if username:
        break  # 文字が1つ以上あればOK
    print("ユーザー名は必須です。もう一度入力してください。")

print("登録ユーザー:", username)
実行結果
# 実行例
ユーザー名を入力してください(必須): 
ユーザー名は必須です。もう一度入力してください。
ユーザー名を入力してください(必須): alice
登録ユーザー: alice

数値の読み取りとエラー対策

int()で整数に変換

例: 年齢の整数入力

Python
# 整数に変換してから計算する

age_text = input("年齢を入力してください(整数): ").strip()
age = int(age_text)  # "18" -> 18 に変換
print("来年の年齢は", age + 1, "歳です。")
実行結果
# 実行例
年齢を入力してください(整数): 18
来年の年齢は 19 歳です。

float()で小数に変換

例: 身長の小数入力

Python
# 小数に変換して計算する

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(",", "")などの前処理を行います。

Python
# ValueError の例示(実際には例外でプログラムが止まる)

bad = "12abc"
# int(bad)  # これを実行すると ValueError: invalid literal for int() with base 10: '12abc'
print("この文字列は整数に変換できません:", bad)
実行結果
# 実行例
この文字列は整数に変換できません: 12abc

try-exceptで安全に変換

失敗しても落ちない読み取り関数

例外を捕捉して再入力を促すと、ユーザーに優しいプログラムになります。

Python
# 例外処理で安全に整数を読み取る関数

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

小数も同様に扱う

Python
# 小数読み取りの安全版

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

範囲チェックとバリデーション

例: 1〜100の整数のみ許可

数値に変換できても、業務ルールに合わない値を弾く必要があります。

Python
# 値域チェックを含む入力(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

実践パターンとベストプラクティス

複数の値をsplitで読む

1行で複数入力を受け取る

スペース区切りで入力してもらい、split()で分割します。

数値が必要ならマップして変換します。

Python
# 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
すべて整数で入力してください。

デフォルト値を用意する

空なら既定値に置き換える

必須ではない項目は、空入力を既定値に置き換えると使いやすくなります。

Python
# 空入力時にデフォルト値を使う

timeout_text = input("タイムアウト秒数を入力してください(未入力で30): ").strip()
timeout = int(timeout_text) if timeout_text else 30  # 空なら30
print("設定されたタイムアウト:", timeout, "秒")
実行結果
# 実行例
タイムアウト秒数を入力してください(未入力で30): 
設定されたタイムアウト: 30 秒

複数回の入力をwhileで繰り返す

終了コマンドで抜ける

特定の文字(例: q)でループを抜ける設計は直感的です。

Python
# '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)はEOFErrorCtrl+CKeyboardInterruptになります。

これを捕捉して後始末やメッセージを表示しましょう。

Python
# 強制終了操作を丁寧に扱う

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)、バリデーション(範囲チェック)を組み合わせることが重要です。

プロンプトは分かりやすく、空入力や不正入力には再入力やデフォルト値で優しく対応しましょう。

さらにEOFErrorKeyboardInterruptを補足すると、現場で壊れにくい対話プログラムになります。

ここで学んだパターンをテンプレート化しておくと、今後のスクリプト作成がぐっと楽になります。

この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!