En regardant cet article, j'ai été impressionné si Tetris pouvait être réalisé en seulement sept lignes. Mais je ne peux pas du tout javascript, donc je ne comprends pas le sens. (Je veux dire, je comprends la syntaxe, mais je ne sais pas ce que je fais) Cependant, j'ai réalisé qu'un revêtement court serait cool, et j'ai pensé que Python pourrait le faire, alors je vais le présenter. De plus, je n'ai pas de vocabulaire, alors pardonnez-moi même si la phrase est étrange.
Tout d'abord, essayez de construire normalement un programme de jugement des nombres premiers. (La vitesse d'exécution n'est pas prise en compte)
JudgeNum=int(input("nombre?"))
prime=True
for i in range(2,JudgeNum):
if JudgeNum%i==0:
prime=False
print(prime)
Résultat d'exécution
nombre?5
True
C'est la réponse habituelle. Même si vous montrez cela à d'autres personnes, c'est une réaction comme "Hmm". Raccourcissons un peu ceci pour le moment
Premier
int(input("nombre?"))#Est
int(input())#Remplacer par
JudgeNum#Est
n#Remplacer par
Ensuite, utilisez la notation d'inclusion.
prime=True
for i in range(2,n):
if n%i==0:
prime=False
Ce mec
prime=not[i for i in range(2,n) if n%2==0]
Est presque le même que Dans cette notation d'inclusion, le nombre de fissures est ajouté à la liste.
En python, une liste vide est évaluée comme False, donc en la retournant avec not, la liste vide (ce qui signifie qu'elle n'était pas divisible par tous les nombres) est un nombre premier. (vocabulaire) (J'ai essayé de le retourner avec ~ au lieu de pas pendant un moment, mais je ne pouvais pas parce que le flip est une liste.)
Ensuite, vous n'avez pas besoin de la variable principale. Alors
print(not[i for i in range(2,n) if n%2==0])
Peut être raccourci avec. Finalement
n=int(input())
print(not[i for i in range(2,n) if n%2==0])
J'ai pu le raccourcir à deux lignes.
Si vous êtes arrivé jusqu'ici, j'aimerais avoir une ligne. Mais lorsque vous déclarez une variable, vous devez la casser. Puisque l'algorithme de jugement des nombres premiers est presque impossible sans utiliser de variables, est-il nécessaire d'avoir au moins deux lignes? J'aimerais pouvoir le faire avec des virgules comme des arguments de fonction ... . . . ! Dois-je utiliser une fonction! Cependant, c'est impossible avec les fonctions ordinaires. Par conséquent, nous utiliserons une fonction anonyme (lambda). Prends juste n comme argument
(lambda n:print(not[i for i in range(2,n)if n%i==0]))(int(input()))
Vous pouvez maintenant le compresser sur une seule ligne. Savez-vous que deux lignes ont moins de caractères?
C'est un revêtement court sur lequel j'ai travaillé dur. Si vous avez un code plus court que celui-ci, veuillez me le faire savoir.
Recommended Posts