Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
141 views
in Technique[技术] by (71.8m points)

How do I pass variables around in Python?

I want to make a text-based fighting game, but in order to do so I need to use several functions and pass values around such as damage, weapons, and health.

Please allow this code to be able to pass "weapons" "damage" "p1 n p2" throughout my code. As you can see I have tried using parameters for p1 n p2, but I am a little bit a newbie.


import random

def main():
    print("Welcome to fight club!
You will be fighting next!
Make sure you have two people ready to       play!")
    p1=input("
Enter player 1's name ")
    p2=input("Enter player 2's name ")
    print("Time to get your weapons for round one!
")
    round1(p1,p2)

def randomweapons(p1,p2):
    weapon=["Stick","Baseball bat","Golf club","Cricket bat","Knife",]
    p1weapon=random.choice(weapon)
    p2weapon=random.choice(weapon)
    print(p1 +" has found a "+p1weapon)
    print(p2 +" has found a "+p2weapon)

def randomdamage():
    damage=["17","13","10","18","15"]
    p1damage=random.choice(damage)
    p2damage=random.choice(damage)

def round1(p1,p2):
    randomweapons(p1,p2)

def round2():
    pass
def round3():
    pass
def weaponlocation():
    pass

main()
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

There are a few options.

One is to pass the values as parameters and return values from your various functions. You're already doing this with the names of the two players, which are passed as parameters from main to round1 and from there on to randomweapons. You just need to decide what else needs to be passed around.

When the information needs to flow the other direction (from a called function back to the caller), use return. For instance, you might have randomweapons return the weapons it chose to whatever function calls it (with return p1weapon, p2weapon). You could then save the weapons in the calling function by assigning the function's return value to a variable or multiple variables, using Python's tuple-unpacking syntax: w1, w2 = randomweapons(p1, p2). The calling function could do whatever it wants with those variables from then on (including passing them to other functions).

Another, probably better approach is to use object oriented programming. If your functions are methods defined in some class (e.g. MyGame), you can save various pieces of data as attributes on an instance of the class. The methods get the instance passed in automatically as the first parameter, which is conventionally named self. Here's a somewhat crude example of what that could be like:

class MyGame:          # define the class
    def play(self):    # each method gets an instance passed as "self"
        self.p1 = input("Enter player 1's name ")    # attributes can be assigned on self
        self.p2 = input("Enter player 2's name ")
        self.round1()
        self.round2()

    def random_weapons(self):
        weapons = ["Stick", "Baseball bat", "Golf club", "Cricket bat", "Knife"]
        self.w1 = random.choice(weapons)
        self.w2 = random.choice(weapons)
        print(self.p1 + " has found a " + self.w1) # and looked up again in other methods
        print(self.p2 + " has found a " + self.w2)

    def round1(self):
        print("Lets pick weapons for Round 1")
        self.random_weapons()

    def round2(self):
        print("Lets pick weapons for Round 2")
        self.random_weapons()

def main():
    game = MyGame()  # create the instance
    game.play()      # call the play() method on it, to actually start the game

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...