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

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

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

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

Q&A

解決済

3回答

514閲覧

for文の中にfor文を入れた場合

okahijiki

総合スコア404

Python 3.x

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

0グッド

0クリップ

投稿2020/03/29 06:47

for文の中にfor文を入れた場合、なぜ、以下のように出力されるのでしょうか。

python

1for i in range(2): 2 for j in range(2): 3 print(i,j)

0 0
0 1
1 0
1 1

◎参考:

python

1for i in range(2): 2 print(i)

0
1

python

1for j in range(2): 2 print(j)

0
1

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

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

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

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

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

guest

回答3

0

ベストアンサー

Python

1for i in range(2): # i = 0が初期値、i < 2まで繰り返し 2 for j in range(2): # j = 0が初期値、j < 2まで繰り返し 3 print(i,j)

Pythonのfor文は簡潔な書き方で見やすいけど、直感的に初期値や繰り返し条件が分かりづらいので
上記の通り、コメントで補足しました。
そのうえで、iとjの値の遷移を書いてみました、これで分かるかな?

1回目のprintではiとjは初期値の0のまま
2回目のprintではjのループの中の為、iは0のまま、jはインクリメントされ1になる
3回目のprintではiはjの繰り返し条件を満たさなくなった(j=2)為、jのループを抜けるので
インクリメントされ1になる、jは再び初期化され0になる
4回目のprintではjのループの中の為、iは1のまま、jはインクリメントされ1になる
5回目のprintはiとjどちらも繰り返し条件を満たさなくなる(i=2、j=2)為、iとjのループを抜け
実行されない為、そのまま終了する

投稿2020/03/30 10:02

kaina

総合スコア418

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

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

okahijiki

2020/03/30 23:44

お返事、おくれてしまいました。 jの中でループし、条件が合わなくなったら抜けて、iのループに戻るんですね。 おかげさまで、この点は、理解できました。 ぼくにとっては複雑なので、理解しやすいように、じぶんなりに引きつけてみますと、 for i in range(2): print(i) print('こんにちは') 0 こんにちは 1 こんにちは の一番目の「こんにちは」を、for j in range()に見立て、 そして(じっさいは、立て付けがまったく違うのですけれど)「こんにちは」 の中で、本件の値がループされているイメージとして、ととらえてみました。 で、分からなかった点は2つあり、 ひとつは、for j 内のループの繰り返し、条件に合わなくなったら、そのループの外に出て、for iがループされる動き、でした。おかげさまで、これは、クリアできました。 もうひとつの不明点、これは、いまだに気が晴れないのですけれど、 for i in range(2): print(i) print('こんにちは') にて、 なぜ、1[0],1[1]の値である0と1と、「こんにちは」(本件では「こんにちは」的なもの)が、それぞれ出力されるのかという点であります。うまく表現できなくで、すみません汗) 0 こんにちは 1 こんにちは もっとも、ぼくの勘違いにて、本件とは、まったく関係のないトピックかもしれませんけれど... 要は、本質問の分からなさは、いくつもの分からないことが、ゴチャゴチャと混ざり合っていることにある点が分かりました。ありがとうございますー。
kaina

2020/03/31 01:06

分からなかった点の2つ目がいまいち何が分からないのかはっきりしません。 for文の中で何故iやjが0から1に値が変化するかが分からないということでしょうか? であれば、それはfor文の基礎の基礎なのでPythonの教本か WebでPythonのfoir文について解説しているサイト等できちんと基礎学習を 行って下さい。 基礎学習せず、行き当たりばったりしても成長できません。
okahijiki

2020/03/31 01:14

コメント、ありがとうございます。range(2)にて、0、1の数値が出力されるのは、直感的に分かるのですが、なぜ「こんにちは」まで2回出力できてしまうのか、どうも、スッキリしないのでありますー。
kaina

2020/03/31 01:54

print関数は引数に指定された文字列を標準出力に対し、出力する関数です。 print(i)では実行時のiの中身がそのまま出力されます。 print('こんにちは')では「こんにちは」という固定文字列が指定されているだけなので、 「こんにちは」がそのまま出力されます。 2回出力されるのはfor文のループの中にprint('こんにちは')があるから for文の繰り返し条件(i < 2の間)を満たしている限り「こんにちは」が出力されます。
okahijiki

2020/03/31 02:11

ようやく理解できました。お手数をおかけしました。ありがとうございますー
guest

0

直接的な回答ではありませんが、実行されるコードを追うために、
デバッガで1行づつ変数の変化を確認しながら、ステップ実行してみるとわかりやすいのでは。

python tutor visualize のよるデモ

イメージ説明

使い方

  • 上記のリンクを開き(コードは入力済) 最初に "<<First" を押します
  • 次に "Next>" を押すと、コードが一行づつ実行されます
  • 実行された後、右下 Global frame で変数の中身変化を確認できます
  • 右上には print() の出力内容

投稿2020/03/29 11:51

teamikl

総合スコア8760

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

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

okahijiki

2020/03/29 12:08

ご回答、ありがとうございまーす。やってみました。動きますねぇ。しばしやってみて、理解に努めたいと存じます。
guest

0

ご自分でそのコードの動作を追いかけてみてください。
そのように出力されるように動くことがわかると思います

で、あなたはどのような出力になるとお思いでしょうか

投稿2020/03/29 06:53

y_waiwai

総合スコア88042

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

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

okahijiki

2020/03/29 07:29

理解への糸口、ありがとうございまーす! 数字にすると混乱するので、文字列で回してみました。以下のようになりました。 lst1=['a','b'] lst2=['c','d'] for i in lst1: for j in lst2: print(i,j) a c a d b c b d まずaを軸にc、dが組み合わさり、ac、adとなり、 次にbを軸に、c、dが組合わされ、bc、bdとなった、という感じでしょうか。 といっても、どうして、そうなったんでしょ...汗
okahijiki

2020/03/29 08:21

lst1のaが処理され、そのあとlst2のcとdが処理される。 そして次に、lst1の、まだ終わっていないbが処理され、同様にlst2の処理が続く...こういった感じでしょうか。
y_waiwai

2020/03/29 09:08

ちと考え方がちがいますね forループの動作を考えよう for j でjの繰り返し、を、for iで繰り返されると考えれば、わかる、かな?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問