0 / 0 / 0
Регистрация: 13.12.2021
Сообщений: 35

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

12.09.2022, 20:48. Показов 3265. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru