(sin asunto)
Técnicos
tecnicosrocha en adinet.com.uy
Lun Oct 23 14:50:25 CEST 2006
Chema Cortes escribió:
> Estoy de acuerdo contigo que no se debería ayudar a quien demuestra
> que no se ha esforzado nada. De todos modos, quisiera comentarte
> algunas mejoras de tu código:
>
>
> En python tenemos operaciones en binario que pueden aprovecharse:
>
> def dec2bin(n):
> b=[]
> while n:
> n,r=n>>1,n&1
> b.insert(0,r)
> return b
>
> De modo similar, pero usando la función 'divmod':
>
> def dec2bin(n):
> b=[]
> while n:
> n,r=divmod(n,2)
> b.insert(0,r)
> return b
>
>
> Todavía más elegante, si cabe, son las versiones recursivas:
>
> def dec2bin(n):
> if n>1:
> return dec2bin(n>>1)+[n&1]
> else:
> return [n]
>
> def dec2bin(n):
> if n>1:
> n,r=divmod(n,2)
> return dec2bin(n)+[r]
> else:
> return [n]
>
> Con unos pocos cambios, también serviría para octal y hexadecimal:
>
> def dec2oct(n):
> if n:
> return dec2oct(n>>3)+[n&7]
> else:
> return []
>
> También se podría hacer una versión genérica (con clausura):
>
> def dec2bin(n,pos=1):
> mask=2**pos-1
> def _dec2bin(n):
> if n:
> return _dec2bin(n>>pos)+[n&mask]
> else:
> return []
> return _dec2bin(n)
>
> from functools import partial #python 2.5
> dec2oct=partial(dec2bin,pos=3)
> dec2hex=partial(dec2bin,pos=4)
>
> Como curiosidad, una versión publicada en esta misma lista hace tres
> años:
>
> def dec2bin(n):
> oct2binl=["000","001","010","011","100","101","110","111"]
> return "".join([l[int(c)] for c in "%o"%n])
>
>
> La misma cosa, pero en sólo una línea ("inliner"):
>
> dec2bin=lambda x: "".join([
> ["000","001","010","011","100","101","110","111"][int(c)]
> for c in "%o"%long(x)] )
>
>
> En fin, seguro que hay más formas. Sólo es cuestión de ponerse a
> pensar un rato.
Chema:
Como siempre, tus correos son referencia obligada para cualquiera, da
gusto leerlos.
Sigo deseando que tengas algún tiempito libre para que puedas llevar
adelante algún
proyecto como el "dormido" pytando o cualquier cosa que se te ocurra :)
Saludos
posted by chuelmo
/join #debian-uy
Más información sobre la lista de distribución Python-es