2016-11-24 123 views
0

我正在用pygame创建一个Galaga克隆,我遇到了在其他函数中修改过的一个函数中使用值的问题。我创建了一个非常简单的代码版本来尝试调试它,但我没有任何运气。在Python中修改变量

import pygame 
import time 
pygame.init() 
clock = pygame.time.Clock() 

var1 = 10 

def function3(var1): 

    var1 = var1 + 2 


def function1(): 
    gameExit = False 
    while not gameExit: 
     function3(var1) 

     print(var1) 
     clock.tick(5) 
function1() 

我的问题是(基于这个简化版本)如何显示var1的更新值。我想print(var1)来显示10,12,14,16 ...

我的猜测是使用全局声明,但是我在stackexchange上找到的最接近的问题是this,它似乎没有工作与我的场景。

请注意,我知道var1的这种增​​加可以用while循环完成,但while循环不会与我的实际代码一起工作。我想要一个使用这种格式的答案(或提示)(如上所示)。

任何建议,将不胜感激。谢谢!

+0

所以你想'var1 = 16'但是'print(var1)'显示“10,12,14,16”?也许你想让每张照片都添加到你已经打印的内容上? – John3136

+1

也在'function3'中返回'var1'的值。并在'function1'中初始化它。因为Galaga非常棒,所以不会放弃。 –

+0

谁低估了这一点,请回到Facebook或其他东西。 –

回答

1

你应该用你的函数返回:

import pygame 
import time 
pygame.init() 
clock = pygame.time.Clock() 

var1 = 10 

def function3(v): 
    return v + 2 


def function1(): 
    gameExit = False 
    while not gameExit: 
     var1 = function3(var1) 

     print(var1) 
     clock.tick(5) 

function1(var1) 
+0

谢谢!我正在考虑创建一个类为@MK的类。建议但返回也可以工作。 – newtonjeep

+0

这实际上是Python中“正确”的方式,因为修改全局变量会破坏模块化。 – 2016-11-25 06:19:09

0

这里是你想要的东西做的“正确”的方式:

var1 = 10 

def function3(): 
    global var1 
    var1 = var1 + 2 

print var1 
function3() 
print var1 

您的代码修改它仅在定义局部变量VAR1你的功能3。 因为全局变量是(几乎)从来就不是一个好主意,所以我把单词正确地放在引号中。如果你需要在多个函数之间共享状态(变量),你可以创建一个类。或者你可以是现代的功能和不可变的,并有函数作为参数的值,修改并返回它。

+0

很高兴知道。谢谢你快速的回复!我会考虑创建一个班级... – newtonjeep