В двух почти одинаковых кодах разные результаты в выходе
Первый:
def f(x, y, a):
return ((x - 30 < a) and (15 - y < a)) or (x * (y + 3) > 60)
for a in range(1, 1001):
fl = True
for x in range(1, 1001):
for y in range(1, 1001):
if not( f(x, y, a) ):
fl = False
break
if not(fl):
break
if fl:
print(a)
break
Второй:
def f(x, y, a):
return ((x - 30 < a) and (15 - y < a)) or (x * (y + 3) > 60)
for a in range(1001):
fl = True
for x in range(1001):
for y in range(1001):
if not( f(x, y, a) ):
fl = False
break
if not(fl):
break
if fl:
print(a)
break
Разница лишь в range(), но в первом случае выход равен 15, а во втором 16.
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Разница тут:
print(f(1, 1, 15))
print(f(0, 0, 15))
Вывод:
True
False
Циклы, проходящие x и y от 1 выполняются целиком уже на a = 15 и алгоритм заканчивается, а вот циклы, начинающиеся с 0, на a = 15 прерываются досрочно из-за f(0, 0, 15) == False и выполняются успешно до конца только при a = 16.