如何从一个函数调用变量到另一个函数?

时间:2019-10-15 20:31:17

标签: python function import

注意:这是一个很长的问题。

我正在通过制作游戏来练习python。我需要从另一个函数(我称为spawn())中获取一个变量,并在另一个函数(我称为damage_taken()中使用)。

这是文件enemy.py。它的主要工作是产生敌人:

import random
import player

class Enemy(object):

    def types(self):
        type = ["slime", "ghost", "demon"]
        enemy = random.choice(type)
        return enemy


class Slime(Enemy):

    def types(self):
        colour = ["red", "green", "blue"]
        type = random.choice(colour)
        return type

    def health(self):
        health = random.randint(1,5)
        return health


class Ghost(Enemy):

    def types(self):
        form = ["spirit", "spectre", "phantom"]
        type = random.choice(form)
        return type

    def health(self):
        health = random.randint(10,30)
        return health


class Demon(Enemy):

    def types(self):
        being = ["demon", "hell hound", "wendigo"]
        type = random.choice(being)
        return type

    def health(self):
        health = random.randint(15,35)
        return health

这是重要的代码。我需要从此函数中获取变量health并将其用于其他函数。

def spawn():
    enemy = Enemy()
    bad = enemy.types()

    if bad == "slime":
        slime = Slime()
        target = slime.types()
        health = slime.health()
        print(f"A {target} {bad} has appeared. It has {health} HP")
        return health
    elif bad == "ghost":
        ghost = Ghost()
        target = ghost.types()
        health = ghost.health()
        print(f"A {target} has appeared. It has {health} HP")
        return health
    elif bad == "demon":
        demon = Demon()
        target = demon.types()
        health = demon.health()
        print(f"A {target} has appeared. It has {health} HP")
        return health

这是我在努力的地方。我试图从函数health中获取变量spawn(),并在以下函数中使用它。但是,它不断告诉我health不存在。如何从另一个函数中获取变量并在该函数中使用它。

def damage_taken():
    spawn()
    health = spawn.health - player.fight()
    return health

damage_taken()

代码

spawn.health

是我尝试将变量调用到函数中的失败尝试。

代码:

player.fight()

正在从名为player.py的其他文件中调用函数。它的主要目的是处理与玩家有关的机制,例如创建角色并确定他们造成的伤害。

3 个答案:

答案 0 :(得分:4)

def damage_taken():
    health = spawn() - player.fight()
    return health
damage_taken()

这应该有效;您可能已经混淆了用于访问类成员变量的点符号。

答案 1 :(得分:0)

如果我很好地理解了您的问题,则只需将spawn函数的返回值分配给变量:

def damage_taken():
    spawn_health = spawn()
    health = spawn_health - player.fight()
    return health

答案 2 :(得分:0)

我猜您实际上是宁愿使用spawn函数,而不是敌人的health来返回敌人对象,所以我建议以下做法:

def spawn():
    enemy = Enemy()
    bad = enemy.types()

    if bad == "slime":
        enemy = Slime()  # each of these now is assigned to the same variable name, "enemy"
        target = slime.types()
        health = slime.health()
        print(f"A {target} {bad} has appeared. It has {health} HP")
    elif bad == "ghost":
        enemy = Ghost()
        target = ghost.types()
        health = ghost.health()
        print(f"A {target} has appeared. It has {health} HP")
    elif bad == "demon":
        enemy = Demon()
        target = demon.types()
        health = demon.health()
        print(f"A {target} has appeared. It has {health} HP")

    return enemy

def damage_taken():
    enemy = spawn()
    health = enemy.health - player.fight()
    return health
damage_taken()

现在,仍然存在问题,在调用damage_taken()之后,敌方对象将完全掉落。如果您希望敌人继续存在,则可能需要在damage_taken函数范围之外初始化玩家和敌人。像这样:

enemy = spawn()
damage_taken(enemy)