0) ①がやりたいことなんですが、②でエラー、③で意図せぬ結果が出てしまう理由が理解できません。
②のコードと③のコードは、forの範囲などが共通していますが、①のコードとはforの範囲が異なる、deck.appendは①にしかない等の相違があります。
そのため、②や③が、①と同じ動作することを意図して書かれたとは思えません。
ほんとに実現したい動作は、どのようなものなのでしょうか?
この回答が的外れだとしたら、どのように結果が出力されるプログラムを作ろうとしていらっしゃるのかを質問に書いてください。
1) ②はインデントの位置がおかしいということですが、①と同じように思えます。。
3つのコードは、どれもインデント(コードの先頭にスペース(空白文字)を入れて、コードの始まる位置を変えること。日本語では"字下げ"という)がされていません。①も②もインデントがされていないので(どちらも間違いなので)、同じように思えたとしても無意味です。
pythonはfor,ifなどの制御文の対象範囲をインデントの深さ(先頭のスペースの文字数)で指定するプログラム言語ですから、適切にインデントすることはプログラムを書く上で重要です。({}で囲まれた内部が対象範囲になるC言語などとは、かなり見た目が異なるプログラムになります)
①のコードを正しくインデントし、対象範囲についてのコメント(#の右側に書く)を付け加えたのが以下です。
Python
1deck = []
2for i in range(1, 10):
3 # ここから for i in range(1, 10)の対象範囲
4 for j in ["S", "H", "D"]:
5 # ここから for j in ["S", "H", "D"] の対象範囲
6 deck.append((i, j))
7
8# ここから forの対象範囲ではない
9print(deck)
そして、出力結果は以下のようになります。これが①のコードで期待しているものではないかと推測します。
[(1, 'S'), (1, 'H'), (1, 'D'), (2, 'S'), (2, 'H'), (2, 'D'), (3, 'S'), (3, 'H'), (3, 'D'), (4, 'S'), (4, 'H'), (4, 'D'), (5, 'S'), (5, 'H'), (5, 'D'), (6, 'S'), (6, 'H'), (6, 'D'), (7, 'S'), (7, 'H'), (7, 'D'), (8, 'S'), (8, 'H'), (8, 'D'), (9, 'S'), (9, 'H'), (9, 'D')]
2) また③に関しては、なぜ初めからdeckに引数を入れてはいけないのでしょうか?
③のコードを正しくインデントして、printでiとjの値も出力したコードとその出力結果を示します。
Python
1deck = ["i","j"]
2for i in range(1, 4):
3 for j in ["a", "b"]:
4 print(i,j,deck)
1 a ['i', 'j']
1 b ['i', 'j']
2 a ['i', 'j']
2 b ['i', 'j']
3 a ['i', 'j']
3 b ['i', 'j']
i,jの値を見ると、ちゃんと入れ子になったforが正しく実行されていることが分かります。
deckの値は、最初の行で設定しただけですから、何度printしても同じ値( ['i', 'j'])です。
プログラムのどこで値を設定すべきかは、プログラムで何がしたいのか次第ですから決まりはありません(決められません)。
2つの出力結果を比較すると、①のdeckは"整数と文字列のタプル"のリスト、③のdeckは文字列のリストです。
deckに初期値を設定するとかという問題ではなく、②、③と、①が全く違うプログラムだというところに問題(混乱)があるのではないでしょうか。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/12 23:41