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

Проблема со специальными методами

29.04.2022, 13:02. Показов 1133. Ответов 7

Студворк — интернет-сервис помощи студентам
Добрый день. Есть класс, который реализует функциональность (os – экземпляр класса):
экземпляры класса можно складывать: os = os1 + os2, в этом случае возвращается новый экземпляр с суммарной добычей, у слагаемых добыча обнуляется;

от экземпляра класса можно попытаться отнять число: os –= number – отнимается только половина числа (деление нацело) и то, если остается не меньше, чем отнимается; если должно остаться меньше, ничего не происходит;

экземпляр класса можно делить на число: res = os // number – при этом возвращается список длиной number новых экземпляров со значением добычи, поровну и нацело поделенных между новыми экземплярами. Остаток остается у прежнего экземпляра, который делили;

__str__() – метод возвращает строку: Hi, my loot is equal to <добыча>.
__repr__() – метод возвращает строку: OldScrew(<добыча>)
Мой код не проходит тесты:
Ввод
os = OldScrew(200)
print(os)
os -= 150
print(os)
print()
os1 = os + OldScrew(100)
print(os1, os, sep="\n")
Вывод
Hi, my loot is equal to 200.
Hi, my loot is equal to 125.

Hi, my loot is equal to 225.
Hi, my loot is equal to 0.
Пример 2
Ввод
os = OldScrew(180)
print(os)
os -= 35
print(os)
print()
res = os // 7
res[0] -= 2
print(res)
print()
print(os)
os -= 5
print([os])
Вывод
Hi, my loot is equal to 180.
Hi, my loot is equal to 163.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class OldScrew:
    def __init__(self, mining):
        self.mining = mining
 
    def __str__(self):
        return f'Hi, my loot is equal to {self.mining}'
 
    def __repr__(self):
        return f'OldScrew({self.mining})'
 
    def __add__(self, other):
        return OldScrew(self.mining + other.mining)
        self.mining = 0
        other.mining = 0
 
    def __isub__(self, other):
        self.mining -= other // 2
        if self.mining > other // 2:
            return OldScrew(self.mining)
 
    def __floordiv__(self, other):
        return [self.mining // other] * other
Добавлено через 14 минут
Пример 2 написан не до конца:
Ввод
os = OldScrew(180)
print(os)
os -= 35
print(os)
print()
res = os // 7
res[0] -= 2
print(res)
print()
print(os)
os -= 5
print([os])
Вывод
Hi, my loot is equal to 180.
Hi, my loot is equal to 163.

[OldScrew(22), OldScrew(23), OldScrew(23), OldScrew(23), OldScrew(23), OldScrew(23), OldScrew(23)]

Hi, my loot is equal to 2.
[OldScrew(2)]
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2022, 13:02
Ответы с готовыми решениями:

Проблема с методами из tkinter
есть энтри (e = Entry(width = 40)) мне надо из него брать число (i2 = float(e.get())//*число*),но мне надо его красиво разместить (делаю...

Проблема с методами
Проблема была в том что в моем коде после генерации матрицы а потом проведения действия которое меняло ее значения она сохраняла эти...

Обьекты. Проблема с методами обьектов
доброго дня. Изучаю JS. Столнулся с проблемой, что метод не работает. Подскажите пожалуйста, что не так или направьте в правильное...

7
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
29.04.2022, 13:24
Пример - это что у вас выводит сейчас или то, что должен выводить?

В классе у вас 3 ошибки.
Python
1
2
    def __floordiv__(self, other):
        return [self.mining // other] * other
Результат - список обычных чисел, а не объектов класса. А также пропущено, что self должен равняться остатку от деления

Python
1
2
3
4
    def __isub__(self, other):
        self.mining -= other // 2
        if self.mining > other // 2:
            return OldScrew(self.mining)
Если вычитаемое будет больше половины остатка, результатом будет None
0
0 / 0 / 0
Регистрация: 27.04.2022
Сообщений: 29
29.04.2022, 13:39  [ТС]
Пример это то, что должно выводить со списком я разобрался, а вот с остальным нет. Не могли бы Вы мне помочь?

Добавлено через 4 минуты
Пример это то, что должно выводить со списком я разобрался, а вот с остальным нет. Не могли бы Вы мне помочь?
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
29.04.2022, 13:45
Python
1
2
3
4
    def __add__(self, other):
        return OldScrew(self.mining + other.mining)# функция завершила свою работу
        self.mining = 0 #до этих строк и ниже уже дело не доходит
        other.mining = 0
0
0 / 0 / 0
Регистрация: 27.04.2022
Сообщений: 29
29.04.2022, 13: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
class OldScrew:
    def __init__(self, mining):
        self.mining = mining
 
    def __str__(self):
        return f'Hi, my loot is equal to {self.mining}'
 
    def __repr__(self):
        return f'OldScrew({self.mining})'
 
    def __add__(self, other):
        a = self.mining
        b = other.mining
        self.mining = 0
        other.mining = 0
        return OldScrew(a + b)
 
    def __isub__(self, other):
        c = self.mining - other // 2
        if c > other // 2:
            self.mining -= other // 2
            return OldScrew(self.mining)
 
    def __floordiv__(self, other):
        self.mining = self.mining // other
        return [OldScrew(self.mining)] * other
Я исправил, но вывод такой:
Hi, my loot is equal to 180
Hi, my loot is equal to 163

[OldScrew(22), OldScrew(22), OldScrew(22), OldScrew(22), OldScrew(22), OldScrew(22), OldScrew(22)]

Hi, my loot is equal to 23
[OldScrew(21)]
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
29.04.2022, 14:13
Лучший ответ Сообщение было отмечено randomrandint как решение

Решение

Цитата Сообщение от randomrandint Посмотреть сообщение
Не могли бы Вы мне помочь?
Чем вам помочь?
Обработайте случай, когда половина остатка меньше вычитаемого
И в делении self при выходе остатку от деления должен равняться

Добавлено через 7 минут
Цитата Сообщение от randomrandint Посмотреть сообщение
Python
1
return [OldScrew(self.mining)] * other
Такая запись при изменении одного объекта списка меняет все.
используйте конструкцию
Python
1
[my_value for _ in range(n)]
0
0 / 0 / 0
Регистрация: 27.04.2022
Сообщений: 29
29.04.2022, 14:15  [ТС]
Помогите с тем, что при вызове res[0] -= 2 изменяются все элемента списка, а не нулевой.
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
class OldScrew:
    def __init__(self, mining):
        self.mining = mining
 
    def __str__(self):
        return f'Hi, my loot is equal to {self.mining}'
 
    def __repr__(self):
        return f'OldScrew({self.mining})'
 
    def __add__(self, other):
        a = self.mining
        b = other.mining
        self.mining = 0
        other.mining = 0
        return OldScrew(a + b)
 
    def __isub__(self, other):
        c = self.mining - other // 2
        if c > other // 2:
            self.mining -= other // 2
            return OldScrew(self.mining)
        return OldScrew(self.mining)
 
    def __floordiv__(self, other):
        self.mining = self.mining // other
        self.spisok = [OldScrew(self.mining)] * other
        self.mining = self.mining % other
        return self.spisok
 
    def __setitem__(self, key, value):
        self.spisok[key] = value
Hi, my loot is equal to 180
Hi, my loot is equal to 163

[OldScrew(22), OldScrew(22), OldScrew(22), OldScrew(22), OldScrew(22), OldScrew(22), OldScrew(22)]

Hi, my loot is equal to 2
[OldScrew(2)]
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
29.04.2022, 14:20
Цитата Сообщение от randomrandint Посмотреть сообщение
Помогите с тем, что при вызове res[0] -= 2 изменяются все элемента списка, а не нулевой.
Написал уже, что делать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2022, 14:20
Помогаю со студенческими работами здесь

Проблема со статическими методами классов в .bpl
Дано. Пакет bpl, вызываемый из основной части программы. Пакет представляет собой справочник по компаниям различных отраслей, их...

Не могу разобраться со специальными символами в маткаде
как написать &quot;+- Пи/2&quot;

Избавиться от замены специальными символами в относительнном uri
Использую так: var uri1 = new Uri(@&quot;C:\&quot;); var uri2 = new Uri(@&quot;C:\Program Files\Windows\&quot;); return...

Исключить теги и текст между специальными символами
Всем доброго времени суток! Мне нужно выбрать и заменить все слова, исключая теги и слова, исключая текст между ! и ! Не могу понять...

Как написать в Steam сообщение со специальными символами?
как написать в стиаме п ▓ п╨п╟п╨п╬п ╪ пЁп╬я─п╬п╢п ╣ п╡я ▀ я─п╬п╢п╦п╩п╦я│я ▄? ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru