Entonces, establecida la etiqueta, a los hechos. Esta serie surge por lo siguiente.

Me encontraba refinando, recordando y practicando la programación en Python en HackerRank (donde, por cierto, no hay forma de reiniciar la cuenta de usuario; parece que es más sencillo simplemente borrarla y crear una nueva, pero en el proceso noté que el correo registrado no lo eliminan y, al intentar registrarse de nuevo con la misma dirección de correo se topa uno con que el buzón ya existe, pero se logró el reset al final) y decidí revisar las respuestas de otros participantes.
Uno encuentra desde las respuestas «paso a paso» de principiantes hasta las de gente que se nota que conoce muy bien el lenguaje de programación y sus «particularidades». Después de un primer y obligado «Hello, World!» como primer ejercicio, un segundo consiste en, dado un valor entero n:
- Si n es impar, imprimir «Weird».
- Si n es par y está en el rango de 2 a 5 imprimir «Not Weird»
- Si n es par y está en el rango de 6 a 20 imprimir «Weird»
- si es impar y mayor a 20 imprimir «Not Weird»
Las respuestas de quienes se inician en la programación o tienen una formación con lenguajes de programación «más tradicionales» son como la siguiente (incluyo la she-bang, imports y «main» que la plataforma proporciona por defecto):
#!/bin/python3
import math
import os
import random
import re
import sys
if __name__ == '__main__':
n = int(input().strip())
if n%2 != 0:
print("Weird")
elif n%2==0 and (n>=2 and n<=5):
print("Not Weird")
elif n%2==0 and (n>=6 and n<=20):
print("Weird")
elif n%2==0 and n>20:
print("Not Weird")
En la mía he empleado la función range(), considerando que así es más pythonica:
#!/bin/python3
import math
import os
import random
import re
import sys
if __name__ == '__main__':
n = int(input().strip())
if n % 2 == 1:
print("Weird")
elif n in range(2,6):
print("Not Weird")
elif n in range(6,21):
print("Weird")
else:
print("Not Weird")
Pero puede uno ver algunas otras más ingeniosas, pythonicas sin duda, pero obscuras:
#!/bin/python3
import math
import os
import random
import re
import sys
if __name__ == '__main__':
n = int(input().strip())
pre = "Not " if (n%2==0 and (n>20 or (n>=2 and n<=5))) else ""
print(pre+"Weird")
Idea a la que le podemos mejorar la legibilidad con:
#!/bin/python3
import math
import os
import random
import re
import sys
if __name__ == '__main__':
n = int(input().strip())
pre = "Not " if (n%2==0 and (n>20 or n in range(2,6))) else ""
print(pre+"Weird")
Aun así, sigue siendo obscura. Algunas soluciones hacen uso de las facilidades del lenguaje, pero simplifican la solución aprovechando la naturaleza del problema, por ejemplo:
#!/bin/python3
import math
import os
import random
import re
import sys
if __name__ == '__main__':
n = int(input().strip())
if n%2!=0 or (n in range(6,21)):
print("Weird")
else:
print('Not Weird')
¿Es esta solución pythonica? No, no lo es. Las convenciones y buenas prácticas adoptadas por la comunidad de Python señalan que «es mejor ser explícito que implícito». Si bien el comportamiento del programa es equivalente y los resultados son iguales, sólo vemos explícitamente la implementación de dos de las condiciones del problema. De necesitar modificar el código, uno debe extraer el conocimiento equivalente de los casos o condiciones que el código contempla, lo que obliga a un mayor cuidado y trabajo por parte de quien realice tal labor. Aunque representan algunas más líneas de código, expresiones como las dos primeras respuestas evitan ese cuidado y trabajo explícito que deben hacerse por condiciones implícitas en el código.
Finalmente, este proceso de exploración y refinamiento hacia lo «pythonico» es al que no le encontraba nombre y al que me referiré como «pythonism«.
Siguiente
