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

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

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

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

Q&A

解決済

2回答

2367閲覧

for文について考え方を理解したいです。

yu2ke

総合スコア2

Python 3.x

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

0グッド

0クリップ

投稿2021/10/26 04:25

編集2021/10/26 04:30

pythonの初学者です。
現在Python 3 エンジニア認定基礎試験を受けたいと思い勉強しています。
studyproの第一回試験の10問目にてどうしても理解が出来ず困っています。

次のような結果を得たい場合、コードの【A】の行に入る適切なものはどれか。なお【A】に入るものは、★aの行と同じ数の空白でインデントされている。

[実行結果] 2 is a prime number 3 is a prime number 4 equals 2*2 [コード] for n in range(2,10): for x in range(2,n): ...★a if n % x == 0: print(n,'equals',x,'*'n//x) break     【A】 print(n,'is a prime number')

解答はelse:のようですが、それ以前に処理がどのように行われているかが理解できていません。
for n in range(2,10):はnに2,3,4,5,6,7,8,9がひとつずつ入るということはわかりますが、
for x in range(2,n):に上の2が入った場合、2から2-1という意味でfor x in range(2,1):という処理を行う。という認識でいいのでしょうか?
と言いましてもfor x in range(2,1):が2/1だとすれば余りは0になると思ったのですが...
どのように考えたらいいのかわからず質問させていただきました。

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

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

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

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

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

y_waiwai

2021/10/26 04:28

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
yu2ke

2021/10/26 04:31

y_waiwai様 ご連絡いただきありがとうございました。 初めてで助かりました。
guest

回答2

0

ベストアンサー

range型の説明は公式ドキュメント 組込み型 rangeにあります。

少し分かりにくいかもしれないので説明します。

rangeは以下のように1個から3個の引数を取ります。

range(end)
range(start, stop)
range(start, stop, step)

range(end) は range(0, end, 1)と同じ意味です。
range(start, stop) は range(start, end, 1)と同じ意味です。

range(start, stop, step)は以下の動きをします。

stepが正なら、
最初に
(1) 内部の値tempをstartに設定する
呼ばれると
(2) tempがendよりも小さければtempを返し、自分の持っているtempにstepを加える。
(3) tempがend以上であれば「終わり」を返す。(実際は例外を出します)

stepが負なら、
最初に
(1) 内部の値tempをstartに設定する
呼ばれると
(2) tempがendよりも大きければtempを返し、自分の持っているtempにstepを加える。
(3) tempがend以下であれば「終わり」を返す。(実際は例外を出します)

このため、

range(2,2) これは range(2,2,1)と同じですが、
最初に
(1) 内部の値tempを2に設定する
呼ばれると
(2) tempが2よりも小さければtempを返し、自分の持っているtempにstepを加える。

なので、一度もtempを返すことなく(3)に進み、「終わり」を返します。

これが、range(2,2)のループ本体が一度も実行されない理由です。

投稿2021/10/26 05:16

ppaul

総合スコア24666

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

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

0

else は、forループが最後までbreakしないで終了したときに実行されるブロックです。

そう考えてコードを追っていけば理解できませんか


python

1for i in range(2,2): 2 print(i) 3 break; 4else: 5 print("else") 6

これを実行させると、
else
だけが表示されます

投稿2021/10/26 04:34

編集2021/10/26 04:43
y_waiwai

総合スコア87800

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

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

yu2ke

2021/10/26 04:38

そこの部分は理解できていると思いますが、for n in range(2,10):とfor x in range(2,n):がどのような処理を行っているかがわからなくて。
y_waiwai

2021/10/26 04:41

ああ、 for x in range(2,2): の場合はループは実行されませんね
yu2ke

2021/10/26 04:43

何故ループは実行されないのでしょうか?2/2が成り立つわけではないのでしょうか?
y_waiwai

2021/10/26 04:48

print(list(range(2,2))) は実行させると[] が出力されます for x in []: と同じ動作と思えばよろしいかと
y_waiwai

2021/10/26 04:59

print(list(range(3,2))) でも [] がでてきます。 これなら理解できるんでは
yu2ke

2021/10/26 05:01

私の理解力不足で申し訳ございません。 まずこの処理の一番最初はfor n in range(2,10):の(2,3,4,5,6,7,8,9)の2が for x in range(2,n):のnの部分に入り、次の処理は3がnの部分に入り、次の処理は4がnの部分に入り、breakになるわけでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問