для l oop не будет показывать результаты - PullRequest
0 голосов
/ 25 февраля 2020

Здравствуйте, я пытаюсь решить эту проблему. Я думаю, что я в правильном направлении, но есть эта странная ошибка, которую я получил. Моя задача - создать функцию python с 2 параметрами: одним списком и вторым целым числом. Это имя моей функции: 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, я получаю бесконечное l oop ?? Почему?

Вот весь мой код:

    def fun(aList,broj):
        a=int(input("How many nubers 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))

1 Ответ

0 голосов
/ 25 февраля 2020

Вы попадаете в бесконечное число l oop, потому что когда вы вставляете broj в список, оно становится aList[i]. На следующей итерации l oop это aList[i-1], поэтому aList[i-1] <= broj верно, потому что они одинаковые. Таким образом, вы вставляете broj снова, и это происходит на каждой итерации.

Вы должны выйти из l oop после вставки broj, так как больше не нужно искать места для вставки.

Вы также можете использовать for l oop вместо 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, оно должно быть больше любое число, поэтому его следует добавлять, если l oop завершается без вставки.

Вы можете проверить число в диапазоне, сравнив цепочки aList[i-1] <= broj <= aList[i]

...