1

我正在尝试输入数字,并且我希望我的函数返回最小的数字。

但是,我的代码似乎提前停止执行:只要输入中的一个数字小于另一个。

a = input("")
smallest = 0
a = a.split(" ")
numbers = a

def smallestindex(numbers):
    for i in range(len(numbers)):
        b = int(numbers[i])
        smallest = int(numbers[0])
        print(b)
        if b < smallest:
            smallest = b
            return smallest

print (smallestindex(numbers))
4

3 回答 3

4

这是一个缩进问题。目前,只要块运行,您的return语句就会发生。if b < smallest这可能不是你的本意。您需要取消缩进以与您的for语句处于同一级别,以便它在循环结束后运行,而不是在中间运行。

您还需要将初始化的行移到函数smallest的顶部,而不是让它在循环的每个循环中发生。这应该是这样的:

def smallestindex(numbers):
    smallest = int(numbers[0])    # moved this line up
    for i in range(len(numbers)):
        b = int(numbers[i])
        print(b)
        if b < smallest:
            smallest = b
    return smallest   # unindented this line

还值得注意的是,您的循环可能会略有不同。range(len(numbers))您可以直接使用 循环遍历列表项,而不是循环遍历列表的索引(使用) for b in numbers

于 2012-11-12T23:37:41.640 回答
1

您有一个缩进错误:您正在循环smallest内部返回,因此执行在满足条件for的循环的第一次迭代时停止。if循环完成后,您需要返回结果。此外,您smallest每次都在通过循环进行重置,因此您的if块不会按照您的意图进行。这是一个固定版本:

def smallestindex(numbers):
    smallest = int(numbers[0])
    for i in range(len(numbers)):
        b = int(numbers[i])
        print(b)
        if b < smallest:
            smallest = b
    return smallest
于 2012-11-12T23:39:00.733 回答
0

如果您希望返回函数名称所暗示的最小数字的索引,则需要将代码更改为类似这样

def smallestindex(numbers):
    numbers = [int(x) for x in numbers] # convert numbers to list of ints
    smallest_idx = 0
    smallest = numbers[0]
    for i, b  in enumerate(numbers):
        if b < smallest:
            smallest_idx = i
            smallest = b
    return smallest_idx
于 2012-11-13T00:40:19.593 回答