Я создаю приложение, которое генерирует ходячие басовые линии из указанных аккордов. Он всегда начинается с root (1-й аккордовый тон), затем следуют перестановки 1-го, 3-го и 5-го аккордовых тонов.
Я хотел бы добавить строку (root) к кортежи (перестановки) в списке в Python, но мой код не работает. Позвольте мне поставить свой код:
# pip install pychord
from pychord import Chord
from itertools import permutations
def returnPermutations(arr, r):
return list(permutations(arr, r))
c7 = Chord("C7")
print("c7.components()", c7.components())
print("Get the Triad: c7.components()[0:3]: ", c7.components()[0:3])
chordTonePermutations = returnPermutations(c7.components()[0:3], 3)
print("chordTonePermutations: ", chordTonePermutations)
print("chordTonePermutations[0]: ", chordTonePermutations[0])
# walkingBass = tuple((c7.components()[0],)) + chordTonePermutations[0]
walkingBass = list(tuple((c7.components()[0],)) + chordTonePermutations[0])
walkingBassList = []
# walkingBassList = list.append(walkingBass)
for chordTones in chordTonePermutations:
print("chordTones", chordTones)
walkingBass = tuple((c7.components()[0],)) + chordTones
# walkingBass = list(tuple((c7.components()[0],)) + chordTones)
walkingBassList = list.append(walkingBass)
print("walkingBass", walkingBass)
print("walkingBassList", walkingBassList)
# What I expect is a list of tuples which always begins with the root 'C',
# plus the permutations of the triad (the first 3 chord tones):
# walkingBassList [
# ('C', 'C', 'E', 'G'),
# ('C', 'C', 'G', 'E'),
# ('C', 'E', 'C', 'G'),
# ('C', 'E', 'G', 'C'),
# ('C', 'G', 'C', 'E'),
# ('C', 'G', 'E', 'C')]
... Этот код дает мне следующий вывод с ошибкой:
c7.components() ['C', 'E', 'G', 'Bb']
Get the Triad: c7.components()[0:3]: ['C', 'E', 'G']
chordTonePermutations: [('C', 'E', 'G'), ('C', 'G', 'E'), ('E', 'C', 'G'), ('E', 'G', 'C'), ('G', 'C', 'E'), ('G', 'E', 'C')]
chordTonePermutations[0]: ('C', 'E', 'G')
chordTones ('C', 'E', 'G')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-84-3a01c9d6da74> in <module>()
24 walkingBass = tuple((c7.components()[0],)) + chordTones
25 # walkingBass = list(tuple((c7.components()[0],)) + chordTones)
---> 26 walkingBassList = list.append(walkingBass)
27
28 print("walkingBass", walkingBass)
TypeError: descriptor 'append' requires a 'list' object but received a 'tuple'
Итак, я окружил кортеж списком:
# walkingBass = tuple((c7.components()[0],)) + chordTones
walkingBass = list(tuple((c7.components()[0],)) + chordTones)
Теперь это дает мне TypeError: append() takes exactly one argument (0 given)
:
TypeError Traceback (most recent call last)
<ipython-input-86-e2ecc32a34c8> in <module>()
24 # walkingBass = tuple((c7.components()[0],)) + chordTones
25 walkingBass = list(tuple((c7.components()[0],)) + chordTones)
---> 26 walkingBassList = list.append(walkingBass)
27
28 print("walkingBass", walkingBass)
TypeError: append() takes exactly one argument (0 given)
... Подождите. (0 дано)? Один аргумент walkingBass
уже дан, верно? Что со мной не так?
Следующий вопрос мне не помогает, потому что у дополнения действительно нет аргументов. Он продолжает говорить: TypeError: append () принимает ровно один аргумент (0 дано)
... Я в полном замешательстве. Может ли кто-нибудь помочь мне исправить это? Заранее спасибо.