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

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

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

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

Q&A

解決済

1回答

328閲覧

隣接するマスに置きたいがズレる

Untitled_Sample

総合スコア192

Python 3.x

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

0グッド

0クリップ

投稿2018/06/30 10:08

編集2018/06/30 10:11

l配列内に隣接場所にr配列を置きたいが、位置がズレる。

python

1 2 3#l=[['0' for _ in range(5)] for _ in range(5)] 4 5 6 7l=[ 8 ['0', '0', '0', '0', '0'], 9 ['0', 'A', '0', '0', '0'], 10 ['0', '0', '0', '0', '0'], 11 ['0', '0', '0', '0', '0'], 12 ['0', '0', '0', '0', '0']] 13 14 15r=[ 16 ['0', '0', '0'], 17 ['0', 'B', 'B'], 18 ['0', '0', '0']] 19 20# ブロックの中央座標から隣接マスの取得 21INDEX01=[] 22INDEX02=[] 23 24# ブロックの置ける中央座標を取得 25for k,v in enumerate(l): 26 if 'A' in v: 27 INDEX01.append([k,v.index('A')]) 28# ブロックの置ける周囲座標を取得 29INDEX02.append([[INDEX01[0][0]-1,INDEX01[0][1]-1],[INDEX01[0][0]-1,INDEX01[0][1]],[INDEX01[0][0]-1,INDEX01[0][1]+1],[INDEX01[0][0],INDEX01[0][1]-1],INDEX01[0],[INDEX01[0][0],INDEX01[0][1]+1],[INDEX01[0][0-1],INDEX01[0][1]-1],[INDEX01[0][0]+1,INDEX01[0][1]],[INDEX01[0][0]+1,INDEX01[0][1]+1]]) 30 31 32from pprint import pprint 33 34 35print(INDEX02) 36 37 38 39# x=座標x y=座標y z=埋め込む配列 Warehouse_Slot[][] 40def Sample_Demo01(x,y,z): 41 for i_r, i_l in enumerate(range(x, min((x+3, 9)))): 42 for j_r, j_l in enumerate(range(y, min((y+3, 9)))): 43 if l[j_l][i_l]=='0':l[j_l][i_l]=z[j_r][i_r] 44 else:pass 45 pprint(l) 46 47 48Sample_Demo01(2,2,r) 49

python

1# 想定される置かれる場所 常にココから選ぶ 2[[[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [1, 0], [2, 1], [2, 2]]] 3 4# 2 2に配置 5 6# 想定される場所に置いたが、Aと隣接してない。 7[['0', '0', '0', '0', '0'], 8 ['0', 'A', '0', '0', '0'], 9 ['0', '0', '0', '0', '0'], 10 ['0', '0', '0', 'B', 'B'], 11 ['0', '0', '0', '0', '0']]

この場合、どの用に対処すれば良いのでしょうか?

[2,2]を選んだ場合に
下記の用に対処したいです。

python

1 2 3l=[ 4 ['0', '0', '0', '0', '0'], 5 ['0', 'A', '0', '0', '0'], 6 ['0', '0', 'B', 'B', '0'], 7 ['0', '0', '0', '0', '0'], 8 ['0', '0', '0', '0', '0']] 9

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

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

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

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

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

guest

回答1

0

ベストアンサー

[2, 2]はrを置く始点として扱っておられるようですが、
そうではなくrを置く中心座標として扱いたいということでしょうか?

この理解で正しければ、置く位置の始点と終点をずらしてしまうのがラクそうです。
リスト外に出る可能性がありますが、その扱いは不明なのでとりあえず無視としています。
目的に合わせて適宜修正してください。

Python

1def Sample_Demo01(x, y, z): 2 for i_r, i_l in enumerate(range(x-1, x+2)): 3 for j_r, j_l in enumerate(range(y-1, y+2)): 4 try: 5 if l[j_l][i_l] == '0': 6 l[j_l][i_l] = z[j_r][i_r] 7 except IndexError: 8 pass 9 pprint(l)

min関数の意図はIndexErrorのケアだと理解したので、ここでは削除しています。違っていたらすみません。

投稿2018/07/01 09:04

shiron46

総合スコア111

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問