pythonの標準入力をローカルでやってみる

あらまし

pythonのローカル環境で、コーディングテストでありがちな標準入力を練習してみたお話です。

過去記事の一覧はこちら。 記事一覧 - Baggage Claim

コーディングテストの第一関門

就活でコーディングテストを受ける人も多いだろう。 しかし肝心のアルゴリズムを考える前に、標準入力からファイルを受け取るという関門が存在する。 こんなところで時間を食うのは本意なれ、ということでローカルで練習してみた。

準備するもの

  • .txtファイル
  • .pyファイル

やったこと

今回は以下のようなsample.txtを用意した。数字は空白で区切られている。 test.pyと同じディレクトリに置いておく。 f:id:pur_usupr:20200127222240p:plain

test.pyはこんな感じ。sysをimportし、stdin.readline()で読み込める。 f:id:pur_usupr:20200127221818p:plain

このままだと使いにくいのだが、split関数を使うとリストに格納される。 str型になっているので注意が必要だが、ここまでくれば扱いやすいものである。 f:id:pur_usupr:20200127221815p:plain

次に、sample.textを2行にしたバージョンを紹介する。 f:id:pur_usupr:20200127222244p:plain

リスト内包を使って1行ずつ読み込んでみる。まず素直にreadlineを使うとこんな感じ。 f:id:pur_usupr:20200127221813p:plain

改行文字の \n が入ってしまう。これは、rstripを使うと取り除ける。strip("\n")でも良い。 1行しか読み込まない場合でも、念のためrstripをつけておくと良さそうである。 先程と同様にsplitを使えば、二重のリスト形式で受け取ることができる。 f:id:pur_usupr:20200127222908p:plain

ここまで来れば適当にこねくり回して辞書なりなんなり使いやすいデータ形式に加工できるであろう。

実行するときは、ターミナルで python test.py < sample.txt と叩けば良い。

おわりに

AtCoderみたいな競プロでもこういう形式が使われるらしい。 そういう方々にスキルで太刀打ちできるわけがないのだ。