python方法打破了cod

2024-04-26 03:51:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经写了一些代码,我想转换成我可以导入的东西,而不是被用作主要的。你知道吗

floorMap = [[000,000,000,000,000,999,999,999,999,999],
           [000,000,999,000,999,000,000,000,999,999],
           [000,000,999,000,999,000,000,000,999,999],
           [000,000,000,000,999,000,000,000,999,999],
           [999,000,000,000,999,000,999,999,999,999],
           [999,000,000,000,000,000,999,000,000,999],
           [999,000,000,000,999,999,999,000,000,999],
           [999,000,999,000,000,000,999,000,000,999],
           [999,000,999,999,999,000,000,000,000,999],
           [999,999,999,999,999,999,999,999,000,000]]


currentNum=0

wall=999
uncalculated=000

robotX=0
robotY=0
goalX=9
goalY=9

floorMap[goalY][goalX]=1

def changeSurroundings(X, Y):

        #left
        if(floorMap[X-1][Y]==uncalculated and X > 0):
            floorMap[X-1][Y]=currentNum   
        #right 
        if(X < len(floorMap[0])-1 and floorMap[X+1][Y]==uncalculated):
            floorMap[X+1][Y]=currentNum  
        #up
        if(floorMap[X][Y-1]==uncalculated and Y > 0):
            floorMap[X][Y-1]=currentNum  
        #down
        if(Y < len(floorMap)-1 and floorMap[X][Y+1]==uncalculated):
            floorMap[X][Y+1]=currentNum    


def printMap():
    i=0
    floorMap[goalY][goalX]='G'
    floorMap[robotY][robotX]='R'

    while(i<len(floorMap)):
        print floorMap[i]
        print ""
        i+=1
    print ""
    print ""

#------------------MOST IMPORTANT CHUNK OF CODE--------------

while(floorMap[robotY][robotX]==uncalculated):
    x=0
    while(x<len(floorMap[0])):
        y=0
        while(y<len(floorMap)):
            if(floorMap[x][y] > uncalculated and floorMap[x][y] < wall):
                currentNum=floorMap[x][y]+1
                changeSurroundings(x,y)                                
            y+=1
        x+=1

printMap()

我的问题是,每当我试图将最重要的代码块放在下面的方法中时,就像这样

def calcMap():  
while(floorMap[robotY][robotX]==uncalculated):
    x=0
    while(x<len(floorMap[0])):
        y=0
        while(y<len(floorMap)):
            if(floorMap[x][y] > uncalculated and floorMap[x][y] < wall):
                currentNum=floorMap[x][y]+1
                changeSurroundings(x,y)                                
            y+=1
        x+=1

printMap()

它破坏了我的密码。为什么?我似乎没有得到任何错误,它只是停留在一个嵌套的循环。我看不出它有什么理由这么做,但你们可能会;)

谢谢,洛根


Tags: andlenifdefprintwallwhilecurrentnum
1条回答
网友
1楼 · 发布于 2024-04-26 03:51:28

你的问题来自你的全局变量,特别是currentNum。基本上你就是这么做的:

current = 0

def f():
    current = 1
    g()

def g():
    print(current)

f()  # Output: 0

你需要做的是:

current = 0

def f():
    global current
    current = 1
    g()

def g():
    print(current)

f()  # Output: 1

或更好:

def f():
    current = 1
    g(current)

def g(current):
    print(current)

f()  # Output: 1

此外,您应该考虑为calcMap函数使用更具pythonic的synthax,例如:

def calc_map(): 
    while floor_map[robot_x][robot_y] == uncalculated :
        for x,array in enumerate(floor_map):
            for y,element in enumerate(array):
                if uncalculated < element < wall:
                    current_num = element + 1
                    change_surroundings(x, y, current_num) 

相关问题 更多 >