Track
/
Python
Python
/
Esercizi
/
Punto di vista
Punto di vista

Punto di vista

Difficile

Istruzioni

Cambia il genitore di un albero su un nodo selezionato.

Un albero è un tipo particolare di grafo in cui tutti i nodi sono collegati ma non ci sono cicli. Questo significa che, per qualsiasi coppia di nodi, esiste esattamente un percorso per andare da un nodo all'altro.

Questo esercizio consiste nel riorientare un albero per vedere le cose da un punto di vista diverso. Per esempio, gli alberi genealogici sono di solito presentati dal punto di vista dell'antenato:

    +------0------+
    |      |      |
  +-1-+  +-2-+  +-3-+
  |   |  |   |  |   |
  4   5  6   7  8   9

Ma in un albero non c'è una direzione intrinseca. Le stesse informazioni si possono presentare dal punto di vista di qualsiasi altro nodo dell'albero, portandolo fino alla radice e trascinando con sé le sue relazioni. Quindi lo stesso albero visto dal nodo 6 apparirebbe così:

        6
        |
  +-----2-----+
  |           |
  7     +-----0-----+
        |           |
      +-1-+       +-3-+
      |   |       |   |
      4   5       8   9

Così possiamo descrivere più semplicemente i percorsi tra due nodi. Per esempio, il percorso 6-9 (che nel primo albero sale fino alla radice e poi scende fino a un nodo foglia diverso) si può vedere come il percorso 6-2-0-3-9.

Questo esercizio consiste nel prendere un albero in input e riorientarlo dal punto di vista di uno dei nodi.

Messaggi di eccezione

A volte è necessario sollevare un'eccezione. Quando lo fai, dovresti sempre includere un messaggio di errore significativo per indicare qual è l'origine dell'errore. Questo rende il codice più leggibile e aiuta notevolmente il debug. Nei casi in cui sai che l'origine dell'errore sarà di un certo tipo, puoi scegliere di sollevare uno dei tipi di errore predefiniti, ma dovresti comunque includere un messaggio significativo.

Questo particolare esercizio richiede che tu usi l'istruzione raise per «lanciare» più ValueErrors se alla classe Tree() viene passato un albero che non può essere riorientato, o se non è possibile trovare un percorso tra un start node e un end node. I test passeranno solo se usi raise con il tipo di exception atteso e includi insieme ad esso il messaggio atteso.

Controlla con attenzione i test e i risultati attesi.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Python Exercism

Vuoi iniziare Punto di vista?

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