当たり前じゃない?
まず、プログラミングってのは「こう書けばいい」ってものではありません。
ロジックを書くのです。
最初にエラーメッセージぐらい読みましょう。エラ―メッセージにはヒントが隠されています。
Traceback (most recent call last):
File "Main.py", line 8, in <module>
n = input().split()
EOFError: EOF when reading a line
[訳]
トレースバック(最近呼ばれたもの):
"Main.py"ファイルの 8行目。
n = input().split() のところ
EOFError: 行を読んだらEOFだったぞ?
つまり、「これ以上読めないのに、読めという命令。いや、読めないから…」っていうツッコミみたいなものです。
とりあえず、コードを読みましょう。コードを読むコツは「一行レベルで、その行が何をしているかを考えながら読む」です。
Python
1# 標準入力から受け取り、整数としてsにセット
2s = int(input())
3
4# s回、以下を繰り返す
5for i in range(s):
6 # 標準入力から受け取り、半角スペースでsplit、結果をnにセット
7 n = input().split()
8 # nの値を表示
9 print(n)
これを疑似コードとして抜き出します。
1. 標準入力から受け取り、整数としてsにセット
2. s回、以下を繰り返す
2.1. 標準入力から受け取り、半角スペースでsplit、結果をnにセット
2.2. nの値を表示
この疑似コードを実際にシミュレーションしてみる。つまり数学の手順とかみたいに手作業で計算してみる。
ユーザが
6
6561 3785 6338 9568 4956 557
と入力したと仮定したら、
まず(1)で 一行目の"6" が取得される。それを整数に変換して s = 6 となる。
(2)で「s回繰り返す」ですが、s = 6 なので、「6回繰り返す」となる。
そして (2.1)に行き、一行レベルで取得した "6561 3785 6338 9568 4956 557" を splitする。
s = 6
n = { 6561, 3785, 6338, 9568, 4956, 557 }
(2.2)で表示して (2)に戻る。(ループなので)
(2.1)に行き、取得しようとするけど、三行目は無いので EOFに。そして今回の例外 ( EOFError: EOF when reading a line ) となる。
つまり、読み込もうとしたけど対象データが無いから読み込めない。でも命令的には「読み込め」なので無理。ない袖は振れない。よって例外が投げられている。
エラーになっている理由は上記で。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/19 09:23