不可变类型:
字符串、元组、固定集合、整数、浮点数、复数
可变类型:
列表、字典、集合
不可变类型的数据传参时,函数内部不会改变原数据的值;
可变类型的数据传参时,函数内部可能改变原数据的值。
如:对 列表、字典、集合等可变类型进行数据的增删改查时,对于一个函数方法,不需要返回值,原可变类型直接回发生变化
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]