递归上的变量更改是否意外?

Leth0_

语境

我目前正在尝试Reddit的/ r / dailyprogrammer挑战

这个想法是找到ASCII迷宫的解决方案。不幸的是,递归的工作方式与我预期的不同。程序检查是否有空间可移动到当前空间的右侧,左侧,下方或上方。如果存在,则将空间移至该位置,并使用新的坐标再次输入该功能。这一直持续到找到结尾为止。

找到结尾时,程序退出。如果发现死角,则递归将返回到上一点,并检查是否有其他方向,这种情况将一直持续到结束为止。


问题

我的程序运行良好,但是即使备份了递归,迷宫也会画出我的线条(用“ *****”表示)。我不知道该怎么解释,所以我将使用图像进行更好的描述。

迷宫,颜色=新路径。

每种新颜色都代表一条新路径。但是,我希望仅显示当前的递归路径。例如,在这种情况下,我希望仅显示黄色路径。有人可以帮助我理解为什么仍然保留所有路径吗?


代码

import time
import sys
import os

maze = """\
###############
#S        #   #
### ### ### # #
#   #   #   # #
# ##### ##### #
#     #   #   #
# ### # ### ###
# #   # #   # #
# # ### # ### #
# # # # # #   #
### # # # # # #
#   #   # # # #
# ####### # # #
#           #E#
###############"""

def displayMaze(maze):
    os.system("cls")
    display = ""
    for x in maze:
        for y in x:
            display = display + y
        display = display + "\n"
    print(display)

def findStart(maze):
    #Get the maze start co-ords.
    for x in range(0,len(maze[0])):
        for y in range(0,len(maze)):
            if maze[x][y] == "S":
                return x,y

def findPath(x,y,maze):
    #Look right, left, up and down, If path then move.
        time.sleep(0)
        if maze[y][x+1] == " ":
            newMaze = maze
            newMaze[y][x+1] = "*"
            displayMaze(newMaze)
            findPath(x+1,y,newMaze)
        elif maze[y][x+1] == "E":
            sys.exit("Done")
        if maze[y][x-1] == " ":
            newMaze = maze
            newMaze[y][x-1] = "*"
            displayMaze(newMaze)
            findPath(x-1,y,newMaze)
        elif maze[y][x-1] == "E":
            sys.exit("Done")
        if maze[y+1][x] == " ":
            newMaze = maze
            newMaze[y+1][x] = "*"
            displayMaze(newMaze)
            findPath(x,y+1,newMaze)
        elif maze[y+1][x] == "E":
            sys.exit("Done")
        if maze[y-1][x] == " ":
            newMaze = maze
            newMaze[y-1][x] = "*"
            displayMaze(newMaze)
            findPath(x,y-1,newMaze)
        elif maze[y-1][x] == "E":
            sys.exit("Done")


if __name__ == "__main__":
    maze = maze.split("\n")
    newMaze = []
    for line in maze:
        newMaze.append(list(line))
    x,y = findStart(newMaze)
    findPath(x,y,newMaze)
布伦·巴恩

newMaze = maze不复制列表,它只是创建一个指向同一对象的名称。要复制,您应该import copy在程序的顶部,然后执行newMaze = copy.deepcopy(maze)(您需要深层复制,因为它maze是一个列表列表,因此不仅需要复制外部列表,还需要复制其中的所有列表。)

在Python中,分配给纯名称(如blah = ...)绝不会复制任何内容。如果要复制,则必须显式复制一个。这样做的方式取决于您要复制的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

变量在递归上意外更改?

来自分类Dev

变量的内容是否意外更改?

来自分类Dev

递归期间变量的值意外更改(MERGE SORT)

来自分类Dev

实例变量被意外更改

来自分类Dev

变量意外更改值

来自分类Dev

节俭生成变量意外更改

来自分类Dev

Ruby实例变量意外更改

来自分类Dev

C函数变量意外更改

来自分类Dev

对象成员变量的意外更改

来自分类Dev

Ruby实例变量意外更改

来自分类Dev

红宝石意外的变量分配/更改

来自分类Dev

MySQL本地变量值意外更改

来自分类Dev

涉及静态局部变量的递归函数中的意外输出

来自分类Dev

进行递归时无法更改变量

来自分类Dev

此递归函数如何更改“历史”变量?

来自分类Dev

SaveChanges 上的意外外键更改

来自分类Dev

意外地递归覆盖了/ var / lib上的权限

来自分类Dev

更改“滚动”上的PHP变量

来自分类Dev

变量在堆栈上是否连续?

来自分类Dev

线程调用栈中的变量意外更改c

来自分类Dev

递归函数的变量值在PHP中未更改

来自分类Dev

如何在递归宏中更改参数变量值?

来自分类Dev

如何在不更改变量的情况下递归

来自分类Dev

在递归调用中更改变量被认为是突变

来自分类Dev

递归调用Lotusscript函数时,局部变量是否独立?

来自分类Dev

递归方法是否允许创建相同名称的多个变量?

来自分类Dev

在导出扩展递归变量之前,它们是否进行扩展?

来自分类Dev

我对递归函数中变量如何工作的理解是否正确?

来自分类Dev

递归的python列表是否不会更改为其先前的值?