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