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

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

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

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

2回答

1197閲覧

whileループを途中で終了し、次のwhileループに移りたい

pystudent

総合スコア10

Python 3.x

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2020/05/03 01:33

編集2020/05/03 02:08

前提・実現したいこと

python3で以下の多重whileループを使ったコードを作りました。
while2の中にあるif文のどれかの条件を満たしたら、while2を抜けてwhile3に移りたいのですが、while2から抜けれません。

while 1

.   while 2
. if
. elif
. elif
. elif
. else

.   while 3
. if
. else

END

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

keepAsking = True while keepAsking: inputCheck = True while inputCheck: a = input("A: ") if len(a) == 0: print("No record has been recorded.") inputCheck = False b = input("B: ") if len(b) == 0: print("No record has been recorded.") inputCheck = False c = input("C: ") if len(c) == 0: print("No record has been recorded.") inputCheck = False d = input("D: ") if len(d) == 0: print("No record has been recorded.") inputCheck = False else: output = a + " (" + b + ") " + "has been recorded as " + c + d + "." print(output) anotherRecord = True while anotherRecord: record = input("Do you wish to enter another record? (Y/N) ") if record == "Y": anotherRecord = False elif record == "N": anotherRecord = False keepAsking = False print("END")

試したこと

break, continue, passを各if/elifに与えてみましたが、while2の最初に戻るだけでwhile3に移動しませんでした。

補足情報(FW/ツールのバージョンなど)

python3.8.2

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

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

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

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

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

Zuishin

2020/05/03 01:40

書いてあることと実際のソースコードが違います。 質問では、一つの while の中に二つの while があるように書かれていますが、実際には一つの while の中に一つの while があり、その中にもう一つ while があります。 インデントを確かめましょう。
pystudent

2020/05/03 01:52

ご指摘いただきまして大変ありがとうございます。インデントを修正しました。
Zuishin

2020/05/03 01:53

まだ違いますね。実際に実行していますか?
pystudent

2020/05/03 02:09

while3内のif/elif文ですね?! 修正しました。何度もすみませんm(__)m
Zuishin

2020/05/03 02:11

これでおそらく、break が使えるはずです。試してみてください。
pystudent

2020/05/03 02:15

出来ました・・・ありがとうございます!!! 昨日一人でずっと奮闘しててやっと一歩進めました。 助けてくださり、本当にありがとうございました。
Zuishin

2020/05/03 02:17

回答するのでベストアンサーにしてもらえますか? さすがにここまで終わった後についた回答がベストアンサーなのは気に障るので。
pystudent

2020/05/03 02:24

はいもちろんです。こちらからも同じことお尋ねしようかと思っていました。宜しくお願いします。
Zuishin

2020/05/03 02:28

ありがとうございます。
guest

回答2

0

ベストアンサー

インデントの使用ミスで、三番目の while が二番目の while の中に入っていました。それを外に出すことで意図通り動くようになったようです。

投稿2020/05/03 02:26

Zuishin

総合スコア28662

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

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

pystudent

2020/05/03 02:30

正確なご指摘大変ありがとうございました。
guest

0

break という命令で抜けることができます

投稿2020/05/03 02:08

y_waiwai

総合スコア87800

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

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

Zuishin

2020/05/03 02:12

> break, continue, passを各if/elifに与えてみましたが、while2の最初に戻るだけでwhile3に移動しませんでした。 という質問で、今その原因を追記・修正依頼欄で解消しているところです。それを読んで回答を編集してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問