代码未选择负数,而是返回0,我该如何修正代码?

时间:2019-03-05 04:40:15

标签: python

我的任务是创建一个无需使用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

2 个答案:

答案 0 :(得分:1)

for i in range(len(numbers)-1):
    m = fancy_min(numbers[i], numbers[i+1])

如果使用以下数组[1,2,3,4,5]执行此操作,则m将获得以下值。

  1. m = fancy_min(1,2)| m = 1
  2. m = fancy_min(2,3)| m = 2
  3. m = fancy_min(3,4)| m = 3
  4. m = fancy_min(4,5)| m = 4

为了返回数组的最小值,我建议以下内容。

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])

尽管可以做很多事情来简化代码