В вашем коде есть несколько проблем, которые могут вызывать ошибку, особенно с обработкой входных данных и проверкой условий. Вот основные замечания:
Ошибки и недочеты:
Сложные и неясные условия:
Условия с большим количеством or и and выглядят громоздко и могут содержать логические ошибки. Например, a == 1 or a == 3 or a == 5 or a == 7 or a == 8 or a == 10 and b == 31 будет неправильно работать из-за приоритета операций (логическое and выполняется раньше, чем or).
Форматирование дат:
Вы добавляете префикс "0" вручную ("0" + str(...)), но это не учитывает ситуации, когда число уже двухзначное. Для форматирования следует использовать встроенные средства, такие как zfill или f-строки.
Избыточный код:
Много повторяющихся фрагментов с похожей логикой, которые можно объединить или упростить.
Недостаточная обработка всех возможных случаев:
Например, переход с декабря на январь или с января на декабрь не обрабатывается корректно.
Логические ошибки в выводе:
У вас есть случаи, где, например, a3 используется для вывода следующего месяца, но значение переменной не всегда корректно.
m, n = map(int, input().split())
# Количество дней в каждом месяце не високосного года
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# Вычисляем предыдущий день
if n > 1:
prev_m = m
prev_d = n - 1
else:
prev_m = m - 1
prev_d = days_in_month[prev_m - 1]
# Вычисляем следующий день
if n < days_in_month[m - 1]:
next_m = m
next_d = n + 1
else:
next_m = m + 1
next_d = 1
# Форматируем вывод
prev_date = f"{str(prev_m).zfill(2)}.{str(prev_d).zfill(2)}"
next_date = f"{str(next_m).zfill(2)}.{str(next_d).zfill(2)}"
print(f"{prev_date} {next_date}")
Вот так правильно.
Выходит ошибка Failed test #2 of 13. Wrong answer
На вход программе подаются два целых числа, записанных через пробел. Необходимо прочитать эти числа по порядку в переменные m (порядковый номер месяца) и n (число, день месяца). Затем, по переменным m и n определить:
а) дату предыдущего дня (принять, что m и n не могут являться 1 января);
б) дату следующего дня (принять, что m и n не могут являться 31 декабря).
В задаче принять, что год не является високосным. Вывести предыдущую дату и следующую дату (в формате: mm.dd, где m - число месяца; d - номер дня) в одну строчку через пробел.
P.S. Число дней в месяцах не високосного года, начиная с января: 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
a, b = map(int, input().split())
a1 = "0" + str(a)
a2 = "0" + str(a-1)
a3 = "0" + str(a+1)
b1 = "0" + str(b+1)
if a == 2 and b == 28:
print(f'{a1}.{b-1} {a3}.{ "0" + str(b-27)}')
elif a == 2 and b == 1:
print(f'{a2}.{30+b} {a1}.{b1}')
elif a == 3 and b == 1:
print(f'{a2}.{29-b} {a1}.{b1}')
elif a == 1 or a == 3 or a == 5 or a == 7 or a == 8 or a == 10 and b == 31:
print(f'{a1}.{b-1} {a3}.{"0" + str(b-30)}')
elif a == 2 or a == 1 or a == 3 or a == 5 or a == 7 or a == 8 or a == 10 or a == 12 and b > 1 and b < 31:
print(f'{a1}.{b-1} {a1}.{b+1}')
elif a == 5 or a == 7 or a == 8 or a == 10 and b == 1:
print(f'{a2}.{b+29} {a1}.{b1}')
elif a == 4 or a == 6 or a == 9 or a == 11 and b > 1 and b < 30:
print(f'{a1}.{b-1} {a1}.{b+1}')
elif a == 4 or a == 6 or a == 9 or a == 11 and b == 30:
print(f'{a1}.{b-1} {a3}.{"0" + str(b-29)}')
elif a == 4 or a == 6 or a == 9 or a == 11 and b == 1:
print(f'{a2}.{b+30} {a1}.{b1}')