简化if语句

2024-07-07 09:21:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我这里有这个代码,但我不知道如何简化代码,有人知道如何简化这样的代码吗

if ball.ycor() > 340:
    ball.sety(340)
    ball.ycoor *= -1

if 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"))

if 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"))


if (ball.xcor() > 440 and ball.xcor() < 450) and ball.ycor() < block_b.ycor() + 40 and ball.ycor() > block_b.ycor() - 40:
    ball.setx(440)
    ball.xcoor *= -1
   

if (ball.xcor() < -440 and ball.xcor() > -450) and ball.ycor() > block_a.ycor() - 40 and ball.ycor() < block_a.ycor() + 40:
    ball.setx(-440)
    ball.xcoor *= -1

Tags: and代码ifblockwritescorecleargoto
2条回答

您应该将相互排斥的可能性与if-else语句结合起来。我的第一个倾向是在假设连续调用不会返回不同值的情况下,使用以下方法对ball.ycor()ball.xcor()进行一次评估:

x_coor = ball.xcor()
y_coor = ball.ycor()

但是我注意到表达式ball.ycoor *= -1,它表明这可能会影响后续调用ball.ycor()的返回值。因此,我决定不尝试优化这些调用:

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

注意if x > y and x < z:可以重写为if y < x < z:

可以在多个比较运算符之间夹心一个值。可以使用f字符串直接将值传递到大括号中

if ball.ycor() > 340:
    ball.sety(340)
    ball.ycoor *= -1

if 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(f"{scoreboard_a}           {scoreboard_b}", font=("Arial", 104, "normal"))

if ball.xcor() < -490:
    ball.goto(0, 0)
    ball.xcoor *= -1
    scoreboard_b += 1
    score.clear()
    score.write("{scoreboard_a}           {scoreboard_b}", font=("Arial", 104, "normal"))

if 450 > ball.xcor() > 440 and block_b.ycor() - 40 < ball.ycor() < block_b.ycor() + 40:
    ball.setx(440)
    ball.xcoor *= -1
   

if -450 < ball.xcor() < -440 and block_a.ycor() + 40 > ball.ycor() > block_a.ycor() - 40:
    ball.setx(-440)
    ball.xcoor *= -1

此外,您可能希望将font值存储到一个变量中,以便可以通过使用变量来使用它,如font = ("Arial", 104, "normal"),然后

score.write(f"{scoreboard_a}           {scoreboard_b}", font=font)

此外,如果可以让代码更高效,那么只对第一个语句使用if语句,其余语句使用elif。这样,一旦python找到满足条件的语句,就不必费心检查其他语句

相关问题 更多 >