0

正如我在标题中所说的,这段代码中的变量点在一些逻辑语句之后变成了 None 值,根本没有触及变量。正如您在代码中看到的,有两种不同的“打印点”语句。我已经进行了实验,第一个实验给出了之前分配的输出“[(1,1,1),(1,1,1)..."。但是第二个给了我输出“无”。有人可以告诉我为什么会发生这种情况以及是否有任何方法可以纠正它?

def detectDots(surface):
   dots = [(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1)]
   print dots
   for y in range(0,480):
       for x in range(0,640):
            color = surface.get_at((x,y))
            if color.r > 250 and color.g < 70 and color.b < 80:
                inDots = True
                notInDots = []
                for i in range(0,8):
                    print dots
                    if math.sqrt((abs(x - dots[i][0])*abs(x - dots[i][0]))+(abs(y - dots[i][1])*abs(y - dots[i][1]))) < 20:
                        dots[i] = (((dots[i][0]*dots[i][2]+x)/(dots[i][2]+1)),((dots[i][1]*dots[i][2]+y)/(dots[i][2]+1)),(dots[i][2]+1))
                    else:
                        notInDots.append(i)
                        inDots = False
            else:
                dots = None
4

2 回答 2

8

我的猜测是这条线

dots = None

负责设置dotsNone.

由于您的第二个打印件已经打印None,这意味着第一个颜色(0,0)不匹配

if color.r > 250 and color.g < 70 and color.b < 80:

删除最外面的 else 分支或仅将行替换为dots = None将使pass点成为非None值。

于 2012-05-09T19:57:18.317 回答
0

您是否尝试过在 dots = None 行之前放置一个调试语句?

我会尝试一些类似的东西

import code
code.interact(local=locals(),banner="Check dots = None")

紧接在您的行之前

dots = None

然后您可以查看哪个表面位置不满足您的 r,g,b 条件,并验证您是否正确读取了 r,g,b 值。

这是一个博客链接(不是我的),它解释了如何使用一些 Python 调试工具 http://aymanh.com/python-debugging-techniques#launching-an-interactive-console-with-codeinteract

于 2012-05-09T21:14:26.230 回答