下記のコードの構造が理解できません。
range(len(x))は、xの中に入っている数字の個数を数えた数字を0から代入していっているのはわかります。
ほかにもいろいろな個数の組み合わせで試したのですが全く理解できません。
python
1x=[1,2] 2y=[3,4,5] 3for i in range(len(x)): 4 for p in range(len(y)): 5 d=i+p 6 print(d)
実行結果
0
1
2
1
2
3
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
どこがどう分らないのか分かりませんが…
デバッグとかも同様ですが、その時点の変数の値が何であるかをよく観察したら動作が理解できる事が多いです。
以下のように変数をプリントするのが一番手っ取り早いです。
python
1x=[1,2] 2y=[3,4,5] 3for i in range(len(x)): 4 for p in range(len(y)): 5 d=i+p 6 print(f"{i=}\n{p=}\n{d=}\n---")
output
1i=0 2p=0 3d=0 4--- 5i=0 6p=1 7d=1 8--- 9i=0 10p=2 11d=2 12--- 13i=1 14p=0 15d=1 16--- 17i=1 18p=1 19d=2 20--- 21i=1 22p=2 23d=3 24---
追記
あっと・・・
print(f"{i=}\n{p=}\n{d=}\n---")
はpython3.8以降じゃないと動かない気がします。
print(f"i={i}\np={p}\nd={d}\n---")
と書くと、3.6以降なら動くと思います。
それ以前は別の書き方になりますが省略します(勉強していないので正しく書ける自信無しw)
投稿2021/09/03 13:22
編集2021/09/03 13:37総合スコア657
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
多分ですけど、もしかして「ロジックの読み方がわからない」ってことですかね?
コードを読みましょう。
コードを読むコツは、「一行レベルで、何をしているかを考えながら読む」ですね。
たとえばコメントにするとかです。
今回の場合、
# リスト x を用意し, { 1, 2 } を入れる x=[1,2] # リスト y を用意し, { 3, 4, 5 } を入れる y=[3,4,5] # xにある個数分(= 2) ループしながら i にセットする for i in range(len(x)): # yにある個数分(= 3) ループしながら p にセットする for p in range(len(y)): # d は i + p したものである d=i+p # とりま、表示 print(d)
ですね。
これを日本語でも英語でもなんでもいいので、自分が読み書きできる言語で書き下す。
1. リスト x を用意して { 1, 2 } を入れる 2. リスト y を用意して { 3, 4, 5 } を入れる 3. x の長さ分ループしながら i にセット 3.1. y の長さ分ループしながら p にセット 3.1.1. d は i + p したものである 3.1.2. dの値を表示
これを疑似コードとします。
この疑似コードを現実世界でシミュレーションしてみてください。
つまり、手作業で、たとえば算数や数学とかをやるような感じでやってみてください。
こういう場合は変数やリストの値を意識するといいです。
(1), (2) は定義なのでスルー。(注目してもわかりきっていることなので)
(3)からが勝負です。
xの長さは何でしょうか。今回ははっきりと { 1, 2 } の 二個しかないので 要素数 = 2 となる。
なので、range( 0, 2 ) と同じになる。(今回の場合)
つまり、0~1 ですね。
最初は 0から開始しているので i = 0 となる。
同じように(3.1)も yの長さは 3 なので range( 0, 3 ) と同じになる。
よって p = 0 となる。
で、
x = { 1, 2 } y = { 3, 4, 5 } i = 0 p = 0
となっています。
で、(3.1.1) で d = i + p をします。
i + p = 0 + 0 = 0
となり、d = 0 となる。
で、さらに(3.1)に戻って、pを進ませたもの、つまり p = 1 となる。
(入れ子のforだと、内側から処理されていくので)
よって、
x = { 1, 2 } y = { 3, 4, 5 } i = 0 p = 1
で、d = i + p なので、
i + p = 0 + 1 = 1
となる。
さらに (3.1)に戻って、p を進ませる。つまり p = 2。
d = i + p を計算するので、d = 2。
で、(3.1)に戻ろうとしますが、条件は満たさない(もう要素数分やったので)ので、
このループから抜けます。
でもまだ (3)のループ内にあるので、(3)に戻る。
そうすると、(3)に戻って i を進ませる。そう、i = 1。
で、また(3.1)に行って p = 0 の状態からスタート。
よって、
x = { 1, 2 } y = { 3, 4, 5 } i = 1 p = 0 d = i + p ↓ i + p = 1 + 0 = 1
で、同じように 三回 (3.1)を繰り返して、(3)に戻り……とやります。
なので、質問にあるような結果になるのです。
投稿2021/09/03 14:46
総合スコア4962
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/03 15:05
2021/09/03 16:05
2021/09/04 00:13
2021/09/04 00:43
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。