Python返回语句未运行
我正在创建一个程序来计算数字列表中的最高小数位数。基本上,带有[1231233]的列表将返回4,因为1233中有四个数字,并且是最大的。另一个例子是[124333,555555]将返回6,因为555555有6个数字 这是我的密码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
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))