質問: ["i","j"] for i in range(1, 4): for j in ["a", "b"]: print(deck) ``` ### 試したこと 書籍等を調べましたが、見つけることが出来ませんでした。 ### 補足情報(FW/ツールのバージョンなど) ありません。
回答: 1の各行の後に何をしているかコメントを書いておきます。 ``` deck = []#deckという空のリストを準備 for i in range(1, 10):#iを1~10の順に繰り返す for j in ["S", "H", "D","C"]:#jをS,H,D,Cの順に繰り返す deck.append((i, j))#リストに(i,j)を加える print(deck)#forループ文iが終わったら、リストdeckを表示 ``` 1はまず、 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ループ文かを判断します。 2はprint(deck)のインデントが一番前に来ているので、Forループ文に組み込まれていません。 つまり、Pythonは 「『繰り返しなさい』とは命令されていますが、何を繰り返せばいいのか分かりません」 と言ってエラーを起こしています。 3は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を使いたければ""を外します。 しかしながら、 ``` deck = [i,j] for i in range(1, 4): for j in ["a", "b"]: print(deck) ``` とすると、「変数i,jに何を代入して良いか、わかりません」というエラーが発生します。 i,jという変数を使いたければ、まず、変数に何を入れるのかを命令してください。 なので、Forループ文の中にリストを組み込む必要があります。 ``` for i in range(1, 4): for j in ["a", "b"]: deck = [i,j] print(deck) ``` と書くと、表示結果は [1, 'a'] [1, 'b'] [2, 'a'] [2, 'b'] [3, 'a'] [3, 'b'] となります。deck.appendではないので、リストdeckに[i,j]を加えているのではなく、 リストdeckを毎回書き直して、表示している状態です。