Pythonでプログラムを書いていると、ユーザーからキーボード入力を受け取りたい場面が出てきます。名前や数値の入力・メニュー選択・設定値の対話的な入力など、キーボード入力の受け取りはPythonプログラミングの基本スキルのひとつです。
Pythonではinput()関数を使うことで、ユーザーがEnterキーを押すまでの入力を文字列として受け取れます。数値として扱いたい場合はint()やfloat()で型変換が必要です。また入力値のバリデーションや繰り返し入力促す処理も合わせて知っておくと、より実用的なプログラムが書けるようになります。
この記事では、Pythonでキーボード入力を受け取るinput()の基本から、型変換・バリデーション・複数入力・応用パターンまで、サンプルコードとともにわかりやすく解説していきます。
Pythonでキーボード入力を受け取るにはinput()関数が基本
それではまず、Pythonでキーボード入力を受け取るinput()関数の基本的な使い方について解説していきます。
Pythonのinput()は引数にプロンプト文字列を渡すと画面に表示され、ユーザーがEnterキーを押すまでの入力を文字列として返します。引数を省略するとプロンプトなしで入力待ち状態になります。
# input()の基本的な使い方(シミュレーション)
import unittest.mock as mock
# 実際のコードではinput()をそのまま使う
# name = input("お名前を入力してください:")
# 動作確認用にinputをシミュレート
with mock.patch("builtins.input", return_value="ゴリラ太郎"):
name = input("お名前を入力してください:")
print(f"こんにちは、{name}さん!")
print(f"型:{type(name)}")
# 出力結果:こんにちは、ゴリラ太郎さん!
# 出力結果:型:
input()は常に文字列(str型)を返します。数値として扱いたい場合はint()やfloat()で型変換が必要です。プロンプト文字列はわかりやすい案内文を入れることで、ユーザーが何を入力すればよいか迷わないようになります。
input()の戻り値は常にstr型
import unittest.mock as mock
# 数値を入力してもstr型で返ってくる
with mock.patch("builtins.input", return_value="42"):
user_input = input("数値を入力:")
print(f"入力値:{user_input}")
print(f"型:{type(user_input)}")
# 数値として使うにはint()やfloat()で変換が必要
number = int(user_input)
print(f"変換後:{number}")
print(f"型:{type(number)}")
# 変換せずに計算しようとするとエラー
try:
result = user_input + 10
except TypeError as e:
print(f"エラー:{e}")
# 出力結果:入力値:42
# 出力結果:型:
# 出力結果:変換後:42
# 出力結果:型:
# 出力結果:エラー:can only concatenate str (not "int") to str
input()の戻り値はどんな入力をしても必ずstr型になります。数値計算に使う場合はint()やfloat()での型変換を忘れないようにしましょう。
複数の値を1行で入力する
import unittest.mock as mock
# スペース区切りで複数の値を1行で受け取る
with mock.patch("builtins.input", return_value="アボカド 298 50"):
user_input = input("商品名 価格 在庫をスペース区切りで入力:")
parts = user_input.split()
name = parts[0]
price = int(parts
)
stock = int(parts
)
print(f"商品名:{name}")
print(f"価格:{price}円")
print(f"在庫:{stock}個")
print(f"合計金額:{price * stock}円")
# 出力結果:商品名:アボカド
# 出力結果:価格:298円
# 出力結果:在庫:50個
# 出力結果:合計金額:14900円
split()を使うとスペース区切りの入力を複数の値に分割できます。複数の値を1行で入力させたい場合の定番パターンです。
型変換とバリデーションを組み合わせる方法
続いては、input()で受け取った値の型変換とバリデーション(入力チェック)を組み合わせる方法を確認していきます。
ユーザーの入力は予期しない値が来る可能性があるため、型変換とバリデーションを組み合わせた安全な入力処理を実装することが重要です。
int()変換とエラー処理を組み合わせる
import unittest.mock as mock
def get_integer_input(prompt, inputs):
"""整数を安全に受け取る関数(シミュレーション用)"""
input_iter = iter(inputs)
def mock_input(p):
val = next(input_iter)
print(f"{p}{val}")
return val
while True:
user_input = mock_input(prompt)
try:
return int(user_input)
except ValueError:
print("エラー:整数を入力してください。")
# 不正な入力→不正な入力→正しい入力のシミュレーション
result = get_integer_input(
"個数を入力してください:",
["abc", "3.5", "10"]
)
print(f"入力された個数:{result}")
# 出力結果:個数を入力してください:abc
# 出力結果:エラー:整数を入力してください。
# 出力結果:個数を入力してください:3.5
# 出力結果:エラー:整数を入力してください。
# 出力結果:個数を入力してください:10
# 出力結果:入力された個数:10
int()変換をtry-exceptで囲み、ValueErrorが発生した場合に再入力を促すwhile Trueループが整数入力の基本パターンです。正しい値が入力されるまで繰り返し入力を求めます。
範囲チェックを組み合わせたバリデーション
import unittest.mock as mock
def get_price_input(inputs):
input_iter = iter(inputs)
def mock_input(p):
val = next(input_iter)
print(f"{p}{val}")
return val
while True:
user_input = mock_input("価格を入力してください(1〜100000円):")
try:
price = int(user_input)
if price < 1:
print("エラー:1円以上の価格を入力してください。")
continue
if price > 100000:
print("エラー:100000円以下の価格を入力してください。")
continue
return price
except ValueError:
print("エラー:数値を入力してください。")
result = get_price_input(["-100", "200000", "298"])
print(f"設定価格:{result}円")
# 出力結果:価格を入力してください(1〜100000円):-100
# 出力結果:エラー:1円以上の価格を入力してください。
# 出力結果:価格を入力してください(1〜100000円):200000
# 出力結果:エラー:100000円以下の価格を入力してください。
# 出力結果:価格を入力してください(1〜100000円):298
# 出力結果:設定価格:298円
型チェックと範囲チェックを組み合わせることで、より厳密な入力バリデーションが実現できます。エラーメッセージは「何が問題か」「どう直せばよいか」が明確に伝わる文章にすることが大切です。
選択肢から選ばせる入力バリデーション
import unittest.mock as mock
def get_menu_choice(inputs):
choices = {"1": "アボカド", "2": "サーモン", "3": "ドラゴンフルーツ", "q": "終了"}
input_iter = iter(inputs)
def mock_input(p):
val = next(input_iter)
print(f"{p}{val}")
return val
while True:
print("1: アボカド 2: サーモン 3: ドラゴンフルーツ q: 終了")
user_input = mock_input("選択してください:")
if user_input in choices:
return user_input, choices[user_input]
else:
print(f"エラー:1・2・3・q のいずれかを入力してください。")
choice_key, choice_val = get_menu_choice(["5", "a", "2"])
print(f"選択結果:{choice_val}")
# 出力結果:1: アボカド 2: サーモン 3: ドラゴンフルーツ q: 終了
# 出力結果:選択してください:5
# 出力結果:エラー:1・2・3・q のいずれかを入力してください。
# 出力結果:1: アボカド 2: サーモン 3: ドラゴンフルーツ q: 終了
# 出力結果:選択してください:a
# 出力結果:エラー:1・2・3・q のいずれかを入力してください。
# 出力結果:1: アボカド 2: サーモン 3: ドラゴンフルーツ q: 終了
# 出力結果:選択してください:2
# 出力結果:選択結果:サーモン
有効な選択肢を辞書で定義し、入力値がキーに含まれているかをin演算子でチェックするパターンは対話型メニューの定番実装です。
入力処理の応用パターン
続いては、input()を活用したより実践的な応用パターンを確認していきます。
入力処理はパスワードの非表示入力・複数回の入力収集・デフォルト値の設定など様々な場面で活用できます。
getpassでパスワードを非表示で入力する
import getpass
import unittest.mock as mock
# getpass.getpass()はパスワードを入力時に表示しない
with mock.patch("getpass.getpass", return_value="secret123"):
password = getpass.getpass("パスワードを入力してください:")
# 簡易的なパスワード検証
def validate_password(pwd):
if len(pwd) < 8:
return False, "8文字以上必要です。"
if not any(c.isdigit() for c in pwd):
return False, "数字を含める必要があります。"
return True, "OK"
is_valid, message = validate_password(password)
print(f"パスワード検証:{message}")
# 出力結果:パスワード検証:OK
getpass.getpass()はパスワード入力時に画面に文字を表示しないセキュアな入力関数です。ログイン処理や認証情報の入力に使いましょう。
デフォルト値付きのinput()を実装する
import unittest.mock as mock
def input_with_default(prompt, default, mock_value):
"""デフォルト値付きの入力(Enterのみでデフォルト値を使用)"""
with mock.patch("builtins.input", return_value=mock_value):
user_input = input(f"{prompt}(デフォルト:{default}):")
return user_input.strip() if user_input.strip() else default
# Enterのみ(空文字)でデフォルト値を使用
result1 = input_with_default("商品名を入力", "アボカド", "")
result2 = input_with_default("価格を入力", "298", "500")
print(f"商品名:{result1}")
print(f"価格:{result2}")
# 出力結果:商品名:アボカド(デフォルト値が使用された)
# 出力結果:価格:500(入力値が使用された)
入力が空文字の場合にデフォルト値を返すパターンは、設定ファイルの編集ツールや初期値を持つ対話型スクリプトで重宝します。
複数の項目をまとめて入力収集する
import unittest.mock as mock
def collect_product_info(mock_inputs):
"""商品情報を対話的に収集する"""
input_iter = iter(mock_inputs)
def mock_input(prompt):
val = next(input_iter)
print(f"{prompt}{val}")
return val
product = {}
# 商品名
while True:
name = mock_input("商品名:").strip()
if name:
product["name"] = name
break
print("商品名を入力してください。")
# 価格
while True:
try:
price = int(mock_input("価格(円):"))
if price > 0:
product["price"] = price
break
print("0より大きい価格を入力してください。")
except ValueError:
print("数値を入力してください。")
# カテゴリ
categories = ["食品", "部品", "PC周辺機器"]
print(f"カテゴリ:{' / '.join(f'{i+1}:{c}' for i, c in enumerate(categories))}")
while True:
try:
idx = int(mock_input("番号を選択:")) - 1
if 0 <= idx < len(categories):
product["category"] = categories[idx]
break
print("正しい番号を入力してください。")
except ValueError:
print("数値を入力してください。")
return product
result = collect_product_info(["キーボード", "8500", "3"])
print(f"\n登録内容:{result}")
# 出力結果:商品名:キーボード
# 出力結果:価格(円):8500
# 出力結果:カテゴリ:1:食品 / 2:部品 / 3:PC周辺機器
# 出力結果:番号を選択:3
# 出力結果:
# 出力結果:登録内容:{'name': 'キーボード', 'price': 8500, 'category': 'PC周辺機器'}
複数の項目を順番に入力収集して辞書にまとめるパターンは、CLIツールのデータ登録機能の基本構造として活用できます。
まとめ
この記事では、Pythonでキーボード入力を受け取るinput()の使い方について、基本的な使い方から型変換・バリデーション・応用パターンまで幅広く解説しました。
input()は常にstr型を返すため、数値として使う場合はint()やfloat()で型変換が必要です。try-exceptとwhile Trueを組み合わせた再入力ループが安全な入力処理の基本パターンです。選択肢チェック・範囲チェック・空文字チェックなど、バリデーションを組み合わせることでユーザーの誤入力に対して堅牢なプログラムが書けます。パスワードの非表示入力にはgetpass.getpass()を使いましょう。
今回紹介した入力収集パターンやバリデーション関数は実務のCLIツール開発にそのまま活用できます。ぜひ実際のプロジェクトで試してみてください。