Почему некоторые итерации цикла for пропущены в этом коде? - PullRequest
0 голосов
/ 20 мая 2019

Выполнение тела цикла for пропускается несколько раз.

Я попытался запустить этот код и получил неожиданные результаты. Во время отладки я заметил, что иногда цикл for просто не выполняется. Я проверил на неправильный отступ, но, кажется, хорошо.

    def getOutput (X):
        # Write your code here
        sum = 0
        if int(X) not in setA:
            setA.append(int(X))
            setA.sort()

        for a in range(len(setA)-1):

            if a == 0:
                low = 1
            else:
                low = setA[a-1] + 1
            sum += low

            if  a == (len(setA)-1):
                high = N
            else:
                high = setA[a+1] - 1
            sum += high
            #print(setA, a, low, high)

        return sum

N, M = map(int, input().split())
setA = []
while M > 0:
    X = input()
    out_ = getOutput(X)
    print (out_)
    M -= 1

Sample Input:
10 10
2 
7
5
9
6
1
8
10
3
4


Expected output for the above input:
11
20
30
46
58
61
77
96
102
110

1 Ответ

1 голос
/ 20 мая 2019

Цикл for должен быть for a in range(len(setA)):

вместо for a in range(len(setA)-1):

Я попытался повторить цикл для всех индексов в списке. range (len (setA) - 1) исключает итерацию для последнего элемента списка. Это связано с тем, что функция диапазона по умолчанию исключает последний элемент.

Например: range (5) даст нам [0, 1, 2, 3, 4].

Так что нет необходимости добавлять -1 в приведенном выше коде.

...