Διαδρομές
/
Python
Python
/
Ασκήσεις
/
Ποσότητα μεταβλητού μήκους
Ποσότητα μεταβλητού μήκους

Ποσότητα μεταβλητού μήκους

Μέτριο

Οδηγίες

Υλοποίησε την κωδικοποίηση και την αποκωδικοποίηση ποσότητας μεταβλητού μήκους.

Στόχος αυτής της άσκησης είναι να υλοποιήσεις την κωδικοποίηση/αποκωδικοποίηση VLQ.

Με λίγα λόγια, στόχος αυτής της κωδικοποίησης είναι να κωδικοποιεί ακέραιες τιμές με τρόπο που εξοικονομεί bytes. Μόνο τα πρώτα 7 bit κάθε byte είναι σημαντικά (δεξιά στοιχισμένα, κάπως σαν ένα byte ASCII). Έτσι, αν έχεις μια τιμή 32 bit, πρέπει να την αναλύσεις σε μια σειρά από byte των 7 bit. Φυσικά, θα έχεις μεταβλητό αριθμό byte ανάλογα με τον ακέραιό σου. Για να δείξεις ποιο είναι το τελευταίο byte της σειράς, αφήνεις το bit #7 στο 0. Σε όλα τα προηγούμενα byte, θέτεις το bit #7 στο 1.

Έτσι, αν ένας ακέραιος είναι μεταξύ 0-127, μπορεί να αναπαρασταθεί με ένα byte. Αν και το VLQ μπορεί να χειριστεί αριθμούς αυθαίρετου μεγέθους, σε αυτή την άσκηση θα περιοριστούμε μόνο σε αριθμούς που χωρούν σε έναν ανυπόγραφο ακέραιο 32 bit. Ακολουθούν παραδείγματα ακεραίων ως τιμών 32 bit και οι ποσότητες μεταβλητού μήκους στις οποίες αντιστοιχούν:

 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

Μηνύματα εξαιρέσεων

Μερικές φορές είναι απαραίτητο να πετάξεις μια εξαίρεση. Όταν το κάνεις αυτό, θα πρέπει πάντα να συμπεριλαμβάνεις ένα κατατοπιστικό μήνυμα σφάλματος για να υποδεικνύεις ποια είναι η πηγή του σφάλματος. Αυτό κάνει τον κώδικά σου πιο ευανάγνωστο και βοηθά σημαντικά στο debugging. Σε περιπτώσεις όπου γνωρίζεις ότι η πηγή του σφάλματος θα είναι κάποιου συγκεκριμένου τύπου, μπορείς να επιλέξεις να πετάξεις έναν από τους ενσωματωμένους τύπους σφαλμάτων, αλλά θα πρέπει ακόμα να συμπεριλάβεις ένα κατατοπιστικό μήνυμα.

Αυτή η συγκεκριμένη άσκηση απαιτεί να χρησιμοποιήσεις την εντολή raise για να "πετάξεις" ένα ValueError αν η ακολουθία προς αποκωδικοποίηση ή κωδικοποίηση είναι ελλιπής. Τα tests θα περάσουν μόνο αν κάνεις raise την exception και συμπεριλάβεις ένα μήνυμα μαζί της.

Για να πετάξεις ένα ValueError με ένα μήνυμα, γράψε το μήνυμα ως όρισμα στον τύπο exception:

# if the sequence is incomplete
raise ValueError("incomplete sequence")
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Python Exercism

Έτοιμος να ξεκινήσεις την άσκηση Ποσότητα μεταβλητού μήκους;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.