Percursos
/
Python
Python
/
Exercícios
/
Quantidade de Comprimento Variável
Quantidade de Comprimento Variável

Quantidade de Comprimento Variável

Médio

Instruções

Implementa a codificação e descodificação de quantidade de comprimento variável.

O objetivo deste exercício é implementar a codificação/descodificação VLQ.

Em resumo, o objetivo desta codificação é codificar valores inteiros de forma a poupar bytes. Apenas os primeiros 7 bits de cada byte são significativos (alinhados à direita; mais ou menos como um byte ASCII). Por isso, se tiveres um valor de 32 bits, tens de o dividir numa série de bytes de 7 bits. Claro que vais ter um número variável de bytes, dependendo do teu inteiro. Para indicar qual é o último byte da série, deixas o bit n.º 7 a zero. Em todos os bytes anteriores, colocas o bit n.º 7 a um.

Assim, se um inteiro estiver entre 0-127, pode ser representado por um byte. Embora a VLQ consiga lidar com números de tamanhos arbitrários, neste exercício vamo-nos restringir apenas a números que cabem num inteiro sem sinal de 32 bits. Aqui estão exemplos de inteiros como valores de 32 bits e as quantidades de comprimento variável em que se traduzem:

 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

Mensagens de exceção

Por vezes, é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro significativa para indicar qual é a origem do erro. Isto torna o teu código mais legível e ajuda imenso na depuração. Em situações em que sabes que a origem do erro vai ser de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves continuar a incluir uma mensagem significativa.

Este exercício em particular exige que uses a instrução raise para lançar um ValueError caso a sequência a descodificar ou a codificar esteja incompleta. Os testes só passam se fizeres raise à exception e incluíres uma mensagem com ela.

Para lançar um ValueError com uma mensagem, escreve a mensagem como argumento do tipo exception:

# if the sequence is incomplete
raise ValueError("incomplete sequence")
Editar via GitHub A ligação abre numa nova janela ou separador
Python Exercism

Estás pronto para começar Quantidade de Comprimento Variável?

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