繁体   English   中英

为什么打印和退货给我不同的结果?

[英]Why are print and return giving me different results?

我正在使用Python脚本计算各种模数的Pascal三角形,然后吐出Lilypond可以读取的格式化字符串。 这是一段音乐。

我可以使用以下方法使三角形完美打印:

rows_and_mod = 2
rows = rows_and_mod ** 2

def lily_string(rows):
    for rownum in range (rows):
        newValue=1
        PrintingList = [newValue]
        for iteration in range (rownum):
            newValue = newValue * (rownum-iteration) * 1 / ( iteration + 1 )
            PrintingList.append(int(newValue % rows_and_mod))
    for n,i in enumerate(PrintingList):
        if i==0:
            PrintingList[n]='r8'
        elif i==1:
            PrintingList[n]='g8'
        elif i==2:
            PrintingList[n]="b16 b"
        elif i==3:
            PrintingList[n]="\\tuplet 3/2 { d'16 d' d' }"
        elif i==4:
            PrintingList[n]="f'32 f' f' f'"
    formatted_tri = " ".join(PrintingList)
    print formatted_tri

final_tri = lily_string(rows)

哪些打印:

G8
g8 g8
g8 r8 g8
g8 g8 g8 g8

但是,当我最后用退货替换打印件时,它只给我返回列表的第一项。 例如:

    formatted_tri = " ".join(PrintingList)
    return formatted_tri

final_tri = lily_string(rows)

print final_tri

仅打印单个g8。

我想我一定在使用或放置Return方面缺少一些东西。

return立即终止该功能。 当它只是return ,没有参数时,这显然更加明显。 函数调用只能执行一次return ,因为一旦执行,它就消失了。

>>> def f():
...     print 1
...     return
...
...     # Doesn't happen.
...     print 2
...
>>> f()
1

如果要从程序中发送输出(例如,使Lilypond可以使用它),则需要print 如果要将数据发送到程序中调用该函数的部分,则需要return 在这里,您需要print 如果要对Python程序中的字符串执行进一步的处理,则需要return单个字符串或字符串列表。

最后,您混合了制表符和空格以进行缩进。 如果继续这样做,您将遇到奇怪的错误,其中程序的某些部分在错误的时间,太多的时间或根本没有执行,并且经过数小时的挫败之后,您会发现Python正在读取您的缩进方式与阅读方式有所不同。 避免这些问题; 不要混用制表符和空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM