2016-11-24 139 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