Einzeilige Multiplikationstabelle


Auf dem Bild sehen Sie die übliche Multiplikationstabelle, die meiner Meinung nach jedem bekannt ist.
Es ist nichts Besonderes daran, außer dass der gesamte Algorithmus zum Erstellen auf eine Standard-Python-Zeichenfolge mit 79 Zeichen komprimiert ist (siehe PEP8 ). Wen kümmert es, willkommen bei Katze.

Zunächst lohnt es sich, die unter vielen gestellte Frage zu beantworten: „Warum ist das so?“. Es kam alles aus zwei Gründen zusammen: Erstens habe ich auf dringende Empfehlung eines guten Menschen eine eingehende Untersuchung von Python aufgenommen, und zweitens mag ich das Konzept einer Demoszene . Das Ergebnis war der Wunsch, etwas sehr Kleines (idealerweise in einer Zeile) zu schreiben (natürlich zu laut gesagt), aber visuell, wobei die Funktionen der Python-Codierung für all dies verwendet wurden. Ich habe beschlossen, die Multiplikationstabelle anzuzeigen.

Es ist erwähnenswert, dass ich in Python3.7 schreibe. Versionen unter 3.6 funktionieren aufgrund der fehlenden Unterstützung für F-Zeilen nicht. Daher ist das Arbeitsskript länger als 79 Zeichen.

Wie aus acht Zeilen eine wurde


Zunächst habe ich Code geschrieben, der die Multiplikationstabelle anzeigt, ohne auf Kompaktheit zu achten:



Auflistung
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 


Sie können Tabellenwerte mithilfe von Generatoren generieren und die Schleifen zum Entpacken von Listen überlassen. Der Nachteil dieses Ansatzes war eine größere Anzahl von Zeilen:



Auflistung
 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 


Sie können dem Generator auch eine Anordnung von Tabulatoren ('\ t') mit f-Linien zuweisen:

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

Wenn die im ersten Zyklus extrahierte Liste mit der Methode string join (), der parallelen Zuweisung von Variablen und der Platzierung des Zyklus in einer Zeile in eine Zeichenfolge eingeklebt wird, wird die Codegröße erheblich reduziert:



Auflistung
 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 


Und wenn Sie join () und '\ n' zum Generator hinzufügen:

 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 

Jetzt haben wir eine Liste von Strings zur Verfügung, die auch mit join () geklebt werden kann, wodurch Schleifen entfernt werden:
 def MultiTabl(): tabl = ''.join([''.join([f'{x*y}\t' for x in range(1,11)])+'\n' for y in range(1,11)]) return tabl 

Nun, die versprochene Option in einer Zeile (natürlich können Sie den Druck nicht loswerden)

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

Natürlich werden Python-Gurus sagen: "Was ist das?", Aber es ist erwähnenswert, dass dieser Ansatz für Anfänger nicht offensichtlich ist.

Sie sollten dieses Werk nicht zu ernst nehmen. Ich habe es als Aufwärmübung vor einem großen Artikel geschrieben. Es wird großartig sein, wenn es ein Lächeln hervorruft, und einfach großartig, wenn es davon profitiert.

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


All Articles