-1

したがって、これを実行しようとすると、2 番目の if ステートメントで無効な構文が表示され、コロンが強調表示されます。なぜこれが起こっているのかわかりませんが、私が見る限り、それらは基本的に同じです。では、なぜ 2 番目の if ステートメントは無効な構文を返すのに、最初の if ステートメントは返さないのでしょうか?

for event in pygame.event.get():
    if event.type == MOUSEBUTTONDOWN :           
        if ROption1Exists == True:
            rx, ry = event.pos
            if rx >= (100*((X+3)+1)) and rx <= (100*((X+3)+2)) and ry >= (100*(Y+1)) and ry <= (100*(Y+2)):
                print('babies')
                VarReset()
                Pos = ((X+3), Y)
        if ROption2Exists == True:
            rx, ry = event.pos
            if rx >= (100*((X-3)+1)) and rx <= (100*((X-3)+2)) and ry >= (100*((Y+1)) and ry <= (100*(Y+2)):
                print('babies')
                VarReset()
                Pos = ((X-3), Y)
4

2 に答える 2

3

括弧のバランスに問題があります:

if rx >= (100*((X-3)+1)) and rx <= (100*((X-3)+2)) and ry >= (100*((Y+1)) and ry <= (100*(Y+2)):
#        1    23   2  10           1    23   2  10           1    23   21           2    3   21
#                      ^ all closed              ^ all closed           ^ uhoh

左括弧が 1 つ多すぎるか、右括弧が 1 つ少なすぎます。

これらすべての括弧を少し減らすことができます。次で十分です。

if rx >= 100*(X-2) and rx <= 100*(X-1) and ry >= 100*(Y+1) and ry <= 100*(Y+2):

比較演算子を連鎖させることができます:

if 100*(X-1) >= rx >= 100*(X-2) and 100*(Y+2) >= ry >= 100*(Y+1):

where100*(X-1) >= rx >= 100*(X-2)は論理的には と同じです100*(X-1) >= rx and rx >= 100*(X-2)が、rx1 回だけ評価されます。<=オペランドを入れ替えて演算子を反転するだけでした。

と等しいかどうかのテストが必要になることTrueめったにないことに注意してください。ステートメント== Trueから削除するだけです:if

if ROption1Exists:
于 2013-09-14T17:39:28.837 に答える
0

括弧がありません:

if rx >= (100*((X-3)+1)) and rx <= (100*((X-3)+2)) and ry >= (100*((Y+1)) and ry <= (100*(Y+2)):
#                                                                       ^
#                                                                     HERE
于 2013-09-14T17:40:07.010 に答える