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