首页 > 解决方案 > Python 函数中不相关的变量更改

问题描述

我目前正在用python开发一个游戏,并做了一个功能来检查是否可以进行移动,但是每次我运行功能时,源变量“Xlist”都会改变。

功能:

def testIfPossible(key, Xlist):
    print(Xlist, '\n')
    print(move(key, Xlist), '\n')
    print(Xlist, '\n')

    if Xlist==move(key, Xlist):
        return False
    return True

我在这段代码中使用的另一个函数:

def move(key, lst):
if key=='down arrow':
    for _ in range(lenY*lenX):
        for y in range(lenY):
            for x in range(lenX):                               # Basically just moves evrery element to the bottom
                with suppress(IndexError):
                    if lst[y+1][x]==lst[y][x] and lst[y][x]!=0:
                        lst[y+1][x]=lst[y][x]*2; lst[y][x]=0

                    elif lst[y][x] != 0 and lst[y+1][x]==0:
                        lst[y+1][x]=lst[y][x]; lst[y][x]=0       

    del x, y
    return lst

elif key=='up arrow':
    for _ in range(lenY*lenX):
        for y in range(lenY):
            for x in range(lenX):
                with suppress(IndexError):
                    if y!=0:
                        if lst[y-1][x]==lst[y][x] and lst[y][x]!=0:
                            lst[y-1][x]=lst[y][x]*2; lst[y][x]=0

                        elif lst[y][x] != 0 and lst[y-1][x]==0:
                            lst[y-1][x]=lst[y][x]; lst[y][x]=0

    del x, y
    return lst

elif key=='right arrow':
    for _ in range(lenY*lenX):
        for y in range(lenY):
            for x in range(lenX):
                with suppress(IndexError):
                    if lst[y][x+1]==lst[y][x] and lst[y][x]!=0: 
                        lst[y][x+1]=lst[y][x]*2; lst[y][x]=0

                    elif lst[y][x] != 0 and lst[y][x+1]==0:
                        lst[y][x+1]=lst[y][x]; lst[y][x]=0
    del x, y
    return lst

elif key=='left arrow':
    for _ in range(lenY*lenX):
        for y in range(lenY):
            for x in range(lenX):
                with suppress(IndexError):
                    if x!=0:
                        if lst[y][x-1]==lst[y][x] and lst[y][x]!=0:
                            lst[y][x-1]=lst[y][x]*2; lst[y][x]=0

                        elif lst[y][x] != 0 and lst[y][x-1]==0:
                            lst[y][x-1]=lst[y][x]; lst[y][x]=0
    del x, y
    return lst

else:
    print('No match for: ',key)
    return lst

Xlist 的列表语法:

例如

[[0, 8, 0], [4, 0, 0], [2, 0, 4]]

我做错了什么?感谢安万斯!

(我没有把整个代码放在这个问题中,因为它很长而且stackoverflow并没有真正接受它)

标签: pythonpython-3.xfunctionvariablespython-3.9

解决方案


推荐阅读