简体   繁体   中英

How to pass local variables from one function into another?

I am trying to make a text-based game but I am having troubles passing some variables from one function to another. I figured out how to modify the variable inside a function and return new values to overwrite the original.

What I need help with is how to get room1() and room2() variables back to something1(x) and something2(y) and into main() to unlock the if statement.

Should I have two different or one function for something1(x) and something2(y) ?

This is a general sample code with the problem I'm having:

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()

You could pass a variable from one function to another by returning the variable. However, in order to do that, the function has to call another function within the function body, for example:

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

However, if you cannot call a function within it's body, but you would like to use a local variable of that function, you can then declare that variable global to both the functions.

Here is an example of that:

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

Hope this helps!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM