логика return. после if и нет
def findAB(seq, x):
for i in range(len(seq)):
for j range(i+1, len(seq)):
if seq[i]+seq[j] == x:
return seq[i], seq[j]
return 0
я не могу понять логику, почему если я после своего if напишу
else:
return 0
всегда будет выводиться 0. и пригоден лишь первый вариант.
Ответы (1 шт):
if/else
Ваш код не компилируется. А если его записать так, то он будет работать:
def findAB(seq, x):
for i in range(len(seq)):
for j in range(i+1, len(seq)):
if seq[i]+seq[j] == x:
return seq[i], seq[j]
else:
return 0
Обратите внимание что внутренний цикл всегда прерывается на первой итерации. То есть, он не нужен:
def findAB(seq, x):
for i in range(len(seq)):
j = i+1
if seq[i]+seq[j] == x:
return seq[i], seq[j]
else:
return 0
Но теперь и внешний цикл прерывается на первой итерации. То есть, он не нужен:
def findAB(seq, x):
i = 0
j = i+1
if seq[i]+seq[j] == x:
return seq[i], seq[j]
else:
return 0
Если его упростить, получится:
def findAB(seq, x):
if seq[0]+seq[1] == x:
return seq[0], seq[1]
else:
return 0
Не очень много смысла, но если сумма первых двух элементов равна x, они будут возвращены. Иначе 0.
for/else 1
Если приписать else к for, то получится интересная конструкция уникальная для Питона: else после for выполняется, если цикл не был прерван break или return.
def findAB(seq, x):
for i in range(len(seq)):
for j in range(i+1, len(seq)):
if seq[i]+seq[j] == x:
return seq[i], seq[j]
else:
return 0
Внешний цикл при этом выполняется только один раз. То есть, он не нужен:
def findAB(seq, x):
for j in range(1, len(seq)):
if seq[0]+seq[j] == x:
return seq[0], seq[j]
else:
return 0
Проверяются все суммы из нулевого элемента и остальных. Дальше понятно.
for/else 2
else можно приписать к внешнему циклу. Тогда он будет работать так же как и в случае совсем без else. Проверяются все пары:
def findAB(seq, x):
for i in range(len(seq)):
for j in range(i+1, len(seq)):
if seq[i]+seq[j] == x:
return seq[i], seq[j]
else:
return 0
P.S. Не надо писать функции, которые возвращают то пару чисел, то одно. Вы сами себя проклянёте, когда начнёте её использовать.
P.P.S. Жутко не эффективно решать задачу поиска пары через два цикла. Есть способы куда быстрее.