Function 随机数函数

Function 随机数函数,function,random,pygame,Function,Random,Pygame,我正在做一个小游戏,当事件发生时,矩形会在一个随机的x和y点上生成,我在实现这些函数时遇到了一些问题。以下是一些基本代码: xran = random.randint(5, 485) yran = random.randint(5, 485) xran1 = random.randint(5, 450) yran1 = random.randint(5, 400) def allRand(): #This REGENERATES those randoms making it 'sp

我正在做一个小游戏,当事件发生时,矩形会在一个随机的x和y点上生成,我在实现这些函数时遇到了一些问题。以下是一些基本代码:

xran = random.randint(5, 485)
yran = random.randint(5, 485)
xran1 = random.randint(5, 450)
yran1 = random.randint(5, 400)

def allRand():
     #This REGENERATES those randoms making it 'spawn' in a new location.
     xran = random.randint(0, 485)
     yran = random.randint(0, 485)
     xran1 = random.randint(5, 450)
     yran1 = random.randint(5, 400)

char = pygame.draw.rect(screen, black, (x,y,15,15), 0)
food = pygame.draw.rect(screen, green, (xran,yran,10,10), 0)
badGuy = pygame.draw.rect(screen, red, (xran1,yran1,50,100), 0)


if char.colliderect(food):
    score += 1
    print "Your score is:",score
    allRand()
调用一个重新生成随机数的函数对你们中的任何人都有效吗?我知道它会重新生成它们,因为我已经让它打印回变量,但出于某种原因,我的RECT不会在那里执行

注意:这只是我的代码片段,只是想让大家了解我正在尝试做什么

谢谢

您的allRand()方法没有任何代码。必须在该函数中缩进所需的行

这有点有效,因为你仍然把那些语句称为def下面的语句。但这并不是因为您正在调用函数。

您的allRand()方法没有任何代码。必须在该函数中缩进所需的行


这有点有效,因为你仍然把那些语句称为def下面的语句。但这并不是因为您正在调用函数。

您需要在
allRand()函数中使用
global
声明
xran
,等等。否则,它只是在函数范围内创建新变量,为它们分配随机值,然后在函数返回时丢弃它们。

您需要在
allRand()
函数内使用
global
声明
xran
,等等。否则,它只是在函数范围内创建新变量,给它们分配随机值,然后在函数返回时丢弃它们。

要补充Lee Daniel Crocker的答案,当你在函数中创建变量时,它们只存在于该函数中。如果您希望它们存在于外部,您可以按照他的建议使它们成为全局变量,您可以返回它们并捕获它们:

>>> def square(number):
    squared = number*number
    return squared

>>> square(3)
9
>>> ninesquared = square(3)
>>> ninesquared
9
>>> 

看起来你需要掌握你的基本知识。我建议在pygame中尝试之前先这样做

编辑:

如果在函数外部定义变量,它们也不会影响在函数中定义的任何变量

>>> x = 5
>>> def rais():
    x = 10


>>> x
5
>>> rais()
>>> x
5
>>> 
注意
rais
是如何无所作为的吗? 如果我们将
rais
中的行更改为
x=x+1
,那么python将返回一个未定义x的错误


如果你想让变量进入函数,你需要把它们作为参数传递进去,但同样,除非你返回并捕获它们,否则它们不会影响函数之外的任何东西。同样,您可以将它们声明为全局变量,这也会起作用。

补充Lee Daniel Crocker的答案,当您在函数中创建变量时,它们只存在于该函数中。如果您希望它们存在于外部,您可以按照他的建议使它们成为全局变量,您可以返回它们并捕获它们:

>>> def square(number):
    squared = number*number
    return squared

>>> square(3)
9
>>> ninesquared = square(3)
>>> ninesquared
9
>>> 

看起来你需要掌握你的基本知识。我建议在pygame中尝试之前先这样做

编辑:

如果在函数外部定义变量,它们也不会影响在函数中定义的任何变量

>>> x = 5
>>> def rais():
    x = 10


>>> x
5
>>> rais()
>>> x
5
>>> 
注意
rais
是如何无所作为的吗? 如果我们将
rais
中的行更改为
x=x+1
,那么python将返回一个未定义x的错误


如果你想让变量进入函数,你需要把它们作为参数传递进去,但同样,除非你返回并捕获它们,否则它们不会影响函数之外的任何东西。同样,您可以将它们声明为全局变量,这也会起作用。

不,它不会。如果没有在函数中声明全局变量,则它们在函数中的赋值会在函数范围中创建新的变量,这些变量会隐藏全局变量。你自己测试一下,不,没有。如果没有在函数中声明全局变量,则它们在函数中的赋值会在函数范围中创建新的变量,这些变量会隐藏全局变量。自己测试一下,看看结果如何。