はじめに
paizaの標準入力の問題集を解いていて軽くつまづいたことがあったので、備忘録的に書いておきます。
どういう問題?
こんな問題でした。
1 行目で整数 N が与えられます。
2 行目で、N 個の整数 a_1, ... , a_N が半角スペース区切りで与えられます。
a_1, ... , a_N を改行区切りで出力してください。1
入力の例は次の通りです、
入力例1
6
6561 3785 6338 9568 4956 557
どこでつまづいた?
自分は下記のような回答を書いたのですが...
num =int(input())
for i in range(num):
print(input().replace(' ','\n'))
しかしこんなエラーが出ました。
Traceback (most recent call last):
File "Main.py", line 5, in <module>
print(input().replace(' ','\n'))
EOFError: EOF when reading a line
調べてみたところ
EOFError: EOF when reading a line
EOFはEnd Of File のことで、エラーをそのまま読むと、行を読んでいるときに最後の行に到達してしまったよと教えてくれているみたいです。
つまり今回の原因は、最初に
1 行目で整数 N が与えられます。
2 行目で、N 個の整数 a_1, ... , a_N が半角スペース区切りで与えられます。
と書かれているように、与えられる入力は2行であるのにも関わらず、私が書いた下記のコードでは、最初の行で与えられた整数N(今回は6)をnumという変数に代入した後に、その回数分input()をループさせてしまったために起きたエラーだったんですね。当然、2行しか入力がないのにそれ以上input()を回してどうするのという話でした。
num =int(input())
for i in range(num):
print(input().replace(' ','\n'))
解答
標準入力の2行目をリストにしてから、1行目で与えられた整数分を出力してあげることで解決しました。
(模範解答はmap関数をしようしていたのですが、ひとまずここでは触れません)
num = int(input())
a = list(input().split(" "))
for i in range(num):
print(int(a[i])))
-
2 行目で与えられる N 個の整数の入力 (paizaランク D 相当)
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__integer_number_step2 ↩