Pythonの標準入力input関数まとめ

こんにちは、今回はPythonの標準入力についてみていきたいと思います。

paizaで問題を解いてレベルアップをするには避けては通れない標準入力ですが、私は何も知らずに突っ込んでさっぱりわからず撃沈した記憶があります。(笑)

そんなことにならないように(ならないと思いますが笑)この記事で標準入力を理解していきましょう。

Pythonのさらに詳しい記事はコチラ

標準入力とは

「標準」とついていますが、特に気にしなくても大丈夫です。なので、標準入力とはただ「入力されたデータを受け取ること」と考えておきましょう。

この時、入力されたデータとは、一つとは限りません。複数入力されつこともあります。ですから、そんな複数個のデータにも対応できるようにしていきましょう。

標準入力ではsys.stdinやinput、fileinputなどがありますが今回はinput関数のみの紹介です。

Qiita

なんとなくinput()を避けてsys.stdinを使ってきたけど実際どっちがいいのか?を速度とコード量的に比較してみま…

標準入力で使うinput関数

Pythonで標準入力を扱う方法の一つがinput関数です。

以下のようなプログラムを実行したときを考えてみましょう

1行目で入力されたデータを受け取り、そのデータをline変数に格納しています。2行目はおまけです。ちゃんとinput関数で入力データを取得できている確認します。

もし、「Hello world」と入力されたら、「Hello world」と表示されますし、「123」と入力したらもちろん「123」と表示されます。

もし、入力されたデータを表示したいだけなら、わざわざline変数に格納しなくても以下のように書いてもOKです。

このように入力することで1行減らすことができます。もちろん、先ほどのプログラムと出力結果は変わりません。

標準入力input関数の注意点

先ほど紹介したinput関数の注意点はデータ型です。

プログラミングをするうえでデータ型の話は避けては通れないくらい大切ですし、このデータ型の話を理解するだけで大きくレベルアップできます。

関連記事

プログラミングをする上でデータ型の話を避けて通ることはできません。 データ型を理解していないとエラーが大量発生してしまうかも。 今回はそんな超重要なデータ型を初心者向けにやさしく解説していきます。 データ型って何?データ[…]

Pythonのデータ型

データ型の種類

データ型を細かく分けるとたくさんあるのですが、今回は簡単のために代表的な2つのデータ型を紹介しましょう。

  1. 文字列(string)
  2. 整数(integer)

この二つをまずは覚えておきましょう。

データ型の違いがある理由

なせ、このようにデータ型が分かれているのかというと、「データ型によって役割が異なるから」です。

整数なら四則計算(加減乗除)をすることができますが、文字列で計算することはできないというように、データに対してできる処理が異なるのです。

これは非常に重要なことです。もし、文字列に対して割り算をするとエラーになってしまいます。

上のエラーメッセージに出てきている’str’が文字列を、’int’が整数のデータ型を表しています。

つまり、「文字列は整数で割り算できません」という意味ですね。

もう一つ紹介すると

これも同じエラーが出ていますが、今度は「文字列同士の割り算はできません」ということが書かれています。

このように、データ型を間違えるとエラーが出てくるわけです。ですが、エラーが出てきてもあせらずデータ型を確認して直せば問題ありません。

input関数のデータ型

input関数で受け取ったデータはすべて文字列になります。
つまり、str型のデータになります。

たとえ、「123」というデータを受け取ったとしてもプログラム側では文字列として処理されてしまいます。

なので、入力データを整数として処理したければ

このように、int関数で整数に変換する必要があります。このようにすることで、整数として処理できるので取得した入力データをもとに四則計算ができることになります。

上のように、入力したデータに3が足されて出力されています。intをつけないとこれまで見てきたようにTypeErrorが出てきてしまいます。

もし、エラーが出てきた場合は、データ型をチェックしてましょう!

複数行の標準入力

これまでは、1行のデータを読み込んでいましたが、次に複数行のデータを読み込んでみましょう。データの数は増えますが、input関数を使うことに変わりありません。

input関数を書き連ねる方法

読み込みたいデータの行数だけinput関数を書けばそれでOKです。

これは入力データが3行ある場合を想定しているので、input関数を3行書いているわけです。

その下に書かれているprint関数はおまけです。ちゃんと3行分読み込まれているかを確認するために書いています。

ちなみに、上のプログラムではint関数を使っていないので、出力された数字は文字列として扱われています。

forループを使う方法

入力データの行数だけinput関数を書くにしても限界があります。100行ものデータを読み込むときに100行分input関数を書いていると、とても見にくいプログラムになります。

