(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