Incontri

Incontri

Medio

Introduzione

Ogni mese, il tuo partner si incontra con il suo migliore amico. Entrambi hanno moltissimi impegni, e trovare una data che vada bene è una bella sfida! Anche tu hai molti impegni, quindi il tuo partner verifica sempre con te le possibili date per vedervi:

  • «Possiamo vederci il primo venerdì del mese prossimo?»
  • «E il terzo mercoledì?»
  • «Magari l'ultima domenica?»

Durante la telefonata di questo mese, il tuo partner ti ha fatto questa domanda:

  • «Mi piacerebbe vederci il giovedì “teenth”; va bene?»

Confuso, chiedi che cos'è un giorno «teenth». Il tuo partner ti spiega che un giorno teenth, un concetto che si è inventato, indica i giorni del mese che in inglese terminano in «-teenth»:

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

Dato che anche i giorni della settimana sono sette, è garantito che ogni giorno della settimana ha esattamente un giorno teenth al mese.

Ora che hai capito il concetto di giorno teenth, controlli il tuo calendario. Quel giovedì teenth non hai nulla in programma, quindi confermi la data al tuo partner con entusiasmo.

Istruzioni

Il tuo compito è trovare la data esatta di un incontro, dati un mese, un anno, un giorno della settimana ed una settimana.

Ci sono sei valori da considerare per la settimana: first, second, third, fourth, last, teenth.

Ad esempio, potresti dover trovare la data dell'incontro fissato per il primo lunedì di gennaio 2018 (1º gennaio 2018).

Allo stesso modo, potresti dover trovare:

  • il terzo martedì di agosto 2019 (20 agosto 2019)
  • il mercoledì «teenth» di maggio 2020 (13 maggio 2020)
  • la quarta domenica di luglio 2021 (25 luglio 2021)
  • l'ultimo giovedì di novembre 2022 (24 novembre 2022)
  • il sabato «teenth» di agosto 1953 (15 agosto 1953)

Teenth

La settimana «teenth» si riferisce ai sette giorni di un mese che in inglese terminano in «-teenth» (13th, 14th, 15th, 16th, 17th, 18th e 19th).

Se ti viene chiesto di trovare il sabato «teenth» di agosto 1953, ne controlliamo il 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

Da qui scopriamo che il sabato «teenth» è il 15 agosto 1953.

Come è strutturato questo esercizio in Python

Abbiamo aggiunto un ulteriore descrittore della settimana (fifth) per indicare la quinta occorrenza di un giorno della settimana nel mese, se esiste.
Se in un mese non c'è una quinta occorrenza, dovresti sollevare un'eccezione.

Personalizzare e sollevare le eccezioni

A volte è necessario sia personalizzare sia raise le eccezioni nel codice. Quando lo fai, dovresti sempre includere un messaggio di errore significativo che indichi qual è l'origine dell'errore. Questo rende il codice più leggibile e aiuta molto durante il debug.

Le eccezioni personalizzate si possono creare tramite nuove classi di eccezione (vedi classes per maggiori dettagli), che di norma sono sottoclassi di Exception.

Nei casi in cui sai che l'origine dell'errore sarà una derivazione di un certo tipo di eccezione, puoi scegliere di ereditare da uno dei built in error types sotto la classe Exception. Quando sollevi l'errore, dovresti comunque includere un messaggio significativo.

Questo particolare esercizio richiede che tu crei un'eccezione personalizzata da sollevare/«lanciare» quando alla funzione meetup() viene fornita una combinazione di nome del giorno della settimana e numero non valida. I test passeranno solo se personalizzi le eccezioni appropriate, le sollevi con raise e includi messaggi di errore appropriati.

Per personalizzare una built-in exception, crea una class che eredita da quell'eccezione. Quando sollevi l'eccezione personalizzata con un messaggio, scrivi il messaggio come argomento 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.")

Fonte

Jeremy Hinegardner ha menzionato un incontro a Boulder che si tiene il «Wednesteenth» di ogni mese
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Python Exercism

Vuoi iniziare Incontri?

Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.