プログラミングにおいて、外部からデータを受け取る「入力」は非常に重要です。
特にコマンドライン環境で動作するPythonスクリプトでは、ユーザーからの入力を標準入力(stdin)として受け取ることで、柔軟なプログラムを作成できます。
本記事では、Python初心者向けに標準入力の基本から応用までを解説します。学習を進めた最後には演習問題も用意していますので、ぜひ挑戦してみてください。
標準入力とは何か
標準入力(stdin)とは、プログラムが外部からデータを受け取るための仕組みです。
通常はキーボードからの入力が標準入力にあたりますが、ファイルからのリダイレクトやパイプ処理でも利用できます。
# キーボード入力
$ python script.py
# ファイルからのリダイレクト
$ python script.py < input.txt
# パイプ処理
$ cat input.txt | python script.py
input()関数の基本的使い方
Pythonでは標準入力を受け取るためにinput()関数を使います。実行すると、ユーザーの入力を受け取って文字列として返します。以下は基本的な例です。
name = input("あなたの名前を入力してください: ")
print(f"こんにちは、{name}さん!")
- input()は常に文字列(str型)を返す
- 引数にプロンプト文字列を渡すと、入力時に表示できる
数値入力の扱い方(型変換)
input()は文字列を返すため、そのまま計算に使うことはできません。数値として扱いたい場合はint()やfloat()で型変換が必要です。
age_str = input("年齢を入力してください: ")
age = int(age_str)
print(f"来年のあなたの年齢は {age + 1} 歳です。")
ポイント
- 整数入力にはint()、実数入力にはfloat()を利用
- 型変換時に不正な文字列が含まれるとValueErrorが発生する
複数の値を同時に受け取る方法
一度に複数の値を入力したい場合、スペース区切りの文字列をsplit()で分割し、それぞれを型変換します。
# 例: 2つの整数をスペース区切りで入力
x_str, y_str = input("2つの整数をスペース区切りで入力: ").split()
x = int(x_str)
y = int(y_str)
print(f"合計: {x + y}, 差: {x - y}")
- split()は空白文字(スペース、タブ、改行)で分割する
- 値の数が合わないとValueErrorが発生する
標準入力でのエラー処理
ユーザーの入力は意図しない値が入る可能性があるため、エラー処理を行いましょう。try…exceptで型変換のエラーを捕捉し、再入力を促す例を示します。
while True:
try:
num = int(input("整数を入力してください: "))
break
except ValueError:
print("整数以外の文字が入力されました。もう一度入力してください。")
print(f"入力された整数: {num}")
実践例:簡単な電卓プログラム
標準入力の知識をまとめて活用し、簡単なコマンドライン電卓を作成してみましょう。
print("簡易電卓プログラム")
print("使用方法: 数値1 演算子(+ - * /) 数値2 をスペース区切りで入力")
while True:
try:
a_str, op, b_str = input(">>> ").split()
a = float(a_str)
b = float(b_str)
if op == "+":
result = a + b
elif op == "-":
result = a - b
elif op == "*":
result = a * b
elif op == "/":
result = a / b
else:
print("演算子が正しくありません。+ - * / のいずれかを入力してください。")
continue
print(f"結果: {result}")
break
except ValueError:
print("入力形式が正しくありません。もう一度試してください。")
except ZeroDivisionError:
print("0で割ることはできません。別の値を入力してください。")
このプログラムでは
- 数値と演算子を同時に受け取る
- 型変換とエラー処理を組み合わせる
- ユーザーに分かりやすいプロンプト表示
まとめ
本記事ではPythonの標準入力について、以下のポイントを解説しました。
- input()関数で文字列を受け取る
- int()/float()で数値に変換する
- split()を使い複数の値を同時に受け取る
- try…exceptでエラー処理を行う
- コマンドライン電卓のサンプル実装
これらの知識を活用することで、ユーザーから柔軟にデータを受け取るプログラムを作成できます。
演習問題
以下の問題に挑戦し、標準入力の理解を深めましょう。
問題1: 名前と年齢の挨拶プログラム
キーボードから名前と年齢をそれぞれ入力し、”こんにちは、<名前>さん。あなたは<年齢>歳ですね。”と表示するプログラムを作成してください。
問題2: 合計と平均を計算するプログラム
スペース区切りで3つの整数を入力し、それらの合計と平均を小数点以下2桁で表示するプログラムを作成してください。
問題3: 最大値と最小値を求めるプログラム
改行区切りで複数行の整数入力を受け取り、入力終了の合図として空行が入力されたら処理を終了します。最後に入力された整数の最大値と最小値を表示するプログラムを作成してください。
解答例
解答例1
# 問題1
name = input("名前を入力してください: ")
age = input("年齢を入力してください: ")
print(f"こんにちは、{name}さん。あなたは{age}歳ですね。")
解答例2
# 問題2
nums = list(map(int, input("3つの整数をスペース区切りで入力: ").split()))
total = sum(nums)
avg = total / len(nums)
print(f"合計: {total}")
print(f"平均: {avg:.2f}")
解答例3
# 問題3
numbers = []
print("整数を1行ずつ入力してください。終了するには空行を入力。")
while True:
line = input()
if line == "":
break
try:
num = int(line)
numbers.append(num)
except ValueError:
print("整数以外の入力がありました。無視します。")
if numbers:
print(f"最大値: {max(numbers)}")
print(f"最小値: {min(numbers)}")
else:
print("入力された整数がありません。")
以上で、Pythonの標準入力に関する入門編は終了です。実際に手を動かして、自分のものにしてください!