[英]Python list iteration with for loop
我正在尝试输入数字,并且我希望函数返回最小的数字。
但是,我的代码似乎早就停止执行:输入中的一个数字小于另一个数字时,就会立即停止执行。
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))
这是一个缩进问题。 当前,只要if b < smallest
小块运行,您的return
语句就会发生。 那可能不是您想要的。 您需要取消缩进以使其与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
还值得注意的是,循环可以略有不同。 您可以使用for b in numbers
直接遍历列表项,而不是遍历列表的索引(使用range(len(numbers))
)。
您有一个缩进错误:您在for
循环中返回的是smallest
的,因此执行在满足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
如果您希望按照函数名称的建议返回最小数字的索引,则需要将代码更改为以下形式
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.