Als ich mir [diesen Artikel] ansah (https://qiita.com/ryuichi1208/items/f9e6ac2b99bbe4fc82d3), war ich beeindruckt, ob Tetris in nur sieben Zeilen hergestellt werden konnte. Aber ich kann überhaupt kein Javascript, deshalb verstehe ich die Bedeutung nicht. (Ich meine, ich verstehe die Syntax, aber ich weiß nicht, was ich tue) Ich erkannte jedoch, dass eine kurze Beschichtung cool sein würde, und ich dachte, dass Python dazu in der Lage sein könnte, also werde ich sie vorstellen. Außerdem habe ich keinen Wortschatz, also vergib mir bitte, auch wenn der Satz seltsam ist.
Versuchen Sie zunächst, ein Programm zur Beurteilung von Primzahlen normal zu erstellen. (Ausführungsgeschwindigkeit wird nicht berücksichtigt)
JudgeNum=int(input("Nummer?"))
prime=True
for i in range(2,JudgeNum):
if JudgeNum%i==0:
prime=False
print(prime)
Ausführungsergebnis
Nummer?5
True
Dies ist die übliche Antwort. Selbst wenn Sie dies anderen Leuten zeigen, ist es eine Reaktion wie "Hmm". Lassen Sie uns dies vorerst ein wenig verkürzen
Zuerst
int(input("Nummer?"))#Ist
int(input())#Ersetzen mit
JudgeNum#Ist
n#Ersetzen mit
Verwenden Sie als Nächstes die Einschlussnotation.
prime=True
for i in range(2,n):
if n%i==0:
prime=False
Dieser Typ
prime=not[i for i in range(2,n) if n%2==0]
Ist fast das gleiche wie In dieser Einschlussnotation wird die Anzahl der Risse zur Liste hinzugefügt.
In Python wird eine leere Liste als falsch ausgewertet. Wenn Sie sie also mit nicht umdrehen, ist die leere Liste (was bedeutet, dass sie nicht durch alle Zahlen teilbar war) eine Primzahl. (Wortschatz) (Ich habe versucht, es mit ~ zu drehen, anstatt für einen Moment, aber ich konnte es nicht, weil der Flip eine Liste ist.)
Dann brauchen Sie die Primvariable nicht. Damit
print(not[i for i in range(2,n) if n%2==0])
Kann mit gekürzt werden. Schließlich
n=int(input())
print(not[i for i in range(2,n) if n%2==0])
Ich konnte es auf zwei Zeilen kürzen.
Wenn Sie so weit gekommen sind, hätte ich gerne eine Zeile. Wenn Sie jedoch eine Variable deklarieren, müssen Sie sie brechen. Ist es notwendig, mindestens zwei Zeilen zu haben, da der Algorithmus zur Beurteilung der Primzahl ohne Verwendung von Variablen fast unmöglich ist? Ich wünschte, ich könnte es mit Kommas wie Funktionsargumenten tun ... . . . ! Soll ich eine Funktion benutzen! Bei normalen Funktionen ist dies jedoch nicht möglich. Daher verwenden wir eine anonyme Funktion (Lambda). Nehmen Sie einfach n als Argument
(lambda n:print(not[i for i in range(2,n)if n%i==0]))(int(input()))
Jetzt können Sie es auf eine Zeile komprimieren. Zwei Zeilen haben weniger Zeichen. Weißt du?
Dies ist eine kurze Beschichtung, an der ich hart gearbeitet habe. Wenn Sie einen kürzeren Code haben, lassen Sie es mich bitte wissen.
Recommended Posts