Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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 - Fatal编程技术网

Python返回语句未运行

Python返回语句未运行,python,Python,我正在创建一个程序来计算数字列表中的最高小数位数。基本上,带有[1231233]的列表将返回4,因为1233中有四个数字,并且是最大的。另一个例子是[124333,555555]将返回6,因为555555有6个数字 这是我的密码 def place(listy): if len(listy) == 1: decimal = len(str(listy[0])) print(decimal) else: if

我正在创建一个程序来计算数字列表中的最高小数位数。基本上,带有[1231233]的列表将返回4,因为1233中有四个数字,并且是最大的。另一个例子是[124333,555555]将返回6,因为555555有6个数字

这是我的密码

def place(listy):  
    if len(listy) == 1:  
        decimal = len(str(listy[0]))    
        print(decimal)  
    else:  
        if len(str(listy[0])) >= len(str(listy[1])):  
            new_list = listy[0:1]  
            for i in listy[2:]:  
                new_list.append(i)  
            place(new_list)  
        else:   
            place(listy[1:]) 
现在,当我使用printdecimal时,它可以工作,但如果我将printdecimal更改为return decimal,它不会返回任何内容。为什么会这样?我该如何解决这个问题?我遇到过这些返回语句,它们确实运行了很多次。提前谢谢

不是返回没有任何作用,而是您没有传播递归调用的返回。您还需要一些退货:

def place(listy):  
    if len(listy) == 1:  
        decimal = len(str(listy[0]))    
        return decimal
    else:  
        if len(str(listy[0])) >= len(str(listy[1])):  
            new_list = listy[0:1]  
            for i in listy[2:]:  
                new_list.append(i)  
            return place(new_list)  # <-- return added
        else:   
            return place(listy[1:]) # <-- return added

您可以在任何级别看到打印,但要将打印返回给调用方,需要传播打印。

如果您只想找到整数列表的最大长度,请考虑:

max([len(str(n)) for n in N])
比如说

N = [1,22,333,4444]
max([len(str(n)) for n in N]) # Returns 4

N = [12, 4333, 5, 555555]
max([len(str(n)) for n in N]) # Returns 6
注意:这只适用于正整数

或者更简单地说:

len(str(max(N)))

这也只适用于正整数。

当您执行递归调用时,即当place调用place,并且被调用的place返回一个值时,则调用方也必须返回该值,即返回值冒泡到初始调用方

因此,您需要替换每个递归调用

place(...)

正如其他人所说,有更简单的解决方案,例如使用max。如果您想保持递归方法,我将按照以下方式重构您的代码:

def place2(listy):
    if len(listy) < 1:
        return None
    elif len(listy) == 1:
        return len(str(listy[0]))
    else:
        v0, v1 = listy[0], listy[1]
        if v1 > v0:
            return place2(listy[1:])
        else:
            return place2([listy[0]]+listy[2:])

虽然这是尾部递归,但Python并不真正关心,因此这种方法效率低下。在Python中,使用max或使用循环将是更好的解决方案。

使用全局变量google it来访问和更改在函数外部定义的变量。

函数确实返回值,但不会打印出来。 解决这个问题的一个简单方法是,只需在print语句中调用函数。 即:


请注意,您似乎在源代码中混合了制表符和空格。这是不好的…如果你只是用返回语句调用placelisty,它就不会打印。如果您改为打印placelisty,它将打印返回值。这就是你在做的吗?你的问题对我来说似乎有点模糊,你说的不归还是什么意思?请提供调用此函数的代码。仅供参考,使用列表理解或生成器表达式(如maxlenstrnumber)来表示numbers in numbers可能我不会回答您的问题,但更简单的方法是lenstrmaxlist\u variable当有人到达此站点时,这应该是找到解决方案之前的最后一站。谷歌这是没有帮助的。请读一读。
def place2(listy):
    if len(listy) < 1:
        return None
    elif len(listy) == 1:
        return len(str(listy[0]))
    else:
        v0, v1 = listy[0], listy[1]
        if v1 > v0:
            return place2(listy[1:])
        else:
            return place2([listy[0]]+listy[2:])
print(place(listy))