概要
input関数は、キーボードで情報を入力させて、その情報を集めて利用する関数である。
入力された値は常に文字列型として返される。
input関数で入力
input関数では、なんらかの値を入力した時は文字列型で出力される。
これは、数値を入力しても文字列型が返るということである。
print(input())
# 実行例 : Hello World Hello World
また、input関数に引数を与えて入力を促すメッセージを入れることができる。
input("何か入力してください。: ")
# 実行例 : 何か入力してください。: テスト 'テスト'
input関数と条件分岐
以下の例では、input関数と条件分岐を組み合わせている。
入力した値は文字列型になるので、int関数でキャストして整数に変更して、その値を2019と比較している。
year = input("令和元年は西暦何年?:")
int_year = int(year)
if int_year == 2019:
print("正解")
else:
print("間違い")
# 実行例 1 : 令和元年は西暦何年?:2019 正解 # 実行例 2 : 令和元年は西暦何年?:2020 間違い
input関数と反復処理
以下の例では、while文で無限ループさせることで質問を繰り返し、正解した時にbreak文で反復処理を抜ける。
while True:
year = input("令和元年は西暦何年?:")
int_year = int(year)
if int_year == 2019:
print("正解")
break
print("間違い")
# 実行例 : 令和元年は西暦何年?:2020 間違い 令和元年は西暦何年?:2018 間違い 令和元年は西暦何年?:2019 正解
複数の値を入力する
split関数を使用することで、1行で複数の値を入力することができる。
split関数は、文字列を指定した区切り文字で分割してリストとして返す。
引数を省略すると、空白文字 (スペース、タブ、改行など) で分割される。
以下の例では、スペース区切りで複数の値を入力している。
values = input("3つの値をスペース区切りで入力してください: ")
val1, val2, val3 = values.split()
print(f"1つ目: {val1}")
print(f"2つ目: {val2}")
print(f"3つ目: {val3}")
# 実行例 : 3つの値をスペース区切りで入力してください: apple banana orange 1つ目: apple 2つ目: banana 3つ目: orange
以下の例では、カンマ区切りで数値を入力して、整数に変換している。
numbers = input("3つの数値をカンマ区切りで入力してください: ")
num1, num2, num3 = map(int, numbers.split(','))
print(f"合計: {num1 + num2 + num3}")
# 実行例 : 3つの数値をカンマ区切りで入力してください: 10,20,30 合計: 60
数値入力のエラー処理
input関数で数値を入力する場合、ユーザが数値以外を入力する可能性がある。
try-except文を使用することで、エラーを安全に処理できる。
基本的なエラー処理
以下の例では、数値以外が入力された場合にエラーメッセージを表示している。
try:
age = int(input("年齢を入力してください: "))
print(f"あなたは{age}歳です")
except ValueError:
print("エラー: 数値を入力してください")
# 実行例 1 : 年齢を入力してください: 25 あなたは25歳です # 実行例 2 : 年齢を入力してください: abc エラー: 数値を入力してください
正しい入力があるまで繰り返す
以下の例では、正しい数値が入力されるまで繰り返し入力を求めている。
while True:
try:
age = int(input("年齢を入力してください: "))
if age < 0 or age > 150:
print("エラー: 0から150の範囲で入力してください")
continue
print(f"あなたは{age}歳です")
break
except ValueError:
print("エラー: 数値を入力してください")
# 実行例 : 年齢を入力してください: abc エラー: 数値を入力してください 年齢を入力してください: -5 エラー: 0から150の範囲で入力してください 年齢を入力してください: 25 あなたは25歳です
パスワード入力 (getpass関数)
getpass関数を使用すると、入力内容を画面に表示せずに入力を受け取ることができる。
パスワードやその他の機密情報を入力する際に使用する。
getpass関数を使用するには、getpassモジュールをインポートする必要がある。
import getpass
password = getpass.getpass("パスワードを入力してください: ")
print(f"パスワードの長さ: {len(password)}文字")
# 実行例 : パスワードを入力してください: パスワードの長さ: 8文字
※注意
入力中は画面に何も表示されない。
これにより、周囲の人にパスワードが見られることを防ぐことができる。
以下の例では、ユーザー名とパスワードを入力して認証を行っている。
import getpass
username = input("ユーザ名: ")
password = getpass.getpass("パスワード: ")
if username == "admin" and password == "secret":
print("ログイン成功")
else:
print("ログイン失敗")
# 実行例 : ユーザ名: admin パスワード: ログイン成功
sys.stdinを使った入力
sys.stdinを使用することで、複数行の入力や大量データの入力を効率的に処理できる。
複数行の入力を一度に読み込む
以下の例では、sys.stdinを使用して複数行の入力を一度に読み込んでいる。
import sys
print("複数行を入力してください (Ctrl+Dで終了):")
lines = sys.stdin.readlines()
print(f"入力された行数: {len(lines)}")
for i, line in enumerate(lines, 1):
print(f"{i}行目: {line.strip()}")
# 実行例 : 複数行を入力してください (Ctrl+Dで終了): Python Java C++ 入力された行数: 3 1行目: Python 2行目: Java 3行目: C++
1行ずつ効率的に読み込む
以下の例では、sys.stdinを反復処理して1行ずつ読み込んでいる。
大量のデータを処理する際に効率的である。
import sys
print("文字列を入力してください (空行で終了):")
for line in sys.stdin:
line = line.strip()
if not line:
break
print(f"入力: {line}")
# 実行例 : 文字列を入力してください (空行で終了): Hello 入力: Hello World 入力: World
入力値の検証
ユーザからの入力を受け取る際は、入力値が期待する形式かどうかを確認することが重要である。
文字列の長さを検証する
以下の例では、入力された文字列の長さをチェックしている。
while True:
name = input("名前を入力してください (2文字以上): ")
if len(name) >= 2:
print(f"ようこそ、{name}さん")
break
print("エラー: 名前は2文字以上で入力してください")
# 実行例 : 名前を入力してください (2文字以上): A エラー: 名前は2文字以上で入力してください 名前を入力してください (2文字以上): Alice ようこそ、Aliceさん
正規表現で検証する
以下の例では、正規表現を使用してメールアドレスの形式を確認している。
import re
while True:
email = input("メールアドレスを入力してください: ")
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if re.match(pattern, email):
print(f"メールアドレス: {email}")
break
print("エラー: 正しいメールアドレスの形式で入力してください")
# 実行例 : メールアドレスを入力してください: test エラー: 正しいメールアドレスの形式で入力してください メールアドレスを入力してください: test@example.com メールアドレス: test@example.com
選択肢から選ばせる
以下の例では、あらかじめ定義された選択肢の中から選ばせている。
choices = ['python', 'java', 'c++', 'javascript']
while True:
language = input("好きなプログラミング言語を入力してください (Python/Java/C++/JavaScript): ").lower()
if language in choices:
print(f"選択: {language}")
break
print("エラー: 選択肢から選んでください")
# 実行例 : 好きなプログラミング言語を入力してください (Python/Java/C++/JavaScript): Ruby エラー: 選択肢から選んでください 好きなプログラミング言語を入力してください (Python/Java/C++/JavaScript): Python 選択: python