# 获取指定位置上的·某个方向·指定数量的元素。
# 变化特征 "20" 右侧 0 1 (索引列r、行c、累加)
# 变化特征 "31" 上方 -1 0 (索引列r、行c、累加)
# 变化特征 "24" 左侧 0 -1 (索引列r、行c、累加)
# 变化特征 "03" 下方 1 0 (索引列r、行c、累加)
#
def get_elements(list_target,r_index,c_index,r_dir,c_dir,count):
"""
获取指定位置上的·某个方向·指定数量的元素。
:param list_target: list
:param r_index:列索引
:param c_index:行索引
:param r_dir:方向
:param c_dir:方向
:param count:次数--数量
:return:
"""
result = []
for item in range(count):
r_index += r_dir
c_index += c_dir
result.append(list_target[r_index][c_index])
return result
list01=[
["00","01","02","03","04"],
["10","11","12","13","14"],
["20","21","22","23","24"],
["30","31","32","33","34"],
["40","41","42","43","44"]
]
print(get_elements(list01,2,4,0,-1,3))
"""
该方式是:面向过程
缺点:
1.代码可读性差
2.每次调用方法,都需要思考方向(索引变化)的特征
"""
# 解决方法:
# 1.使用一个类,包装两个数据(行/列)
# 2.利用静态方法
class Vector2:
def __init__(self, x, y):
self.x = x
self.y = y
# def right(self):
# return Vector2(0,1)
# 静态方法:不依赖于对象、类
@staticmethod
def right():
return Vector2(0, 1)
@staticmethod
def up():
return Vector2(-1, 0)
@staticmethod
def down():
return Vector2(1, 0)
@staticmethod
def left():
return Vector2(0, -1)
def get_elements(list_target, vect_pos, vect_dir, count):
"""
获取指定位置上的·某个方向·指定数量的元素。
:param list_target: list
:param vect_pos:索引
:param vect_dir:方向
:param count:次数--数量
:return:
"""
result = []
for item in range(count):
vect_pos.x += vect_dir.x
vect_pos.y += vect_dir.y
result.append(list_target[vect_pos.x][vect_pos.y])
return result
list_student_message = [
["00", "01", "02", "03", "04"],
["10", "11", "12", "13", "14"],
["20", "21", "22", "23", "24"],
["30", "31", "32", "33", "34"],
["40", "41", "42", "43", "44"]
]
print(get_elements(list_student_message, Vector2(2, 0), Vector2.right(), 3))