Почему оператор else не работает вместо if (все предыдущие случаи не соответствуют действительности)? - PullRequest
0 голосов
/ 22 декабря 2018

Итак, у меня есть список mem , который представляет память, и в этом цикле я ищу dataSize количество пустых мест, которые представлены как "-" в памяти.Логика следующая: Сначала найдите "-" (пустой слот), затем пометьте его как начальное местоположение writeStart , а затем посмотрите, сколько еще пустых слотов у меня будет после этой позиции, и посчитайте его как writeSize . Found затем устанавливается на True, если я нашел достаточно слотов, иначе разрывы цикла и возврат к исходному циклу, который ищет другой пустой слот, как writeStart . Затем я использую writeStart и writeSize в качестве параметров для записи в память после этого цикла. Этот код работает правильно, но если я переключу третий , если оператор с else , он больше не будет работать.Зачем?Заранее спасибо.

for i in range(len(mem)):
    if(mem[i] == "-"):
        writeStart = i
        writeSize = 0
        for j in range(i, len(mem)):
            if(mem[j] == "-"):
                writeSize += 1
            if(writeSize == dataSize):
                found = True
                break
            if((mem[j] != "-") & (writeSize != dataSize)): #if switched with an else: error
                i = j
                break
    if(found):
    break

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Если под «третьим условием» подразумевается тот, который имеет как условие mem[j], так и условие writeSize, проблема заключается в том, что предложение else будет только альтернативой writeSize == dataSize, если недля них обоих.

Я думаю, вы могли бы реструктурировать код следующим образом:

for j in range(i, len(mem)):
    if (mem[j] == "-"):
        writeSize += 1
        if (writeSize == dataSize):
            found = True
            break
    else:
        i = j
        break

, потому что проверка writeSize имеет значение, только если вы увеличиваете его.

0 голосов
/ 22 декабря 2018

Я думаю, что вы можете обратиться к этой ссылке:

В чем основное различие между 'if' и 'else if'?

Вам нужно использовать elif -причина хорошо объяснена по ссылке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...