If语句的语法错误无效

时间:2013-09-14 17:36:04

标签: python if-statement

所以当我尝试运行它时,我会在第二个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)

2 个答案:

答案 0 :(得分: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

你有一个开括号太多,或者一个右括号太少。

你可以在所有这些括号上减少一点,以下就足够了:

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

你可以chain the comparison operators

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

其中100*(X-1) >= rx >= 100*(X-2)在逻辑上与100*(X-1) >= rx and rx >= 100*(X-2)相同,但rx仅评估一次;您所要做的就是通过交换操作数来反转<=运算符。

请注意,对True的相等性进行测试很少需要;只需从== True语句中删除if

if ROption1Exists:

答案 1 :(得分:0)

你错过了一个括号:

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