首页 > 解决方案 > for循环不会显示结果

问题描述

我正在尝试解决这一问题。我认为我的方向是正确的,但是我遇到了这个奇怪的错误。我的任务是创建一个带有 2 个参数的 python 函数:一个列表和第二个整数。这是我的函数名:def fun(aList, broj):. 参数 aList 应该是浮点数列表,它们必须由用户插入。即使用户按排序顺序插入列表,也需要对列表进行排序。之后,需要将第二个整数参数 broj 放入 aList 列表中,以免破坏顺序。

我就是这样做的 if aList[i-1] <= broj and aList[i] >= broj: aList.insert(i,broj)。现在,当我测试程序并输入这些参数 aList=[1,4,3] 和 broj=2 时,我得到了一个无限循环。为什么?

这是我的所有代码:

    def fun(aList,broj):
        a=int(input("How many numbers do you want to put in the List? "))
        i=0
        while i<a:
            x=int(input("Insert number(broj): "))
            aList.append(x)
            i+=1
        aList.sort()
        i=1
        while i<len(aList):
            if aList[i-1] <= broj and aList[i] >= broj:
                aList.insert(i,broj)
            i+=1
        return aList
       
    
    k=2
    x=[]
    print(fun(x,k))

标签: pythonlistfor-loopwhile-loop

解决方案


你进入了一个无限循环,因为当你插入broj列表时,它变成了aList[i]. 在循环的下一次迭代中,这是aList[i-1],所以aList[i-1] <= broj是真的,因为它们是相同的数字。所以你再次插入broj,每次迭代都会发生这种情况。

您应该在插入后跳出循环broj,因为无需继续寻找更多插入位置。

您也可以使用for循环而不是while.

    for i in range(1, len(aList)):
        if aList[i-1] <= broj <= aList[i]:
            aList.insert(i,broj)
            break
    else:
        aList.append(broj)
    return aList

如果您永远找不到插入位置broj,则它必须大于任何数字,因此如果循环完成但未插入,则应附加它。

您可以通过链接比较来测试范围内的数字aList[i-1] <= broj <= aList[i]


推荐阅读