从列表中随机选择项目,无法分配给变量,而是遇到NameError

时间:2012-11-07 21:56:01

标签: python python-2.7

我在理解为什么我创建的类对象无法从列表中返回随机选择的项时遇到问题。我知道错误在于我无法理解价值如何通过的基本内容。我还是学习Python的新手,这只是我的第二个应用程序。我的最终目标是创建一个名为Weapons()的{​​{1}}类对象,其中包含一个名为armed的功能。我希望能够创建'armed.weapon',它是从列表中随机选择的武器,然后分配给另一个类对象中的变量,即'hero_weapon = armed.weapon'。这是我写的试图创建'armed.weapon'然后打印值的例子。我逻辑中的缺陷是什么?为什么我遇到“NameError:全局名称'武器'未定义”?

weapon

4 个答案:

答案 0 :(得分:4)

choices()方法中:

self.weapon = weapon
return weapon

weapon未声明,也许你想做这样的事情:

weapon = self.weapon
return weapon

或者简单地说:

return self.weapon

答案 1 :(得分:2)

def choices(self):
    self.weapon = self.weapons_list[randint(0, 2)]
    self.weapon = weapon
    return weapon

在上面的方法中,它不确定您在做什么,但是您试图在不声明的情况下访问weapon。所以,它会给你一个错误。

你更喜欢这样使用: -

def choices(self):
    self.weapon = self.weapons_list[randint(0, 2)]
    return self.weapon

答案 2 :(得分:1)

问题在于:

self.weapon = weapon

您永远不会分配名为weapon的本地变量。提前一行设置实例变量self.weapon。只需return self.weapon

另外,为了得到你的想法:

>>> import random
>>> weapons_list = [
...         'Flame Blade',
...         'Ice Flail',
...         'Lightning Mace'
...     ]
>>> 
>>> random.choice(weapons_list)
'Lightning Mace'
>>> random.choice(weapons_list)
'Ice Flail'
>>> _

答案 3 :(得分:1)

只需使用:

from random import randint

class Weapons(object):
    def __init__(self, weapon = ''):
        self.weapon = weapon
        self.weapons_list = [
            'Flame Blade',
            'Ice Flail',
            'Lightning Mace'
            ]

    def choices(self):
        self.weapon = self.weapons_list[randint(0, 2)]
        return self.weapon


armed = Weapons()
armed.choices()
print armed.weapon

你的错误是:

self.weapon = weapon
return weapon

因为永远不会宣布武器