はじめに
自己紹介
Python勉強中の大学院生です。自分が詰まったところを記録していきます。
今回の内容
atcoderの問題をjupyter lab上で解いていた際に、exit()
が使えなかったので、その対処法を書きます。
具体的にはflag変数を用います。
問題となったコード
ここでは問題の内容は関係ないですが、一応紹介しておきます。
atcoderの問題
この問題のexit()
を用いた解答がこちらです。
import numpy as np
n = int(input())
a_ = [list(map(int, input().split())) for i in range(n)]
b_ = [list(map(int, input().split())) for i in range(n)]
#np.ndarrayに変換
a = np.array(a_)
b = np.array(b_)
for i in range(4):
if np.min(b - a) >= 0:
print("Yes")
exit(0)
#aを回転する
a = np.rot90(a)
print("No")
ここでは、for文のなかで条件を満たせばYes
と出力し、そのままfor文から抜けるだけでなく、プログラム自体を終了するというものです。
atcoder上であれば問題なく実行されます。しかし、jupyter labで実行するとkernelが再起動?するような挙動が見られ、うまく実行できませんでした。
解決策
eixt()
を使わずに、for文を抜けて、かつプログラムを終了するためには、フラグ変数
を使用します。
フラグ変数を用いた解答
import numpy as np
n = int(input())
a_ = [list(map(int, input().split())) for i in range(n)]
b_ = [list(map(int, input().split())) for i in range(n)]
a = np.array(a_)
b = np.array(b_)
flag = False
for i in range(4):
if np.min(b - a) >= 0:
print('Yes')
flag = True
break
else:
a = np.rot90(a)
if not flag:
print('No')
for文の前にflag = False
と設定します。そして、if文の条件を満たせばflag = True
とし、breakでfor文を抜けます。
このままでは、プログラムを終了していないことになりますが、最後のprint('No')
の前に、flagのif文を設けることで、for文のなかのif文の条件を満たしていればここは実行されずに、プログラムは終了します。
まとめ
今回はatcoderの問題の中で、exit()
を使わずにflag変数を用いてプログラムを終了する方法を整理しました。flag変数にブール値を代入することで、if文を用いてプログラムを終了させることができました。