Соответствие списков условию непрерывного возрастания
Даны два целочисленных списка A и B, необходимо проверить, что они упорядочены по возрастанию и непрерывно возрастают, если это не так, выдать сообщение о несоответствии. 100% есть гораздо более тривиальные и логичные способы решения этой задачки, но просьба подсказать, почему в моём коде некорректно работает проверка на соответствие. Для последовательностей a =1 2 3 и b = 4 5 6 и a= 1 1 1 и b= 2 2 2 все работает корректно, а например для a = 1 1 2 и b = 2 3 4 срабатывает некорректно. Я исходил из логики создания новых списков с добавление разниц из предыдущих. Новые списки отражаются корректно, а вот сравнения минимумов нет. Код:
a = list(map(int, input().split()))
b = list(map(int, input().split()))
c = []
d = []
try:
for i in range(len(a)):
m = a[i + 1] - a[i]
c.append(m)
except IndexError:
pass
try:
for j in range(len(b)):
k = b[j + 1] - b[j]
d.append(k)
except IndexError:
pass
if min(c) <= 0:
if min(d) <= 0:
print('lists dont meet with the requirements')
else:
print('Ok')
Ответы (2 шт):
Проверить на упорядоченность по возрастанию:
a = list(map(int, input().split()))
b = list(map(int, input().split()))
for i in range(len(a)-1):
if a[i] >= a[i+1]:
print('A list don\'t meet with the requirements')
break
for i in range(len(b)-1):
if b[i] >= b[i+1]:
print('B list don\'t meet with the requirements')
break
Или можно обернуть все в функцию:
def check(lst):
for i in range(len(lst)-1):
if lst[i] >= lst[i+1]:
return False
return True
a = list(map(int, input().split()))
b = list(map(int, input().split()))
if not check(a):
print('A list don\'t meet with the requirements')
if not check(b):
print('B list don\'t meet with the requirements')
Как я понял при a = 1 1 2 и b = 2 3 4 вы ожидали увидеть lists dont meet with the requirements, но получаете Ok.
Дело все в последних проверках. Если min(c) <= 0, то вместо того, чтобы сразу сказать, что последовательность не возрастающая, вы проверяете min(d) <= 0, а вот b уже является возрастающей последовательностью и вы выводите Ok.
Так же, как я и писал в комментариях вы можете убрать try и просто сделать цикл до len(a) - 1.
Вот пример кода:
a = list(map(int, input().split()))
b = list(map(int, input().split()))
c = []
d = []
for i in range(len(a) - 1):
c.append(a[i + 1] - a[i])
for j in range(len(b) - 1):
d.append(b[j + 1] - b[j])
if(min(c) <= 0 or min(d) <= 0):
print('lists dont meet with the requirements')
else:
print('Ok')
Если я вас не правильно понял, то отпишитесь в комментариях к ответу.