Maison  >  Article  >  développement back-end  >  Existe-t-il une fonction intégrée en Python pour changer la base d'un entier ?

Existe-t-il une fonction intégrée en Python pour changer la base d'un entier ?

WBOY
WBOYavant
2024-02-05 21:18:07426parcourir

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

Contenu de la question

python est capable de convertir un entier de base 10 en un entier de base x à l'aide de la fonction int(), où 2<=x<=36. Pour tout nombre entier, il semble naturel (sauf si vous avez étudié la théorie des groupes) qu'il existe un moyen de reconvertir le nombre en base 10, ou de la base x en base y.

Je pourrais écrire une fonction pour convertir entre les bases en utilisant from math import log mais j'aimerais savoir s'il y a quelque chose déjà intégré à python pour ce faire.

Existe-t-il une fonction intégrée dans Python 3 pour effectuer un changement de base entre deux bases quelconques ? Existe-t-il des contraintes similaires à int() (le cas échéant) ?

EDIT : Pour clarifier, int() n'interprète que le premier argument en base 10. Je souhaite spécifier ce paramètre comme une représentation de base différente. Je me demande s'il existe une fonction intégrée qui nécessite deux arguments comme représentation de base. Exemple (pourquoi int() n'est pas la réponse :

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

Edit #2 : Supposons que je veuille savoir quelle est la base 9 de 100, j'utiliserais ce qui suit, int('100', 9) Cela renverra la valeur 81. Supposons maintenant que je veuille prendre 81 (base 9) et le reconvertir en base 10. Existe-t-il une fonction intégrée en python pour ce faire, ou un moyen de marquer le premier argument pour indiquer que je lui donne un nombre en base 9 ?

Je sais qu'il existe un moyen de spécifier une valeur hexadécimale en utilisant 'ob' 指定二进制值,使用 '0x' . Par exemple,

int('0b1100100', 2)

Cela renverra la valeur 100, Quel est le préfixe pour spécifier l'autre base pour le premier argument.


Bonne réponse


Lorsque vous parlez d'un objet entier, il est différent de sa représentation de base n.

Bien qu'en interne, les entiers soient stockés en binaire, les objets entiers eux-mêmes n'ont pas de base. Vous pouvez construire un objet int à partir de n'importe quelle chaîne numérique dans n'importe quelle base n tant que vous spécifiez la base et que la chaîne numérique est valide pour cette base. Ce nombre est généralement limité à un maximum de 36, puisqu'il y a 10 chiffres décimaux et 26 alphabets.

Il existe des cas particuliers pour les bases 2, 8, 10 et 16 car ce sont les plus couramment utilisées. Pour ces bases, vous spécifiez la base dans la représentation sous forme de chaîne elle-même. Vous pouvez utiliser le préfixe 0b0o0x pour représenter respectivement 2, 8 et 16. Le nombre décimal est la valeur par défaut et la plus couramment utilisée, aucun préfixe n'est donc nécessaire.

Si vous souhaitez renvoyer la représentation en base n d'un entier sous forme de chaîne, c'est-à-dire l'opération d'inversion int(n, n), vous avez plusieurs options. Vous pouvez utiliser gmpy.digits(n, n) ,其中 n 是您的 int, n pour être la base que vous souhaitez. Cela peut être un peu exagéré car cela nécessite l'installation de gmpy.

Vous pouvez également utiliser quelque chose comme ceci :

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

En utilisant cette fonction ou des fonctions similaires, vous pouvez renvoyer une représentation sous forme de chaîne d'un entier n en base n, donc :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer