为什么我找不到这样的最小数字?

时间:2013-09-15 22:26:40

标签: python python-3.x

def small(n):
    smallest=n
    for var in range(1,n+1):
        if (smallest > var):
            smallest = var
        else:
            smallest = n
print (small(5))     

2 个答案:

答案 0 :(得分:1)

您的代码中有两个错误。

第一个是编码错误,您不返回任何内容。您可能希望将return smallest放在函数的末尾。

第二个是逻辑错误。在您考虑的最新数字不小于之前的最小值时,else数据块会错误地将smallest设置回n

现在,即使你修复了这些函数,函数也会毫无意义,因为1和n之间的最小数字总是为1.但是,你可以将代码推广到任意序列非常容易:

def small(seq):
    it = iter(seq)         # make an iterator
    smallest = next(it)    # initialize smallest to the first item
    for val in it:         # loop over the rest of the values
        if val < smallest: # no else clause needed
            smallest = val
    return smallest        # and don't foget to return a value at the end!

这也适用于非整数值,如字符串(按字典顺序排序)。但是,您应该只使用内置min函数。

答案 1 :(得分:0)

接下来尝试:

一组数字中的最小数字

def small(*n):
    s=None
    for m in n:
        if s is None or m<s: s=m
    return s

*nsmallasteriks)参数的“链接”。

它搜索n中的最小数字,你可以称之为。

small(5,7,19,3,6)它将返回3,因为它是集合中的最小数字。

正如Blckknght所说的那样,就像调用内置函数min一样。他和我的一样,你在他的例子中学到了一点iterators,这是一个指向数字列表中元素的指针。


我有两个想法来实现你的功能......(第一个:更短)

def small(n):
     s=n
     for v in range(1,n+1):
             s=s if s>v else n
     return s

有用性是有问题的,因为它可以通过这种方式实现(第二种:它真正起作用):

small=lambda x: x

正如您所看到的,您的功能实际上没有任何用处。或者它执行其功能,它返回最小数量的集合[数字]。不知道你想在那里实现什么。