Pythonの基礎 - キーボード

提供: MochiuWiki : SUSE, EC, PCB

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

概要

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