2016-11-12 377 views
0

我正在嘗試製作基於文本的遊戲,但我遇到了將一些變量從一個函數傳遞給另一個函數的麻煩。我想出瞭如何修改函數中的變量並返回新值來覆蓋原文。如何將局部變量從一個函數傳遞到另一個函數?

我需要的是如何讓room1()room2()變量恢復爲something1(x)something2(y)幫助,併爲main()解鎖if聲明。

對於something1(x)something2(y),我應該有兩個不同的函數還是一個函數?

這是一個普遍的示例代碼與我遇到的問題:

def something1(x): 
    x += 0 
    return x 

def something2(y): 
    y += 0 
    return y  

def main(): 
    print("1. Try to open door") 
    print("2. Go to room1") 
    print("3. Go to room2") 
    choice = int(input("Enter selection: ") 
    if choice == "1": 

    # Trying to get this if statement to work with the variables 
    # Don't know which function or parameters to pass in order to get it to work 

     if x == 3 and y == 2: 
      print("You're free") 
     else: 
      print("You're not free") 
    elif choice == "2": 
     room1() 
    elif choice == "3": 
     room2() 
    else: 
     print("ERROR") 
     main() 

def room1(): 
    print("1. Push thing1") 
    print("2. Push thing2") 
    print("3. Push thing3") 
    print("4. Return to previous room") 
    pushChoice = input("Enter selection: ") 
    if pushChoice == "1": 
     print("Thing1 pushed") 
     room1() 
    elif pushChoice == "2": 
     print("Thing2 pushed") 
     room1() 
    elif pushChoice == "3": 
     print("Thing3 pushed") 

    # The modified variable x for something1(x) 

     x = 3 
     x = something1(x) 
     room1() 
    elif pushChoice == "4": 
     main1() 
    else: 
     print("ERROR") 
     room1() 

def room2(): 
    print("1. Pull thingA") 
    print("2. Pull thingB") 
    print("3. Pull thingC") 
    print("4. Return to previous room") 
    pullChoice = input("Enter selection: ") 
    if pullChoice == "1": 
     print("ThingA pushed") 
     room1() 
    elif pullChoice == "2": 
     print("ThingB pushed") 

     # The modified variable y for something2(y) 

     y = 2 
     y = something1(y)  
     room1() 
    elif pullChoice == "3": 
     print("ThingC pushed") 
     room1() 
    elif pullChoice == "4": 
     main1() 
    else: 
     print("ERROR") 
     room1() 

回答

0

你可以pass通過返回變量從一個功能到另一個變量。然而,爲了做到這一點,該函數調用的函數體內其他功能,例如:

def addandsquare(x, y): 
    y = squarefunction(x+y) # sum x+y is passed to squarefunction, it returns the square and stores it in y. 
    return y 

def squarefunction(a): 
    return (a*a) # returns the square of a given number 

print(addandsquare(2, 3)) # prints 25 

不過,如果你不能將它的身體內調用的函數,但是你想使用本地該函數的變量,然後可以將這個變量全局聲明爲這兩個函數。

下面是一個例子:

globvar = 0 

def set_globvar_to_one(): 
    global globvar # Needed to modify global copy of globvar 
    globvar = 1 

def print_globvar(): 
    print globvar  # No need for global declaration to read value of globvar 

set_globvar_to_one() 
print_globvar()  # Prints 1 

希望這有助於!

+0

嗨@jabeydoe如果這或任何答案已解決您的問題,請點擊複選標記,考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 –

相關問題