デジタルトレンドナビ
システム開発

2025.03.19

Pythonの標準入力を徹底解説:使い方とよくあるパターン

Pythonの標準入力は、プログラムに対してユーザーがデータを入力するための重要な手法です。効率的なデータ入力を実現するために、Pythonには多様な方法が用意されています。

本記事では、標準入力の基本概念から始め、具体的な関数の使い方や応用的な処理方法までを詳しく解説します。

Pythonの標準入力とは

Pythonの標準入力とは

標準入力は、プログラムが外部からデータを受け取るための手段です。ユーザーからの入力を受け取るための基本的な方法として、Pythonには多様な入力手法が用意されています。ここでは、標準入力の基本概念とその利用シーンについて解説します。

標準入力の基本概念

標準入力は、プログラムが外部からデータを受け取るための標準的な方法です。一般的に、キーボードからの入力が標準入力として扱われます。プログラム実行中にユーザーが入力する情報をキャプチャし、そのデータをプログラム内で利用できるようにします。

例えば、input()関数は標準入力から文字列を読み込むための基本的な関数です。標準入力の役割は、プログラムとユーザーの対話を可能にすることです。ユーザーからのデータ入力を受け取り、そのデータを処理することでプログラムが動的に動作します。

標準入力の利用シーン

まず、ユーザーからの入力を必要とするアプリケーションがあげられるでしょう。計算機プログラムではユーザーに数値を入力させ、その数値を元に計算を行います。また、インタラクティブなシェルスクリプトも標準入力を使用してユーザーからのコマンドを受け取る方法もあります。

次に、コマンドラインツールがあげられるでしょう。コマンドラインから引数を受け取って動作することが多いですが、標準入力からデータを受け取って処理することもあります。例えば、テキスト処理ツールでは、標準入力から読み取ったテキストデータを解析・変換し、その結果を標準出力に出力することが一般的です。

Python標準入力のinput()関数の使い方

Python標準入力のinput()関数の使い方

ここでは、Pythonの標準入力を扱う基本的な方法を紹介します。

input()関数の基本的な使い方

Pythonのinput()関数は、ユーザーからの入力を取得するための基本的な関数です。この関数を使えば、プログラム実行中にユーザーからデータを受け取れます。

input()関数の基本的な使い方は次のとおりです。

user_input = input("Enter some data: ")

print("You entered:", user_input)

このコードは、ユーザーに「Enter some data: 」というプロンプトを表示し、入力されたデータをuser_input変数に格納します。その後、入力されたデータを表示します。

この関数は常に文字列として入力を受け取るのが特徴です。数値として扱いたい場合は、int()やfloat()を使って変換する必要があります。次のコードは入力を整数として扱います。

number = int(input("Enter a number: "))

print("You entered the number:", number)

このように、input()関数は直感的で使いやすく、さまざまな入力シナリオに対応できます。より詳細に知りたい方は、下記の記事をご覧ください。

Pythonの「input」関数の使い方を徹底解説

複数行入力の方法

複数行入力を扱う場合、input()関数を繰り返し呼び出すことが一般的です。forループを使って実装する方法を紹介します。

以下の例では、ユーザーに3回入力を促し、その結果をリストに格納しています。

lines = []

for _ in range(3):

line = input("Enter a line: ")

lines.append(line)

print("You entered:", lines)

このコードは、3行の入力を受け取り、それらをlinesリストに格納するコードです。

もう一つの方法として、whileループを使って、ユーザーが終了指示をするまで入力を受け付ける方法もあります。

lines = []

while True:

line = input("Enter a line (or 'quit' to stop): ")

if line.lower() == 'quit':

break

lines.append(line)

print("You entered:", lines)

このコードでは、ユーザーが「quit」と入力するまで無限に入力を受け付けます。

input()とsplit()を使った入力の処理

複数のデータを一行で入力し、それを処理するためにsplit()メソッドを使うことができます。split()は文字列を指定した区切り文字で分割し、リストとして返す関数です。

次の例では、スペースで区切られた入力を受け取り、リストとして処理します。

user_input = input("Enter multiple values separated by space: ")

values = user_input.split()

print("You entered:", values)

このコードは、ユーザーが入力したデータをスペースで分割し、リストに格納します。例えば、「apple banana cherry」と入力すれば、valuesリストには[‘apple’, ‘banana’, ‘cherry’]が格納されます。

数値のリストを入力する場合も、同様に処理が可能です。ただし、文字列から数値への変換が必要です。

user_input = input("Enter numbers separated by space: ")

numbers = [int(x) for x in user_input.split()]

print("You entered:", numbers)

このコードは、ユーザーが入力した数値をスペースで分割し、整数に変換してリストに格納します。

map()関数で数値変換を行う方法

map()関数を使うことで、入力された文字列を数値に変換できます。map()は、指定した関数をイテラブルの各要素に適用します。

以下は、スペース区切りの入力を受け取り、整数のリストに変換するコードです。

user_input = input("Enter numbers separated by space: ")

numbers = list(map(int, user_input.split()))

print("You entered:", numbers)

このコードは、ユーザーの入力をスペースで分割し、各要素をint関数で変換し、リストに格納します。map()を使うことで、リスト内包表記よりも簡潔に記述できます。

さらに、浮動小数点数に変換する場合も同様の方法が利用可能です。

user_input = input("Enter floating point numbers separated by space: ")

numbers = list(map(float, user_input.split()))

print("You entered:", numbers)

このコードは、入力された数値を浮動小数点数に変換し、リストに格納します。map()関数を使うことで、入力処理をシンプルかつ効率的におこなえます。

より詳細に知りたい方は、下記の記事もご覧ください。

【Python】map関数とは?特徴や使い方を解説 | デジタルトレンドナビ

sysモジュールを使ってPython標準入力を取得する方法

sysモジュールを使ってPython標準入力を取得する方法

ここでは、Pythonのsysモジュールを使用して標準入力を取得する方法について説明します。

sys.stdin.readline()の使い方と注意点

sys.stdin.readline()は、標準入力から一行を読み取るためのメソッドです。このメソッドは、ユーザーが入力した文字列を改行文字まで読み込みます。基本的な使い方は以下の通りです。

import sys

print("Enter a line of text:")

line = sys.stdin.readline()

print("You entered:", line)

 

ただし、readline()は改行文字も含めて読み込むため、注意が必要です。改行文字を除去するには、strip()メソッドを使います。

import sys

print("Enter a line of text:")

line = sys.stdin.readline().strip()

print("You entered:", line)

このようにすることで、改行文字を取り除いた入力を取得できます。

また、sys.stdin.readline()はバッファリングの影響を受けるため、大量のデータを逐次読み込む場合に適しています。しかし、input()関数と違い、EOF(End Of File)に達すると空文字列を返すため、EOF処理も考慮しなければなりません。

sys.stdin.read()とsys.stdin.readlines()の違いと使い分け

sys.stdin.read()とsys.stdin.readlines()は、どちらも標準入力からデータを読み取りますが、その動作には違いがあります。

sys.stdin.read()は、標準入力からすべてのデータを一度に読み取ります。これは、大量のデータを一括で処理する場合に有用です。

import sys

print("Enter multiple lines of text (Ctrl+D to end):")

data = sys.stdin.read()

print("You entered:", data)

一方、sys.stdin.readlines()は、標準入力からすべての行をリストとして読み取ります。各行がリストの要素として格納されるため、行単位での処理が簡単になります。

import sys

print("Enter multiple lines of text (Ctrl+D to end):")

lines = sys.stdin.readlines()

print("You entered:")

for line in lines:

print(line.strip())

使い分けとして、全体を一つの文字列として扱いたい場合はsys.stdin.read()、行ごとに処理を行いたい場合はsys.stdin.readlines()を使用するとよいでしょう。両者は大規模な入力データを処理する際に適しており、具体的なニーズに応じて選択することが重要です。

これらのメソッドを活用することで、Pythonプログラムが柔軟に標準入力を処理できます。

より使い分けを知りたい方は、下記の記事も参考にしてください。

sys.argvの使い方完全ガイド【Python初心者向け】 | デジタルトレンドナビ

よく使われるPython標準入力のパターン

よく使われるPython標準入力のパターン

ここでは、Pythonの標準入力でよく使われるパターンについて解説します。

一行に複数の入力を取得する方法

一行に複数のデータを入力する場合、split()メソッドやmap()関数を使います。まず、split()メソッドを使った方法を説明します。

user_input = input("Enter multiple values separated by space: ")

values = user_input.split()

print("You entered:", values)

このコードでは、ユーザーが入力したデータをスペースで区切り、それぞれをリストの要素として格納します。例えば、「apple banana cherry」と入力すると、valuesには[‘apple’, ‘banana’, ‘cherry’]が格納されます。

次に、map()関数を使って数値に変換する方法を解説しましょう。

user_input = input("Enter numbers separated by space: ")

numbers = list(map(int, user_input.split()))

print("You entered:", numbers)

この例では、スペースで区切られた入力を整数に変換し、リストに格納します。例えば、「1 2 3」と入力すると、numbersには[1, 2, 3]が格納されます。map()関数を使うことで、効率的にデータを変換できます。

複数行の入力をリストに格納する方法

複数行の入力をリストに格納する場合、forループやリスト内包表記を使う方法があります。まず、forループを使った基本的な方法を紹介します。

lines = []

print("Enter multiple lines of text (type 'STOP' to end):")

while True:

line = input()

if line == 'STOP':

break

lines.append(line)

print("You entered:", lines)

このコードでは、ユーザーが「STOP」と入力するまでの各行をlinesリストに格納します。

次に、リスト内包表記を使った方法を示しましょう。

print("Enter multiple lines of text (Ctrl+D to end):")

lines = [line for line in sys.stdin.read().splitlines()]

print("You entered:", lines)

この方法では、sys.stdin.read()を使ってすべての入力を一度に読み込み、splitlines()で行ごとに分割します。リスト内包表記を使うことで、簡潔に記述できます。

