Python:在函数之间返回

时间:2015-07-26 00:41:51

标签: python arrays list return

我有一个函数可以生成一个字符串列表,其中放置了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未定义”

我只是不确定我此刻做错了什么。如果有人能看到我所做的愚蠢错误,我很乐意找到。

2 个答案:

答案 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]