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

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

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

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

Q&A

解決済

1回答

931閲覧

Python for文(真偽値)

tanty

総合スコア14

Python 3.x

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

0グッド

1クリップ

投稿2019/05/21 02:45

前提・実現したいこと

参考書の中の一文で理解できないことがあったので、理解したい。
ソースコードの中の
fond_one = False
found_one = True
の動きがどうなっているのか。
下の一文のelseがない場合の文章の動き→ 該当のソースコード

python

1cheeses = [] 2for cheese in cheeses: 3 print('This shop has some lovely', cheese)#cheeses にあるものをcheeseで出力 4 break 5else: 6 print('This is not much of a cheese shop, is it?')

該当のソースコード

python

1cheeses = [] 2found_one = False 3for cheese in cheeses: 4 found_one = True 5 print('This shop has some lovely', cheese) 6 break 7 8if not found_one: 9 print('This is not much of a cheese shop, is it?')

出力結果
This is not much of a cheese shop, is it?

試したこと

1.False,True(cheeses=[]) if not 出力
2.False,True (cheeses=['big cheese']) for 出力
3.False,False (cheeses=[]) if not 出力
4.False,False (cheeses=['big cheese']) for, if not 出力

5.True,False(cheeses=[]) 出力なし
6.True,False(cheeses=['big cheese']) for, if not出力
7.True,True(cheeses=[]) 出力なし
8.True,True(cheeses=['big cheese']) for 出力
動きがわかるかなと思ったがダメでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

found_oneは、チーズが少なくとも一つあることを表しています。
ですので、for文内で found_one = False と書く実験は無意味です。

日本語に置き換えてみれば分かるかもしれませんね。

Python

1cheeses = [] 2チーズがあるか? = いいえ 3 4for cheese in cheeses: 5 チーズがあるか? = はい 6 print('This shop has some lovely', cheese) 7 break 8 9if not チーズがある?: # if チーズが無い?と聞いているのと一緒 10 print('This is not much of a cheese shop, is it?')

この例は実用的で無く分かりづらいですね。私ならこう書きます。

Python

1if cheeses: 2 print('This shop has some lovely', cheeses[0]) 3else: 4 print('This is not much of a cheese shop, is it?')

for-elseのありがたみが分かるのは、例えば素数の判定です。

Python

1num = 42 2for n in range(2, num): 3 if num % n == 0: # numがnで割り切れるなら 4 print('素数ではない') 5 break 6else: 7 print('素数')

Python

1num = 42 2is_prime = True 3 4for n in range(2, num): 5 if num % n == 0: 6 is_prime = False 7 print('素数ではない') 8 break 9 10if is_prime: 11 print('素数')

できるだけ簡易な例になるようにナイーブな試し割り法を用いています。
実際にはもうちょっと効率化した上で関数を組むと思う。

投稿2019/05/21 02:53

編集2019/05/21 02:59
LouiS0616

総合スコア35660

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

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

tanty

2019/05/21 04:01

found_one = False でチーズがないという認識でいいですかね? found one= True で少なくとも1つあるということですかね? 何度もすみません!
tanty

2019/05/21 04:01

例までありがとうございます! 実際に実行してみます!
LouiS0616

2019/05/21 04:04

アルゴリズムとしては、 ・まず、『チーズが無い』として処理を進める ・for文が回ったら(チーズが一つでもあれば)『チーズが有る』と判定 実験するなら、いじるのはcheesesの中身だけで良いです。
LouiS0616

2019/05/21 04:05

巡回する要素が無い = forスイートが一周も実行されない という暗黙の前提の下で書かれています。
tanty

2019/05/21 04:29

大変わかりやすかったです! 丁寧にありがとうございます! スライス指定したりリストの中を増やしてみたりします! またお願いします!!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問