Разница между elif и or at python
Вопрос по работе оператора elif.
Есть задача из ЕГЭ https://inf-ege.sdamgia.ru/problem?id=47014. Решение мне понятно. Но не могу понять, почему не работает оператор elif, а именно как работает вот этот блок кода:
if sp4[0] % 5 == 0:
if sp4[1] < v:
k = k + 1
sp3.append(sp4[0] + sp4[1])
elif sp4[1] % 5 == 0:
if sp4[0] < v:
k = k + 1
sp3.append(sp4[0] + sp4[1])
В моём понимании elif должен срабатывать так же, как и if с условием or:
if (sp4[0] % 5 == 0 and sp4[1] < v) or (sp4[1] % 5 == 0 and sp4[0] < v):
k += 1
sp3.append(sp4[0] + sp4[1])
Но этого не происходит. В итоге программа не досчитывает количество пар - это переменная k. Объясните, пожалуйста, почему задача не решается путём написания первого блока, то есть через использование elif.
Своё полное решение:
n = open("ffffff.txt")
sp = []
sp2 = []
for i in n:
sp.append(i)
sp2.append(int(i))
v = 0
f = 0
for t in sp2:
if t % 2 == 1:
v = v + t
f = f + 1
v = v // f
c = 0
k = 0
sp3 = []
sp5 = []
sp6 = []
for q in range(len(sp2)-1):
sp4 = [sp2[q], sp2[q+1]]
if sp4[0] % 5 == 0:
if sp4[1] < v:
k = k + 1
sp3.append(sp4[0] + sp4[1])
elif sp4[1] % 5 == 0:
if sp4[0] < v:
k = k + 1
sp3.append(sp4[0] + sp4[1])
# if (sp4[0] % 5 == 0 and sp4[1] < v) or (sp4[1] % 5 == 0 and sp4[0] < v):
# k += 1
# sp3.append(sp4[0] + sp4[1])
print(k, max(sp3))
Ответы (4 шт):
Приведи пример к более простому варианту и сразу все станет на свои места:
x = 1
if x == 1:
if ...
elif x == 1: # <- вот сюда мы никогда не попадем
if ...
if с условием or означает, что одно из условий должно выполняться:
(условие1) or (условие2)
в случае с if, если условие if выполняется, оно не заходит в конструкцию elif.
Первый вариант кода эквивалентен более сложному условию, чем вы написали:
if (sp4[0] % 5 == 0 and sp4[1] < v) or (sp4[0] % 5 != 0 and sp4[1] % 5 == 0 and sp4[0] < v):
^^^^^^^^^^^^^^^
когда стоит or, для выполнения условия должно выполниться хотя бы одно условие. а вы, написав
elif sp4[1] % 5 == 0:
if sp4[0] < v:
сделали два обязательных условия, т.е. если их объединить, то логическое условие будет не or, а and