Encontro

Encontro

Médio

Introdução

Todos os meses, a tua cara-metade encontra-se com o melhor amigo. Ambos têm agendas muito preenchidas, o que torna difícil encontrar uma data que sirva! Como também tens a tua própria agenda preenchida, a tua cara-metade confirma sempre duas vezes contigo as potenciais datas dos encontros:

  • "Posso encontrar-me na primeira sexta-feira do próximo mês?"
  • "E na terceira quarta-feira?"
  • "Talvez no último domingo?"

Na chamada deste mês, a tua cara-metade fez-te esta pergunta:

  • "Gostava de me encontrar na quinta-feira teenth; está bem?"

Confuso, perguntas o que é um dia "teenth". A tua cara-metade explica que um dia teenth, um conceito que inventou, se refere aos dias do mês que acabam em '-teenth':

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

Como também há sete dias da semana, é garantido que cada dia da semana tem exatamente um dia teenth por mês.

Agora que compreendes o conceito de dia teenth, consultas o teu calendário. Não tens nada planeado para a quinta-feira teenth, por isso confirmas a data com a tua cara-metade, todo contente.

Instruções

A tua tarefa é encontrar a data exata de um encontro, dados um mês, um ano, um dia da semana e uma semana.

Há seis valores de semana a considerar: first, second, third, fourth, last, teenth.

Por exemplo, podes ter de encontrar a data do encontro na primeira segunda-feira de janeiro de 2018 (1 de janeiro de 2018).

Da mesma forma, podes ter de encontrar:

  • a terceira terça-feira de agosto de 2019 (20 de agosto de 2019)
  • a quarta-feira teenth de maio de 2020 (13 de maio de 2020)
  • o quarto domingo de julho de 2021 (25 de julho de 2021)
  • a última quinta-feira de novembro de 2022 (24 de novembro de 2022)
  • o sábado teenth de agosto de 1953 (15 de agosto de 1953)

Teenth

A semana teenth refere-se aos sete dias de um mês que terminam em '-teenth' (13, 14, 15, 16, 17, 18 e 19).

Se te pedirem para encontrar o sábado teenth de agosto de 1953, consultamos o calendário desse mês:

    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

A partir daqui, concluímos que o sábado teenth é 15 de agosto de 1953.

Como este exercício está estruturado em Python

Adicionámos um descritor de semana adicional (fifth) para o quinto dia da semana do mês, se existir.
Se não houver um quinto dia da semana num mês, deves lançar uma exceção.

Personalizar e lançar exceções

Por vezes é necessário personalizar e raise exceções no teu código. Quando o fizeres, deves incluir sempre uma mensagem de erro significativa que indique qual é a origem do erro. Isto torna o teu código mais legível e ajuda imenso na depuração.

As exceções personalizadas podem ser criadas através de novas classes de exceção (vê classes para mais detalhes.) que são tipicamente subclasses de Exception.

Nas situações em que sabes que a origem do erro será derivada de um determinado tipo de exceção, podes optar por herdar de um dos built in error types da classe Exception. Ao lançar o erro, deves continuar a incluir uma mensagem significativa.

Este exercício em particular exige que cries uma exceção personalizada para ser lançada/«thrown» quando a tua função meetup() recebe uma combinação de nome de dia da semana e número que é inválida. Os testes só passam se personalizares as exceções adequadas, as lançares com raise e incluíres mensagens de erro adequadas.

Para personalizar uma built-in exception, cria uma class que herde dessa exceção. Ao lançar a exceção personalizada com uma mensagem, escreve a mensagem como argumento do 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.")

Fonte

O Jeremy Hinegardner mencionou um encontro em Boulder que acontece no Wednesteenth de cada mês
Editar via GitHub A ligação abre numa nova janela ou separador
Python Exercism

Estás pronto para começar Encontro?

Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.