Python:为什么这起作用



这是我的基本随机运动程序,每次下降时,多维数据集都会沿着不同的距离奔跑,并且每次都向右行驶。

编写程序时,我有一个错误消息:UnbounlocalError:分配前引用的本地变量'WantingCordx'和unboundlocalerror:在分配之前引用的本地变量'wantercordy

我通过将两个变量全局整体化为函数内部解决问题,但不知道为什么我必须这样做或为什么起作用:

这个程序:(写得不好,我是乞egginer)

import pygame,sys,random
from pygame.locals import *
#colours
red =(255,0,0)
white=(255,255,255)
#variables/objects
x = 50
y = 50
FPS = 60
clock =pygame.time.Clock()
screen = pygame.display.set_mode((800,600))
xcord = random.randint(1,100)
ycord = random.randint(1,100)
newcords_needed = False
run_once = False
def get_newcords():
    global x,y
    global run_once
    global newcords_needed
    wantedcordx
    global wantedcordy

    if run_once == False:
        xcord = random.randint(1, 100)
        ycord = random.randint(1, 100)
        wantedcordy = (y + ycord)
        wantedcordx = (x + xcord)
        run_once = True
        print(wantedcordx)
    if newcords_needed == True:
        xcord = random.randint(1,100)
        ycord = random.randint(1,100)
        wantedcordy = (y + ycord)
        wantedcordx = (x + xcord)
        newcords_needed = False
    if x != wantedcordx:
        x_done = False
        x +=1

    elif x == wantedcordx:
        x_done = True
    if x_done == True:
        if y  != wantedcordy:
        y +=1
        elif y == wantedcordy:
            y_done = True
            newcords_needed = True
    return (x,y)


while True:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    get_newcords()
    screen.fill(white)
    pygame.draw.rect(screen, red, [x,y,20,20])
    pygame.display.update()

它从来没有正确地编写和粘贴,但我尽了最大的努力将其重新格式化。

查看python的官方编程文档常见问题解答,特别是有关"为什么变量具有值时我会得到unboundlocalerror的部分?":https://docs.python.org/2/faq/programming.html#why-am-i-getting-an-unboundlocalError-when-the-then-then-then-then-the-baria-has-a-value

在处理为什么和何处需要"全局"之后,问题也可能对您有所帮助。

简而言之,这是python语言的选择,允许"隐式"访问全局定义(在大多数情况下,这是一个安全的假设),但是更改它们的能力需要明确使用"全局"关键字。限制是提醒您,您正在修改可能共享的内容(即全局),如果您不注意,可能会在代码的其他部分中引入意想不到的副作用。他们不需要"全局"才能访问该值的唯一原因是因为由此产生的"混乱"会破坏全球声明以识别副作用的有用性。"

应该指出的是,在许多情况下,在许多情况下,不仅在Python中使用全球群体被认为是不良练习,而且Python中理想的解决方案通常是利用模块提供的命令系统。在我链接您的常见问题解答部分中,这进一步详细介绍了这一点。但是,当开发一个简单的游戏时,在任何给定的时刻,将一组全球群体作为"一个真实的真实来源"通常是有用的(实用吗?p>

def get_newcords()中,如果run_once == Truenewcords_needed == False,则首次访问变量wantedcordx是:

if x != wantedcordx:

由于在这种情况下第一次访问它是通过读取访问权限,因此您会获得"未定义变量",除非您像您一样定义它。

wantedcordy也是如此)

定义它们 global具有以下效果:自从函数首次调用以来,您将 wantedcordx分配给某物,它在下一个函数调用中仍然有效。

相关内容

  • 没有找到相关文章

最新更新