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

2 回答 2

1

您的代码中有两个错误。

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

二是逻辑错误。您的else块错误地设置smallestn任何时候考虑的最新数字不小于先前的最小值。

现在,即使您修复了这些问题,该函数也将毫无意义,因为介于 1 和n始终为 1 之间的最小数字将始终为 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函数。

于 2013-09-15T22:52:23.753 回答
0

下次尝试:

一组数字中的最小数字

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

*nsmall(在星号上)的论点的“链接”。

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

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

正如 Blckknght 所说,它就像 call 一样min,是一个内置函数。他和我的做法相同,您在他的示例中了解了一些关于迭代器的知识,即指向数字列表中元素的指针。


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

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

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

于 2013-09-15T22:38:13.303 回答