Python input()関数の完全ガイド:ユーザー入力処理を徹底解説

 

Pythonのinput()関数は、ユーザーからキーボード入力を受け取るための標準的な方法です。インタラクティブなプログラムを作成する際に欠かせない機能で、コンソールアプリケーションからデータ入力処理まで幅広く活用されています。

本記事では、Python初心者から中級者まで理解できるよう、input()関数の基本的な使い方から実践的な応用例まで詳しく解説します。

input()関数とは

input()関数は、ユーザーからキーボード入力を受け取り、入力された文字列を返すPythonの組み込み関数です。プログラムの実行を一時停止し、ユーザーがEnterキーを押すまで入力を待機します。

基本構文

# 基本形
user_input = input()

# プロンプト付き
user_input = input("メッセージ: ")

基本的な使い方

単純な入力受け取り

name = input("お名前を入力してください: ")
print(f"こんにちは、{name}さん!")

数値の入力

age = int(input("年齢を入力してください: "))
print(f"あなたは{age}歳です")

複数の入力

name = input("名前: ")
email = input("メール: ")
print(f"{name}さんのメール: {email}")

データ型の変換

整数への変換

number = int(input("整数を入力: "))
result = number * 2
print(f"2倍すると: {result}")

浮動小数点数への変換

price = float(input("価格を入力: "))
tax = price * 0.1
print(f"税額: {tax:.2f}円")

リストへの変換

numbers = input("数値をスペース区切りで入力: ").split()
int_numbers = [int(x) for x in numbers]
print(f"合計: {sum(int_numbers)}")

エラーハンドリング

ValueError の対処

try:
    age = int(input("年齢: "))
    print(f"年齢: {age}")
except ValueError:
    print("数値を入力してください")

入力検証

while True:
    user_input = input("'yes'または'no'を入力: ")
    if user_input.lower() in ['yes', 'no']:
        break
    print("'yes'または'no'を入力してください")

空入力の処理

name = input("名前: ").strip()
if not name:
    name = "匿名"
print(f"ユーザー: {name}")

実践的な入力処理

メニュー選択

print("1. 新規作成\n2. 編集\n3. 削除")
choice = input("選択してください (1-3): ")
if choice == "1":
    print("新規作成を選択しました")

パスワード入力(簡易版)

import getpass
password = getpass.getpass("パスワード: ")
print("パスワードが入力されました")

ファイル名の入力

filename = input("ファイル名を入力: ")
if not filename.endswith('.txt'):
    filename += '.txt'
print(f"保存ファイル: {filename}")

データ収集での活用

顧客情報の入力

customer = {}
customer['name'] = input("氏名: ")
customer['phone'] = input("電話番号: ")
customer['email'] = input("メールアドレス: ")
print(f"登録完了: {customer['name']}様")

アンケート処理

responses = []
questions = ["満足度 (1-5): ", "改善点: "]
for question in questions:
    response = input(question)
    responses.append(response)
print(f"回答数: {len(responses)}")

設定値の入力

config = {}
config['host'] = input("ホスト名 [localhost]: ") or "localhost"
config['port'] = int(input("ポート番号 [8080]: ") or "8080")
print(f"接続先: {config['host']}:{config['port']}")

ゲーム開発での活用

数当てゲーム

import random
target = random.randint(1, 100)
guess = int(input("1-100の数字を予想: "))
if guess == target:
    print("正解!")
else:
    print(f"不正解。答えは{target}でした")

じゃんけんゲーム

choices = {'1': 'グー', '2': 'チョキ', '3': 'パー'}
print("1: グー, 2: チョキ, 3: パー")
player = input("選択してください: ")
if player in choices:
    print(f"あなた: {choices[player]}")

RPG風コマンド

while True:
    action = input("行動を選択 (攻撃/防御/逃げる): ").lower()
    if action in ['攻撃', '防御', '逃げる']:
        print(f"{action}を選択しました")
        break

Webアプリケーション開発

開発設定の入力

debug_mode = input("デバッグモード? (y/n): ").lower() == 'y'
port = int(input("ポート番号 [5000]: ") or "5000")
print(f"デバッグ: {debug_mode}, ポート: {port}")

データベース接続設定

db_config = {
    'host': input("DB ホスト: "),
    'user': input("DB ユーザー: "),
    'database': input("データベース名: ")
}
print("DB設定完了")

ファイル操作との連携

ファイル読み込み

filename = input("読み込むファイル名: ")
try:
    with open(filename, 'r') as file:
        content = file.read()
        print(f"ファイルサイズ: {len(content)}文字")
except FileNotFoundError:
    print("ファイルが見つかりません")

ログ出力設定

log_level = input("ログレベル (DEBUG/INFO/ERROR): ").upper()
if log_level in ['DEBUG', 'INFO', 'ERROR']:
    print(f"ログレベル: {log_level}")

入力の検証とサニタイゼーション

メールアドレス検証

import re
email = input("メールアドレス: ")
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if re.match(pattern, email):
    print("有効なメールアドレスです")
else:
    print("無効なメールアドレスです")

数値範囲チェック

while True:
    try:
        score = int(input("スコア (0-100): "))
        if 0 <= score <= 100:
            break
        print("0-100の範囲で入力してください")
    except ValueError:
        print("数値を入力してください")

文字数制限

while True:
    comment = input("コメント (50文字以内): ")
    if len(comment) <= 50:
        break
    print("50文字以内で入力してください")

高度な入力処理

複数行入力

print("複数行入力 (空行で終了):")
lines = []
while True:
    line = input()
    if not line:
        break
    lines.append(line)
print(f"入力行数: {len(lines)}")

CSVライクな入力

data = input("データをカンマ区切りで入力: ")
items = [item.strip() for item in data.split(',')]
print(f"項目数: {len(items)}")

JSON入力

import json
try:
    json_str = input("JSON文字列を入力: ")
    data = json.loads(json_str)
    print(f"キー数: {len(data)}")
except json.JSONDecodeError:
    print("無効なJSON形式です")

テストとデバッグ

モック入力(テスト用)

import unittest.mock

# テスト環境での入力モック
with unittest.mock.patch('builtins.input', return_value='test'):
    user_input = input("テスト入力: ")
    print(f"モック入力: {user_input}")

デバッグ用入力

def debug_input(prompt, default=""):
    user_input = input(f"{prompt} [{default}]: ")
    result = user_input if user_input else default
    print(f"DEBUG: '{result}'")
    return result

パフォーマンスと注意点

大量入力の処理

import sys

# 大量データの効率的な読み込み
print("データを入力 (Ctrl+D で終了):")
all_input = sys.stdin.read().strip()
lines = all_input.split('\n')
print(f"処理行数: {len(lines)}")

タイムアウト処理

import signal

def timeout_handler(signum, frame):
    raise TimeoutError("入力タイムアウト")

signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(10)  # 10秒でタイムアウト

try:
    user_input = input("10秒以内に入力: ")
    signal.alarm(0)  # タイマーリセット
    print(f"入力: {user_input}")
except TimeoutError:
    print("タイムアウトしました")

実際のプロジェクトでの活用

CLIツールの作成

def create_user():
    user = {
        'name': input("名前: "),
        'age': int(input("年齢: ")),
        'email': input("メール: ")
    }
    return user

# 使用例
new_user = create_user()
print(f"ユーザー作成: {new_user['name']}")

設定ファイル生成

def generate_config():
    config = {}
    config['api_key'] = input("API キー: ")
    config['timeout'] = int(input("タイムアウト秒数: ") or "30")
    config['debug'] = input("デバッグ (y/n): ").lower() == 'y'
    return config

インタラクティブなスクリプト

def interactive_calculator():
    while True:
        operation = input("計算式を入力 (例: 2+3, 'quit'で終了): ")
        if operation.lower() == 'quit':
            break
        try:
            result = eval(operation)
            print(f"結果: {result}")
        except:
            print("無効な式です")

まとめ

Python の input() 関数は、ユーザーとのインタラクションを実現するための基本的かつ重要な機能です。単純な文字列入力から複雑なデータ収集まで、様々な場面で活用できます。

重要なポイント:

  • 常に文字列として入力を受け取る
  • 適切な型変換とエラーハンドリングが必要
  • 入力検証とサニタイゼーションを忘れずに
  • ユーザビリティを考慮したプロンプト設計

本記事で紹介した様々な使用例を参考に、実際のプロジェクトで input() 関数を効果的に活用してください。ユーザーフレンドリーなインタラクティブアプリケーションを作成できるでしょう。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座