python~標準入力まとめ

初めに

皆さんこんにちは、Keymaleです。久しぶりの投稿です。プログラミング関係のことを書いてきたのですが、あまりに簡単すぎると閲覧数が増えないという、当たり前の課題にぶつかっております。最近Atcoderを始めたので、その時に使う標準入力を紹介したいと思います。プログラミングコンテストは計算時間の制限があり、C++なら通るコードもpythonだと通らないことが多々ありまして、pythonは大変不利です。近々C++についても記事を増やしていこうと思います。今回はpythonの標準入力についてまとめました。

標準入力

標準入力とはプログラミングコンテストにおいて、数値や文字などを入力として指示されますが、それをコード内に読み込む方法です。パターンとしては以下の4つになっています。

  • 1行1文字
  • 1行複数文字
  • 複数行1文字
  • 複数行複数文字

1行1文字

1文字だけを読み取る方法です。input()という関数を使います。例えば”A”という文字を入力として与えられた場合は

>>> x = input()
A
>>> x
'A'
>>> 

上記のように記述するとxという変数に”A”という文字が代入されます。実際は文字を入力として与えられる場合よりも数字の方が多いです。その場合は、

x = input()
x = int(x)

とするか、

x = int(input())

1行複数文字

1文字だけでなく、

1 3 5 7 9

のように1行に複数の文字が与えられて、これらを入力として受け取る必要があります。まず、受け取る数が決まっていて、すべて違う変数に代入したい場合は

>>> a,b,c,d,e = input().split()
1 3 5 7 9
>>> a
'1'
>>> b
'3'
>>> c
'5'
>>> d
'7'
>>> e
'9'

このようにinput()のあとにsplit()と書くと、スペースで区切られた文字を受け取ることができます。splitのかっこの中は区切り文字を入れます。スペースが区切り文字の場合は何も書かなくて問題ありません。カンマ等が区切り文字の場合はsplit(“,”)としてください。

このままでは文字列として読み取っています。intなどで受け取りたい場合は

>>> a,b = map(int,input().split())
3 8
>>> a
3
>>> b
8

上記のようにmap()関数を用いて、第一引数にintを指定することで、intとして受け取ることができます。

別々の変数ではなく、一つのリストとして受け取る方法もあります。やり方は以下のようになります。

>>> A = list(input().split())
2 4 6 8
>>> A
['2', '4', '6', '8']

上記のようにすることでリストで受け取ることができます。この方法も文字列で受け取っているため、intで受け取る方法は

>>> A = list(map(int,input().split()))
1 2 3 4 5 6
>>> A
[1, 2, 3, 4, 5, 6]

複数行1文字

標準入力では複数行にわたって

1
3
5
7
9

のように渡されることもあります。数が少なければ上記のように5回ならばinput()を5回書いてもいいですが、1000個とかになるとしんどいです。なのでfor文を用いて

A = []
for i in range(5):
  A.append(input())

のようにAのからのリストを作って、append関数を使って値を追加していきます。例ではfor文のrangeを5にしていますが、コンテストでは行数も標準入力で渡されることが多いので、適宜代入しましょう。また、例によってこの書き方だと文字列のリストなので、intにしたい場合は

A = []
for i in range(5):
  A.append(int(input()))

複数行複数文字

最後の複数行複数文字です、ある程度の難易度以上の問題は大体これです。例えば

1 5
2 10
3 15
4 20

というような形の入力とすると、

A = []
for i in range(4):
  A.append(list(map(int,input().split())))

最後に

今回はpythonの基本的な4つ標準入力方法について記載しました。もちろんこれらは基本的な内容なので、問題によって適宜作り変えて利用してください。これらはよく使うのでコピペで使ってしまうのがよいかと思います。