تبدیل مبنا در پایتون---قسمت سوم
بسم الله الرحمن الرحیم
سلام به همه شما
امروز میخوایم تبدیل مبنا رو ادامه بدیم.
خب، برای اول کار به کد زیر نگاه بندازین:
def base10to(number,base): number = int(number) if number == 0 or base == 10: return "0" result = [] while number != 0: result.append(str( number%base )) number = number // base return ":".join(result[::-1]) def tobase10(number,base): if number=="0" or base == 10: return int(number) number = number.split(":") result = 0 ind = len(number)-1 for num in number: result += int(num) * (base**ind) ind -=1 return str(result)
خب، تابع اول رو قبلاً توضیح داده بودم پس اینجا دوباره توضیح کامل نمیدم.
اما در تابع اول از تقسیمات متوالی بر مبنا استفاده کرده بودیم. مثلا فرض کنید میخوایم ۲۷ در مبنای ده رو به معادلش در مبنای دو تبدیل کنیم.
اول ۲۷ تقسیم بر دو میشه ۱۳ و یکی باقی میاره.
بعد ۱۳ تقسیم بر دو میشه ۶ با یک باقی مانده
شش تقسیم بر دو میشه۳ و چیزی باقی نمیاره.
۳ تقسیم بر دو میشه یک و یکی باقی میاره
یک تقسیم بر دو میشه صفر و یکی باقی مانده میاره.
حالا از راست به چپ باقی مانده هارو می نویسیم : ۱۱۰۱۱
خب ایم روش کارش بود البته تو کد گفتم بین ارقام رو با : جدا کنه.
تابع دوم
خب حالا رسیدیم به تابع دوم.
در این تابع ارزش عددی رو حساب می کنیم.
اول میگه اگه عدد صفر بود یا مبناش برابر ۱۰ بود خودشو برگردونه.
بعدش با استفاده از : رشته رو به لیست تبدیل می کنیم.
نتیجه نهایی رو ۰ در تظر گرفتم. چوم رقم ها از چپ به راسته پس سمت چپی ترین رقم اگه چهارمین باشه ارزشش برابر ۳ هست ( یکی کمتر) و اینو تو متغیر ind ذخیره کردم.
حالا برای محاسبه ارزش عددی از یه فرمول ثابت استفاده میشه. جمع ارزش تمام ارقام. حالا این چطور به دست میاد؟
ارزش هر رقم برابر است با :
number * (base ** ind)
یعنی چی؟ number که رقم ما هست. base هم مبنا و ind هم ارزش اون رقم.
خب از جمع ارزش تمام ارقام، عدد در مبنای ۱۰ به دست میاد.
نکته دوم:
یادتونه تو مطلب قبل از حروف استفاده کرده بودیم و دیگه : رو نداشتیم؟
خب آیا میشه جای حروف انگلیسی از حروف فارسی استفاده کرد؟ بله!
دوستان این مطلب کمی کوتاه بود اما پیش زمینه ای خوب بود.
پس فعلا خدانگهدار!