Python 为什么';程序不能运行else块吗? def maxdiff(x): i=1 max=x[0] 最小值=x[0] 而i最大值: max=x[i] elif x[i]max: max=val elif val

Python 为什么';程序不能运行else块吗? def maxdiff(x): i=1 max=x[0] 最小值=x[0] 而i最大值: max=x[i] elif x[i]max: max=val elif val,python,python-3.x,Python,Python 3.x,如果x=[2,4,6,1,3,9]结果应该是9-1=8。但是,该函数没有完成执行 调试帮助我理解它不会执行else语句。它直接跳到i=i+1 在这种情况下,x[4]=3,它既不大于max,也不小于min。因此,函数跳回while循环而不增加i。为什么会发生这种情况?因为您正在迭代输入数组中的值,所以应该重新构造以使用for循环: def maxdiff(x): max=x[0] 最小值=x[0] 对于x[1:]中的val: 如果val>max: max=val elif val

如果
x=[2,4,6,1,3,9]
结果应该是9-1=8。但是,该函数没有完成执行

调试帮助我理解它不会执行
else
语句。它直接跳到
i=i+1


在这种情况下,x[4]=3,它既不大于
max
,也不小于
min
。因此,函数跳回while循环而不增加
i
。为什么会发生这种情况?

因为您正在迭代输入数组中的值,所以应该重新构造以使用for循环:

def maxdiff(x):
max=x[0]
最小值=x[0]
对于x[1:]中的val:
如果val>max:
max=val
elif val
这不仅可以更干净,还可以降低非端接环路的风险

或者

您始终可以使用内置程序(其中有):

def maxdiff(x):
返回最大值(x)-最小值(x)

它确实执行
else
分支,这会导致一个无限循环,正如预期的那样(
i
从未更改,因此
,而
条件从未
为False
),所以您刚才说了它。它既不大也不小。因此它运行
else
语句,因为
continue
语句,
i
没有递增,这会导致无限循环。您不需要else:continue。只需删除它。看起来这里应该使用
for
循环,或者只使用
max(x)-min(x)
,因为它们是内置函数。只需使用内置
max()
min()
maxdiff=max(x)-min(x)
。谢谢。for循环是否自动递增?@boonie是的,在Python中是的。这是一个很好的答案,但这仍然是解决这个问题的方法-依赖内置。maxdiff=max(x)-min(x)@S3DEV我将把这个添加到答案中,我是在假设这是一个特别要求使用迭代解决的练习的基础上操作的。
def maxdiff(x):
    i = 1
    max = x[0]
    min = x[0]
    while i < len(x):
        if x[i] > max:
            max = x[i]
        elif x[i] < min:
            min = x[i]
        else:
            continue
        i = i+1
    return max-min