Ниже приведённый код для курса CS50 “Введение в программирование с Python” работает некорректно [закрыто]

Вопросы и ответы
month = [
    "Январь",
    "Февраль",
    "Март",
    "Апрель",
    "Май",
    "Июнь",
    "Июль",
    "Август",
    "Сентябрь",
    "Октябрь",
    "Ноябрь",
    "Декабрь"
]

while True:

    try:

        date = input("Дата: ").strip()

        if date.find("/"):
            if int(date.split("/")[0]) < 13 and int(date.split("/")[1]) < 32:
                date = date.split("/")
                print(f"{date[2]}-{int(date[0]):02}-{int(date[1]):02}")
                break

        elif date.find(","):
            if len(date) == 3 and date[0] in month:
                date[1] = date.replace(",", "")
                date[0] = month.index(date[0]) + 1
                print(f"{date[2]}-{int(date[0]):02}-{int(date[1]):02}")
                break

    except ValueError:
        continue

введите описание изображения здесь

Когда я пишу 8 сентября 1636 года, вывода нет.

Я хочу написать код, который преобразует ввод = 8 сентября 1636 года в вывод = 1636-09-08, ввод = 10/9/1701 в вывод = 1701-10-09, ввод = 10 декабря 1815 года, запрашивает повторный ввод.

Ответ

Заказчик, проблема в вашем коде заключается в том, что он не правильно обрабатывает входные данные в формате "месяц день, год" и "/". По вашему описанию видно, что вы хотите, чтобы ввод на типа "Сентябрь 8, 1636" приводил к выходу "1636-09-08", а ввод в формате "10/9/1701" выдавал "1701-10-09".

Я исправлю ваш код, чтобы он правильно работал с обоими форматами входных данных. Вот исправленная версия:

month = [
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December"
]

while True:
    try:
        date = input("Date: ").strip()

        # Проверка на формат месяца/дня/года
        if "/" in date:
            month_day_year = date.split("/")
            if (1 <= int(month_day_year[0]) <= 12) and (1 <= int(month_day_year[1]) <= 31):
                print(f"{int(month_day_year[2])}-{int(month_day_year[0]):02}-{int(month_day_year[1]):02}")
                break

        # Проверка на формат "месяц день, год"
        elif "," in date:
            month_day_year = date.split(" ")
            month_name = month_day_year[0]
            day = month_day_year[1].replace(",", "")
            year = month_day_year[2]

            if month_name in month:
                month_index = month.index(month_name) + 1
                if 1 <= int(day) <= 31:
                    print(f"{year}-{month_index:02}-{int(day):02}")
                    break

        # Если формат неверен, спрашиваем повторный ввод
        print("Неверный формат даты, попробуйте еще раз.")

    except ValueError:
        print("Введены неверные значения, попробуйте еще раз.")

Объяснение изменений:

  1. Проверка форматирования дат: Убедитесь, что если разделитель — это "/", то оба месяца и дни находятся в заданных пределах.
  2. Проверка формата "месяц день, год": Использую split(" ") для разбиения ввода на части. Если месяц найден и день соответствует диапазону, код форматирует дату в нужный формат.
  3. Вывод сообщения об ошибке: Если ввод некорректен, пользователю предлагается ввести дату повторно.

Теперь скрипт будет корректно обрабатывать оба типа ввода и выдавать нужный формат.

Оцените материал
Добавить комментарий

Капча загружается...