その時に使うのがforループです。もし、10行分のデータを読み込むとわかっている場合、

このように書くことでコンパクトにまとまります。このプログラムでは、input関数で読み取ったデータをprint関数で表示する作業を10回繰り返すという意味になっています。

ただし、このプログラムでは受け取ったデータを表示しているだけで保存できていないので、保存したい場合はリストを使うとよさそうです。

空っぽのリストに読み込んだデータが次々に格納されています。

リストにデータを追加するのはappendですね。詳しい使い方は以下の記事で紹介しています。

関連記事

Pythonのコンテナの一つであるリストに関して詳しく見ていきましょう。リストを自由に操作するためのメソッド11個の使い方を解説します。 メソッドとは? メソッドとはあるデータ型専用の関数のことです。なので、以下で紹介してるメ[…]

Pythonのリストに使えるメソッド11個「追加・削除・ソート」

ちなみに、こんな書き方もあります。

先ほどはカラのリストを用意しましたが、今回はその中にinput関数とforループを使って一気にリストを作っています。

リストとfor文を組み合わせて一行で書く方法は以下の記事でまとめています。

関連記事

Pythonのループ処理に使われるfor文は基本的に複数行でコロン(:)とインデントを使って書かれますが、ときには1行で書くこともできちゃいます。 今回はその一行で書く方法と、複数行で書いた時との違いを紹介していきましょう。この記事[…]

Pythonのfor文を一行で書く方法と複数行との違い

よくあるinpu関数の使い方

これまで紹介した内容を組み合わせると、いろんな標準入力に対応することができます。新しい関数も出てくるので必見です!

任意の行数の入力データを読み込む

毎回あらかじめ決まった行数のデータを読み込むとは限りません。例えばあるクラスのテストの得点を読み込むとき、データの個数は各クラスの人数によって変わります。

そんな時には、最初の行でデータの個数を書いておき、その数の分だけforループ文を繰り返すことになります。

上の例では、入力データの1行目に4とあるので、その続きに4つのデータがあるということが分かります。

このようにするとデータの個数が分からなくても入力データごとに対応できますね♪

スペース区切りの入力データはsplitメソッド

これまでは1行に一つのデータを読み込んでいましたが、次は1行に複数個のデータがスペースで区切られている場合を考えましょう。

スペース区切りのデータとは以下のようなことを言います。

このデータをinput関数で読み込むときは

上のようにsplitメソッドを使うと勝手にスペースで区切ってくれて、さらにリストに要素を格納してくれます。

しかし、このままでは出力データであるリストの各要素に’(シングルクオート)がついてるので文字列であることが分かります。

もし、この各要素を整数として扱いたい場合はというとmap関数を使います。

文字列リストを整数リストに変換map関数

map関数の使い方は整数に変換することがすべてではありませんが、今回は脱線しないようにmap関数の説明はこの程度にしておきましょう。

重要なことはmap関数ではmapオブジェクトが返されるということです。なので、リストにしたければlist関数を使いましょう。

以下のように書くことで整数のリストを作ることができます。

1行目の「input().split()」は先ほども見たように文字列のリストを返します。それをmap関数で整数に変換してlist関数でリストに戻すことになります。

リストではなく各変数に格納する

先ほどはスペース区切りの入力データをリストに格納しましたが、次は一つ一つの変数に代入しましょう。

一行目で3つの変数を用意しています。今回はデータの個数が3つであることわかっているので、このように書けます。

もし、入力データを整数として扱いたい場合は

1行目でmap関数を使っているので整数として各変数に代入することができます。

map関数を使ってリストを作りたいときはlist関数が必要ですが、今回のようにリストでない場合はmap関数だけで整数として扱うことができます。

まとめ

今回は標準入力でつかうinput関数を紹介していきました。わたしは、始めたての頃、標準入力で苦労した記憶があります。

paizaではこの標準入力ができないとスキルチェック問題が解けないのでぜひマスターしていきましょう。

また、今回紹介した関数たちを組み合わせることでいろんな入力に対応できるので試行錯誤しながら試してみてください。

関連記事

この度、paiza(プログラミング学習サイト)で有料会員として受講してみたのでそのとき感じたメリット・デメリットを紹介します。無料会員に関係する話も出てきます。 この記事の情報は2020年6月のものです。 今回、受講した講座 […]

関連記事

プログラミング言語のなかでも人気の高いPythonを学習する教材を紹介します。 最近ではプログラミングスククールがたくさんあるので迷うと思います。 ですが、まずは無料教材から始めてみましょう。苦労した分だけ力がつきます。 […]

【独学】Pythonを学習できる無料&有料教材7選