我正在尝试输入数字,我希望我的函数返回最小的数字。
然而,我的代码似乎提前停止执行:只要输入中的一个数字小于另一个数字。
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))
答案 0 :(得分: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
)。
答案 1 :(得分: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
答案 2 :(得分: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