Python 简化-if语句

Python 简化-if语句,python,if-statement,simplify,python-turtle,Python,If Statement,Simplify,Python Turtle,我这里有这个代码,但我不知道如何简化代码,有人知道如何简化这样的代码吗 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_

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

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
如果ball.ycor()>340:
鲍尔·塞蒂(340)
ball.ycoor*=-1
如果ball.ycor()小于-340:
球。塞蒂(-340)
ball.ycoor*=-1
如果ball.xcor()大于490:
ball.goto(0,0)
ball.xcoor*=-1
记分牌a+=1
分数。清除()
score.write(“{}{}.”格式(记分板a,记分板b),字体=(“Arial”,104,“正常”))
如果ball.xcor()<-490:
ball.goto(0,0)
ball.xcoor*=-1
记分牌_b+=1
分数。清除()
score.write(“{}{}.”格式(记分板a,记分板b),字体=(“Arial”,104,“正常”))
如果(ball.xcor()>440和ball.xcor()<450)和ball.ycor()block_b.ycor()-40:
球。setx(440)
ball.xcoor*=-1
如果(ball.xcor()<-440和ball.xcor()>-450)和ball.ycor()>block_a.ycor()-40和ball.ycor()
您可以在多个比较运算符之间夹心一个值。您可以使用
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

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

您应该将相互排斥的可能性与
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
如果ball.ycor()>340:
鲍尔·塞蒂(340)
ball.ycoor*=-1
elif ball.ycor()<-340:
球。塞蒂(-340)
ball.ycoor*=-1
如果ball.xcor()大于490:
ball.goto(0,0)
ball.xcoor*=-1
记分牌a+=1
分数。清除()
score.write(“{}{}.”格式(记分板a,记分板b),字体=(“Arial”,104,“正常”))
elif ball.xcor()<-490:
ball.goto(0,0)
ball.xcoor*=-1
记分牌_b+=1
分数。清除()
score.write(“{}{}.”格式(记分板a,记分板b),字体=(“Arial”,104,“正常”))
elif(-450block_a.ycor()-40和ball.ycor()block_b.ycor()-40:
球。setx(440)
ball.xcoor*=-1

请注意,
if x>y和x
可以重写为
if y

尝试使用
if else
语句,这样您就不会有多个单个
if
。看起来像足球比赛的简单游戏引擎。。。我觉得代码很简单,可以理解。你需要什么样的简化?代码的哪一部分让你困惑?@a121我不同意你的编辑。是什么让你认为他/她想特别简化if?@初学者12345在他的问题文本中没有提到这一点。在我看来,他/她需要首先澄清这一点。同意MadMike的评论。您只更改了报告中的一个详细信息。代码看起来并不容易阅读。。就我个人而言,我会为球X、球高和方块变化修正创建3个单独的程序。。但这会产生更多的代码。。所以…@Goodies在我的回答中效率提高了。你不认为与
(ball.xcor()>440和ball.xcor()<450)
相比,
450>ball.xcor()>440
更容易阅读吗?不,我不认为不同的比较能改善任何东西。。但我没有否决你的回答。。你的解决方案更好,但它不能回答问题。@Goodies为什么不呢?你不认为
450>ball.xcor()>440
(ball.xcor()>440和ball.xcor()<450)
的简化版本吗?哦,你编辑了你的第一条评论…所有的评论都放在一个页面上。。。您应该看到我被迫使用的java代码:-/Thank@Booboo帮助我理解了如何简化它
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