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

Создайте класс Melody, который будет моделировать процесс подбора мелодии

12.09.2022, 20:48. Показов 3257. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Условие задачи:
Создайте класс Melody, который будет моделировать процесс подбора мелодии. Для этого нужно уметь:
преобразовывать мелодию в строку, записывая ноты через запятую, первая нота с заглавной буквы,
добавлять ноту в конец уже имеющейся мелодии — метод append,
заменять последнюю ноту другой — метод replace_last (без проверки её существования),
удалять последнюю ноту — remove_last (также без проверки),
начинать всё с начала (стирать все ноты) — метод clear,
возвращать длину мелодии (количество нот в ней) при вызове функции len от неё,
а также транспонировать всю мелодию вверх или вниз (сдвиги >> и <<), если это удаётся сделать внутри одной октавы (без циклического сдвига), если же хотя бы одна нота выходит за пределы октавы, возвращать копию исходной мелодии.
Пример1:
ввод
from solution import (
Note, Melody,
N, PITCHES,
LONG_PITCHES, INTERVALS,
)

melody = Melody([Note('фа'), Note('ми'), Note('ре'), Note('до'), Note('ля')])
print(melody)
melody.replace_last(Note('си', True))
print(melody)
melody.remove_last()
print(melody)
melody.append(Note('соль', True))
melody.append(Note('соль', True))
print(melody)

вывод
Фа, ми, ре, до, ля
Фа, ми, ре, до, си-и
Фа, ми, ре, до
Фа, ми, ре, до, со-оль, со-оль

Вот мой код:
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
N = 7
PITCHES = ["до", "ре", "ми", "фа", "соль", "ля", "си"]
LONG_PITCHES = ["до-о", "ре-э", "ми-и", "фа-а", "со-оль", "ля-а", "си-и"]
INTERVALS = ["прима", "секунда", "терция", "кварта", "квинта", "секста", "септима"]
 
 
class Note:
    def __init__(self, pitch, is_long=False):
        self.pitch = PITCHES.index(pitch)
        self.is_long = is_long
 
    def __str__(self):
        return LONG_PITCHES[self.pitch] if self.is_long else PITCHES[self.pitch]
 
    def __le__(self, other):
        return self.pitch <= other.pitch
 
    def __eq__(self, other):
        return self.pitch == other.pitch
 
    def __lt__(self, other):
        return self.pitch < other.pitch
 
    def __gt__(self, other):
        return self.pitch > other.pitch
 
    def __ge__(self, other):
        return self.pitch >= other.pitch
 
    def __rshift__(self, other):
        return Note(PITCHES[(self.pitch + other) % N], self.is_long)
 
    def __lshift__(self, other):
        return Note(PITCHES[(self.pitch - other) % N], self.is_long)
 
    def get_interval(self, other):
        return INTERVALS[abs(self.pitch - other.pitch)]
# тут, вроде, всё правильно
 
class Melody: 
    def __init__(self, notes=None):
        self.notes = notes.copy() if notes else []
 
    def __str__(self):
        return ', '.join([str(i) for i in self.notes])
 
    def append(self, item):
        self.notes.append(item)
 
    def replace_last(self, item):
        self.notes[-1] = item
 
    def remove_last(self):
        return self.notes.pop()
 
    def clear(self):
        return self.notes.clear()
 
    def __len__(self):
        return len(self.notes)
 
    def __rshift__(self, other):
        return Melody([n >> other for n in self.notes]) \
            if self.notes and max([n.pitch for n in self.notes]) + other < N else Melody(self.notes)
 
    def __lshift__(self, other):
        return Melody([n << other for n in self.notes]) \
            if self.notes and min([n.pitch for n in self.notes]) - other >= 0 else Melody(self.notes


а вот ошибка:
Ожидаемый результат
Фа, ми, ре, до, ля
Фа, ми, ре, до, си-и
Фа, ми, ре, до
Фа, ми, ре, до, со-оль, со-оль

Вывод
фа, ми, ре, до, ля
фа, ми, ре, до, си-и
фа, ми, ре, до
фа, ми, ре, до, со-оль, со-оль
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.09.2022, 20:48
Ответы с готовыми решениями:

Создайте класс Student, который будет содержать информацию о студенте
Создайте класс Student, который будет содержать информацию о студенте. С помощью механизма наследования, реализуйте класс Aspirant...

Создайте класс CDate,который будет содержать информацию о дате
Очень нужна помощь так как на днях здавать прошу помощи камрадов,писать желательно по делетански чтоб было понятно что это я :) : ...

Создайте класс Student, который будет содержать информацию о студенте
1. Создайте класс Student, который будет содержать информацию о студенте. С помощью механизма наследования, реализуйте класс...

2
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
12.09.2022, 21:03
Лучший ответ Сообщение было отмечено iSmokeJC как решение

Решение

В строке 45 замените
Python
1
return ', '.join([str(i) for i in self.notes])
на
Python
1
return ', '.join([str(i) for i in self.notes]).title()
1
0 / 0 / 0
Регистрация: 13.12.2021
Сообщений: 35
12.09.2022, 21:14  [ТС]
GulgDev, благодарю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.09.2022, 21:14
Помогаю со студенческими работами здесь

Создайте класс зоопарк, который будет содержать какое-то количество животных
Доброго времени суток, помогите пожалуйста написать программу. Я не могу понять саму логику программы .Создайте класс зоопарк, который...

Создайте класс зоопарк, который будет содержать какое-то количество животных
Здравствуйте помогите пожалуйста решить задание. Создайте класс зоопарк, который будет содержать какое-то количество животных. Создайте...

Создайте класс Passport (паспорт), который будет содержать паспортную информацию о гражданине Украины
Создайте класс Passport (паспорт), который будет содержать паспортную информацию о гражданине Украины. С помощью механизма наследования,...

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

Создайте класс Animal, обозначив для него в конструкторе атрибуты name, age и общий атрибут id, который будет увеличиват
Создайте класс Animal, обозначив для него в конструкторе атрибуты name, age и общий атрибут id, который будет увеличиваться на единицу...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка 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" Извлеките архив и вы увидите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru