Python >> Tutoriel Python >  >> Python

Fonction Python oct()

oct(integer) intégré de Python la fonction prend un argument entier et renvoie une chaîne octale avec le préfixe "0o" . Si vous appelez le oct(x) sur un x non entier , il doit définir le __index__() méthode qui renvoie un entier associé à x . Sinon, il lancera un TypeError: object cannot be interpreted as an integer .

Argumentation integer Une valeur entière ou un objet implémentant le __index__() méthode.
Valeur de retour string Renvoie une chaîne de nombres octaux, préfixés par "0o" .
Input : oct(1)
Output : '0o1'

Input : oct(2)
Output : '0o2'

Input : oct(4)
Output : '0o4'

Input : oct(8) 
Output : '0o10'

Input : oct(9)
Output : '0o11'

Input : oct(40)
Output : '0o50'

Input : oct(42)
Output : '0o52'

Mais avant de continuer, je suis ravi de vous présenter mon nouveau livre Python Python One-Liners (Lien Amazon).

Si vous aimez les one-liners, vous allez adorer le livre. Il vous apprendra tout ce qu'il y a à savoir sur une seule ligne de code Python. Mais c'est aussi une introduction à l'informatique , science des données, apprentissage automatique et algorithmes. L'univers en une seule ligne de Python !

Le livre est sorti en 2020 avec l'éditeur de livres de programmation de classe mondiale NoStarch Press (San Francisco).

Lien :https://nostarch.com/pythononeliners

Python oct() pour les objets personnalisés

Si vous appelez le oct(x) sur un objet non entier ou personnalisé x , il doit définir le __index__() méthode qui retourne un entier associé à x .

class Foo:    
    def __index__(self):
        return 8
f1 = Foo()
print(oct(f1))
# '0o10'

Comment corriger "TypeError :l'objet 'float' ne peut pas être interprété comme un entier" ?

La fonction oct() de Python ne peut convertir que des nombres entiers de n'importe quel système numérique (par exemple, décimal, binaire, hexadécimal) vers le système octal. Il ne peut pas convertir les flottants en nombres octaux. Donc, si vous passez un flottant dans la fonction oct(), il lancera un TypeError: 'float' object cannot be interpreted as an integer .

>>> oct(3.14)
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    oct(3.14)
TypeError: 'float' object cannot be interpreted as an integer

Pour résoudre cette erreur, vous pouvez arrondir le flottant à un entier en utilisant le round() intégré fonction ou vous écrivez votre propre fonction de conversion personnalisée :

Comment convertir un flottant en nombre octal en Python ?

def float_to_octal(f, digits=4):
    whole = int(f)
    rem = (f - whole) * 8
    int_ = int(rem)
    rem = (rem - int_) * 8
    octals = [str(int_)]
    count = 1
    
    while rem and count < digits:
        count += 1
        int_ = int(rem)
        rem = (rem - int_) * 8
        octals.append(str(int_))
        
    return float("{:o}.{}".format(whole, "".join(octals)))

print(float_to_octal(3.14))
print(float_to_octal(88.88))

La sortie est la représentation octale des valeurs d'entrée flottantes :

3.1075
130.7024

Résumé

oct(integer) intégré de Python la fonction prend un argument entier et renvoie une chaîne octale avec le préfixe "0o" .

>>> oct(1)
'0o1'
>>> oct(2)
'0o2'
>>> oct(4)
'0o4'
>>> oct(8)
'0o10'
>>> oct(9)
'0o11'
>>> oct(42)
'0o52'
>>> oct(40)
'0o50'

Si vous appelez le oct(x) sur un x non entier , il doit définir le __index__() méthode qui renvoie un entier associé à x .

>>> class Foo:
	def __index__(self):
		return 8

	
>>> f1 = Foo()
>>> oct(f1)
'0o10'

Sinon, il lancera un TypeError: object cannot be interpreted as an integer .