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

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

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

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

while

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

Q&A

解決済

3回答

737閲覧

python while文を利用した繰り返し処理について

john_doe_

総合スコア354

Python 3.x

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

while

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

0グッド

0クリップ

投稿2020/01/31 04:45

編集2020/01/31 06:00

n < 5である場合、同じ処理を繰り返したいのですが、
n > 5になっても、処理が継続されてしまいます。

n = 0 while n < 5 : for elem in elems: if elem.text == "": print("該当なし") else: print("該当あり") n += 1 print(n) print("チェック完了!!")

記載内容に間違いはないように思うのですが、自己解決できずにおります。

大変稚拙な質問かとは存じますが、ご教示いただけましたら幸甚です。
何卒よろしくお願い申し上げます。

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

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

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

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

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

guest

回答3

0

まず

n > 5になっても、処理が継続されてしまいます。

ということはありません。elemsの要素のうちひとつでもtextが空でないものがあればn > 5により処理は完了します。

逆に言うとelemsの全要素のtextが空であれば無限ループに陥ります。

Python

1from collections import namedtuple 2 3Elem = namedtuple('Elem', ('text',)) 4 5 # 無限ループに陥るデータ例 6#elems = [] 7#elems = [Elem(''),Elem('')] 8 9# チェック完了するデータ例 10elems = [Elem(''),Elem('a')] 11 12n = 0 13while n < 5 : 14 for elem in elems: 15 if elem.text == "": 16 print("該当なし") 17 else: 18 print("該当あり") 19 n += 1 20 21print("チェック完了!!")

投稿2020/01/31 05:05

can110

総合スコア38233

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

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

john_doe_

2020/01/31 05:54

ご丁寧にご教示いただきましてありがとうございます。 elemsの要素には必ずtextあり、カウントアップされるnの合計は50になってしまいます。 なぜ、50までカウントアップされてしまうのかを理解できずにおります。
can110

2020/01/31 06:06 編集

(あ、質問修正されてた…んだ) 理由はte2jiさんの回答のコメントのとおりです。
john_doe_

2020/01/31 06:07

おかげさまで、正しく理解することができました。ご親切にありがとうございました。
guest

0

n > 5になっても

n > 5 はどのように確認したのでしょうか?

else: を通らないと、n がカウントアップしない記述になっていますが、意図通りですか?

デバッグ環境整えて、変数推移を確認すると良いと思います。

投稿2020/01/31 04:52

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

john_doe_

2020/01/31 05:55

お返事いただきましてありがとうございます。 上記の件については、こちらの意図通りでございます。
退会済みユーザー

退会済みユーザー

2020/01/31 06:00 編集

「n > 5 はどのように確認したのでしょうか? 」が結構重要だったのですけれど。。。 for ループ内で 5以上に上がっても、for を抜けるまで while で評価されません。
john_doe_

2020/01/31 06:03

print(n)、を質問内容に記載するのを失念しておりました。 下記の方からもご指摘を受けた通り、while内のfor文の制御方法について私の理解不足のようです。 初歩的なことかと思いますので、自分でもう少し調べてみたいと思います。
john_doe_

2020/01/31 06:28

ご親切に参考情報ありがとうございます!!勉強させていただきます。
guest

0

ベストアンサー

for elem in elems:

のforループに関しては、nが5以上でも継続しますね

投稿2020/01/31 04:47

y_waiwai

総合スコア87719

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

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

john_doe_

2020/01/31 05:58

お返事いただきましてありがとうございます。 forループはなぜ制御できないのでしょうか??? 私はそれを理解できていないようです。
y_waiwai

2020/01/31 06:03 編集

5で止めたいのであれば、 n+=1 のところのあとに if n>=5: break; としてforを中断させましょう。
john_doe_

2020/01/31 06:04

大変稚拙な質問にもかかわらず、ご親切にありがとうございます。 おかげさまで、while内のfor文の制御方法について理解することができました。 大変助かりました。
y_waiwai

2020/01/31 06:11

しかし、このままのコードだと、nが5以下でforループを抜けると、whileによって繰り返されてしまいますが、これであってるんでしょうか。 ここらへんどういう動作をするのか、もちょっと勉強して理解する必要がありそうです
john_doe_

2020/01/31 06:27

ご指摘の通りでございます。whileを利用せずにfor文だけで処理してみたいと思います。 勉強します!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問