Meetup

Meetup

Media

Introducción

Cada mes, tu pareja queda con su mejor amigo. Ambos tienen agendas muy apretadas, ¡así que encontrar una fecha que les venga bien es todo un reto! Como tú también tienes una agenda apretada, tu pareja siempre consulta contigo las posibles fechas para quedar:

  • «¿Puedo quedar el primer viernes del mes que viene?»
  • «¿Y el tercer miércoles?»
  • «¿Quizá el último domingo?»

En la llamada de este mes, tu pareja te hizo esta pregunta:

  • «Me gustaría quedar el jueves teenth; ¿te parece bien?»

Confundido, preguntas qué es un día «teenth». Tu pareja te explica que un día teenth, un concepto que se ha inventado, se refiere a los días del mes que terminan en «-teenth»:

  • 13th (thirteenth)
  • 14th (fourteenth)
  • 15th (fifteenth)
  • 16th (sixteenth)
  • 17th (seventeenth)
  • 18th (eighteenth)
  • 19th (nineteenth)

Como además hay siete días de la semana, está garantizado que cada día de la semana tiene exactamente un día teenth cada mes.

Ahora que entiendes el concepto de día teenth, consultas tu calendario. No tienes nada planeado para el jueves teenth, así que confirmas la fecha con tu pareja muy contento.

Instrucciones

Tu tarea es encontrar la fecha exacta de una reunión, dados un mes, un año, un día de la semana y una semana.

Hay seis valores posibles para la semana: first, second, third, fourth, last y teenth.

Por ejemplo, es posible que te pidan encontrar la fecha de la reunión del primer lunes de enero de 2018 (1 de enero de 2018).

Del mismo modo, es posible que te pidan encontrar:

  • el tercer martes de agosto de 2019 (20 de agosto de 2019)
  • el miércoles «teenth» de mayo de 2020 (13 de mayo de 2020)
  • el cuarto domingo de julio de 2021 (25 de julio de 2021)
  • el último jueves de noviembre de 2022 (24 de noviembre de 2022)
  • el sábado «teenth» de agosto de 1953 (15 de agosto de 1953)

Teenth

La semana «teenth» se refiere a los siete días de un mes que terminan en «-teenth» (13th, 14th, 15th, 16th, 17th, 18th and 19th).

Si nos piden encontrar el sábado «teenth» de agosto de 1953, consultamos su calendario:

    August 1953
Su Mo Tu We Th Fr Sa
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

De ahí deducimos que el sábado «teenth» es el 15 de agosto de 1953.

Cómo está estructurado este ejercicio en Python

Hemos añadido un descriptor de semana adicional (fifth) para el quinto día de la semana del mes, si lo hay.
Si no hay un quinto día de la semana en un mes, debes lanzar una excepción.

Personalizar y lanzar excepciones

A veces es necesario tanto personalizar como raise excepciones en tu código. Cuando hagas esto, siempre debes incluir un mensaje de error significativo para indicar cuál es el origen del error. Esto hace que tu código sea más legible y ayuda mucho con la depuración.

Las excepciones personalizadas se pueden crear mediante nuevas clases de excepción (consulta classes para más detalles) que normalmente son subclases de Exception.

En situaciones en las que sabes que el origen del error será un derivado de cierto tipo de excepción, puedes optar por heredar de uno de los built in error types bajo la clase Exception. Al lanzar el error, también debes incluir un mensaje significativo.

Este ejercicio en particular requiere que crees una excepción personalizada que sea lanzada/«disparada» cuando a tu función meetup() se le dé una combinación de nombre de día de la semana y número que no sea válida. Las pruebas solo pasarán si personalizas las excepciones adecuadas, las lanzas con raise e incluyes los mensajes de error adecuados.

Para personalizar una built-in exception, crea una class que herede de esa excepción. Al lanzar la excepción personalizada con un mensaje, escribe el mensaje como argumento del tipo exception:

# subclassing the built-in ValueError to create MeetupDayException
class MeetupDayException(ValueError):
    """Exception raised when the Meetup weekday and count do not result in a valid date.

    message: explanation of the error.

    """
    def __init__(self, message):
        self.message = message

        
# raising a MeetupDayException
raise MeetupDayException("That day does not exist.")

Fuente

Jeremy Hinegardner mencionó una quedada en Boulder que tiene lugar el «Wednesteenth» de cada mes
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Python Exercism

¿Listo para empezar Meetup?

Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.