Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么打印和返回给我不同的结果?_Python_List_Printing_Return - Fatal编程技术网

Python 为什么打印和返回给我不同的结果?

Python 为什么打印和返回给我不同的结果?,python,list,printing,return,Python,List,Printing,Return,我正在使用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

我正在使用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 g8 g8

但当我用一个返回来替换最后的打印时,它只返回列表的第一项。例如:

    formatted_tri = " ".join(PrintingList)
    return formatted_tri

final_tri = lily_string(rows)

print final_tri
只打印一个g8


我想我一定缺少了一些关于如何使用或放置Return的信息。

Return
立即结束函数。当它只是
返回
而没有参数时,这一点就明显地更加明显了。函数调用只能执行一个
返回
,因为一旦执行,它就消失了

>>> def f():
...     print 1
...     return
...
...     # Doesn't happen.
...     print 2
...
>>> f()
1
如果您想从程序中发送输出(例如,这样Lilypond就可以使用它),您需要
print
。如果要将数据发送到程序中调用该函数的部分,则需要
return
。在这里,您需要打印
。如果要在Python程序中对字符串执行进一步处理,则需要返回单个字符串或字符串列表


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

我想我的一个更准确的问题是,“为什么return只给我列表中的第一项?”我认为这可能会中断for循环,但我不确定(并且不知道如何修复它).我已尝试运行您的代码,但它仅打印最后一行
g8 g8 g8 g8
options@RubenBermudez:我认为这是一个缩进问题。@user2357112,是的,行
格式化的\u tri=“”。join(PrintingList)print formatted的\u tri
应该在循环内重现问题。@RubenBermudez:我在编辑视图中进行了检查。这是一个制表符和空格混合的问题。非常感谢,这更好地解释了
return
。在这种情况下,当我(使用
%
操作符)将函数插入Lilypond输出时,它返回“None”。相关代码如下:
f1.write('{%r}\\header{piece=“%s.”}''(lily_string(rows),modulo))
有什么想法吗?@NickWritesMusic:如果您想对文本执行进一步的处理(例如使用
%
将其插入一个较大的字符串),你想构建一个大字符串,然后
返回它,而不是
以增量方式打印它。
打印
将数据发送到外部接收器。因此,类似于将它要打印的所有行连接到一个字符串中,然后返回,这可能是正确的方法?@NickWritesMusic:Yup。好的,我最终使用了
产量
.我不是100%了解它的工作原理,但它在不中断循环的情况下输出列表,所以我很高兴!