Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/103: Рейтинг темы: голосов - 103, средняя оценка - 4.94
3 / 3 / 0
Регистрация: 01.06.2021
Сообщений: 59

Магический матод __add__

04.02.2022, 18:56. Показов 22204. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Не могу разобраться с данной задачей. Вот она:

"Для одной игры необходимо реализовать механику магии, где при соединении двух элементов получается новый. У нас есть 4 базовых элемента: Вода, Воздух, Огонь, Земля. Из них как раз и получаются новые: Шторм, Пар, Грязь, Молния, Пыль, Лава.

Вот таблица преобразований:
```
Вода + Воздух = Шторм
Вода + Огонь = Пар
Вода + Земля = Грязь
Воздух + Огонь = Молния
Воздух + Земля = Пыль
Огонь + Земля = Лава
```
Напишите программу, которая реализует все эти элементы. Каждый элемент необходимо организовать как отдельный класс. Если результат не определен - то возвращается None.

Примечание: сложение объектов можно реализовывать через магический метод __add__, вот пример использования:
````python
class Example_1:
def __add__(self, other):
return Example_2()

class Example_2:
answer = 'сложили два класса и вывели'


a = Example_1()
b = Example_2()
c = a + b
print(c.answer)
````
Дополнительно: придумайте свой элемент (или элементы), а также реализуйте его взаимодействие с остальными элементами"

Я понял, что метод __add__ делает возможным сложение двух классов, нашел примеры со сложением каких либо параметров класса (в основном целые числа). Не могу понять как применить метод __add__ в данной задаче. Без использования этого метода можно просто создать сторонний класс который будет принимать строковые значения и с помощью if-else, выяснять, что мы ему передали и какой ответ нужно вывести.
Заранее спасибо за ответы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.02.2022, 18:56
Ответы с готовыми решениями:

Матод отражения
Написать программы: 1)решение линейных уравнений методом отражения -придумали чето я делфи то 1 раз вижу, а они прогу пиши) если кто...

Задача. Магический/Не магический квадрат
Проверить, является ли заданная целочисленная матрица A(N, N) "магическим квадратом" (это значит, что суммы чисел во всех её строках,...

Замена методам dataTable.Rows.Add() и .Columns.Add() сформировать сетку 8*16384
Как я разбиваю DataTable for (int i = 0; i < countColumns + 1; i++) { DtTbl.Columns.Add();...

2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,708
Записей в блоге: 14
04.02.2022, 19:48
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Element:
    
    def __init__(self,n):
        if n in ("Вода","Воздух","Огонь","Земля","Шторм","Грязь","Пыль","Лава","Молния","Пар"):
            self.name=n
        else:
            raise ValueError
        
    def __repr__(self):
        return "</"+self.name+"/>"
            
    def __add__(self,other):
        if set((self.name,other.name))==set(("Вода","Воздух")):
            return Element("Шторм")
        if set((self.name,other.name))==set(("Вода","Огонь")):
            return Element("Пар")
        if set((self.name,other.name))==set(("Вода","Земля")):
            return Element("Грязь")
        if set((self.name,other.name))==set(("Воздух","Огонь")):
            return Element("Молния")
        if set((self.name,other.name))==set(("Воздух","Земля")):
            return Element("Пыль")
        if set((self.name,other.name))==set(("Огонь","Земля")):
            return Element("Лава")
        raise ValueError    
 
e1=Element("Огонь")    
e2=Element("Земля")
e3=e1+e2
print(e1,"+",e2,"=",e3)
Добавлено через 51 секунду
Цитата Сообщение от Aalex2326 Посмотреть сообщение
Я понял, что метод __add__ делает возможным сложение двух классов
- не классов, а объектов.
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
04.02.2022, 19:57
Aalex2326,
снова курс от скилбокс, у меня тогда было так. Про None придется самому добавить.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
class Fire:
 
    title = 'Огонь'
 
    def __add__(self, other):
        if isinstance(other, Air):
            return Lightning()
        elif isinstance(other, Water):
            return Steam()
        elif isinstance(other, Earth):
            return Lava()
 
 
class Air:
 
    title = 'Воздух'
 
    def __add__(self, other):
        if isinstance(other, Water):
            return Shtorm()
        elif isinstance(other, Fire):
            return Lightning()
        elif isinstance(other, Earth):
            return Dust()
 
 
class Water:
 
    title = 'Вода'
 
    def __add__(self, other):
        if isinstance(other, Air):
            return Shtorm()
        elif isinstance(other, Fire):
            return Steam()
        elif isinstance(other, Earth):
            return Dirt()
 
 
class Earth:
 
    title = 'Земля'
 
    def __add__(self, other):
        if isinstance(other, Water):
            return Dirt()
        elif isinstance(other, Fire):
            return Lava()
        elif isinstance(other, Air):
            return Dust()
 
 
class Shtorm:
    title = 'Шторм'
 
 
class Steam:
    title = 'Пар'
 
 
class Dirt:
    title = 'Грязь'
 
 
class Lightning:
    title = 'Молния'
 
 
class Dust:
    title = 'Пыль'
 
 
class Lava :
    title = 'Лава'
 
 
f = Water()
a = Air()
s = f + a
 
print(f"Смешиваем '{f.title}' c '{a.title}' и получаем '{s.title}'")
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.02.2022, 19:57
Помогаю со студенческими работами здесь

Почему git add . и git add * это плохо? И как тогда быть?
Вопрос по гиту, почему git add . и git add * это плохо? и как тогда быть?

Объясните решение Создайте функцию add(n)/Add(n), которая возвращает функцию, которая всегда добавляет n к любому числу
Создайте функцию add(n)/Add(n), которая возвращает функцию, которая всегда добавляет n к любому числу var addOne = add(1); ...

Магический квадрат
Реализация магического квадрата средствами JavaScript. Как здесь http://validweb.ru/pages/js-magic-cube/

Магический квадрат
Дана матрица NxN заполненная числами. Есть свободная ячейка, в которой записан 0. Определить можно ли, подставив в нее какое-либо число,...

Магический квадрат
прошу помочь в такой схеме решения магического квадрата. #include &lt;iostream&gt; using namespace std; #include &lt;Windows.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru