Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Подскажите как раскидать классы?

Радик Маратович Ученик (22), на голосовании 1 год назад
Задание 1. Реализация деревни эльфов

Что нужно сделать

Лесные эльфы расположили свою деревню в лесу, прямо на деревьях. Нужно расселить эльфов по веткам деревьев, а затем подсчитать общее количество соседей определённого эльфа.

Всего в лесу пять деревьев, каждое из которых генерируется с помощью случайных чисел, заданных в указанных далее диапазонах. На каждом дереве есть 3–5 основных больших ветвей. На каждой большой ветке расположены ещё 2-3 средние ветки. Дома эльфов построены на больших и на средних ветках. Более мелкие ветви не рассматриваются в этой задаче.

В начале программы пользователь размещает в каждом доме по одному эльфу. Делается это с помощью последовательного перебора всех имеющихся домов и запроса имени заселяемого эльфа через стандартный ввод. Если было введено None в качестве имени, то дом пропускается и не заселяется никем.

После этого требуется найти определённого эльфа по имени. Имя искомого эльфа вводится через стандартный ввод. Для найденного эльфа нужно вывести общее количество эльфов, живущих вместе с ним на одной большой ветви. Это и будет искомое количество соседей.
Голосование за лучший ответ
Модер Хуйло Просветленный (38075) 1 год назад
стань эльфом мужик
Радик МаратовичУченик (22) 1 год назад
Я тоже думал об этом))))
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (251832) 1 год назад
Ну, и надо всего три класса: эльфы, ветки и деревья.
Радик МаратовичУченик (22) 1 год назад
ну эт понятно как написать зависимость от большой ветки к средней?
большая ветка это = ранд скока то средних
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (251832) Радик Маратович, добавить свойство, кот. указывает на родителя.
Адам Тлехугов Мастер (2162) 1 год назад
Для решения данной задачи вы можете использовать классы и объекты, чтобы представить деревню эльфов и их дома. Вот пример возможной реализации:


 
import random

class Elf:
def __init__(self, name):
self.name = name

class Tree:
def __init__(self, branches):
self.branches = branches
self.homes = [[] for _ in range(branches)]

def populate_homes(self):
for i in range(self.branches):
print(f"Дом {i + 1}:")
while True:
elf_name = input("Введите имя эльфа (или 'None' для пропуска): ")
if elf_name.lower() == "none":
break
elf = Elf(elf_name)
self.homes[i].append(elf)

def find_elf_neighbors(self, elf_name):
total_neighbors = 0
for home in self.homes:
for elf in home:
if elf.name == elf_name:
total_neighbors += len(home) - 1 # исключаем самого эльфа
break
return total_neighbors

# Создаем деревню с пятью деревьями и случайным количеством веток на каждом дереве
tree_count = 5
trees = [Tree(random.randint(3, 5)) for _ in range(tree_count)]

# Располагаем эльфов в домах
for tree in trees:
tree.populate_homes()

# Находим количество соседей для определенного эльфа
elf_name_to_find = input("Введите имя эльфа для поиска соседей: ")
total_neighbors_found = 0
for tree in trees:
total_neighbors_found += tree.find_elf_neighbors(elf_name_to_find)

print(f"Количество соседей для эльфа {elf_name_to_find}: {total_neighbors_found}")

В этом примере класс Elf представляет отдельного эльфа, а класс Tree представляет дерево с его домами. Мы создаем пять объектов класса Tree, каждый из которых имеет случайное количество веток. Затем мы вызываем метод populate_homes для каждого дерева, чтобы пользователь мог заселить эльфов в дома. После этого мы запрашиваем имя эльфа, для которого нужно найти соседей, и вызываем метод find_elf_neighbors, чтобы найти количество соседей для данного эльфа.

Обратите внимание, что в приведенном коде предполагается, что пользователь будет вводить данные в консоли. Вы можете адаптировать код для использования с другими интерфейсами, если это необходимо.
Похожие вопросы