はじめに
競技プログラミングやプログラミングの練習問題で一番初めにつまづいたのが入出力の方法だったので、今回は入力の受け取り方についてまとめました。
出力方法についての記事はこちら
基本の関数
input()関数
input() は1行を文字列として読み込む関数である。
以下のように「1 2 3」と入力したとき、文字列 ’1 2 3’ と読み込む。
# 1 2 3
a = input()
print(a)
# 1 2 3
空白区切りの文字 n 個の入力を n 個の変数に格納する
split() 関数を用いて、入力された文字列を空白区切りを基準に分割する。
以下のように「1 2 3」と入力したとき、各変数に各入力値を格納する。
# 1 2 3
a, b, c = input().split()
print(a)
print(b)
print(c)
# 1
# 2
# 3
空白区切りで文字列のリストを取得する
a = input().split() と記述したとき、入力された文字列は空白区切りで分割されてリスト a の要素として格納される。
# 1 2 3
a = input().split()
print(a)
# ['1', '2', '3']
入力された数値を整数に変換して格納する
数値を入力しても、 input() では文字列として読み込まれる。
そこで以下のように int() で囲んで変換する。
# 1
a = int(input())
print(a)
# 1
空白区切りの数値 n 個の入力を整数に変換して n 個の変数に格納する
以下のように map() を用いて整数に変換する。
# 1 2 3
a, b, c = map(int, input().split())
print(a)
print(b)
print(c)
# 1
# 2
# 3
空白区切りで整数のリストを取得する
int() の引数にリストは指定できないので、a = int( input().split() ) とは記述できない。
そこで以下のように list() を用いて格納する。
# 1 2 3
a = list(map(int, input().split()))
print(a)
# [1, 2, 3]
複数行の入力を読み込み、リストに格納する
n 行の入力を読み込むとする。
以下のように for の内包表現を用いて記述する。
# 3
# one 1
# two 2
# three 3
n = int(input())
a = [input() for _ in range(n)]
print(a)
# ['one 1', 'two 2', 'three 3']
a = list(input() for _ in range(n)) と記述することもできる。
複数行の入力を二次元配列に格納する
a = input().split()と記述したとき、空白区切りで分割されてリスト a の要素として格納されるので、以下のように記述すると、勝手に二次元配列になってくれる。
# 3
# one 1
# two 2
# three 3
n = int(input())
a = [input().split() for _ in range(n)]
print(a)
# [['one', '1'], ['two', '2'], ['three', '3']]
複数行の各行に対して処理を行う場合の入力(リストとして保持しない)
各行の値に対して処理を行う場合は内包表現を使わずに処理を記述する。
# 3
# 1 2
# 2 1
# 1 2
n = int(input())
a = []
for _ in range(n):
n, m = map(int, input().split())
if n > m:
a.append(n)
else:
a.append(m)
print(a)
# [2, 2, 2]