<p>您应该将相互排斥的可能性与<code>if-else</code>语句结合起来。我的第一个倾向是在假设连续调用不会返回不同值的情况下,使用以下方法对<code>ball.ycor()</code>和<code>ball.xcor()</code>进行一次评估:</p>
<pre><code>x_coor = ball.xcor()
y_coor = ball.ycor()
</code></pre>
<p>但是我注意到表达式<code>ball.ycoor *= -1</code>,它表明这可能会影响后续调用<code>ball.ycor()</code>的返回值。因此,我决定不尝试优化这些调用:</p>
<pre><code>if ball.ycor() > 340:
ball.sety(340)
ball.ycoor *= -1
elif ball.ycor() < -340:
ball.sety(-340)
ball.ycoor *= -1
if ball.xcor() > 490:
ball.goto(0,0)
ball.xcoor *= -1
scoreboard_a += 1
score.clear()
score.write("{} {}".format(scoreboard_a,scoreboard_b), font=("Arial",104,"normal"))
elif ball.xcor() < -490:
ball.goto(0,0)
ball.xcoor *= -1
scoreboard_b += 1
score.clear()
score.write("{} {}".format(scoreboard_a,scoreboard_b), font=("Arial",104,"normal"))
elif (-450 < ball.xcor() < -440) and ball.ycor() > block_a.ycor() - 40 and ball.ycor() < block_a.ycor() + 40:
ball.setx(-440)
ball.xcoor *= -1
elif (440 < ball.xcor() < 450) and ball.ycor() < block_b.ycor() + 40 and ball.ycor() > block_b.ycor() - 40:
ball.setx(440)
ball.xcoor *= -1
</code></pre>
<p>注意<code>if x > y and x < z:</code>可以重写为<code>if y < x < z:</code></p>