tutorial lenguaje instalar descargar python

lenguaje - python tutorial



¿Cómo puedo hacer `bin(30)` return `00011110` en lugar de` 0b11110`? (7)

¿Qué significa la "b" en la salida de bin (30): "0b11110"? ¿Hay alguna manera de deshacerme de esta "b"? ¿Cómo puedo obtener la salida de bin () para devolver siempre una salida estándar de 8 dígitos?


0b es como 0x: indica que el número está formateado en binario (0x indica que el número está en hexadecimal).

Ver ¿Cómo se expresan los literales binarios en python?

Consulte http://docs.python.org/dev/whatsnew/2.6.html#pep-3127-integer-literal-support-and-syntax

Para eliminar el 0b es más fácil usar el corte de cadena: bin(30)[2:]

Y de manera similar para el formato de 8 caracteres de ancho:

(''00000000''+bin(30)[2:])[-8:]

Alternativamente, puede usar el formateador de cadenas (en 2.6+) para hacerlo todo en un solo paso:

"{0:08b}".format(30)


Aproveche la famosa función format() con el segundo argumento menos conocido y zfill() con zfill()

''b'' - Binario ''x'' - Hex ''o'' - Octal ''d'' - Decimal

>>> print format(30, ''b'') 11110 >>> print format(30, ''b'').zfill(8) 00011110

Debería hacer. Aquí ''b'' significa binario como ''x'' , ''o'' & ''d'' para hexadecimal, octal y decimal respectivamente.


Las respuestas actuales no tienen en cuenta los valores negativos (gracias @ Gui13 por el comentario), en cuyo caso obtienes -0b... lugar de solo 0b... Puede manejar ambos con un simple if-else donde se verifique el valor si es menor que cero o no

>>> def printBit(x): if x < 0: return ''-'' + bin(x)[3:].zfill(8) # replace else: return bin(x)[2:].zfill(8) >>> print(printBit(30)) ''00011110'' >>> print(printBit(-30)) ''-00011110''

o utilizando replace()

>>> print(bin(30)).replace(''0b'', '''').zfill(8)

El problema con la llamada anterior es que uno de los bits se "pierde" en el signo - debido al mismo valor que se usa para el zfill() . Puedes manejar esto también con un simple control ternario:

>>> x = 30 >>> print(bin(x)).replace(''0b'', '''').zfill(9 if x < 0 else 8) ''00011110'' >>> x = -30 >>> print(bin(x)).replace(''0b'', '''').zfill(9 if x < 0 else 8) ''-00011110''

Por último, pero no menos importante, también puede hacer que zfill() adapte automáticamente el número de 0 s para que coincida con un byte (8 bits) o un n número de cuadrupletes de bits (4 bits):

>>> def pb(x): bres = bin(x).replace(''0b'', '''').replace(''-'', '''') # If no minus, second replace doesn''t do anything lres = len(bres) # We need the length to see how many 0s we need to add to get a quadruplets # We adapt the number of added 0s to get full bit quadruplets. # The ''-'' doesn''t count since we want to handle it separately from the bit string bres = bres = (''-'' if x < 0 else '''') + bres.zfill(lres + (4-lres%4)) return bres >>> print(pb(7)) ''0111'' >>> print(pb(-7)) ''-0111'' >>> print(pb(30)) ''00011110'' >>> print(pb(-30)) ''-00011110''

Aquí está la versión final con relleno adaptable de 0 sy división adicional con espacio cada n caracteres (donde n se determina por el factor de relleno):

>>> def pb(x, fillingBits=4, splitWithSpace=True): # If no minus, second replace doesn''t do anything bres = bin(x).replace(''0b'', '''').replace(''-'', '''') lres = len(bres) bres = bres.zfill(lres + (fillingBits - (lres % fillingBits))) lres = len(bres) # We can also add a blank after every fillingBits character if splitWithSpace: bres = '' ''.join([bres[i:(i + fillingBits)] for i in range(0, lres, fillingBits)]) bres = (''-'' if x < 0 else '''') + bres # We remove any trailing/leading blanks (occurring whenever splitWithSpace enabled) return bres.strip() >>> print(pb(7)) ''0111'' >>> print(pb(-7)) ''-0111'' >>> print(pb(30)) ''0001 1110'' >>> print(pb(-30)) ''-0001 1110''


Puedes usar el formato en Python 2 o Python 3 :

>> print( format(15, ''08b'') ) 00001111

[] ''s


Puedes usar esto también:

bi=bin(n)[2:]

Esto eliminará la parte ''0b'' del valor devuelto y podrá usar la salida en cualquier lugar.


Utilizando zfill() :

Devuelva la cadena numérica a la izquierda rellena con ceros en una cadena de ancho de longitud. Un prefijo de signo se maneja correctamente. La cadena original se devuelve si el ancho es menor que len (s).

>>> bin(30)[2:].zfill(8) ''00011110'' >>>


python 2.7

imprimir "{0: b}". formato (30)

python 3.x

imprimir (''{0: b}''. formato (30))