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

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

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

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

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

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

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

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


 
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, чтобы найти количество соседей для данного эльфа.

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