Python-05_2048游戏控制方法分解

本文探讨了Python中的不可变类型,如字符串、元组和整数,以及可变类型,如列表、字典和集合。在函数调用中,不可变类型的数据不会被修改,而可变类型的数据可能会在函数内部发生变化,直接影响原数据。对于可变类型的列表、字典和集合,即使函数不返回值,它们在方法调用后也会直接更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不可变类型:

字符串、元组、固定集合、整数、浮点数、复数

可变类型:

            列表、字典、集合

不可变类型的数据传参时,函数内部不会改变原数据的值;

可变类型的数据传参时,函数内部可能改变原数据的值。

如:对 列表、字典、集合等可变类型进行数据的增删改查时,对于一个函数方法,不需要返回值,原可变类型直接回发生变化

1------定义函数,将列表中0元素,移动到末尾。
2------合并相同(不相邻也可以)元素,并将0元素移动到后面
3------在控制台中绘制2048地图的函数(将给定列表,按矩阵形式,输出到控制台)
4------将控制台中绘制的矩阵数字,向上进行移动,第2步操作,然后重新赋值回给原位置
5------将控制台中绘制的矩阵数字,向左进行移动,第2步操作,然后重新赋值回给原位置
6------将控制台中绘制的矩阵数字,向下进行移动,第2步操作,然后重新赋值回给原位置
7------将控制台中绘制的矩阵数字,向中进行移动,第2步操作,然后重新赋值回给原位置
# 1
def zero_to_end(list_target):
    """
    将列表中的0元素,移动到列表后面
    :param list_target: 列表
    :return:
    """
    new_list = [item for item in list_target if item != 0]
    new_list += [0] * list_target.count(0)
    list_target[:] = new_list[:]
# 2
def merge_same_elements(list_target):
    """
    合并列表中相同(不相邻也可以)元素,并将0元素移动到后面
    :param list_target: 需要处理的列表
    :return:
    """
    zero_to_end(list_target)
    for i in range(len(list_target) - 1):
        # 如果相邻元素相同,且当前元素不为零,则进行下列操作
        if list_target[i] != 0 and list_target[i] == list_target[i + 1]:
            list_target[i] *= 2
            list_target[i + 1] = 0
    zero_to_end(list_target)
# 3
def print_atlas(list_atlas):
    """
    将给定列表,按矩阵形式,输出到控制台
    :param list_atlas:
    :return:
    """
    for r in range(len(list_atlas)):
        for c in range(len(list_atlas[r])):
            print(list_atlas[r][c], end=" ")
        print()
# 4
def move_up(list_atlas):
    """
    向上移动,并合并,将0值移动到下
    :param list_atlas:
    :return:
    """
    for c in range(len(list_atlas)):
        list_r = [list_atlas[r][c] for r in range(len(list_atlas))]
        merge_same_elements(list_r)
        for r in range(len(list_atlas)):
            list_atlas[r][c] = list_r[r]
# 5
def move_left(list_atlas):
    """
    向左移动,并合并,将0值移动到右
    :param list_atlas:
    :return:
    """
    for r in range(len(list_atlas)):
        merge_same_elements(list_atlas[r])
# 6
def move_down(list_atlas):
    """
    向下移动,并合并,将0值移动到上
    :param list_atlas:
    :return:
    """
    for c in range(len(list_atlas)):
        list_r = [list_atlas[r][c] for r in range(len(list_atlas) - 1, -1, -1)]
        merge_same_elements(list_r)
        for r in range(len(list_atlas)):
            list_atlas[r][c] = list_r[len(list_atlas) - 1 - r]
# 7
def move_right(list_atlas):
    """
    向右移动,并合并,将0值移动到左
    :param list_atlas:
    :return:
    """
    for r in range(len(list_atlas)):
        list_r = [list_atlas[r][c] for c in range(len(list_atlas) - 1, -1, -1)]
        merge_same_elements(list_r)
        for c in range(len(list_atlas) - 1, -1, -1):
            list_atlas[r][c] = list_r[len(list_atlas) - 1 - c]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值