0
作为练习,作为一个更复杂,更大的项目的先驱,我记住,我已经使用Turtle模块创建了一个随机行走脚本。我意识到有更简单的方法来做随机游走而无需找到相邻的坐标,但据我所知,这对于较大的实现是必要的。随机行走问题(逃逸递归)
我遇到的问题是,当python发现它已经访问了getnext()
函数中的每个相邻单元时,它正在达到其最大递归深度。我不确定我会如何逃脱那个循环,并且如果发生这种情况,将继续照常进行。
import turtle
import random
class cell(object):
def __init__(self, pos, visited = False):
self.xCoord = pos[0]
self.yCoord = pos[1]
self.visited = visited
self.neigh = []
self.neighbors = self.getneighbors()
def getneighbors(self):
for j in (-1, 0, 1):
for i in (-1, 0, 1):
self.neigh.append((self.xCoord+i, self.yCoord+j))
def getnext():
nextindex = random.randint(0, len(c.neigh)-1)
nextcoordt = c.neigh[nextindex]
nextcoord = list(c.neigh[nextindex])
if nextcoordt in coords:
getnext()
else:
turtle.goto(nextcoord[0], nextcoord[1])
coords = {}
turtle.setup(width =200, height = 200, startx = 0, starty = 0)
turtle.trace = False
for i in range(1000):
c = cell(list(turtle.pos()))
coords[turtle.pos()] = (c)
getnext()
此外,这实际上是我的第一个真正的应用程序的OOP,我想知道这是否是一个很好的方式来使用它。
非常感谢!
谢谢您的回答。我使用单元类的理由是,我正在尝试制作一个基本的绘图机器人,它会在图像文件中追踪一条可能弯曲的路径,该路径没有设定的宽度。例如在白色背景上的填充黑色圆圈。我的意图是获取每个当前坐标相邻者的颜色值,并根据颜色移动到给定坐标。因此,我认为可以很容易地创建一个具有颜色属性的类,当然我还没有添加它......我的方法是否远程正确/可行?哈哈 – danem 2011-05-01 03:23:50
这听起来有点像[区域种植](https://secure.wikimedia.org/wikipedia/en/wiki/Region_growing),你可以在图像编辑软件中找到它。您选择一个初始种子像素,然后通过选择与您的种子颜色相同或相似的相邻像素(在某个阈值内)来增大选择范围。这通常是通过扫描所有相邻的像素来完成的,但我没有看到为什么你无法将颜色的权重合并到随机游走中。 – samplebias 2011-05-01 03:33:31
当你说“但我看不出为什么你不能在你的随机游走中加入一些颜色的权重”时,你的意思是我写的还是你的版本?我打算最终这样做,但我希望首先获得基本的功能。我有困难抓住的概念是,如果我确实使用OOP,并且我有一个具有颜色属性的类,那么这意味着在每一步我需要声明5(或9,如果我包括对角线)对象?对于我认为可以通过程序完成的数据结构,我还不够精通。谢谢您的帮助。 – danem 2011-05-01 03:46:58