Пытаюсь провести обычную фэнтезийную встречу - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь написать случайную фэнтезийную встречу. При случайном выборе из основного списка вы попадете во второй список, который приведет вас к третьему списку:

  • РУИНЫ-> руины-> усадьба-> хижина

или

  • РУИНЫ -> руины-> деревня-> 4-24 лачуги:

wide_categories = ['РУИНЫ', 'РЕЛИКИ' и т. Д.]

ruins = ['manor', 'village', 'city', etc]

manor = ['hut', 'hovel', 'hall', etc]
village = ['2-12 huts', '4-24 hovels', '6-36 cottages', etc]
city = ['7-42 huts and a citadel', '8-48 houses', etc]

поэтому я написал это:

a = random.randint(0, 1)
b = random.randint(0, 5)
c = random.randint(0, 5)

    def place():
        if a == 0 and b == 0 and c == 0:
            result = 'the ruins of hut'
        elif a == 0 and b == 0 and c == 1:
            result = 'the ruins of a hovel'
        elif a == 0 and b == 0 and c == 2:
            result = 'the ruins of a hall'
        elif a == 0 and b == 0 and c == 3:
            result = 'the ruins of a villa'
        elif a == 0 and b == 0 and c == 4:
            result = 'the ruins of a cottage'
        elif a == 0 and b == 0 and c == 5:
            result = 'the ruins of a palace'

et c ...

Это работает, у меня всего миллион операторов elif, и я повторяю через каждый список вручную. Есть ли лучший способ автоматически сгенерировать результат? Так что, когда "RUINS" выбирается случайным образом, он затем попадает в список "руин", а затем случайным образом выбирает "усадебную деревню или город", а затем на основе этого выбора выбирает из этих списков подсписок?

1 Ответ

0 голосов
/ 04 августа 2020

Используйте для этого словари. Вот пример.

import random

places = {
    "ruins": {
        "manor": ["hut", "hovel", "hall"],
        "vilage": ["2-12 huts", "4-24 hovels", "6-36 cottages"],
        "city": ["7-42 huts and a  citadel", "8-48 houses"],
    },
    # Add other places.
}

place = random.choice(list(places.values()))
# {'manor': ['hut', 'hovel', 'hall'],
#  'vilage': ['2-12 huts', '4-24 hovels', '6-36 cottages'],
#  'city': ['7-42 huts and a  citadel', '8-48 houses']}

place = random.choice(list(place.values()))
# ['2-12 huts', '4-24 hovels', '6-36 cottages']

place = random.choice(place)
# '8-48 houses'

Функция для получения сообщения со случайным местом может выглядеть так:

def place():
    place = random.choice(list(places.values()))
    place = random.choice(list(place.values()))
    place = random.choice(place)
    return "the ruins of {}".format(place)

Также имейте в виду, что если вы хотите, чтобы place чтобы получить случайное место при каждом вызове, вам нужно использовать случайное значение внутри функции. В вашем примере кода вы получаете случайные значения вне функции, поэтому функция place() будет выдавать вам одно и то же сообщение при каждом вызове.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...