我有一个函数可以生成一个字符串列表,其中放置了8个字符串
def MajorScale(s):
i = notes.index(s)
t = i
major_scale = []
major_scale.append(notes[t])
t = t+2
if t >= 12:
t = t-12
major_scale.append(notes[t])
t = t+2
if t >= 12:
t = t-12
major_scale.append(notes[t])
t = t+1
if t >= 12:
t = t-12
major_scale.append(notes[t])
t = t+2
if t >= 12:
t = t-12
major_scale.append(notes[t])
t = t+2
if t >= 12:
t = t-12
major_scale.append(notes[t])
t = t+2
if t >= 12:
t = t-12
major_scale.append(notes[t])
t = t+1
if t >= 12:
t = t-12
major_scale.append(notes[t])
print(major_scale)
return major_scale
下一个函数调用MajorScale并依赖于major_scale列表来工作
def MajorChord(s):
MajorScale(s)
major_chord = []
major_chord.append(major_scale[0])
major_chord.append(major_scale[2])
major_chord.append(major_scale[4])
print(major_chord)
然而,当我运行该程序时,我收到一条错误,说“major_scale未定义”
我只是不确定我此刻做错了什么。如果有人能看到我所做的愚蠢错误,我很乐意找到。
答案 0 :(得分:5)
您的函数MajorScale
会返回一个值,您不会将其保存到MajorChord
中的变量。
def MajorChord(s):
MajorScale(s)
major_chord = []
...
因此计算返回值并立即丢弃。将返回值放入这样的变量中以便使用它:
def MajorChord(s):
major_scale = MajorScale(s)
major_chord = []
...
答案 1 :(得分:0)
你可以使用列表理解来使你的代码更具可读性
def MajorScale(note):
i = notes.index(note)
offsets = [0, 2, 4, 6, 7, 9, 11, 13, 14]
return [notes[(i+x)%12] for x in offsets]
def MajorChord(note):
return MajorScale(note)[0:5:2]