gpt4 book ai didi

python - 从作为列表的字典值中选择时,random.choice 不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 09:54:05 24 4
gpt4 key购买 nike

我正在制作一个程序,随机生成一个对事物有影响力的神,并影响与原始事物相关的事物。相关部分是:

spheres = {'death': ['death', 'corpses', 'skulls', 'rot', 'ruin', 'the end']}
# Dictionary of the things gods have power over and the relevant things to do with them

class God(object):

def __init__(self, sphere, associations, name):
self.sphere = sphere
self.associations = accociations
self.name = name
# Chooses areas to have power over, hopefully making it less and less likely as the program goes on further
def get_association(self):
chance_of_association = 0
list_of_choices = []
while random.randint(0, chance_of_association) == 0:
choice = random.choice(list(spheres[self.sphere]))
# this is the problem
if random.randint(1, 2) == 1:
chance_of_association += 1
list_of_choices.append(choice)
self.associations = list_of_choices

deity1 = God(random.choice(spheres), deity1.get_association, 'godname')

当我运行它时,我得到:

  File "program.py", line 22, in <module>
deity1 = God(random.choice(spheres), deity1.get_association, 'godname')
File "/opt/python-3.6/lib/python3.6/random.py", line 258, in choice
return seq[i]
KeyError: 0

即使行中没有 list(),它也会产生相同的错误。我怎样才能得到它

最佳答案

import random

spheres = {'death': ['death', 'corpses', 'skulls', 'rot', 'ruin', 'the end']}
# Dictionary of the things gods have power over and the relevant things to do with them

class God(object):

def __init__(self, sphere, name, associations = None):
self.sphere = sphere
#so associations are not allocated twice
self.possible_associations = spheres[self.sphere]
self.associations = associations
self.get_association()
self.name = name
# Chooses areas to have power over, hopefully making it
# less and less likely as the program goes on further
def get_association(self):
chance_of_association = 0
list_of_choices = []
while random.randint(0, chance_of_association) == 0 and self.possible_associations:
choice = random.choice(self.possible_associations)
self.possible_associations.remove(choice)
if random.randint(1, 2) == 1:
chance_of_association += 1
list_of_choices.append(choice)
self.associations = list_of_choices

您不能在实例化期间引用“diety1”并调用它的方法“get_association”,因为该对象尚未创建。所以我们将方法调用移动到 __init__ 运行时发生。我们必须更改 random.choice 以搜索字典中的键列表。

deity1 = God(random.choice(list(spheres.keys())), 'godname')

关于python - 从作为列表的字典值中选择时,random.choice 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46616428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com