Fonction de damier tourné magique en python!
Voici un casse-tête pour tous les programmeurs python:
J'ai défini une fonction qui va comme ceci:
def checkers(num):
magic = [_____________________________________________________________]
print('\n'.join(magic + magic[num-2::-1]))
Voici les résultats de l'appel de la fonction avec différents nombres:
checkers(1)
Production:
_|
_|
checkers(2)
Production:
_|
_|_|_|
_|
checkers(3)
Production:
_|
_|_|_|
_|_|_|_|_|
_|_|_|
_|
checkers(4)
Production:
_|
_|_|_|
_|_|_|_|_|
_|_|_|_|_|_|_|
_|_|_|_|_|
_|_|_|
_|
checkers(5)
Production:
_|
_|_|_|
_|_|_|_|_|
_|_|_|_|_|_|_|
_|_|_|_|_|_|_|_|_|
_|_|_|_|_|_|_|
_|_|_|_|_|
_|_|_|
_|
J'espère que vous comprenez l'essentiel de ce que fait la fonction, mais sinon:
quel que soit le nombre que nous passons entre parenthèses, il imprimera un damier tourné à 45 degrés, avec le numéro que nous avons passé comme chacune de ses dimensions.
Pour votre défi, découvrez comment magicest défini.
Vous n'êtes pas obligé de le définir de la même manière que moi, mais juste pour un petit indice sur une façon de le définir, chaque trait de soulignement entre les deux crochets représente un caractère, sans espaces inutiles ( j'adore PEP-8 , ne vous méprenez pas ).
Réponses
D'un autre abuseur de listcomps, la magie est
" "*(num-i-1)+"_|"*(2*i+1)+" "*(num-i-1)for i in range(num)
C'est une liste des lignes dans la moitié supérieure.
L'indice est
magic (1) n'étant pas carré: cela se produit parce que num-2 est -1 et donc ce qui serait tout sauf la dernière ligne dans l'ordre inverse devient la dernière (et seule) ligne
49 octets, en respectant les espaces du côté droit:
Essayez-le en ligne!('_|'*(2*i+1)).center(num*4-2)for i in range(num)
Cela dit, ce n'est pas un casse-tête très intéressant car les tâches de formatage de chaînes sont courantes dans la programmation régulière, à l'exception du peu de déduction à quoi magicdoit s'évaluer. J'espère que vous en trouverez d'autres plus intéressants plus tard :)