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