Python >> Tutoriel Python >  >> Python

Python Imprimer Octal Sans '0o'

Formulation du problème

Si vous imprimez un nombre hexadécimal, Python utilise le préfixe '0o' pour indiquer qu'il s'agit d'un nombre dans le système octal et non dans le système décimal comme les entiers normaux.

print(oct(42))
# 0o52

Cependant, si vous savez déjà que les nombres de sortie sont octaux, vous n'avez pas nécessairement besoin du '0o' préfixe.

Comment imprimer les numéros d'oct sans le '0o' préfixe ?

Méthode 1 :Découpage

Pour ignorer le préfixe, utilisez le découpage en tranches et commencez par l'index 2 sur la chaîne octale. Par exemple, pour ignorer le préfixe '0o' sur le résultat de x = oct(42) ='0o52' , utilisez l'opération de découpage x[2:] qui donne juste le nombre octal '52' sans le préfixe '0o' .

x = oct(42)

print(x)
# 0o52

print(x[2:])
# 52

N'hésitez pas à plonger dans le oct() fonction intégrée dans ce didacticiel vidéo :

Mais que se passe-t-il si vous voulez réellement remplacer le préfixe '0o' avec le préfixe '00' pour que la chaîne résultante ait la même longueur ?

Méthode 2 :découpage + zfill()

Le Python string.zfill() la méthode remplit la chaîne à partir de la gauche avec '0' personnages. En combinaison avec le découpage à partir du troisième caractère, vous pouvez facilement construire une chaîne octale sans débuter '0o' caractères et commençant par '0' caractères jusqu'à la longueur passée dans le string.zfill(length) méthode.

print(oct(42)[2:].zfill(4))
# 0052

Sinon, si vous souhaitez créer une chaîne de 8 caractères, utilisez string.zfill(8) :

print(oct(42)[2:].zfill(8))
# 00000042

Vous pouvez en savoir plus sur zfill() dans cette vidéo sur les méthodes de chaîne Python :

Méthode 3 :nombres octaux négatifs

Si vous devez gérer des nombres octaux négatifs, les méthodes ci-dessus ne fonctionnent pas car le nombre octal doit maintenant remplacer le deuxième et le troisième caractère '-0o' . Par exemple, le nombre hexadécimal hex(-42) est '-0o52' . Vous ne pouvez pas simplement sauter les deux premiers caractères pour obtenir le bon résultat, n'est-ce pas ? En même temps, si vous sautiez ou remplaciez toujours les deuxième et troisième caractères, cela ne fonctionnerait pas non plus pour les nombres positifs. Alors que faire ?

Pour imprimer un octal positif ou négatif sans le '0o' ou '-0o' préfixes, vous pouvez simplement utiliser le string.replace('o', '0') méthode et remplacer chaque occurrence de 'o' alphabétique avec '0' numérique . La chaîne résultante est mathématiquement correcte car le premier '0' s ne change pas la valeur du nombre.

# Negative Octal
print(oct(-42).replace('o', '0'))
# -0052


# Positive Octal
print(oct(42).replace('o', '0'))
# 0052

Prochain article