2010-08-08 26 views
2

Possible en double:
How do you express binary literals in Python?Nombre en python - 010

Lorsque vous utilisez le shell interactif:

print 010 

je reviens un 8.

I commencé à jouer en utilisant d'autres nombres ayant des zéros avant (0110 = 72, 013 = 11) mais je n'ai pas pu le comprendre ...

Que se passe-t-il ici?

+3

Avez-vous essayé 08 ou 09? (juste en vérifiant la qualité de votre méthode scientifique) – Kobi

+0

Voir [ Python: Invalid Token ] (http://stackoverflow.com/questions/336181/python-invalid-token). –

+0

Veuillez d'abord lire le manuel de langue. http://docs.python.org/reference/lexical_analysis.html#integer-and-long-integer-literals. Ceci est déjà bien documenté, et vous pourriez économiser du temps en lisant le manuel au lieu d'expérimenter au hasard. –

Répondre

12

Les nombres entrés avec un zéro non significatif sont interprétés comme octaux (base 8).

007 == 7 
010 == 8 
011 == 9 
+0

-1: Vous avez oublié le lien RTFM tout importation: http://docs.python.org/reference/lexical_analysis.html#integer-and-long-integer-literals. –

3

Comme de nombreux langages, un entier avec un zéro initial est interprété comme un octal. cela signifie que c'est la base huit. par exemple, 020 a la valeur décimale 16 et 030 a la valeur décimale 24. par souci d'exhaustivité, voici comment cela fonctionne. value prend une chaîne et renvoie la valeur décimale de cette chaîne interprétée comme un octal. Il ne vérifie pas les erreurs, vous devez donc vous assurer que chaque chiffre est compris entre 0 et 8. aucun 0 n'est nécessaire.

def value(s): 
     digits = [int(c) for c in s] 
     digits.reverse() 
     return sum(d * 8**k for k, d in enumerate(digits)) 
3

Python a adopté la notation de C pour littérales octal et hexadécimal: Entier littéraux commençant par 0 sont octal, et ceux commençant par 0x sont hex. Le préfixe 0 a été considéré comme sujet aux erreurs, donc Python 3.0 a changé le préfixe octal en 0o.