12: Tuyaux

Cette leçon contient des éléments de Python que nous avons laissés de côté dans les leçons précédentes.

Options print

Jusqu'à maintenant, la seule manière que nous avons vu d'écrire à l'écran est d'utiliser la fonction print(), qui écrit différents éléments une ligne à la fois et sépare ces éléments par des espaces. En fait, print accepte quelques arguments mot-clef qui vous permettent de modifier son comportements pour satisfaire vos besoins.

  • Pour changer le séparateur espace en une autre chaîne S, insérez l'argument sep = «S»
  • Pour remplacer le caractère de "fin de ligne" avec une autre chaîne S, insérez l'argument end = «S»

Cette nouvelle fonctionnalité, arguments mot-clef, est plus facile à illustrer à l'aide de plusieurs exemples.

Exemple
Exemples de sep et end. Remarquez l'effet sur chaque appel à print.

Ces arguments mot-clef doivent être passés à la fin de la liste d'arguments sinon une erreur sera générée. Si vous utilisez les deux arguments mot-clef, ils peuvent être donnés dans n'importe quel ordre.

Exercice de code : Aérobic Alphabétique
En utilisant ce que nous venons d'introduire, déverminez le programme suivant afin qu'il affiche l'alphabet en majuscule sur une seule ligne.

Noms de fonctions/variables valides

  • Les noms peuvent contenir des lettres, nombres et le caractère souligné (_).
  • Le premier caractère de chaque nom doit être une lettre.
  • Python fait la distinction entre majuscules et minuscules.

Donc mon_3e_int est un nom de variable valide mais 3e_int ne l'est pas.

Exemple
Un exemple pour distinguer entre majuscules et minuscules.

Décrementer des boucles for & et autres incréments

Jusqu'ici, vous avez vu que les boucles for peuvent parcourir une liste de nombres en ordre croissant:

Exemple
Une boucle for

Souvent il est nécessaire d'écrire une boucle for qui parcourt les nombres dans l'ordre décroissant (du plus grand au plus petit). Pour ce faire, nous appelons range avec un troisième argument appelé incrément ou step (le pas en français):

Exemple
Pas négatif pour range

Si vous réfléchissez pendant un instant, vous remarquerez que range(0, 5) est la même chose que range(0, 5, 1): l'incrément par défault est 1. Dans tous les cas, faites attention que range(début, fin, pas) s'exécute jusqu'à juste avant d'avoir atteint la valeur fin. Pour plus d'information voyez le manuel Python.

Exercice de code : Lucky Sevens
Ecrivez un programme utilisant une boucle for qui se répète avec un pas de 10, pour afficher tous les nombres à deux chiffres qui se terminent par 7, en ordre croissant.

De même, vous pouvez utiliser string[x:y:-1] pour obtenir l'inverse d'une chaîne, ou string[x:y:2] pour obtenir une sous-chaîne avec les caractèères x, x+2, x+4, ...

Avec une boucle for, vous pouvez aussi inverser l'ordre avec reversed(range(x, y)), qui traverse de y-1 à x dans l'ordre décroissant.

Ecrire du code plus petit

Python permet d'utiliser différentes manières pour écrire du code plus court; nous en introduisons quelques unes ici.

Nous n'utiliserons pas toujours ces possibilités car elles rendent parfois le code plus difficile à lire.

Opérateurs d'attribution

Python permet d'écrire "x += 1" qui signifie "ajouter 1 à x." C'est donc équivalent à "x = x + 1" comme nous le montrons ci-dessous:

Exemple
Exemples de +=, -=, *=, /=

De la même manière, il y a des opérateurs pour la division entière (//=), le modulo (%=), et la puissance (**=).

Blocks "inline"

Nous avons vu plusieurs instructions qui sont suivies par des "blocks" de code indentés: for, if, else, elif, while, and def, par exemple:

if x==y:
  «block» #indenté, multiligne
Dans ce cas particulier où le «block» n'est composé que d'une ligne, Python permet d'utiliser la syntaxe:

if x==y: «block» #ligne seule
Voici un exemple:

Exemple
Block d'instructions "inline"

Ceci montre une limite: un block composé avec un double point (if, for, etc) ne peut pas être utilisé comme block "inline". Par exemple, if 2>1: if 4>3: print() donne une erreur de syntaxe.

Affectation multiple

Python permet de combiner deux instructions d'attributions en une seule:

Exemple
Attributions multiples

Remarquez que ceci nous permet de résoudre notre exercice Programme d'échange en une seule ligne!

Comparaisons à la chaîne

Python permet aussi de combiner plusieurs comparaisons en une seule:

Exemple
Comparaisons à la chaîne
N'importe quelle chaîne v1 c1 v2 c2 v3 ...v sont des valeurs et c des comparaisons, est traitée de la même manière que (v1 c1 v2) and (v2 c2 v3) and...

Valeurs par défaut pour [:] et range()

Vous pouvez laisser une ou deux valeurs de début / fin quand utilisant l'opérateur sous-chaîne [:]. (Ceci est également vrai pour les listes, comme nous le verrons dans la prochaine leçon.) La valeur par défaut du premier indice est 0 (le début de la chaîne) et la valeur par défaut du dernier indice est la longueur de la chaîne. De même, range(n) signifie range(0, n).

Exemple
Les valeurs par défaut pour [:] et range()

None

Certaines fonctions ont comme effet principal de retourner une value, par exemple abs(x). Mais d'autres fonctions qui sont plus valorisées pour leur effet retournent la valeur par 'defaut' None:

Exemple
La valeur de print

Ici None est une valeur spéciale utilisée par Python comme conteneur à tout faire. Si vous en demandez type(None), vous verrez que None a même son propre type, NoneType. Pendant que l'on y est, voyons quel est le type du type variable:

Exemple
Le type du type

Dans l'exercice suivant, on vous demande de tracer les résultats d'une longue commande utilisant type et print.

Exercice mêlé : La grande ligne
La sortie de print(type(print(type(type(print(print())))))) est composée de 4 lignes. Mettez-les dans l'ordre correct.
  • None
  • «ligne blanche»
  • <class 'NoneType'>
  • <class 'type'>
Correct !

Vous être prêt à passer à la leçon suivante!