All Your Base

All Your Base

متوسط

مقدمه

شما همین تازه به عنوان استاد ریاضیات استخدام شده‌اید. هفته‌ی اول خوب پیش رفت، اما در هفته‌ی دوم یک جای کار می‌لنگد. مشکل این است که هر پاسخی که دانشجویانتان می‌دهند غلط است! خوشبختانه مهارت‌های ریاضی‌تان به شما کمک کرده تا مشکل را پیدا کنید: پاسخ‌های دانشجویان درست هستند، اما همه‌شان در مبنای ۲ (دودویی) نوشته شده‌اند! شگفت‌آور است که معلوم شده هر هفته دانشجویان از مبنای دیگری استفاده می‌کنند. برای اینکه بتوانید سریع پاسخ‌های دانشجویان را بررسی کنید، ابزاری می‌سازید که بین مبناها تبدیل انجام می‌دهد.

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

دنباله‌ای از رقم‌ها در یک مبنا را، که نماینده‌ی یک عدد است، به دنباله‌ای از رقم‌ها در مبنای دیگر تبدیل کنید، به‌گونه‌ای که نماینده‌ی همان عدد باشد.

Note

تبدیل را خودتان پیاده‌سازی کنید. برای انجام تبدیل، از راه دیگری استفاده نکنید.

درباره‌ی نمایش مکانی

در نمایش مکانی، یک عدد در مبنای b را می‌توان به‌صورت ترکیب خطی توان‌های b فهمید.

عدد ۴۲، در مبنای ۱۰، یعنی:

(4 × 10¹) + (2 × 10⁰)

عدد ۱۰۱۰۱۰، در مبنای ۲، یعنی:

(1 × 2⁵) + (0 × 2⁴) + (1 × 2³) + (0 × 2²) + (1 × 2¹) + (0 × 2⁰)

عدد ۱۱۲۰، در مبنای ۳، یعنی:

(1 × 3³) + (1 × 3²) + (2 × 3¹) + (0 × 3⁰)

بله. آن سه عدد بالا دقیقاً یکسان‌اند. تبریک!

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

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

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

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

# for input.
raise ValueError("input base must be >= 2")

# another example for input.
raise ValueError("all digits must satisfy 0 <= d < input base")

# or, for output.
raise ValueError("output base must be >= 2")
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Python Exercism

آماده‌اید All Your Base را شروع کنید؟

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