質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

6189閲覧

JupyterLabでのexit()の扱い

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/04/23 19:40

編集2019/04/23 19:42

JupyterLab上でAtCoderのプログラムを書いています。
下記の問題を解いていた時にfor文内でexit()を使ったのですが、終了せずにそれ以降のループも実行されました。
しりとりの文字列が渡されるので、1つ目から順にfor文で見ていき、しりとりになっていない場合には"No"と出力して終了する...というのが意図した動作でした。
AtCoderにも下記のexit()を使ったコードが正答として認められたのですが、JupyterLab, Jupyter Notebook上では添付画像のように"No"が複数回表示されます。
これはJupyterの仕様なのでしょうか?
それとも、私のコードに汎用的な結果をもたらさない過ちがあるのでしょうか?
もし、そうでしたら教えていただければ嬉しいです。

追記
sys.exit()ではLab自体の終了につながるようで警告が出ました。

ABC109 B - Shiritori

問題文
高橋くんは今日も1人でしりとりの練習をしています。
しりとりとは以下のルールで遊ばれるゲームです。

  • はじめ、好きな単語を発言する
  • 以降、次の条件を満たす単語を発言することを繰り返す

-- その単語はまだ発言していない単語である
--その単語の先頭の文字は直前に発言した単語の末尾の文字と一致する

高橋くんが発言した単語の個数Nとi番目に発言した単語Wiが与えられるので、どの発言もしりとりのルールを守っていたかを判定してください。

Python3

1# ABC109B - Shiritori 2n = int(input()) 3data = [input().rstrip() for _ in range(n)] 4used = [data[0]] 5 6for i in range(1, n): 7 if data[i][0] == data[i - 1][-1] and data[i] not in used: 8 used.append(data[i]) 9 else: 10 print("No") 11 exit() 12 13print("Yes")

JupyterLabでの実行結果
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

exitはかなり特殊です。

対話的インタープリタシェルで有用ですが、プログラム中では使うべきではありません。

https://docs.python.org/ja/3/library/constants.html?highlight=exit#exit

対話的インタプリタを抜けたいときに、

python

1>>> print("goodbye world") 2goodbye world 3>>> exit()

として抜けるためのものです。

質問文のコードですが、breakforelse節に置き換えることができます。

python

1for i in range(1, n): 2 if data[i][0] == data[i - 1][-1] and data[i] not in used: 3 used.append(data[i]) 4 else: 5 print("No") 6 break 7else: 8 print("Yes")

こちらを使ってください。

投稿2019/04/23 19:53

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/04/23 21:14

他の方の競技プログラミングのコードではよく見るので普通だと思っていたのですが、特殊なものなのですね。 教えてくださったコードについて、もしよろしければもう少し詳しく解説していただけないでしょうか? 2つ目の(for文の外)elseのような使い方を初めて見ました。 if-elseもしくはif-elif-elseの対応関係でelseは使うものだと思っていたのですが、この場合は何に対応するのでしょうか? とても便利そうなので、一般にどういうときには単体(?)のelseを使えるのか教えていただければ嬉しいです。
hayataka2049

2019/04/23 22:01 編集

単体のelseではなく、for文に対するelse節です。breakされなかったときだけelse節が実行されます。普通に「python for else」みたいなキーワードでググれば解説が出ると思います。
退会済みユーザー

退会済みユーザー

2019/04/23 23:52

調べてみたら初心者向けの解説が出てきました。 回答、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問