0

タイトルで述べたように、このコード pice の変数ドットは、変数にまったく触れずに、いくつかの論理ステートメントの後で None 値になります。コードからわかるように、"print dot" には 2 つの異なるステートメントがあります。私は実験を行いましたが、最初の実験では、以前に割り当てられたように "[(1,1,1),(1,1,1)..." という出力が得られました。ただし、2番目の出力は「なし」です。なぜこれが起こるのか、それを修正する方法があるかどうか誰かが教えてくれますか?

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

dotsに設定する責任がありますNone

2 番目の印刷物は既に印刷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

ドット = なしの行の直前にデバッグ ステートメントを配置してみましたか?

私はの線に沿って何かを試してみます

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 に答える