Table de multiplication à une rangée


Dans l'image, vous voyez la table de multiplication habituelle, qui, je pense, est familière à tout le monde.
Il n'y a rien de spécial à cela, sauf que tout l'algorithme pour le construire est compressé en une chaîne Python standard de 79 caractères (voir PEP8 ). Peu importe, bienvenue au chat.

Pour commencer, il vaut la peine de répondre à la question qui se posait chez beaucoup: «Pourquoi est-ce?». Tout cela est venu de deux facteurs, premièrement, sur la recommandation urgente d'une bonne personne, j'ai entrepris une étude approfondie de Python, et deuxièmement, j'aime le concept d'une démoscène . Le résultat était un désir d'écrire (bien sûr trop fort) quelque chose de très petit (idéalement sur une seule ligne), mais visuel, en utilisant les fonctionnalités du codage Python pour tout cela. J'ai décidé d'afficher la table de multiplication.

Il est à noter que j'écris en Python3.7. Les versions sous 3.6 ne fonctionneront pas en raison du manque de prise en charge des lignes f et, par conséquent, le script de travail dépassera 79 caractères.

Comment huit lignes se sont transformées en une seule


Pour commencer, j'ai écrit du code qui affiche la table de multiplication, sans se soucier de la compacité:



Annonce
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 


Vous pouvez générer des valeurs de table à l'aide de générateurs et laisser les boucles pour décompresser les listes. L'inconvénient de cette approche était un plus grand nombre de lignes:



Annonce
 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 


Vous pouvez également donner au générateur un arrangement d'onglets ('\ t') en utilisant des lignes f:

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

Si la liste extraite dans la première boucle est collée dans une chaîne en utilisant la méthode string join (), en utilisant l'affectation parallèle de variables et en plaçant la boucle sur une seule ligne, la taille du code sera considérablement réduite:



Annonce
 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 


Et si vous ajoutez join () et '\ n' au générateur:

 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 

Nous avons maintenant une liste de chaînes à notre disposition, et elle peut également être collée en utilisant join (), éliminant ainsi les boucles:
 def MultiTabl(): tabl = ''.join([''.join([f'{x*y}\t' for x in range(1,11)])+'\n' for y in range(1,11)]) return tabl 

Eh bien, l'option promise en une seule ligne (bien sûr, vous ne pouvez pas vous débarrasser de l'impression)

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

Bien sûr, les gourous de Python diront: «Qu'est-ce que c'est?», Mais il convient de noter que cette approche n'est pas évidente pour les débutants.

Vous ne devriez pas prendre cet opus trop au sérieux, je l'ai écrit en guise d'échauffement avant un gros article, il sera génial s'il apporte le sourire, et juste génial s'il en profite.

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


All Articles