Track
/
Python
Python
/
Esercizi
/
Quantità a lunghezza variabile
Quantità a lunghezza variabile

Quantità a lunghezza variabile

Medio

Istruzioni

Implementa la codifica e la decodifica a lunghezza variabile.

L'obiettivo di questo esercizio è implementare la codifica e la decodifica VLQ.

In breve, l'obiettivo di questa codifica è codificare valori interi in modo da risparmiare byte. Solo i primi 7 bit di ogni byte sono significativi (allineati a destra; un po' come in un byte ASCII). Quindi, se hai un valore a 32 bit, devi scompattarlo in una serie di byte da 7 bit. Naturalmente, il numero di byte varia a seconda dell'intero. Per indicare qual è l'ultimo byte della serie, lasci il bit #7 a 0. In tutti i byte precedenti, imposti a 1 il bit #7.

Quindi, se un intero è compreso tra 0-127, può essere rappresentato con un solo byte. Anche se VLQ può gestire numeri di dimensioni arbitrarie, in questo esercizio ci limiteremo ai soli numeri che rientrano in un intero senza segno a 32 bit. Ecco alcuni esempi di interi come valori a 32 bit, e la codifica a lunghezza variabile a cui corrispondono:

 NUMBER        VARIABLE QUANTITY
00000000              00
00000040              40
0000007F              7F
00000080             81 00
00002000             C0 00
00003FFF             FF 7F
00004000           81 80 00
00100000           C0 80 00
001FFFFF           FF FF 7F
00200000          81 80 80 00
08000000          C0 80 80 00
0FFFFFFF          FF FF FF 7F

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 molto nel debug. Quando sai che l'origine dell'errore sarà di un certo tipo, puoi scegliere di sollevare uno dei tipi di errore incorporati, ma dovresti comunque includere un messaggio significativo.

Questo esercizio in particolare richiede che tu usi l'istruzione raise per «lanciare» un ValueError se la sequenza da decodificare o codificare è incompleta. I test passeranno solo se usi raise per l'exception e vi alleghi anche un messaggio.

Per lanciare un ValueError con un messaggio, scrivi il messaggio come argomento del tipo exception:

# if the sequence is incomplete
raise ValueError("incomplete sequence")
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Python Exercism

Vuoi iniziare Quantità a lunghezza variabile?

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