> 文档中心 > 【趁热打铁】python基础综合练习(二)

【趁热打铁】python基础综合练习(二)


前一个购物车练习主要掌握重构的思想,今天的算法掌握降维的思想

2048游戏核心算法

【趁热打铁】python基础综合练习(二)

"""    2048 游戏核心算法    降维思想"""# 1.元素移至末尾# [2,0,2,0]-->[ 2,2,0,0]# [2,0,0,2]-->[2,2,0,0]# [2,4,0,2] -->[2,4,2,0]# [0,4,0,2] -->[4,2,00]list_merge = [0,2,2,0]def zero_to_end():    """ 零元素移至末尾    """    # 从后向前,如果发现零元素,删除并追加    # -1-2 -3 -4    for i in range(-1,-len(list_merge)-1,-1): if list_merge[i] == 0:     del list_merge[i]     list_merge.append(0)zero_to_end()print(list_merge)#[2, 2, 0, 0]# 2.将相同数字合并# [2,2,0,0]--> [4,0 ,0,0]# [2,0,0,2]--> [4,0,0,0]# [2,0,4,0]--> [2,4,0,0]# [2,2,2,2]--> [4,4,0,0]# [2,2,2,0]-->[4,2,0,0]def merge():    """ 合并    """    # 先将中问的零元素移到末尾    # 再合并相邻相同元素    zero_to_end()    for i in range(len(list_merge)-1): if list_merge[i] == list_merge[i+1]:     #将后一个累加前一个之上     list_merge[i] +=list_merge[i+1]     del list_merge[i+1]     list_merge.append(0)merge()print(list_merge)#[4, 0, 0, 0]#3.地图向左移动map = [    [2,0,0,2],    [4,4,2,2],    [2,4,0,4],    [0,0,2,2],]def move_left():    """ 向左移动    """    # 思想:将二维列表中每行交给merge函数进行操作    for line in map: global list_merge list_merge = line merge()move_left()print(map)#[[4, 0, 0, 0], [8, 4, 0, 0], [2, 8, 0, 0], [4, 0, 0, 0]]#4.地图向右移动map = [    [2,0,0,2],    [4,4,2,2],    [2,4,0,4],    [0,0,2,2],]def move_right():    """ 向右移动    """    # 思想:将二维列表中每行(从右向左)交给merge函数进行操作    for line in map: global list_merge # 从右向左取出数据形成新列表 list_merge = line[::-1] merge() # 从右向左接受合并后的数据 line[::-1] = list_mergemove_right()print(map)#[[0, 0, 0, 4], [0, 0, 8, 4], [0, 0, 2, 8], [0, 0, 0, 4]]#5:向上移动或者向下移动map = [    [2,0,0,2],    [4,4,2,2],    [2,4,0,4],    [0,0,2,2],]#提示:利用方阵转置函数def move_up():    square_matrix_transpose(map)    move_left()    square_matrix_transpose(map)def move_down():    square_matrix_transpose(map)    move_right()    square_matrix_transpose(map)def square_matrix_transpose(sqr_matrix):    """ 方阵转置    :param sqr_matrix:二维列表类型的方阵    """    for r in range(1, len(sqr_matrix)): for c in range(r, len(sqr_matrix)):     sqr_matrix[c][r - 1], sqr_matrix[r - 1][c] = sqr_matrix[r - 1][c], sqr_matrix[c][r - 1]move_up()print(map)#[[2, 8, 4, 4], [4, 0, 0, 4], [2, 0, 0, 2], [0, 0, 0, 0]]# move_down()# print(map)#[[0, 0, 0, 0], [2, 0, 0, 4], [4, 0, 0, 4], [2, 8, 4, 2]]

后移的内存图:
在这里插入图片描述