我的任务是创建一个无需使用min()函数即可从列表中返回最小数字的函数。当我运行以下代码时,它返回0而不是-1。我不太清楚为什么。注意:1. fancy_min仅返回给定两个参数之间的较小数字。 2.如果列表为空,或者参数为无,我想返回无。
def minimum_of(numbers):
mini = 99999999
if numbers == []:
return None
elif numbers is None:
return None
for i in range(len(numbers)-1):
m = fancy_min(numbers[i], numbers[i+1])
if m<mini:
return m
print(minimum_of([-1,3,None,2,1,]))
def fancy_min(a, b):
while a is None:
return b
while b is None:
return a
if a > b:
return b
elif b > a:
return a
答案 0 :(得分:1)
for i in range(len(numbers)-1):
m = fancy_min(numbers[i], numbers[i+1])
如果使用以下数组[1,2,3,4,5]执行此操作,则m将获得以下值。
为了返回数组的最小值,我建议以下内容。
smallest = numbers[0]
for i in range(len(numbers)):
if numbers[i] < smallest:
smallest = numbers[i]
for循环可以用for这样的每个循环简化。
for num in numbers:
if num < smallest:
smallest = num
答案 1 :(得分:0)
如果代码确实返回0,那么问题很可能出在fancy_min
之内。但是,即使fancy_min
的实现很好,代码也存在一些问题,尤其是这样:
for i in range(len(numbers)-1):
m = fancy_min(numbers[i], numbers[i+1])
应该是这样的:
m = numbers[0]
for i in range(1, len(numbers)-1):
m = fancy_min(m, numbers[i])
尽管可以做很多事情来简化代码