ট্র্যাক
/
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

এক্সেপশন মেসেজ

কখনও কখনও এক্সেপশন রেইজ করা প্রয়োজন হয়। এমনটা করলে আপনি সবসময় একটি অর্থবহ এরর মেসেজ যোগ করবেন, যাতে বোঝা যায় এররটির উৎস কী। এতে আপনার কোড আরও সহজে পড়া যায় এবং ডিবাগ করতে অনেক সুবিধা হয়। যেসব পরিস্থিতিতে আপনি জানেন যে এররের উৎসটি নির্দিষ্ট কোনো টাইপ হবে, সেখানে আপনি বিল্ট-ইন এরর টাইপগুলোর একটি রেইজ করতে পারেন, তবে তবুও একটি অর্থবহ মেসেজ যোগ করা উচিত।

এই নির্দিষ্ট অনুশীলনীতে ডিকোড বা এনকোড করার সিকোয়েন্সটি অসম্পূর্ণ হলে ValueError "থ্রো" করতে আপনাকে raise স্টেটমেন্ট ব্যবহার করতে হবে। আপনি যদি exception raise করেন এবং তার সঙ্গে একটি মেসেজও দেন, তবেই টেস্ট পাস হবে।

একটি মেসেজসহ ValueError রেইজ করতে, মেসেজটি exception টাইপের একটি আর্গুমেন্ট হিসেবে লিখুন:

# if the sequence is incomplete
raise ValueError("incomplete sequence")
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Python Exercism

ভ্যারিয়েবল লেংথ কোয়ান্টিটি শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Python ট্র্যাকের 17টি কনসেপ্ট146টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।