0

我无法理解为什么我创建的类对象无法从列表中返回随机选择的项目。我知道问题在于我无法理解如何传递值的基本知识。我仍然是学习 Python 的新手,这只是我的第二个应用程序。我的最终目标是创建一个Weapons()名为的类对象,该对象armed具有名为weapon. 我希望能够创建“armed.weapon”,这是一种从列表中随机选择的武器,然后分配给另一个类对象中的变量,即“hero_weapon = armed.weapon”。这是我编写的示例,试图创建“armed.weapon”,然后打印该值。我的逻辑有什么缺陷?为什么我会遇到“NameError: global name 'weapon' is not defined”?

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)]
    self.weapon = weapon
    return weapon


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

4 回答 4

4

在你的choices()方法中:

self.weapon = weapon
return weapon

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

weapon = self.weapon
return weapon

或者简单地说:

return self.weapon
于 2012-11-07T21:59:20.363 回答
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
于 2012-11-07T21:58:50.910 回答
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'
>>> _
于 2012-11-07T21:57:47.203 回答
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

因为武器从未被宣布

于 2012-11-07T21:58:45.470 回答