我要做的是创建一个final函数inbounds,它使用一个int(值)列表和两个上下整数。它产生一个小于下限值大于上限值的整数。它也会改变值。如果值中有一个小于lower的int,它将把这个值变为lower,如果值中有一个大于upper的int,那么它将把这个值变为upper。 例如:listin=[-3,82105,86,-10119100,70]inbounds(listin,0,100)=>;4,v突变为[0,82100,86,0100100,70]。在
到目前为止,我尝试了两种方法:
我试过的第一件事是:
def inbounds(values, lower, upper):
if values == []:
return 0
elif lower <= values[0] <= upper:
return inbounds(values[1:], lower, upper)
elif lower > values[0]:
values[0] = lower
return inbounds(values[1:], lower, upper) + 1
else:
values[0] = upper
return inbounds(values[1:],lower, upper) + 1
这确实返回4,但问题是我意识到它只会改变值[0],所以我第二次尝试通过创建另一个具有pos而不是0的函数来解决这个问题,每次它递归时我都会给pos加1:
^{pr2}$问题是界内没有任何作用!!?为什么?当我测试这个例子时,我没有得到4,我得到了没有任何突变的原始inlist。。。在
编辑:我还尝试更改pos<;=len(值)的基本大小写,但仍然不起作用
问题在第一种情况下。
if pos < len(values)
应该改为pos >= len(values)
。在另一种方法是使用列表理解:
你的第二次尝试没有什么问题。你的基本情况是错误的-它应该是
if pos >= len(values)
。另外,您是在包装器函数上递归,而不是helper/inside函数。最后,您需要return
调用包装器函数中的helper函数。请参见以下内容:然而,一般来说,在Python中要避免递归。下面是一个Python式的方法,借用了马拉的巧妙的
^{pr2}$min(max())
技巧:相关问题 更多 >
编程相关推荐