Tracks
/
Python
Python
/
Übungen
/
Zahlen variabler Länge
Zahlen variabler Länge

Zahlen variabler Länge

Mittel

Anleitung

Implementiere die Kodierung und Dekodierung von Variable-Length-Quantity-Werten.

Das Ziel dieser Übung ist es, die VLQ-Kodierung und -Dekodierung zu implementieren.

Kurz gesagt: Das Ziel dieser Kodierung ist es, Ganzzahlwerte so zu kodieren, dass Bytes gespart werden. Nur die ersten 7 Bits jedes Bytes sind signifikant (rechtsbündig; ähnlich wie bei einem ASCII-Byte). Wenn du also einen 32-Bit-Wert hast, musst du ihn in eine Reihe von 7-Bit-Bytes zerlegen. Natürlich hängt die Anzahl der Bytes von deiner Ganzzahl ab. Um anzuzeigen, welches Byte das letzte der Reihe ist, lässt du Bit Nr. 7 ungesetzt. In allen vorhergehenden Bytes setzt du Bit Nr. 7.

Eine Ganzzahl zwischen 0-127 lässt sich also als ein einzelnes Byte darstellen. Obwohl VLQ mit Zahlen beliebiger Größe umgehen kann, beschränken wir uns in dieser Übung auf Zahlen, die in eine vorzeichenlose 32-Bit-Ganzzahl passen. Hier sind Beispiele für Ganzzahlen als 32-Bit-Werte und die Variable-Length-Quantity-Kodierungen, in die sie übersetzt werden:

 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

Fehlermeldungen bei Ausnahmen

Manchmal ist es notwendig, eine Ausnahme auszulösen. Dabei solltest du immer eine aussagekräftige Fehlermeldung angeben, die zeigt, woher der Fehler kommt. Das macht deinen Code lesbarer und erleichtert das Debuggen erheblich. Wenn du weißt, dass die Fehlerquelle von einem bestimmten Typ ist, kannst du einen der eingebauten Fehlertypen auslösen, solltest aber trotzdem eine aussagekräftige Meldung angeben.

Diese Übung erfordert, dass du die raise-Anweisung verwendest, um einen ValueError zu „werfen“, wenn die Sequenz zum Dekodieren oder Kodieren unvollständig ist. Die Tests bestehen nur, wenn du sowohl die exception mit raise auslöst als auch eine Meldung mitgibst.

Um einen ValueError mit einer Meldung auszulösen, schreibst du die Meldung als Argument an den Typ exception:

# if the sequence is incomplete
raise ValueError("incomplete sequence")
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Python Exercism

Bereit, mit Zahlen variabler Länge zu starten?

Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.