-1

所以当我尝试运行它时,我在第二个 if 语句中得到 Invalid syntax,突出显示冒号。我不明白为什么会发生这种情况,据我所知,它们基本相同。那么为什么第二个 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

一个左括号太多,或者一个右括号太少。

您可以减少所有这些括号,以下就足够了:

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)rx只计算一次;您所要做的就是<=通过交换操作数来反转运算符。

请注意,很少True需要测试是否相等;只需从您的陈述中删除:== Trueif

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 回答