イタリックテキスト### 前提・実現したいこと
プログラミング初学者です。pythonの勉強をしています。
整数nを入力し、以下のような交互の羅列を作りたいと考えています。
(例:n=3の時)
[[0, 0.5, 0],
[0.5, 1, 0.5],
[0, 0.5, 0]]
(例:n=4の時)
[[0, 0.5, 0, 0.5],
[0.5, 1, 0.5, 1],
[0, 0.5, 0, 0.5],
[0.5, 1, 0.5, 1]]
つまり、[0と0.5が交互にn回出てくる配列]と、[0.5と1が交互にn回出てくる配列]が、それぞれn回繰り返される配列、を作りたいです。
以下の私の記述では、何が問題となっているのか教えていただけますでしょうか。
発生している問題・エラーメッセージ
python
1def ex5_4(x): 2 test = [0] * x 3 for i in range(0, x): 4 if i % 2 == 0: 5 test[i] = 0 6 else: 7 test[i] = 0.5
などとすることで[0と0.5が交互にn回出てくる配列]もしくは[0.5と1が交互にn回出てくる配列]は作れたのだが、
それらが繰り返し出てくる配列を作れない。
該当のソースコード
python
1def ex5_4(x): 2 test = [0] * x 3 for i in range(0, x): 4 if i % 2 == 0: 5 test[i] = 0 6 else: 7 test[i] = 0.5 8 test = [test] * x 9 for j in range(0, x): 10 if j % 2 != 0: 11 for k in range(0, x): 12 if k % 2 == 0: 13 test[j][k] = 0.5 14 else: 15 test[j][k] = 1 16 return test
試したこと
この状態では
ex5_4(4)
[[0.5, 1, 0.5, 1], [0.5, 1, 0.5, 1], [0.5, 1, 0.5, 1], [0.5, 1, 0.5, 1]]
という結果がかえって来てしまいます。
jに問題があるのかと考え、
python
1def ex5_4(x): 2 test = [0] * x 3 for i in range(0, x): 4 if i % 2 == 0: 5 test[i] = 0 6 else: 7 test[i] = 0.5 8 test = [test] * x 9 for j in range(0, x): 10 if j % 2 != 0: 11 for k in range(0, x): 12 if k % 2 == 0: 13 test[0][k] = 0.5 14 else: 15 test[0][k] = 1 16 return test
以上のようにjが関わってこない記述に改めたのですが、これでも
ex5_4(4)
[[0.5, 1, 0.5, 1], [0.5, 1, 0.5, 1], [0.5, 1, 0.5, 1], [0.5, 1, 0.5, 1]]
と、なぜか全ての配列が変わってしまいます。
補足情報(FW/ツールのバージョンなど)
anaconda3のidleというものを使っています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/23 05:49