Python-08_静态方法_获取指定位置_方向_数量的元素

# 获取指定位置上的·某个方向·指定数量的元素。
# 变化特征              "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))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值