蔣芋言
我們在編程學習中必然會用到進制的轉換,常見的進制有二進制、八進制、十進制和十六進制。
二進制,計算機作為一個數字電路的產物,它能直接識別的語言就是二進制,二進制就是只有0和1兩個數字,這兩個數字就代表著數字電路的導通和截止兩個狀態,就像一個開關一樣。八進制和十六進制,主要是為了簡化二進制繁瑣的表現形式。
十進制則是我們日常使用的。
利用Python自帶的函數或者是求商求余去實現常見進制間的相互轉換。
這里我們使用Python的內置函數int,int函數的輸入是一個任意進制的數,輸出是它的十進制形式,格式為int (x,base),x是純數字或者字符串,base是進制數,是對x是幾進制的描述。

輸出為2,31,17,31,8。
當我們需要帶小數的進制轉換的時候會出現問題,print(int(2.5))得到的結果是2,而不是2.5;以及print(int(‘2.5’,10)),會直接報錯,不允許輸入為小數的字符串。
Python中已經為我們封裝好了相應的函數,我們只需要提前知道各個進制的英文名稱,然后在代碼中使用縮寫即可,二進制bin(binary)、八進制oct(octonary)、十進制dec(decimalism)、十六進制hex(hexadecimal)
在這里十進制數我們用10舉例子

輸出為

有人可能要問了,為什么10的二進制是0b1010而不是1010呢?明明應該是后者啊。這里就涉及計算機中數字顯示的問題了,在計算機中,如果顯示的結果數字是以二進制表示的,會顯示為0+bin+真實的結果,八進制就是0+o+真實的結果,十六進制就是0+x+真實的結果,大家看懂了嗎?
有人可能又要提出疑問了,標題不是任意進制嗎?那我五進制、六進制這種沒有提前準備好的函數怎么辦呢?這里就需要我們進行特殊處理

我們要進行十進制轉換只需要調用funciton函數即可,x表示輸入的十進制數,y表示需要的進制
輸入:function(10,5)
輸出:20
(1) a是輸出用的數字、字母庫,b是用來存放要用的數字或字母。
(2) 首先輸入x,y對x求商,如果是0,表示進制數直接比數字x大,然后直接輸出x在a庫里的值。
(3) 對x求商如果不是0,y對x取余后的值賦給b,一直進行while循環,直至y對x取商為0,跳出循環。
(4) reverse函數的作用是將表b里面的內容反向排序,至于為什么是倒序呢?是這樣的,第一次y對x取模,相當于y的零次方,位于進制轉換后的最低位,第二次y對x取模,相當于y的一次方,位于進制轉換后的倒數第二位,以此類推,這樣我們最后得到的b是反過來的,所以使用reverse函數就能獲得我們的答案了。
代碼本身具有局限性,只能表示到十六進制,更高的進制需要用更多的英文字母去表示,這里沒有再進行列舉。
3. 二進制、八進制、十六進制三者間的轉換
其實我們把前面講過的幾個函數(int函數、oct函數等)稍作結合就可以達到這個目的,其核心在于用十進制作為轉換的橋梁。

輸出結果為

1. 前面用到的進制轉換十分依賴int、bin、oct、hex等進制轉換函數,其實完全可以利用上面提到的任意進制轉換,利用求商求余,去等效實現這幾個函數的作用。
2.對小數的進制轉換沒有涉及。