Python 变量值不更新

Python 变量值不更新,python,python-3.x,Python,Python 3.x,所以基本上,我在为乒乓球比赛建立计分系统。全局变量s_a为0,并应在球弹起后更改 import turtle import time win = turtle.Screen() win.title("Pong") win.bgcolor("black") win.setup(width=800, height=600) win.tracer(0) ball = turtle.Turtle() ball.speed(0) ball.shape("square") ball.color("whi

所以基本上,我在为乒乓球比赛建立计分系统。全局变量s_a为0,并应在球弹起后更改

import turtle
import time

win = turtle.Screen()
win.title("Pong")
win.bgcolor("black")
win.setup(width=800, height=600)
win.tracer(0)

ball = turtle.Turtle()
ball.speed(0)
ball.shape("square")
ball.color("white")
ball.penup()
ball.goto(0, 0)
ball.dx = 2

s_a = 0

s_s = turtle.Turtle()
s_s.speed(0)
s_s.hideturtle()
s_s.goto(0, 0)
s_s.penup()
s_s.color("white")
current_score = "Player A: {} | Player B: 0".format(s_a)
s_s.write(current_score, align="center", font=("Courier", 16, "normal"))

while True:
    win.update()
    time.sleep( 1 / 60 )
    ball.setx(ball.xcor() + ball.dx)
    if ball.xcor() > 380:
        s_a += 1
        ball.goto(0,0)

球会自动复位,并像预期的那样改变方向,但变量不会更新。我遗漏了什么吗?

是的,请在更新值之前写入全局,
global s\u a

是,请在更新值之前写入global,
global s_a

尝试清除屏幕然后写入,您不需要全局变量,它们通常是个坏主意:

while True:
    win.update()
    time.sleep(1/60)
    ball.setx(ball.xcor() + ball.dx)
    if ball.xcor() > 380:
        s_a += 1
        current_score = "Player A: {} | Player B: 0".format(s_a)
        s_s.clear()
        s_s.write(current_score, align="center", font=("Courier", 16, "normal"))
        ball.goto(0, 0)

尝试清除屏幕,然后写入,您不需要全局变量,它们通常是个坏主意:

while True:
    win.update()
    time.sleep(1/60)
    ball.setx(ball.xcor() + ball.dx)
    if ball.xcor() > 380:
        s_a += 1
        current_score = "Player A: {} | Player B: 0".format(s_a)
        s_s.clear()
        s_s.write(current_score, align="center", font=("Courier", 16, "normal"))
        ball.goto(0, 0)

你的代码没问题。你应该在屏幕上重新打印分数。我是说加上

current_score=“玩家A:{}|玩家B:0”。格式(s_A)
s_.s.clear()
s_s.write(当前分数,align=“center”,font=(“Courier”,16,“normal”))

在最后一行之前更新
s\u a

您的代码正常。你应该在屏幕上重新打印分数。我是说加上

current_score=“玩家A:{}|玩家B:0”。格式(s_A)
s_.s.clear()
s_s.write(当前分数,align=“center”,font=(“Courier”,16,“normal”))

在最后一行之前更新
sua

这是否回答了您的问题?如果没有,也许你的程序中有某种逻辑错误,很难说,因为你没有包含所有相关的代码。这段代码看起来很好。你需要提供一个新的解决方案。也许您的主循环运行在不同的范围内?也许更好的问题是-您如何知道,
s_a
没有更新?你不在
循环中打印它吗?你到底在哪里验证它仍然是
0
?这是否回答了你的问题?如果没有,也许你的程序中有某种逻辑错误,很难说,因为你没有包含所有相关的代码。这段代码看起来很好。你需要提供一个新的解决方案。也许您的主循环运行在不同的范围内?也许更好的问题是-您如何知道,
s_a
没有更新?你不在
循环中打印它吗?您究竟在哪里验证它仍然是
0
?程序现在无法运行。我曾经尝试过
global s_a
s_a+=1
,但仍然失败。有什么建议吗?程序现在无法运行。我曾经尝试过
global s_a
s_a+=1
,但仍然失败。有什么建议吗?