【Python】inputの使い方。標準入力から1行読み込む【入門第42回】

148, 2019-09-03

目次

inputとは?

こんにちは、narupoです。

今回は、プログラムを使っているユーザーから、入力を受け取る方法をご紹介します。
これは、input関数を使います。
input関数を使うと、ユーザーから1行、入力を受け取ることができます。

input関数について、具体的には↓を見ていきます。

  • input関数の使い方

  • 入力を変数に入れる方法

  • プロンプトの出し方

  • EOFErrorの捕捉

  • 標準入力の正体

input関数の使い方

input関数は組み込みの関数です。
なので最初から使えます。

input関数は標準入力から入力を1行読み取る関数です。
標準入力とは、ストリームのことです。
ストリームとは「流れ」のことですが、何の流れかと言うとデータの流れです。
どこからデータが流れてくるのかと言うと、標準ではキーボードからデータが入力されます
つまり標準入力とは、キーボードから入力されるデータの流れのことになりますね。

input関数は↓のようにして使います。

:::python
input()

↑のコードを実行すると、↓のようにプログラムが入力待ちになります。
キーボードから何かキーを入力して、エンターキーを押すとinput関数が終了します。

input関数を使う

input関数で入力待ちになると、処理はそこで一旦ストップします。
こういうのをブロッキングI/Oと言います。

入力を変数に入れる方法

input関数で読み取った入力を保存するには、input関数の戻り値を変数に保存します。
↓のようにです。

:::python
line = input()

↑の変数lineには入力されたデータが1行入ります。
このデータを出力すると、キーボードから入力したデータが入っていることがわかります。

:::python
line = input()
print(line)

↑のコードの実行結果は↓のようになります。

input関数から入力を読み取り変数に保存して出力する

input関数は最後に入力された改行を取り除いて返します。
なので、↑の変数lineには改行が入っていません。

プロンプトの出し方

プロンプトとは、ユーザへの案内のことです。
先ほどの入力ではユーザーに「これを入力しろ」とか「あれを入力しろ」とか、そういう案内はありませんでした。
なのでユーザーからすると、何を入力すればいいのかわからない状態です。
↓のようにinput関数の引数に文字列を渡すと、input関数でプロンプトを出すことができます。

:::python
input('name > ')

名前を入力させたいので「name >」と表示させています。
↑のコードの実行結果は↓のようになります。

input関数にプロンプトを指定する

EOFErrorの捕捉

input関数で入力待ちになっている時に、キーボード左下のCtrlキーとZキーを同時押しして(UNIX系ではCtrl+D)エンターキーを押すと、↓のようにEOFErrorが送出されます。

input関数でCtrl+Zを入力する

EOFとはEnd Of Fileの頭文字で、ファイルの終端を表す概念です。
ここにきたらもうデータ無いよ! という意味ですね。

このEOFをキーボードから入力してinput関数を強制終了させる仕組みは便利なのですが、↑のようなエラーが表示されるのはちょっと不格好です。
このEOFErrorを捕まえるには↓のようにします。

:::python
try:
    input('name > ')
except EOFError:
    print('EOFを検出しました')

↑のコードの実行結果は↓のようになります。

input関数でEOFErrorを補足する

標準入力の正体

Pythonでは標準入力はsysモジュールのstdinオブジェクトとして定義されています。
input関数は内部ではこのstdinオブジェクトを使っています。

stdinオブジェクトから直接、入力を読み込みたい場合は↓のようにします。

:::python
import sys

sys.stdin.readline()

↑これは、↓と同じです。

:::python
input()

stdinオブジェクトにはこのほかにも色々なメソッドがあります。
それについては別の記事で解説します(TODO)。

おわりに

input関数などで、ユーザーから入力を受け取れるようになると、作れるプログラムの幅がぐんと広くなります。
ユーザーに体重などを入力させてBMIを計算したり、名前などを入力させてレコード(データのかたまり)を作るなどですね。

以上、次回に続きます。

また見てね

関連動画