正如我在标题中所说,此代码中的变量点在某些逻辑语句之后变为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
答案 0 :(得分:8)
我的猜测是该行
dots = None
负责将dots
设置为None
。
由于您的第二次打印已经打印None
,这意味着(0,0)
的第一个颜色不匹配
if color.r > 250 and color.g < 70 and color.b < 80:
删除最外面的其他分支或仅使用dots = None
替换行pass
会使点不是None
值。
答案 1 :(得分:0)
您是否尝试在行dot = 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