¿Qué significan los números que comienzan con 0 en python?
python-2.x (7)
Cuando escribo enteros pequeños con un 0 en python, dan resultados extraños. ¿Por qué es esto?
>>> 011
9
>>> 0100
64
>>> 027
23
Nota: Python versión 2.7.3 He probado esto en Python 3.0, y aparentemente esto ahora es un error. Por lo tanto, es algo específico de la versión.
Editar: aparentemente todavía son enteros:
>>> type(027)
`<type ''int''>`
Ambas versiones de Python 2 y 3 comprenden octal escrito con ''0o'' y ''0O'' (mayúscula o), así que acostúmbrate a usarlo si también trabajas con Python 2.x.
Solo use ceros a la izquierda en números en cadenas.
Puede convertir enteros de cualquiera de los otros sistemas base con int ().
>>> int(0o20)
16
Si desea que su salida se muestre con ceros a la izquierda, defínala según esta respuesta: Mostrar número con ceros a la izquierda
Si alguna vez planea trabajar con códigos postales, es mejor tratarlos como cadenas de todas maneras.
Aparentemente son números octales (base 8), y el 0 es solo un prefijo desactualizado que Python 2 solía usar.
En Python 3 debe escribir: 0o11
en 0o11
lugar.
Todavía son enteros, pero realizar operaciones con ellos dará como resultado una forma regular de base 10.
En Python 2 (y algunos lenguajes de programación más), estos representan números octales .
En Python 3, 011
ya no funciona y en su lugar usaría 0o11
.
En respuesta a la edición : y son enteros regulares. Se especifican de otra manera; y Python los convierte automáticamente en una representación entera interna (que en realidad es base-2, por lo que tanto 9
como 011
se convierten internamente a 0b1001
).
Eso es muy fácil. Son números octales.
http://en.wikipedia.org/wiki/Octal
También hay números que comienzan con 0x
. Son números hexadecimales:
>>> 0x51
81
Estos son números octales (base 8, valores 0 - 7)
Puede convertir un número decimal a octal con la función oct() .
In [125]: for i in range(10):
.....: print ''{:5} {:5}''.format(i, oct(i))
.....:
0 0
1 01
2 02
3 03
4 04
5 05
6 06
7 07
8 010
9 011
y convierte un valor octal en entero con la función int() con la base apropiada (8 en este caso):
int(str(17), 8)
Out[129]: 15
El conjunto similar de reglas / funciones se aplica a los números hexadecimales (base 16) usando la función hex() .
Estos son números representados en la base 8 (números octales). Por ejemplo,
011
es igual a 1*(8**1) + 1*(8**0)
= 9,
0100
es igual a 1*(8**2) + 0*(8**1) + 0*(8**0)
= 64,
027
es igual a 2*(8**1) + 7*(8**0)
= 16 + 7 = 23.
Números en el sistema numérico octal. Otros prefijos son 0x
para hexadecimal y 0b
para binario.