Heim >Backend-Entwicklung >Python-Tutorial >Gibt es in Python eine integrierte Funktion zum Ändern der Basis einer Ganzzahl?

Gibt es in Python eine integrierte Funktion zum Ändern der Basis einer Ganzzahl?

WBOY
WBOYnach vorne
2024-02-05 21:18:07460Durchsuche

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

Frageninhalt

Python kann mithilfe der Funktion int() eine Ganzzahl zur Basis 10 in eine Ganzzahl zur Basis x umwandeln, wobei 2<=x<=36. Für jede ganze Zahl scheint es selbstverständlich (es sei denn, Sie haben sich mit Gruppentheorie befasst), dass es eine Möglichkeit gibt, die Zahl zurück in die Basis 10 oder von der Basis x in die Basis y umzuwandeln.

Ich könnte eine Funktion zum Konvertieren zwischen Basen mit from math import log schreiben, aber ich würde gerne wissen, ob dafür bereits etwas in Python integriert ist.

Gibt es in Python 3 eine integrierte Funktion, um einen Basiswechsel zwischen zwei beliebigen Basen durchzuführen? Gibt es ähnliche Einschränkungen wie int() (falls vorhanden)?

EDIT: Zur Klarstellung: int() interpretiert nur das erste Argument in Basis 10. Ich möchte diesen Parameter als eine andere Basisdarstellung angeben. Ich frage mich, ob es eine integrierte Funktion gibt, die zwei Argumente als Basisdarstellung erfordert. Beispiel (warum int() nicht die Antwort ist:

>>> int('100',9) == int(str(int('81',9)),10)
false

Edit #2: Angenommen, ich wollte wissen, was die Basis 9 von 100 ist, dann würde ich Folgendes verwenden: int('100', 9) Dadurch wird der Wert 81 zurückgegeben. Nehmen wir nun an, ich möchte 81 (Basis 9) nehmen und es wieder in Basis 10 umwandeln. Gibt es in Python eine integrierte Funktion dafür oder eine Möglichkeit, das erste Argument zu markieren, um anzuzeigen, dass ich ihm eine Zahl zur Basis 9 gebe?

Ich weiß, dass es eine Möglichkeit gibt, mit 'ob' 指定二进制值,使用 '0x' einen Hexadezimalwert anzugeben. Zum Beispiel

int('0b1100100', 2)

Dadurch wird der Wert 100 zurückgegeben. Was ist das Präfix zur Angabe der anderen Basis für das erste Argument?


Richtige Antwort


Wenn Sie über ein ganzzahliges Objekt sprechen, unterscheidet es sich von seiner Basis-n-Darstellung.

Obwohl Ganzzahlen intern binär gespeichert werden, haben Ganzzahlobjekte selbst keine Basis. Sie können ein int-Objekt aus jeder numerischen Zeichenfolge in jeder Basis n erstellen, solange Sie die Basis angeben und die numerische Zeichenfolge für diese Basis gültig ist. Dies ist normalerweise auf maximal 36 begrenzt, da es 10 Dezimalstellen und 26 Alphabete gibt.

Es gibt einige Sonderfälle für die Basen 2, 8, 10 und 16, da diese am häufigsten verwendet werden. Für diese Basen geben Sie die Basis in der String-Darstellung selbst an. Sie können das Präfix 0b0o0x verwenden, um 2, 8 bzw. 16 darzustellen. Dezimal ist die Standardeinstellung und wird am häufigsten verwendet, daher ist kein Präfix erforderlich.

Wenn Sie die Basis-n-Darstellung einer Ganzzahl als String zurückgeben möchten, also die Inversionsoperation int(n, n), haben Sie mehrere Möglichkeiten. Sie können gmpy.digits(n, n) ,其中 n 是您的 int, n als Basis verwenden, die Sie möchten. Dies könnte etwas übertrieben sein, da dafür die Installation von gmpy erforderlich ist.

Sie können auch so etwas verwenden:

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))

Mit dieser oder ähnlichen Funktionen können Sie eine String-Darstellung einer ganzen Zahl n zur Basis n zurückgeben, also:

>>> base_n_string = "81"
>>> base = 9
>>> int_to_base(int("81", 9), 9) == "81"
True

Das obige ist der detaillierte Inhalt vonGibt es in Python eine integrierte Funktion zum Ändern der Basis einer Ganzzahl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen