[pyar] Hello yucky world!

Julio Cesar Gazquez juliogazquez en yahoo.com.ar
Mie Jul 14 00:25:30 ART 2010


El Mar 13 Jul 2010, Federico Heinz escribió:
>  A partir de un dent de Roberto Alsina de ayer, un "Hello world" para
>  
>  el olvido:
>  >>> import sys
>  
>  >>> def hello(m=['\n', '!', 'd', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 
'e', 'H']):
>  ...     sys.stdout.write(m.pop())
>  ...     return len(m)
>  ...
>  
>  >>> while hello() > 0:
>  ...     pass
>  ...
>  Hello world!
>  
>  >>> while hello(['\n', '!', 'd', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 
'e', 'H']) > 0:
>  ...	pass
>  HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH^C
>  
>  Sí, sé por qué pasa, y la verdad es que no se me ocurre ahora una
>  manera elegante de corregirlo sin generar más problemas aún. Pero las
>  reminiscencias de Fortran redefiniendo el valor de 4 no me van a
>  dejar dormir esta noche. Aunque es probable que una medida de Jack
>  Daniel's ayude.

A continuación todas las formas válidas que se me ocurren, supongo que te 
habrás planteado alguna de estas, no sé que es lo que puede no gustarte de 
cada una. Como sea, la más pythónica en mi opinión es la 2, y la menos, el 
bonus track :-P

##### Forma 1 ######

# Pros: La más simple
# Contras: m queda fuera de hello

import sys

m=['\n', '!', 'd', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 'H']
  
def hello():
  sys.stdout.write(m.pop())
  return len(m)
  
   
while hello()>0:
  pass

##### Forma 2 ######

# Pros: Probablemente la más pythónica
# Contras: hello no es una función normal, tengo que usar hello.next()

import sys

def hello(m=['\n', '!', 'd', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 
'H']):
  while True:
    sys.stdout.write(m.pop())
    yield len(m)

hello=hello()
while hello.next()>0:
  pass


##### Forma 3 ######

# Pros: Pythónica
# Contras: Es algo así como la 2 pero sin azúcar (sintáctica)

import sys

class hello:
  m=['\n', '!', 'd', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 'H'] 
  
  def __call__(self):
    sys.stdout.write(hello.m.pop())
    return len(hello.m)
    
while hello()()>0:
  pass


### Y por último, algo completamente diferente! :-P

# Pros: Exactamente lo que quiere Fede, un chimpancé puede traducir el código 
#       Python a C. (Un orangután no, ellos sólo pueden programar en Ook!)
# Contras: Requiere una versión especial de Python que soporta una PEP 
#          que sólo podría ser aceptada un 1ro de abril


#!/usr/bin/python-april-fools-pep-fheinz

def hello():
	static m=['\n', '!', 'd', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 
'H']
	sys.stdout.write(m.pop())
	return len(m)

while hello()>0:
  pass

# Bueno, este es mi pequeño aporte a la chacota lingüística. Muy interesante 
lo del Fortran, supongo que en aquella época las alternativas eran pegarte un 
tiro en el pie cambiando el valor de 5, o bien programar en PL/1 usando if y 
else como variables dentro de un bloque if :-) Tampoco avanzamos tanto, ahora 
podemos hacer las mismas c****** en Python!

-- 
Saludos,
Julio César Gázquez



More information about the pyar mailing list