为什么我的代码会出现此错误?
问题描述:
我是一名开始Python程序员,刚刚完成我的第一个程序Battle。 但我有问题。至于我可以看到,所有的代码工作,除了接近尾声的一部分罚款,在那里我得到一个UnboundLocalError
,一起来看看:为什么我的代码会出现此错误?
Traceback (most recent call last):
File "[Dir]\Programs\Battle.py", line 210, in <module>
callUserCombat()
File "[Dir]\Programs\Battle.py", line 26, in callUserCombat
playerLeft = str(playerLeft)
UnboundLocalError: local variable 'playerLeft' referenced before assignment
而这正是它引用(不小的金额,对不起):
#Define callUserCombat().
def callUserCombat():
print('Your turn.')
time.sleep(2)
print()
print('Choose a move:')
print('Attack 1 [2 - 3 Damage] (1)')
print('Attack 2 [0 - 5 Damage] (2)')
print('Heal [Heals 0 - 6] (3)')
playerLeft = str(playerLeft)
enemyLeft = str(enemyLeft)
print('Your HP: ' + playerLeft)
print('Enemy HP: ' + enemyLeft)
chosenAttack = input()
while chosenAttack != '0':
if chosenAttack == '1':
chosenAttackPower = random.randint(2,3)
enemyLeft = - chosenAttackPower
chosenAttackPower = str(chosenAttackPower)
print('You attacked!')
print('Enemy lost ' + chosenAttackPower + 'HP. ')
break
if chosenAttack == '2':
chosenAttackPower = random.randint(0,5)
enemyLeft = - chosenAttackPower
chosenAttackPower = str(ChosenAttackPower)
print('You attacked!')
print("Enemy lost " + chosenAttackPower + 'HP. ')
break
if chosenAttack == '3':
chosenAttackPower = random.randint(1,5)
playerLeft = + chosenAttackPower
chosenAttackPower = str(ChosenAttackPower)
print('You healed!')
print('Healed ' + chosenAttackPower + 'HP.')
break
else:
chosenAttack = '0'
print('Please enter a valid move code.')
print("Attack 1 (1)")
print("Attack 2 (2)")
print("Heal (3)")
print()
chosenAttack = input()
limitHealth()
#Define callEnemyCombat().
def callEnemyCombat():
print('Enemy\'s turn.')
time.sleep(2)
print()
enemyAttack = random.randint(1,6)
if enemyAttack == '1':
enemyAttackPower = random.randint(2,3)
playerLeft = - enemyAttackPower
enemyAttackPower = str(enemyAttackPower)
print('Don\'t bother taunting me, you\'ll die trying. And it\'s mean.')
print('Enemy attacked!')
print('You lost ' + enemyAttackPower + 'HP. ')
if enemyAttack == '2':
enemyAttackPower = random.randint(2,3)
playerLeft = - enemyAttackPower
enemyAttackPower = str(enemyAttackPower)
print('Where do you live? I only want to know so I can kill')
print('your family once I\'m finished with you.')
print('Enemy attacked!')
print('You lost ' + enemyAttackPower + 'HP. ')
if enemyAttack == '3':
enemyAttackPower = random.randint(2,3)
playerLeft = - enemyAttackPower
enemyAttackPower = str(enemyAttackPower)
print('I can take anything you can throw at me. Except Chocolate.')
print('I\'m allergic to Chocolate.')
print('Enemy attacked!')
print('You lost ' + enemyAttackPower + 'HP. ')
if enemyAttack == '4':
enemyAttackPower = random.randint(0,5)
playerLeft = - enemyAttackPower
enemyAttackPower = str(enemyAttackPower)
print('I WILL kill you, even if I have to hire the Men in Black to do it.')
print('Enemy attacked!')
print('You lost ' + enemyAttackPower + 'HP. ')
if enemyAttack == '5':
enemyAttackPower = random.randint(0,5)
playerLeft = - enemyAttackPower
enemyAttackPower = str(enemyAttackPower)
print('Have you heard of pong? We could play pong after I kill you,')
print('if you like.')
print('Enemy attacked!')
print('You lost ' + enemyAttackPower + 'HP. ')
if enemyAttack == '6':
enemyAttackPower = random.randint(1,5)
enemyLeft = + enemyAttackPower
enemyAttackPower = str(ChosenAttackPower)
print('Charging up with a cold glass of water, and a side of you.')
print('Enemy healed!')
print('Healed ' + chosenAttackPower + 'HP.')
limitHealth()
#Define limitHealth().
def limitHealth():
if playerLeft > playerHealth:
playerLeft = playerHealth
if enemyLeft > enemyHealth:
enemyLeft = enemyHealth
这里是代码,因此,所有有意义: (https://www.dropbox.com/s/9l4ifgmk5sx1pg1/Battle.py)。
编辑:对这篇文章感到抱歉,它似乎是相当可怕的书面,所以我修好了。
答
这是一个范围可变问题。你需要为这样的输入您的全局变量:
enemyHealth = 1
playerLeft = 2
enemyLeft = 2
...
#Define callUserCombat().
def callUserCombat():
global enemyHealth
global playerLeft
global enemyLeft
etc.
答
绝对是有范围的问题,更具体地说,在蟒蛇试图解决分配给它(时名的方式,即当你试图给变量分配playerLeft
)。你可以看这里:http://eli.thegreenplace.net/2011/05/15/understanding-unboundlocalerror-in-python/了解完整的说明。
由于您似乎只是试图打印全局变量的值,所以我们需要输入playerLeft
。只要做到这一点,正是:
playerLeft = 2
enemyLeft = 2
...
#Define callUserCombat().
def callUserCombat():
...
print('Your HP: ', playerLeft)
print('Enemy HP: ', enemyLeft)
...
应避免问题
当错误发生时,请解开你的代码的相关作品(+ - 5-7线)和包括它变成你的问题。 – akluth 2013-04-26 08:01:08
有一个'playerLeft'在_module_级别定义,但不在函数中 - 看起来像一个范围问题?... – Basic 2013-04-26 08:19:09
@基本你可以写出答案。我删除了我的。不想拿你的信用。 – CppLearner 2013-04-26 08:22:43