[Python-es] Programa para pasar de decimal a binario con GUI Qt4

Arnau Sanchez pyarnau en gmail.com
Lun Ago 30 20:54:06 CEST 2010


On Mon, 30 Aug 2010 19:39:11 +0200 Ramon Villalonga Gómez wrote:

> No sabía que se puede hacer a través de la funcion int() y no tengo
> ni idea de como hacer el código en una línea.

Una versión simple teniendo en cuenta que las potencias de 2 son
desplazamientos (shift) hacia la izquierda:

def strbin2int(s): 
    return sum(int(x)*(1 << pos) for (pos, x) in enumerate(reversed(s)))

Pero no hace falta calcular el sumando cuando el dígito es 0, así que llevamos
el int() al iterable y queda algo más eficiente:

def strbin2int(s): 
    return sum(1 << pos for (pos, x) in enumerate(map(int, reversed(s))) if x)

Y con la misma idea, generalizando para base <= 10:

def str2int(s, base=10): 
    return sum(x*(base**pos) for (pos, x) in 
               enumerate(map(int, reversed(s))) if x)

El int2str() de 3 líneas (¿o menos?) queda como ejercicio para el lector ;-)

arnau


Más información sobre la lista de distribución Python-es