Python: 为什么数学运算符不起作用?

Python: How come the math operators won't work?

我一直在学习向初学者展示如何制作 "Space Invaders" 游戏的教程。我主要只是想要一种方法来玩海龟图形或类似的东西。一切都进行得很顺利,直到我注意到我在定义 move_left 函数的地方创建的 if 语句不起作用。然而,问题不在于 if 语句本身。我尝试在其下执行的任何数学运算都会被程序完全忽略,没有任何错误消息或任何内容。我什至试图在 if 语句下制作一个打印语句,只是为了查看实际语句是否响应,并且确实看到了按我计划打印的语句。那么给出了什么?为什么我不能在这两个函数下做任何数学方程式或类似的事情?

所以,这是我在下面遵循的代码:

import turtle
import os

def main():
    #Set up the screen

    wn = turtle.Screen()
    wn.bgcolor("black")
    wn.title("Space Invaders")

    #Draw Border
    border_pen = turtle.Turtle()
    border_pen.speed(0)
    border_pen.color("white")
    border_pen.penup()
    border_pen.setposition(-300, -300)
    border_pen.pendown()
    border_pen.pensize(3)

    for side in range (4):
        border_pen.fd(600)
        border_pen.lt(90)
    border_pen.hideturtle()

    #create the player turtle

    player = turtle.Turtle()
    player.color("blue")
    player.shape('triangle')
    player.penup()
    player.speed(0)
    player.setposition(0, -250)
    player.setheading(90)


    #Player controls

    playerspeed = 15

    def move_left():
        x = player.xcor()
        x -= playerspeed
        player.setx(x)
        print(x)
        if x < -280:
            print("Reached") #It is here I tested rather or not the if statement 
                             #above works, which it does
            x = -280 #The following code here will not take effect. I tried all
                     #of different signs to use. Nothing happens. Not even an 
                     #error

    def move_right(): #I did not put the if statement here since I noticed the
                      #problem with the left side first
        x = player.xcor()
        x += playerspeed
        player.setx(x)
        if x > 280:
            x = 280

    turtle.listen()
    turtle.onkey(move_left, "Left")
    turtle.onkey(move_right, "Right")

    turtle.mainloop()

main()

代码没有影响的原因是因为您修改了 x 的值,函数范围的局部变量,而不是玩家位置。在更新局部变量 x 后,调用 player.setx(x) 实际更新玩家位置。如果你想限制你的位置,你也可以使用内置的 min/max 方法:

   def move_left():
        x = player.xcor()
        x -= playerspeed
        player.setx(max(x, -280))

    def move_right():
        x = player.xcor()
        x += playerspeed
        player.setx(min(x, 280))