2次元リストを作成する方法

2次元リストを作成する場合、縦横の入力データをリストに格納します。以下に、縦横のデータを入力して2次元リストを作成する方法を示します。

rows = int(input("Enter number of rows: "))

cols = int(input("Enter number of columns: "))

matrix = []

print("Enter the matrix row by row:")

for _ in range(rows):

row = list(map(int, input().split()))

matrix.append(row)

print("The matrix is:")

for row in matrix:

print(row)

このコードでは、まず行数と列数をユーザーに入力させ、次に各行のデータを入力させます。入力されたデータは数値に変換され、リストとしてmatrixに格納されるのが特徴です。

また、リスト内包表記を使って2次元リストを作成する方法もあります。

rows = int(input("Enter number of rows: "))

print("Enter the matrix row by row:")

matrix = [list(map(int, input().split())) for _ in range(rows)]

print("The matrix is:")

for row in matrix:

print(row)

この方法では、リスト内包表記を使って各行のデータを直接matrixに格納します。効率的かつ簡潔に2次元リストを作成可能です。

応用的なPython標準入力の処理方法

応用的なPython標準入力の処理方法

ここでは、Pythonで標準入力を高度に処理する方法について解説します。具体的には、イテレータとlambda式を使った入力処理、whileループを使った入力処理、入力データをフィルタリングして変換する方法について説明します。

イテレータとlambda式を使った入力処理

イテレータとlambda式を組み合わせることで、効率的かつ柔軟に入力処理が可能です。イテレータを使うことで、データの流れを逐次処理し、lambda式を使って簡潔にデータ変換を行います。

以下のコード例では、イテレータとlambda式を使って標準入力から整数を読み込み、それを二乗して出力します。

import sys

print("Enter numbers separated by space (Ctrl+D to end):")

data = sys.stdin.read().split()

numbers = map(int, data)

squared_numbers = map(lambda x: x ** 2, numbers)

for number in squared_numbers:

print(number)

このコードでは、標準入力から読み込んだデータをスペースで分割し、map()関数を使って整数に変換します。その後、lambda式を使って各整数を二乗し、各二乗結果を順次出力します。

この方法のメリットは、コードが簡潔で読みやすく、処理が効率的である点です。特に、大量のデータを逐次処理する場合に有用です。

whileループを使った入力処理

whileループを使うことで、入力を継続的に処理することが可能です。無限ループの形で入力を受け付け、特定の条件でループを終了する方法を紹介します。

以下のコード例では、ユーザーが「exit」と入力するまで、標準入力を継続的に受け付けます。

while True:

user_input = input("Enter something (type 'exit' to quit): ")

if user_input.lower() == 'exit':

break

print("You entered:", user_input)

ループ内で入力されたデータを表示し、条件が満たされた場合にbreak文でループを終了します。

無限ループを使用する際には、終了条件を明確に設定することが重要です。無限ループが制御不能になると、プログラムが停止しないため、適切な終了条件を設けることで安全に使用できます。

入力データをフィルタリングして変換する方法

入力データをフィルタリングし、必要な形式に変換する方法を解説します。filter()やmap()関数を使ってデータを効率的に処理します。

以下は、ユーザーから入力された数値のうち、偶数のみを抽出し、その偶数を二乗して出力するコード例です。

import sys

print("Enter numbers separated by space (Ctrl+D to end):")

data = sys.stdin.read().split()

numbers = map(int, data)

even_numbers = filter(lambda x: x % 2 == 0, numbers)

squared_even_numbers = map(lambda x: x ** 2, even_numbers)

for number in squared_even_numbers:

print(number)

このコードでは、まず標準入力から読み込んだデータをスペースで分割し、整数に変換します。次に、filter()関数を使って偶数のみを抽出し、map()関数で各偶数を二乗します。最終的に、二乗された偶数を順次出力するコードです。

この方法により、特定の条件に基づいてデータをフィルタリングし、必要な形式に変換できます。特に、大量のデータを効率的に処理する際に効果的です。

これらの応用的な標準入力の処理方法を理解することで、Pythonプログラムの入力処理がより柔軟かつ効率的になります。具体的なニーズに応じて最適な方法を選びましょう。

まとめ

まとめ

Pythonの標準入力を活用する方法を学ぶことで、プログラムに対する柔軟なデータ入力が可能になります。標準入力の基本概念を理解し、input()関数やsysモジュールを使った多様な入力手法を習得することは、効率的なプログラミングの基礎となります。

特に、input()関数はシンプルで使いやすく、ユーザーインターフェースを簡単に実装できるのが特徴です。sysモジュールを使用することで、大量データや複雑な入力処理も効率的に行えます。具体的な使用例を学ぶことで、各関数の適用シーンやメリットを理解でき、実際の開発で応用する力が身につきます。

投稿者

  • デジタルトレンドナビ編集部

    システム開発、Webサイト制作、ECサイトの構築・運用、デジタルトランスフォーメーション(DX)など、デジタルビジネスに関わる多岐の領域において、最新のトレンド情報や実践的なノウハウを発信してまいります。