【问题标题】:Global variable not defined although was defined earlier全局变量未定义,尽管之前已定义
【发布时间】:2016-05-15 17:29:20
【问题描述】:

我从变量的错误/定义中得到的代码:

def preFight():
    global enemy
    enemynum=random.randint(1,3)
    if enemynum==1:
        enemy=goblinIG
    elif enemynum==2:
        enemy=zombieIG
    elif enemynum==3:
        enemy==skeletonIG
    fight()

def fight():
    print "%s    vs    %s" % (playerIG.name, enemy.name)
    print "%s Health: %d/%d        &s's Health: %i/%i" % (playerIG.name,playerIG.health, playerIG.maxhealth, enemy.name, enemy.health, enemy.maxhealth)
    print "Potions: %s" % (playerIG.pots)
    print "1.) Attack"
    print "2.) Drink Potion"
    print "3.) Run"
    option=raw_input("-->")
    if option=="1":
        attack()
    elif option=="2":
        drinkpot()
    elif option=="3":
        run()
    else:
        fight()

def attack():
    os.system('clear')
    pAttack=random.randint(playerIG.attack/2, playerIG.attack)
    eAttack=random.randint(enemy.attack/2, enemy.attack)
    if pAttack()==playerIG.attack/2:
        print "You miss!"
    else:
        enemy.health-=pAttack
        print "You deal %s damage" % pAttack
    option=raw_input("")
    if enemy.health<=0:
        win()
    os.system('clear')
    if eAttack()==enemy.attack/2:
        print "The enemy missed!"
    else:
        playerIG.health-=eAttack
        print "The enemy deals %s damage" % eAttack
    option=raw_input("")
    if playerIG.health<=0:
        die()
    else:
        fight()

def drinkpot():
    os.system('clear')
    if playerIG.pots==0:
        print "You don't have any potions!"
        option=raw_input("")
        fight()
    else:
        playerIG.health+=50
        if playerIG.health>playerIG.maxhealth:
            playerIG.health=playerIG.maxhealth
        print "You drank a potion"
    option=raw_input("")
    fight()

def run():
    pAttack=random.randint(playerIG.attack/2, playerIG.attack)
    eAttack=random.randint(enemy.attack/2, enemy.attack)
    os.system('clear')
    runnum=random.randint(1,3)
    if runnum==1:
        print "You successfully ran away!"
        option=raw_input("")
        start1()
    else:
        print "You failed to get away!"
        option=raw_input("")
        os.system('clear')
        if eAttack()==enemy.attack/2:
            print "The enemy missed!"
        else:
            playerIG.health-=eAttack
            print "The enemy deals %s damage" % eAttack
    option=raw_input("")
    if playerIG.health<=0:
        die()
    else:
        fight()

def win():
    print "You have successfully killed the %s!" % enemy.name
    print "You have gained &s gold!" % enemy.goldgain

def die():
    print "You have died whilst trying to defeat %s" % enemy.name
    print "1.) Try again"
    print "2.) Quit"
    option=raw_input("-->")
    if option=="1":
        start()
    elif option=="2":
        sys.exit()
    else:
        die()

#def store()


main()

战斗开始时我得到的错误如下:

Traceback (most recent call last):
  File "/home/ubuntu/workspace/rpg_game.py", line 194, in <module>
    main()
  File "/home/ubuntu/workspace/rpg_game.py", line 46, in main
    start()
  File "/home/ubuntu/workspace/rpg_game.py", line 60, in start
    start1()
  File "/home/ubuntu/workspace/rpg_game.py", line 75, in start1
    preFight()
  File "/home/ubuntu/workspace/rpg_game.py", line 93, in preFight
    enemy==skeletonIG
NameError: global name 'enemy' is not defined

当我定义敌人并将其设置为全局时,这让我感到困惑。有什么问题?

【问题讨论】:

  • 你最初在哪里定义它?
  • def preFight()之后:下一行是敌人的定义。
  • “全球敌人”告诉 python,敌人是一个全球性的。这没有任何定义。你必须在某处写“enemy = ...”。
  • 您使用 '==' 而不是 '=' 所以它会尝试将其与敌人进行比较,而不是将敌人设置为它。使用“=”。
  • 下面你说错的已删答案是对的。你应该接受这个答案。

标签: python variables traceback


【解决方案1】:

您在此函数中的赋值有误:

def preFight():
    global enemy
    enemynum=random.randint(1,3)
    if enemynum==1:
        enemy=goblinIG
    elif enemynum==2:
        enemy=zombieIG
    elif enemynum==3:
        enemy==skeletonIG
    fight()

enemy==skeletonIG 应该是enemy=skeletonIG,因为== 检查是否相等,而= 是赋值运算符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2019-04-08
    • 2018-09-17
    • 1970-01-01
    相关资源
    最近更新 更多