0

我有一个由先前确定的列表中的随机行填充的类。该列表由 CSV 文件填充。该类如下所示:

class Gem:
    def __init__ (self, name, value):
        self.name = name
        self.value = float(value)

列表正确填充,并且 Item 使用类正确填充。我有 6 个列表,我需要检查 item.name 是否属于其中任何一个。我想:

if item.name in COMMONGEMS:
    item.value = random.range(4, 17)

我对每个列表都这样做,但是虽然我没有收到任何错误,但这在应该的时候永远不会得到匹配。

我应该如何做到这一点?

编辑:作为对 interjey 的回应,一旦从 CSV 加载,列表将如下所示:

print (COMMONGEMS)
[['Banded', '0'], ['Eye Agate', '0'], ['Moss Agate', '0'], ['Azurite', '0'], ['Blue quartz', '0'], ['Hematite', '0'], ['Lapis Lazuli', '0'], ['Malachite', '0'], ['Obsidian', '0'], ['Rhodochrosite', '0'], ['Tiger Eye', '0'], ['Turquoise', '0'], ['Freshwater', '0'], ['Irregular Pearl', '0']]
4

2 回答 2

2

您当前的代码没有检查列表列表中的名称。它只检查与您的查询不匹配的内部列表本身。一个简单的循环可以查看名称的内部列表:

for element in COMMONGEMS:
    if item.name == element[0]:
        item.value = random.range(4, 17)

我使用==了代替,in因为可能有一个宝石有一个名字in,另一个名字,但不是那个名字。比如ruby匹配star ruby等。

于 2013-06-03T12:57:13.870 回答
2

如果 item.name 是类似“Banded”的字符串,则不会在 COMMONGEMS 中找到 item.name。

['Banded', '0'] in COMMONGEMS => true

'Banded' in COMMONGEMS => false

编辑: 您可以使用字典代替列表:

COMMONGEMS = {'Banded': '0' , 'Azurite' : '0'}

if item.name in COMMONGEMS:
    item.value = random.range(4, 17)
于 2013-06-03T12:47:03.303 回答