Python入力の受け取り方|input関数で対話的プログラム
Pythonのinput関数を使ったユーザー入力の受け取り方を初心者向けに解説。基本的な使い方からバリデーション、型変換、エラーハンドリングまで対話的プログラムの作り方を紹介
Python入力の受け取り方|input関数で対話的プログラム
「ユーザーに名前を入力してもらいたい」「選択肢を選んでもらいたい」と思ったことはありませんか?
みなさん、プログラムを作成していて、こんなことを思ったことはありませんか?
「ユーザーからの入力を受け取りたい」 「対話的なプログラムを作ってみたい」 「もっと面白いアプリケーションを作りたい」
実は、Pythonのinput関数を使えば、簡単にユーザーとの対話的なプログラムを作成できるんです。
この記事では、input関数の基本的な使い方から実践的な活用例まで、初心者の方にも分かりやすく解説します。 対話的なプログラムの作り方を身につけて、より面白いアプリケーションを作れるようになりましょう!
input関数って何だろう?基本を理解しよう
input関数は、ユーザーからの入力を文字列として受け取る関数です。
簡単に言うと、ユーザーにキーボードで何かを入力してもらうための機能です。
基本的な使い方
まずは一番シンプルな使い方を見てみましょう。
# 基本的な入力の受け取りname = input("お名前を入力してください: ")print(f"こんにちは、{name}さん!")
このコードを実行すると、以下のようになります。
お名前を入力してください: 太郎
こんにちは、太郎さん!
input関数は引数にプロンプトメッセージを指定できます。 ユーザーが入力した内容は文字列として変数に格納されます。
プロンプトメッセージを工夫しよう
分かりやすいメッセージを表示することで、ユーザーに何を入力すべきかを明確に伝えられます。
# 分かりやすいプロンプトメッセージage = input("年齢を入力してください(数字のみ): ")city = input("お住まいの都市名を入力してください: ")hobby = input("趣味を教えてください: ")
print(f"年齢: {age}")print(f"都市: {city}")print(f"趣味: {hobby}")
実行例:
年齢を入力してください(数字のみ): 25
お住まいの都市名を入力してください: 東京
趣味を教えてください: 読書
年齢: 25
都市: 東京
趣味: 読書
プロンプトメッセージに入力形式のヒントを含めると、ユーザーが迷わずに入力できます。
入力データを数値に変換してみよう
input関数は常に文字列を返すため、数値として使用する場合は型変換が必要です。
適切な型変換の方法を確認しましょう。
数値への変換
# 整数への変換age_str = input("年齢を入力してください: ")age = int(age_str)print(f"来年の年齢: {age + 1}")
# 浮動小数点数への変換height_str = input("身長を入力してください(cm): ")height = float(height_str)print(f"メートル換算: {height / 100:.2f}m")
# 一行で変換price = float(input("商品価格を入力してください: "))tax_included = price * 1.1print(f"税込価格: {tax_included:.0f}円")
int()
関数で整数に、float()
関数で小数に変換できます。
実行例:
年齢を入力してください: 25
来年の年齢: 26
身長を入力してください(cm): 170.5
メートル換算: 1.71m
商品価格を入力してください: 1000
税込価格: 1100円
一行で入力と変換を同時に行うこともできます。
複数の入力を一度に処理する
# スペース区切りで複数の値を入力numbers_str = input("3つの数字をスペース区切りで入力してください: ")numbers = [int(x) for x in numbers_str.split()]
if len(numbers) == 3: total = sum(numbers) average = total / 3 print(f"合計: {total}") print(f"平均: {average:.2f}")else: print("3つの数字を入力してください")
実行例:
3つの数字をスペース区切りで入力してください: 10 20 30
合計: 60
平均: 20.00
split()
メソッドとリスト内包表記を組み合わせて、複数の値を一度に処理できます。
入力値の検証とエラーハンドリング
ユーザーからの入力は予期しない値が入る可能性があります。
適切な検証方法を確認しましょう。
基本的なエラーハンドリング
# 数値入力の検証while True: try: age = int(input("年齢を入力してください: ")) if age < 0: print("年齢は0以上で入力してください") continue elif age > 150: print("年齢は150以下で入力してください") continue break except ValueError: print("数字を入力してください")
print(f"入力された年齢: {age}")
このコードでは、以下の検証を行っています。
- 数字以外が入力された場合のエラー処理
- 年齢の範囲チェック(0-150)
- 正しい値が入力されるまで繰り返し
try-except
文を使って、無効な入力をエラーハンドリングできます。
範囲指定での検証を関数化
def get_valid_number(prompt, min_value, max_value): """指定範囲内の数値を取得する関数""" while True: try: value = int(input(prompt)) if min_value <= value <= max_value: return value else: print(f"{min_value}から{max_value}の間で入力してください") except ValueError: print("数字を入力してください")
# 使用例score = get_valid_number("テストの点数を入力してください(0-100): ", 0, 100)grade = get_valid_number("学年を入力してください(1-6): ", 1, 6)
print(f"点数: {score}")print(f"学年: {grade}")
関数化することで、再利用可能な検証処理を作成できます。
同じような入力検証が必要な場合に、何度でも使い回せて便利です。
文字列の選択肢を検証する
def get_valid_choice(prompt, valid_choices): """有効な選択肢から入力を取得する関数""" while True: choice = input(prompt).strip().lower() if choice in valid_choices: return choice else: print(f"有効な選択肢: {', '.join(valid_choices)}")
# 使用例gender = get_valid_choice( "性別を入力してください(male/female/other): ", ["male", "female", "other"])
yes_no = get_valid_choice( "続行しますか?(yes/no): ", ["yes", "no", "y", "n"])
print(f"性別: {gender}")print(f"続行: {yes_no}")
文字列の選択肢を検証する場合も、同様の方法で実装できます。
strip()
で前後の空白を削除し、lower()
で小文字に統一して比較しています。
実践的な対話的プログラムを作ってみよう
input関数を使った実際のプログラム例を見てみましょう。
日常的に使えるアプリケーションの作り方です。
電卓プログラム
def simple_calculator(): """簡単な電卓プログラム""" print("=== 簡単な電卓 ===") print("使用可能な演算子: +, -, *, /") print("終了するには 'quit' を入力してください") while True: try: # 第一の数値 first_input = input("最初の数値を入力してください: ") if first_input.lower() == 'quit': break first_number = float(first_input) # 演算子 operator = input("演算子を入力してください (+, -, *, /): ") if operator not in ['+', '-', '*', '/']: print("無効な演算子です") continue # 第二の数値 second_number = float(input("次の数値を入力してください: ")) # 計算実行 if operator == '+': result = first_number + second_number elif operator == '-': result = first_number - second_number elif operator == '*': result = first_number * second_number elif operator == '/': if second_number == 0: print("0で割ることはできません") continue result = first_number / second_number print(f"結果: {first_number} {operator} {second_number} = {result}") except ValueError: print("数値を正しく入力してください")
# 電卓を実行simple_calculator()
この電卓プログラムでは、以下の機能を実装しています。
- 数値と演算子の入力を受け取り
- 四則演算の計算を実行
- ゼロ除算エラーの防止
- 'quit'で終了する機能
単語暗記ゲーム
def vocabulary_game(): """単語暗記ゲーム""" vocabulary = { "apple": "りんご", "book": "本", "car": "車", "dog": "犬", "house": "家", "water": "水", "school": "学校", "friend": "友達" } print("=== 英単語暗記ゲーム ===") print("英単語の意味を日本語で答えてください") print("終了するには 'quit' を入力してください") import random words = list(vocabulary.keys()) score = 0 total_questions = 0 while True: word = random.choice(words) user_answer = input(f"'{word}' の意味は?: ").strip() if user_answer.lower() == 'quit': break correct_answer = vocabulary[word] total_questions += 1 if user_answer == correct_answer: print("正解!") score += 1 else: print(f"不正解。正解は '{correct_answer}' です。") print(f"現在のスコア: {score}/{total_questions}") if total_questions > 0: accuracy = (score / total_questions) * 100 print(f"最終結果: {score}/{total_questions} ({accuracy:.1f}%)") print("ゲーム終了。お疲れさまでした!")
# ゲームを実行vocabulary_game()
この暗記ゲームでは、以下の機能を実装しています。
- ランダムに出題される英単語
- ユーザーの回答と正解の比較
- スコアの記録と表示
- 最終的な正答率の計算
メニューシステムを実装してみよう
複数の機能を持つプログラムでは、メニューシステムが便利です。
ユーザーが選択できるインターフェースの作り方を確認しましょう。
基本的なメニューシステム
def show_menu(): """メニューを表示する関数""" print("=== メインメニュー ===") print("1. 挨拶機能") print("2. 計算機能") print("3. 設定表示") print("4. 終了") print("=" * 20)
def greeting_function(): """挨拶機能""" name = input("お名前を入力してください: ") time = input("時間帯を入力してください(朝/昼/夜): ") if time == "朝": print(f"おはようございます、{name}さん!") elif time == "昼": print(f"こんにちは、{name}さん!") elif time == "夜": print(f"こんばんは、{name}さん!") else: print(f"こんにちは、{name}さん!")
def calculation_function(): """計算機能""" try: num1 = float(input("最初の数値: ")) num2 = float(input("次の数値: ")) operation = input("演算子 (+, -, *, /): ") if operation == '+': result = num1 + num2 elif operation == '-': result = num1 - num2 elif operation == '*': result = num1 * num2 elif operation == '/': if num2 != 0: result = num1 / num2 else: print("0で割ることはできません") return else: print("無効な演算子です") return print(f"結果: {result}") except ValueError: print("数値を正しく入力してください")
def main(): """メイン処理""" print("アプリケーションを開始します") while True: show_menu() choice = input("選択してください (1-4): ") if choice == '1': greeting_function() elif choice == '2': calculation_function() elif choice == '3': print("=== 現在の設定 ===") print("バージョン: 1.0.0") print("言語: 日本語") elif choice == '4': print("アプリケーションを終了します") break else: print("無効な選択です。1-4から選択してください")
# メイン処理を実行main()
このメニューシステムでは、以下の機能を実装しています。
- 分かりやすいメニュー表示
- ユーザーの選択に応じた機能の実行
- 無効な選択肢のエラーハンドリング
- ループによる継続的な操作
メニューシステムにより、ユーザーが機能を選択できる直感的なインターフェースを提供できます。
入力処理を改善するテクニック
より使いやすい入力処理を作るためのテクニックを確認しましょう。
ユーザビリティを向上させる工夫が重要です。
デフォルト値の設定
def get_input_with_default(prompt, default_value): """デフォルト値付きの入力を取得""" user_input = input(f"{prompt} (デフォルト: {default_value}): ").strip() return user_input if user_input else default_value
# 使用例name = get_input_with_default("名前を入力してください", "匿名")age = get_input_with_default("年齢を入力してください", "未設定")city = get_input_with_default("都市を入力してください", "東京")
print(f"名前: {name}")print(f"年齢: {age}")print(f"都市: {city}")
デフォルト値を設定することで、入力の手間を減らせます。
何も入力せずにEnterキーを押すと、デフォルト値が使用されます。
入力の正規化
def normalize_input(user_input): """入力を正規化する関数""" # 前後の空白を削除し、小文字に変換 normalized = user_input.strip().lower() # よくある入力パターンを統一 if normalized in ['y', 'yes', 'はい', 'ok']: return 'yes' elif normalized in ['n', 'no', 'いいえ', 'ng']: return 'no' return normalized
# 使用例while True: user_response = input("続行しますか? (yes/no): ") normalized_response = normalize_input(user_response) if normalized_response == 'yes': print("続行します") break elif normalized_response == 'no': print("終了します") break else: print("'yes' または 'no' で答えてください")
入力の正規化により、ユーザーの様々な入力パターンに対応できます。
「Y」「yes」「はい」などの異なる表現を統一して処理できます。
まとめ
Pythonのinput関数について、基本的な使い方から実践的な活用例まで解説しました。
重要なポイントをおさらい:
- input関数の基本:ユーザーからの入力を文字列として受け取る
- 型変換の重要性:数値として使用する場合はint()やfloat()で変換
- エラーハンドリング:try-except文で無効な入力を適切に処理
- 検証機能:範囲チェックや選択肢の確認で安全性を向上
- 実践的な活用:電卓、ゲーム、メニューシステムなど様々な応用が可能
対話的なプログラムを作成することで、ユーザーとのやり取りが可能な面白いアプリケーションを開発できます。
適切な入力検証とエラーハンドリングを組み込むことで、堅牢で使いやすいプログラムが作成できます。 まずは簡単な入力処理から始めて、徐々に複雑なメニューシステムや検証機能にもチャレンジしてみてください。
ぜひ今回学んだ内容を活用して、対話的で面白いプログラムを作ってみてくださいね!