Python 中是否有內建函數可以更改整數的基數?

WBOY
發布: 2024-02-05 21:18:07
轉載
427 人瀏覽過

Python 中是否有内置函数可以更改整数的基数?

問題內容

python 能夠使用int() 函數將以10 為基數的整數轉換為以x 為基數的整數,其中2<=x<=36。對於任何整數來說,有一種方法可以將數字轉換回基數 10,或從基數 x 轉換為基數 y,這似乎是很自然的事情(除非你學過群論)。

我可以使用 from math import log 編寫一個函數來在基數之間進行轉換,但我想知道 python 中是否已經內建了任何東西來完成此操作。

python 3 中是否有內建函數可以在任兩個基數之間執行基數更改?是否存在與 int() 類似的限制(如果有)?

編輯:澄清一下,int() 只解釋基數 10 中的第一個參數。我想將該參數指定為不同的基數表示形式。我想知道是否有一個內建函數需要兩個參數作為基本表示。 範例(為什麼 int() 不是答案:

>>> int('100',9) == int(str(int('81',9)),10)
false
登入後複製

編輯#2:假設我想知道 100 的 9 進位是多少,我會使用以下內容, int('100', 9) 這將傳回值 81。 現在假設我想取 81(以 9 為基數)並將其轉換回以 10 為基數。 python 中是否有內建函數來完成此操作,或者有一種方法來標記第一個參數以表明我正在給它一個以基數表示的數字9?

我知道有一種方法可以使用 'ob' 指定二進位值,使用 '0x' 指定十六進位值。例如,

int('0b1100100', 2)
登入後複製

這將傳回值 100,為第一個參數指定其他基數的前綴是什麼


正確答案


當您談到整數物件時,它與其基底 n 表示形式不同。

雖然在內部,整數以二進位存儲,但整數物件本身沒有基數。您可以從任何基數 n 中的任何數字字串建構一個 int 對象,只要您指定基數並且該數字字串對於該基數有效。這通常限制為最多 36 個,因為有 10 個十進制數字和 26 個字母表。

底數 2、8、10 和 16 有一些特殊情況,因為它們是最常用的。對於這些基數,您可以在字串表示形式本身中指定基數。您可以分別使用 0b0o0x 前綴來表示 2、8 和 16。十進制是預設值,也是最常用的,因此不需要前綴。

如果您想將整數的基數 n 表示形式傳回為字串,即反轉運算 int(n, n),您有多種選擇。您可以使用 gmpy.digits(n, n) ,其中 n 是您的 int, n 是您想要的基數。這可能有點矯枉過正,因為它需要安裝 gmpy。

你也可以使用這樣的東西:

import string

def int_to_base(n, n):
    """ return base n representation for int n. """
    base_n_digits = digits + ascii_lowercase + ascii_uppercase
    result = ""
    if n < 0:
        sign = "-"
        n = -n
    else:
        sign = ""
    while n > 0:
        q, r = divmod(n, n)
        result += base_n_digits[r]
        n = q
    if result == "":
        result = "0"
    return sign + "".join(reversed(result))
登入後複製

使用該函數或類似的函數,您可以傳回以 n 為基數的整數 n 的字串以 n 為基數表示,因此:

>>> base_n_string = "81"
>>> base = 9
>>> int_to_base(int("81", 9), 9) == "81"
True
登入後複製

以上是Python 中是否有內建函數可以更改整數的基數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板