从函数内部更改重命名的全局变量(python)

时间:2015-08-23 14:10:05

标签: python variables global

我正在制作口袋妖怪的基本版本,我有一个看起来像这样的函数:

global userhp, comphp
userhp = 100
comphp = 100

def doturn(attacker, enemy, move, attackerhp, enemyhp):
from random import randint
if move == 1:
    dmg = randint(18, 25)
    enemyhp -= dmg
    print("\t" + attacker, "have done", str(dmg), "damage")
    print("\t" + enemy, "now have", enemyhp, "health\n")
if move == 2:
    dmg = randint(8, 35)
    enemyhp -= dmg
    print("\t" + attacker, "have done", str(dmg), "damage")
    print("\t" + enemy, "now have", enemyhp, "health\n")
if move == 3:
    dmg = randint(15, 22)
    attackerhp += dmg
    print("\t" + attacker, "have healed", str(dmg), "health")
    print("\t" + attacker, "now have", attackerhp, "health\n")

以下是一个示例电话:

doturn(user, comp, 3, userhp, comphp)

我遇到的问题是改变attackerhp和enemyhp不会影响userhp和comphp。它保持在100,游戏无法进展。我需要一种改变全局变量的方法,但也可以在不将变量硬编码到函数中的情况下进行,因为这样只会对用户或计算机起作用。

我已经能够解决它,但我的解决方案是返回损坏值并将其应用于userhp并在此函数外部进行comphp。我可以为user和comp编写单独的函数,或者使用if语句检查是谁转向它并按照这种方式执行,但我非常希望保持这种紧凑。任何反馈都将不胜感激。

1 个答案:

答案 0 :(得分:1)

因此您不需要将全局语句放在第一行。您只需要在更改变量的任何函数内部。

我的理解是你的问题是用户或计算机可能是攻击者还是防御者?我做对了吗?

在这种情况下,为什么不为攻击者和防御者创建一个对象,它存储他们的名字和hp。这样,您可以更新函数内的attacker.hp和defender.hp,而无需担心哪个是用户,哪个是防御者。

像这样的东西

class Player:
  def __init__(self, name, hp):
    self.name = name
    self.hp = hp

完全摆脱全局变量。