Tabla de multiplicación de una fila


En la imagen se ve la tabla de multiplicación habitual, que, creo, es familiar para todos.
No tiene nada de especial, excepto que todo el algoritmo para construirlo está comprimido en una cadena estándar de Python de 79 caracteres (ver PEP8 ). A quién le importa, bienvenido al gato.

Para empezar, vale la pena responder la pregunta que surgió entre muchos, "¿Por qué es esto?" Todo se unió a partir de dos factores, en primer lugar, por recomendación urgente de una buena persona, emprendí un estudio en profundidad de Python y, en segundo lugar, me gusta el concepto de un demoscene . El resultado fue un deseo de escribir (por supuesto, en voz muy alta) algo muy pequeño (idealmente en una línea), pero visual, usando las funciones de codificación Python para todo esto. Decidí mostrar la tabla de multiplicar.

Vale la pena señalar que estoy escribiendo en Python3.7. Las versiones anteriores a 3.6 no funcionarán debido a la falta de soporte para líneas f y, como resultado, el script de trabajo excederá los 79 caracteres de longitud.

Cómo ocho líneas se convirtieron en una


Para empezar, escribí un código que muestra la tabla de multiplicar, sin importarme la compacidad:



Listado
def MultiTabl(): tabl = '' for y in range(1,11): for x in range(1,11): tabl += f'{x*y}\t' tabl += f'\n' return tabl 


Puede generar valores de tabla utilizando generadores y dejar los bucles para desempaquetar listas. La desventaja de este enfoque fue un mayor número de líneas:



Listado
 def MultiTabl(): nums = [[x*y for x in range(1,11)] for y in range(1,11)] tabl = '' for line in nums: for item in line: tabl += f'{item}\t' tabl += f'\n' return tabl 


También puede darle al generador una disposición de pestañas ('\ t') usando líneas f:

 nums = [[f'{x*y}\t' for x in range(1,11)] for y in range(1,11)] 

Si la lista extraída en el primer ciclo se pega a una cadena usando el método de unión de cadena (), usando la asignación paralela de variables y colocando el ciclo en una línea, el tamaño del código se reducirá significativamente:



Listado
 def MultiTabl(): nums, tabl = [[f'{x*y}\t' for x in range(1,11)] for y in range(1,11)], '' for line in nums: tabl += ''.join(line) + '\n' return tabl 


Y si agrega join () y '\ n' al generador:

 def MultiTabl(): nums, tabl = [''.join([f'{x*y}\t' for x in range(1,11)])+'\n' for y in range(1,11)], '' for line in nums: tabl += line return tabl 

Ahora tenemos una lista de cadenas a nuestra disposición, y también se puede pegar usando join (), eliminando así los bucles:
 def MultiTabl(): tabl = ''.join([''.join([f'{x*y}\t' for x in range(1,11)])+'\n' for y in range(1,11)]) return tabl 

Bueno, la opción prometida en una línea (por supuesto, no puedes deshacerte de la impresión)

 print( ''.join([''.join([f'{x*y}\t' for x in range(1,11)])+'\n' for y in range(1,11)]) ) 

Por supuesto, los gurús de Python dirán: "¿Qué es?", Pero vale la pena señalar que este enfoque no es obvio para los principiantes.

No deberías tomar esta obra demasiado en serio, lo escribí como un calentamiento antes de un artículo grande, será genial si trae una sonrisa, y simplemente genial si se beneficia.

Source: https://habr.com/ru/post/458362/


All Articles