Пожалуйста, помогите решить задачу на Python
Задача: Запросите у пользователя дату в виде номера дня и номера месяца. Определите время года (зима, весна, лето, осень) и номер квартала (Например, "3.7 - лето, 3-ий квартал"). Обработайте возможные ошибки пользователя при вводе. Вот примерный код который я написал:
try:
day = int(input("Введите номер дня: "))
month = int(input("Введите номер месяца: "))
if (day < 1 or day > 31) or (month < 1 or month > 12):
print("Ошибка! Некорректная дата.")
else:
if month in [12, 1, 2]:
season = "зима"
elif month in [3, 4, 5]:
season = "весна"
elif month in [6, 7, 8]:
season = "лето"
else:
season = "осень"
if month in [1, 2, 3]:
quarter = 1
elif month in [4, 5, 6]:
quarter = 2
elif month in [7, 8, 9]:
quarter = 3
else:
quarter = 4
print(f"{day}.{month} - {season}, {quarter}-й квартал")
except ValueError:
print("Ошибка! Введите числа.")
Он ничего не выводит. Что не так? Помогите
Ответы (2 шт):
В данном случае дело в отступах, которые имеют значение для python.
try:
day = int(input("Введите номер дня: "))
month = int(input("Введите номер месяца: "))
if (day < 1 or day > 31) or (month < 1 or month > 12):
print("Ошибка! Некорректная дата.")
else:
if month in [12, 1, 2]:
season = "зима"
elif month in [3, 4, 5]:
season = "весна"
elif month in [6, 7, 8]:
season = "лето"
else:
season = "осень"
if month in [1, 2, 3]: # подвинуть влево
quarter = 1 # подвинуть влево
elif month in [4, 5, 6]: # подвинуть влево
quarter = 2 # подвинуть влево
elif month in [7, 8, 9]: # подвинуть влево
quarter = 3 # подвинуть влево
else: # подвинуть влево
quarter = 4 # подвинуть влево
print(f"{day}.{month} - {season}, {quarter}-й квартал") # подвинуть влево
except ValueError:
print("Ошибка! Введите числа.")
Введите номер дня: 3
Введите номер месяца: 7
3.7 - лето, 3-й квартал
Код можно сократить, использовав арифметику вместо сопоставления номеров месяцев с кварталами и сезонами, а также сделать поточнее проверку корректности дней в месяцах:
try:
day = int(input("Введите номер дня: "))
month = int(input("Введите номер месяца: "))
if not (1 <= month <= 12 and 1 <= day <= [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1]):
print("Ошибка! Некорректная дата.")
else:
quarter = (month - 1) // 3 + 1
season = ['весна', 'лето', 'осень', 'зима'][(month - 3) // 3]
print(f"{day}.{month} - {season}, {quarter}-й квартал")
except ValueError:
print("Ошибка! Введите числа.")
Введите номер дня: 1
Введите номер месяца: 3
1.3 - весна, 1-й квартал
Ваша программа в целом правильня, я исправил в ней только 2 вещи:
import sys
try:
day = int(input("Введите номер дня: "))
month = int(input("Введите номер месяца: "))
except ValueError:
print("Ошибка! Введите числа.")
sys.exit(1)
if (day < 1 or day > 31) or (month < 1 or month > 12):
print("Ошибка! Некорректная дата.")
else:
if month in [12, 1, 2]:
season = "зима"
elif month in [3, 4, 5]:
season = "весна"
elif month in [6, 7, 8]:
season = "лето"
else:
season = "осень"
if month in [1, 2, 3]:
quarter = 1
elif month in [4, 5, 6]:
quarter = 2
elif month in [7, 8, 9]:
quarter = 3
else:
quarter = 4
print(f"{day}.{month} - {season}, {quarter}-й квартал")
Блок
try-exceptя ограничил только на проверку, если пользователь ввел целые числа, потому что другие проверки у вас прямо в последующих командах.И естественно в случае ошибки после вывода сообщения о ней я окончил программу вызовом функции
sys.exit(1). (Ненулевое значение параметра сообщает вызываещему процессу - или операционной системе - что это не нормальный конец.)Я исправил отступы для определения номера квартала.
В вашей программе эта часть была прямо в ветви
else, которая вычислила время года как осень, и потому для остальных времен номер квартала не выводился.