Уменьшение объема кода (оптимизация) — Python 3.10

Чтобы попрактиковаться в объектном программировании, я решил написать небольшую игру cRPG и столкнулся с проблемой оптимизации движения.

Создана область, в которой вы можете перемещаться между комнатами, например, из комнаты 3 вы можете перейти только в комнату 2, 4, 6, 8 или из комнаты 10 только в комнату 9.

То, как я это сделал, работает и, возможно, подходит для нескольких комнат, но если я захочу расширить его в будущем, это будет просто уродливо и долго:

self.territory.region1()
path = int(input("Which path you want to pick? "))
region = (2) # Numbers of regions you are able to go from current one
while path != 0:
    if region == 1:
        self.territory.region1()
        path = int(input("Which path you want to pick? "))
        if path == 1:
            region = 2
(...)
    elif region == 3:
        self.territory.region3()
        path = int(input("Which path you want to pick? "))
        if path == 1:
            region = 8
        elif path == 2:
            region = 4
        elif path == 3:
            region = 6                
        elif path == 4:
            region = 2
(...)
    elif region == 9:
        self.territory.region9()
        path = int(input("Which path you want to pick? "))
        if path == 1:
            region = 10
        elif path == 4:
            region = 8
    elif region == 10:
        self.territory.region10()
        path = int(input("Which path you want to pick? "))
        if path == 4:
            region = 9

Есть ли простой способ сделать его короче и лучше настроить для добавления регионов?

Используйте json/dict для настройки вашего региона и пути, а также используйте функцию для его анализа и обработки. Кроме того, нет понятия о других функциях, которые вы вызываете

Kris 05.05.2022 16:40
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать dict, чтобы сделать это более расширяемым. Простая иллюстрация того, как вы можете использовать это:

regions = {
    1: {
        1: 2,
    },
    2: {
        1: 8,
        2: 4,
        3: 6,
        4: 2,
    },
    # ...
    9: {
        1: 10,
        4: 8,
    },
    # ...
}

region = 1
while True:
    print(f"You're in region {region}")
    path = int(input("What path? "))
    region = regions[region][path]

это именно то решение, которое я искал, спасибо :)

Mr. Chris 05.05.2022 16:49

Рад, что это помогло! Вы можете принять решение, чтобы отметить этот вопрос как решенный (и дать мне милую, милую репутацию;)).

isaactfa 05.05.2022 16:50

Решение принято :) и пытался "поставить вам палец вверх" еще раньше, но для этого нужно 15 повторений

Mr. Chris 05.05.2022 16:54

При этом не обрабатывается вызов self.territory.region#(), но это можно исправить, избавившись от нумерованных методов в пользу передачи номера региона в качестве аргумента простому методу с именем region(), например. self.territory.region(region).

ShadowRanger 05.05.2022 19:51

Другие вопросы по теме