k01ken’s b10g

He110 W0r1d!

Pythonで二次元配列の任意の要素の周辺の値を足し合わせる

開発環境はWindows7 Professional(32bit) + ActivePython 2.7.10.12(Python 2.7.10)

二次元配列の任意の要素の周辺の値を足し合わせるプログラムを作ります。周辺の要素数は四隅であれば3つ、四隅以外の隅であれば5つ、それ以外は8つになります。
正しい値を入力すれば合計値を返し、間違った値を入力すれば、-1を返します。

任意の要素の左上から時計回りに足し合わせていきます。任意の要素が隅にあって、要素が存在しない場合は、足し合わせない仕組みになっています。

二次元配列arrとして、len(arr)とすると、列の数を指し、len(arr[0])だと、行の数を指します。

今回は5×5の二次元配列でやってみます。

# -*- coding:utf-8 -*-

# 配列のある箇所の周辺(最大8つ)の値を足した値を返す
def around(arr,y,x):
	result = 0
	arr = arr
	x = x
	y = y

	if check(arr,y,x) == -1:
		return -1

	if check(arr,y-1,x-1) != -1:
		result += arr[y-1][x-1]

	y = y-1
	x = x-1

	if check(arr,y,x+1) != -1:
		result += arr[y][x+1]

	x = x+1
	
	if check(arr,y,x+1) != -1:
		result += arr[y][x+1]
	
	x = x+1
	
	if check(arr,y+1,x) != -1:
		result += arr[y+1][x]
	
	y = y+1
	
	if check(arr,y+1,x) != -1:
		result += arr[y+1][x]
	y = y+1

	if check(arr,y,x-1) != -1:
		result += arr[y][x-1]
	x = x-1

	if check(arr,y,x-1) != -1:
		result += arr[y][x-1]

	x = x-1

	if check(arr,y-1,x) != -1:
		result += arr[y-1][x]

	return result

# 今チェックしている要素が『0』以上『配列の要素-1』の範囲内かチェックする
def check(arr,y,x):
	arr = arr
	x = x
	y = y

	if x < 0 or x > len(arr[0]) - 1 or y < 0 or y > len(arr) -1:
		return -1
	else:
		return 0


arr = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
print(around(arr,3,3))# 32