①の各行の後に何をしているかコメントを書いておきます。
Python
1deck = []#deckという空のリストを準備
2for i in range(1, 10):#iを1~10の順に繰り返す
3 for j in ["S", "H", "D","C"]:#jをS,H,D,Cの順に繰り返す
4 deck.append((i, j))#リストに(i,j)を加える
5print(deck)#forループ文iが終わったら、リストdeckを表示
①はまず、
i=1、j=Sなので、(1,S)をリストに加える。
i=1、j=Hなので、(1,H)をリストに加える。
i=1、j=Dなので、(1,D)をリストに加える。
i=1、j=Cなので、(1,C)をリストに加える。
と繰り返されて、そのあと、
i=2、j=Sなので、(2,S)をリストに加える。
i=2、j=Hなので、(2,H)をリストに加える。
i=2、j=Dなので、(2,D)をリストに加える。
i=2、j=Cなので、(2,C)をリストに加える。
とiが順番に増えていきます。
そして、i=9、j=Cまでリストに加えて、
最後にリストdeckを表示しています。
Pythonはインデント(字下げ)でどこまでがForループ文かを判断します。
②はprint(deck)のインデントが一番前に来ているので、Forループ文に組み込まれていません。
つまり、Pythonは
「『繰り返しなさい』とは命令されていますが、何を繰り返せばいいのか分かりません」
と言ってエラーを起こしています。
③はprint(deck)のインデントが2つ後ろに来ているので、Forループ文(j)に組み込まれています。
しかし、deck.append((i, j))という行を抜かすと、リストには新しく何も加えられないので、
最初に設定したdeck = ["i","j"]がprintされることになります。
i=1、j=a、のとき、リストdeckを表示
i=1、j=b、のとき、リストdeckを表示
i=2、j=a、のとき、リストdeckを表示
i=2、j=b、のとき、リストdeckを表示
i=3、j=a、のとき、リストdeckを表示
i=3、j=b、のとき、リストdeckを表示
と計6回リストdeckが表示されています。
ちなみに、最初に設定したdeck = ["i","j"]は""の中にiとjを書いているので、
変数ではなく文字として認識されています。
変数としてi,jを使いたければ""を外します。
しかしながら、
Python
1deck = [i,j]
2for i in range(1, 4):
3 for j in ["a", "b"]:
4 print(deck)
とすると、「変数i,jに何を代入して良いか、わかりません」というエラーが発生します。
i,jという変数を使いたければ、まず、変数に何を入れるのかを命令してください。
なので、Forループ文の中にリストを組み込む必要があります。
Python
1for i in range(1, 4):
2 for j in ["a", "b"]:
3 deck = [i,j]
4 print(deck)
と書くと、表示結果は
[1, 'a']
[1, 'b']
[2, 'a']
[2, 'b']
[3, 'a']
[3, 'b']
となります。deck.appendではないので、リストdeckに[i,j]を加えているのではなく、
リストdeckを毎回書き直して、表示している状態です。
2018/02/13 14:56