Encontro

Encontro

Médio

Introdução

Todo mês, seu parceiro se encontra com o melhor amigo dele. Os dois têm agendas muito cheias, o que torna difícil encontrar uma data que funcione! Como você também tem uma agenda cheia, seu parceiro sempre confirma com você as possíveis datas do encontro:

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

Na ligação deste mês, seu parceiro te fez esta pergunta:

  • "Eu gostaria de me encontrar na quinta-feira "teenth"; tudo bem?"

Sem entender, você pergunta o que é um dia "teenth". Seu parceiro explica que um dia "teenth", um conceito que ele inventou, refere-se aos dias do mês que terminam 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 tenha exatamente um dia "teenth" por mês.

Agora que você entende o conceito de dia "teenth", confere seu calendário. Você não tem nada planejado para a quinta-feira "teenth", então confirma a data com seu parceiro alegremente.

Instruções

Sua tarefa é encontrar a data exata de um encontro, dado 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, pode ser que você precise encontrar a data do encontro na primeira segunda-feira de janeiro de 2018 (1º de janeiro de 2018).

Da mesma forma, pode ser que você precise 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 se refere aos sete dias de um mês que terminam em '-teenth' (13th, 14th, 15th, 16th, 17th, 18th e 19th).

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

    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

Com isso, vemos que o sábado teenth é 15 de agosto de 1953.

Como este exercício está estruturado em Python

Adicionamos um descritor de semana extra (fifth) para o quinto dia da semana do mês, caso ele exista.
Se não houver um quinto dia da semana em um mês, você deve lançar uma exceção.

Personalizar e lançar exceções

Às vezes é necessário tanto personalizar quanto raise exceções no seu código. Quando você fizer isso, sempre inclua uma mensagem de erro significativa que indique qual é a origem do erro. Isso deixa seu código mais legível e ajuda bastante a depurar.

Exceções personalizadas podem ser criadas por meio de novas classes de exceção (veja classes para mais detalhes.) que normalmente são subclasses de Exception.

Para situações em que você sabe que a origem do erro será derivada de um determinado tipo de exceção, você pode escolher herdar de um dos built in error types sob a classe Exception. Ao lançar o erro, você ainda deve incluir uma mensagem significativa.

Este exercício em particular exige que você crie uma exceção personalizada para ser lançada/"disparada" quando sua função meetup() receber uma combinação inválida de nome de dia da semana e número. Os testes só passarão se você personalizar as exceções adequadas, lançá-las com raise e incluir mensagens de erro adequadas.

Para personalizar uma built-in exception, crie uma class que herde dessa exceção. Ao lançar a exceção personalizada com uma mensagem, escreva 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

Jeremy Hinegardner mencionou um encontro em Boulder que acontece na Wednesteenth de todo mês
Editar via GitHub O link abre em uma nova janela ou aba
Python Exercism

Tudo pronto para começar Encontro?

Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.