Python:函数之间的返回

Python:函数之间的返回,python,arrays,list,return,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:

我有一个生成字符串列表的函数,其中有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并依赖于list 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)
然而,当我运行程序时,我得到一个错误,说“未定义主要刻度”


我只是不确定我现在做错了什么。如果有人能看到我犯的愚蠢错误,我很想找出答案。

你的函数
MajorScale
返回一个值,你没有将其保存到
MajorChord
中的变量中

def MajorChord(s):
    MajorScale(s)
    major_chord = []
    ...
因此,计算返回值并立即丢弃。将返回值放入如下变量中以使用它:

def MajorChord(s):
    major_scale = MajorScale(s)
    major_chord = []
    ...

函数
MajorScale
返回一个值,您不会将该值保存到
MajorChord
中的变量中

def MajorChord(s):
    MajorScale(s)
    major_chord = []
    ...
因此,计算返回值并立即丢弃。将返回值放入如下变量中以使用它:

def MajorChord(s):
    major_scale = MajorScale(s)
    major_chord = []
    ...

您可以使用列表理解来提高代码的可读性

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]

您可以使用列表理解来提高代码的可读性

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]

您使用了大写字母“M”。在这种情况下?我有一个名为MajorScale的函数和一个名为MajorScale的列表,但它们是不同的东西。您使用了大写字母“M”。在这种情况下?我有一个叫做MajorScale的函数和一个叫做MajorScale的列表,但它们是不同的东西。太棒了!不要记得将答案标记为已接受:太好了!不要记得将答案标记为已接受: