مسیرها
/
Python
Python
/
تمرین‌ها
/
کمیت با طول متغیر
کمیت با طول متغیر

کمیت با طول متغیر

متوسط

دستورالعمل‌ها

کدگذاری و کدگشایی «کمیت با طول متغیر» را پیاده‌سازی کنید.

هدف این تمرین پیاده‌سازی کدگذاری/کدگشایی VLQ است.

به‌طور خلاصه، هدف این کدگذاری آن است که مقادیر عدد صحیح را طوری کدگذاری کند که در مصرف بایت صرفه‌جویی شود. تنها ۷ بیت اول هر بایت معنادار است (راست‌چین؛ تقریباً مثل یک بایت ASCII). بنابراین اگر یک مقدار ۳۲ بیتی داشته باشید، باید آن را به مجموعه‌ای از بایت‌های ۷ بیتی تجزیه کنید. البته تعداد بایت‌ها بسته به عدد صحیح شما متغیر خواهد بود. برای نشان دادن اینکه کدام بایت آخرین بایت مجموعه است، بیت شماره‌ی ۷ را صفر می‌گذارید. در همه‌ی بایت‌های پیشین، بیت شماره‌ی ۷ را یک می‌کنید.

پس اگر یک عدد صحیح بین 0-127 باشد، می‌توان آن را با یک بایت نمایش داد. هرچند VLQ می‌تواند با اعدادی با هر اندازه‌ای کار کند، در این تمرین خودمان را فقط به اعدادی محدود می‌کنیم که در یک عدد صحیح بدون علامت ۳۲ بیتی جا می‌شوند. در ادامه نمونه‌هایی از اعداد صحیح به‌صورت مقادیر ۳۲ بیتی و کمیت‌های با طول متغیرِ متناظرشان آمده است:

 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

پیام‌های استثنا

گاهی لازم است یک استثنا raise کنید. هنگام انجام این کار، همیشه باید یک پیام خطای معنادار همراه آن بیاورید تا نشان دهید منبع خطا چیست. این کار Code شما را خواناتر می‌کند و به Debug کمک چشمگیری می‌کند. در موقعیت‌هایی که می‌دانید منبع خطا نوع مشخصی خواهد بود، می‌توانید یکی از انواع خطای داخلی را raise کنید، اما همچنان باید پیام معناداری همراه آن بیاورید.

این تمرین خاص از شما می‌خواهد که از دستور raise استفاده کنید تا در صورتی که دنباله‌ای که باید رمزگشایی یا رمزگذاری شود ناقص باشد، یک ValueError «پرتاب» کنید. این Testها تنها در صورتی قبول می‌شوند که هم exception را raise کنید و هم پیامی همراه آن بیاورید.

برای raise کردن یک ValueError همراه با پیام، پیام را به‌عنوان آرگومان برای نوع exception بنویسید:

# if the sequence is incomplete
raise ValueError("incomplete sequence")
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Python Exercism

آماده‌اید کمیت با طول متغیر را شروع کنید؟

در Exercism ثبت‌نام کنید تا Python را همراه با 17 مفهوم146 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.