我的Python迷宫生成程序似乎有问题。我正在尝试随机创建一条在选择点处分支的路径,并随其进行存储点。当迷宫走到尽头时,它将测试最高值,而不是将其弹出并转到下一个,从而对访问的点进行排序,直到到达不是死角的位置。但是,当我尝试将项目追加到我用来保存我曾经去过的空间的列表时,发生了一些奇怪的事情,实际上我从未见过。这是html" target="_blank">代码,查看该代码的最佳方法是将其运行一段时间,直到完全运行为止。我还没有真正找到解决死胡同问题的方法,所以如果有人也可以帮助我,那将很棒。
import random
width = 8
def check(x,y):
"""Figures out the directions that Gen can move while"""
if x-1 == -1:
maze[x][y][3] = 0
if x+1 == 8:
maze[x][y][1] = 0
if y+1 == 8:
maze[x][y][2] = 0
if y-1 == -1:
maze[x][y][0] = 0
if x + 1 in range(0,8) and visited[x+1][y] == False:
maze[x][y][1] = 2
if x - 1 in range(0,8) and visited[x-1][y] == False:
maze[x][y][3] = 2
if y + 1 in range(0,8) and visited[x][y+1] == False:
maze[x][y][2] = 2
if y - 1 in range(0,8) and visited[x][y-1] == False:
maze[x][y][0] = 2
def Gen(x,y):
visited[x][y] = True
past.append(current)
dirs = []
check(x,y)
print current
if maze[x][y][0] == 2:
dirs.append(0)
if maze[x][y][1] == 2:
dirs.append(1)
if maze[x][y][2] == 2:
dirs.append(2)
if maze[x][y][3] == 2:
dirs.append(3)
pos = random.choice(dirs)
print dirs
maze[x][y][pos] = 1
if pos == 0:
current[1] -= 1
if pos == 1:
current[0] += 1
if pos == 2:
current[1] += 1
if pos == 3:
current[0] -= 1
if maze[x][y][0] == 4:
maze[x][y][0] = 1
if maze[x][y][1] == 4:
maze[x][y][1] = 1
if maze[x][y][2] == 4:
maze[x][y][2] = 1
if maze[x][y][3] == 4:
maze[x][y][3] = 1
print maze[x][y]
print past, '\n'
#Build the initial values for the maze to be replaced later
maze = []
current = [0,0]
visited = []
past = []
#Generate empty 2d list with a value for each of the xy coordinates
for i in range(0,width):
maze.append([])
for q in range(0, width):
maze[i].append([])
for n in range(0, 4):
maze[i][q].append(4)
#Makes a list of falses for all the non visited places
for x in range(0, width):
visited.append([])
for y in range(0, width):
visited[x].append(False)
#Generates the walls
#for q in range(0, width):
# for i in range(0, width):
# check(q, i)
current = [0,0]
while current != [7,7]:
Gen(current[0], current[1])
print maze
如您所见,它从0,0开始,然后找出可能采取的路径。它从中随机选择,并将房间那侧的值设置为0,0到1,这意味着通过。2表示墙,0表示越界。4只是一个占位符,因为所有值都应在迷宫完全生成时填满。
如果有人可以帮助我,那将是巨大的,非常感谢。提前致谢。
我认为该current
列表只是多次复制到中past
。因此,您具有 同一 列表的多个副本。
解决方法:在该行past.append(current)
(在下面的两行中def Gen(x,y):
)将其更改为past.append(current[:])
。
该符号list[:]
创建列表的副本。从技术上讲,您正在创建整个列表的一部分。
顺便说一句,更好的解决方案是不使用全局current
变量:)
问题内容: 首先,对无法提供任何源代码表示歉意。我的项目很大,将所有内容链接起来都是不切实际的,而且我还无法缩小非常烦人的问题。我将尽力在这里进行解释。 我在代码的每个循环中动态创建类的新实例。在循环中会为该实例动态地提供几个属性,例如’name’。在每个循环的最后,新生成的实例将添加到另一个第3类中保存的ArrayList中。 但是,问题在于,无论出于何种原因添加新元素时,所有先前的元素都会更改
问题内容: 假设我有以下文件 我想将文档中具有代码“ efg”的所有元素的数量更改为0。我该怎么做?我应该对位置运算符使用循环吗? 问题答案: 最好的方法是匹配数组元素,并 使用 API 使用位置运算符分别进行更新。您真的不应该吹牛。
我正试图从网站上获取预订数据。进入现场后,我必须: 将默认日期范围(起初,网站显示默认日期范围的预订数据)更改为我想要搜索的日期范围 点击刷新按钮 等待网站更新页面上显示的结果。 使用Selenium、Python和BeautifulSoup,当我执行Selenium命令更新日期范围的字段并单击“刷新”按钮时,当代码到达我使用BeautifulSoup提取HTML数据的行时,将提取默认网站日期范围
问题内容: 我目前正在创建一个Node.js webscraper / proxy,但是在解析在源脚本部分中找到的相对Urls时遇到了麻烦,我发现REGEX可以解决问题。虽然不知道我将如何实现。 反正有什么我可以解决的吗? 另外,我愿意采取一种更简单的方法来执行此操作,因为我对其他代理如何解析网站感到困惑。我认为大多数只是赞美的网站抓取工具,可以读取网站的来源,将所有链接/表格中继回代理。 问题答
问题内容: 如何更改元素的内容(在这种情况下为变量“ make”中的元素)而不丢失内容?如果您可以指出其他可以修改现有xml文档的纯python模块,请告诉我。 PS!BeautifulSoup非常适合HTML和XML的屏幕抓图和解析! 问题答案: 请查看上的文档。这有效:
问题内容: 我正在尝试切换两个元素,因此如果单击一个元素,它将删除my-class的所有引用并将其应用于自身。有任何想法吗? 干杯! 问题答案: 创建一个名为selectedIndex的范围属性,以及一个itemClicked函数: 然后,我的模板将如下所示: 仅供参考,$ index是ng-repeat指令中可用的不可思议的变量。 您也可以在指令和模板中使用相同的示例。 这是一个工作的plnkr