📦 Le cours : variables, types et conditions
Un programme manipule des valeurs : un nombre, un texte, un « oui / non ». Une variable est un nom qui désigne une valeur gardée en mémoire. On la crée avec l'affectation = et on s'en sert ensuite partout dans le programme. Python n'oblige pas à déclarer un type : c'est la valeur qui le porte, et une même variable peut recevoir plus tard une valeur d'un autre type.
Affecter une variable
Le signe = n'est pas une égalité mathématique : il se lit « age reçoit la valeur de droite ». Python calcule d'abord le membre de droite, puis range le résultat dans la variable. C'est pourquoi age = age + 1 est parfaitement légitime.
age = 16
print(age)
age = age + 1
print(age)
age = "seize"
print(age, type(age))
Affichage16
17
seize <class 'str'>
Les types de base
| Type | Exemples | À retenir |
int | 0, 16, -3 | Entiers relatifs, sans limite de taille |
float | 3.14, -0.5, 1e3 | Nombres décimaux (avec un point), précision limitée |
str | "NSI", 'a' | Texte entre guillemets simples ou doubles |
bool | True, False | Résultat d'une comparaison ; majuscule obligatoire |
NoneType | None | « Pas de valeur » (ce que renvoie une fonction sans return) |
print(type(16), type(3.14), type("NSI"))
print(type(True), type(None))
print(10 ** 30)
print(isinstance(3, int), isinstance(3, float), isinstance(True, int))
print(True + True)
Affichage<class 'int'> <class 'float'> <class 'str'>
<class 'bool'> <class 'NoneType'>
1000000000000000000000000000000
True False True
2
Les entiers de Python n'ont pas de limite de taille (contrairement au C ou au Java). Et bool est un sous-type de int : True vaut 1 et False vaut 0, d'où True + True égal à 2.
Bien nommer ses variables
Un nom est formé de lettres, de chiffres et du tiret bas _, sans commencer par un chiffre ; il ne peut pas être un mot réservé du langage (class, if, for…). Python distingue majuscules et minuscules. Par convention, on écrit en minuscules avec des tirets bas (nb_eleves, note_finale) et on choisit un nom qui dit ce que la variable contient.
| Valide | Invalide | Pourquoi |
note_finale, x2, _tmp | 2x | commence par un chiffre |
prenom | mon prenom | contient une espace |
classe, class_ | class | mot réservé de Python |
prix_ht | prix-ht | le tiret est l'opérateur « moins » |
import keyword
nb_eleves = 28
Nb_eleves = 30
print(nb_eleves, Nb_eleves)
print(keyword.iskeyword("class"), keyword.iskeyword("classe"))
Affichage28 30
True False
Opérateurs arithmétiques
| Opérateur | Rôle | Exemple | Résultat |
+ - * | addition, soustraction, produit | 3 * 4 | 12 |
/ | division décimale (toujours un float) | 7 / 2 | 3.5 |
// | quotient entier (division euclidienne) | 7 // 2 | 3 |
% | reste de la division (modulo) | 7 % 2 | 1 |
** | puissance | 2 ** 10 | 1024 |
print(7 / 2, 7 // 2, 7 % 2)
print(2 ** 10, 10 / 5)
print(-7 // 2, -7 % 2)
print(divmod(17, 5))
Affichage3.5 3 1
1024 2.0
-4 1
(3, 2)
Le quotient // arrondit vers le bas : -7 // 2 vaut -4, pas -3. Dans tous les cas, a == (a // b) * b + a % b. divmod(a, b) renvoie les deux résultats d'un coup.
Ces deux opérateurs servent tout le temps : n % 2 == 0 teste si n est pair, n % 10 donne le dernier chiffre de n, n // 10 retire ce dernier chiffre, et on convertit des durées avec des divisions successives.
secondes = 3725
heures = secondes // 3600
minutes = (secondes % 3600) // 60
reste = secondes % 60
print(f"{heures} h {minutes} min {reste} s")
print(2025 % 10, 2025 // 10)
Affichage1 h 2 min 5 s
5 202
Priorités et parenthèses
Python applique les priorités usuelles : d'abord **, puis *, /, //, %, puis + et -, puis les comparaisons, enfin not, and, or. En cas de doute, ajoute des parenthèses : elles rendent le code plus lisible.
print(2 + 3 * 4)
print((2 + 3) * 4)
print(2 ** 3 ** 2)
print(-2 ** 2, (-2) ** 2)
Deux pièges : ** se calcule de droite à gauche (2 ** 3 ** 2 vaut 2 ** 9), et le signe moins d'un -2 ** 2 s'applique après la puissance.
Affectations composées
Pour modifier une variable à partir de sa valeur actuelle, on écrit +=, -=, *=, /=, //=, %= ou **=. x += 1 est un raccourci pour x = x + 1.
score = 10
score += 5
score *= 2
score -= 1
score //= 3
print(score)
Convertir un type en un autre
Les fonctions int(), float(), str() et bool() convertissent une valeur. int() tronque vers zéro (elle n'arrondit pas), round() arrondit à l'entier le plus proche.
print(int("42") + 1, float("3.5") * 2, str(12) + "0")
print(int(3.9), int(-3.9), round(3.9))
print(float(7), bool(0), bool(""), bool("0"), bool([]))
Affichage43 7.0 120
3 -3 4
7.0 False False True False
bool() répond « faux » pour 0, 0.0, la chaîne vide, une liste ou un dictionnaire vide et None, et « vrai » pour tout le reste (même la chaîne "0", qui n'est pas vide). Cette règle sert dans les conditions : if liste: signifie « si la liste n'est pas vide ».
for valeur in [0, 1, "", "NSI", [], [0], None]:
print(repr(valeur), bool(valeur))
Affichage0 False
1 True
'' False
'NSI' True
[] False
[0] True
None False
Comparer et combiner des conditions
Une comparaison (==, !=, <, >, <=, >=) produit un booléen. On les combine avec and (les deux), or (au moins une) et not (le contraire). Python accepte les comparaisons enchaînées : 0 <= x < 10 signifie « x est entre 0 inclus et 10 exclu ».
x = 7
print(x > 5, x == 7, x != 7)
print(0 <= x < 10, 10 <= x < 20)
print(x > 5 and x % 2 == 0, x > 5 or x % 2 == 0, not x > 5)
print("a" < "b", "Z" < "a", "10" < "9")
AffichageTrue True False
True False
False True False
True True True
Les textes se comparent dans l'ordre des codes de leurs caractères : toutes les majuscules passent avant les minuscules ("Z" < "a"), et "10" < "9" est vrai car on compare caractère par caractère ("1" avant "9").
Afficher avec print et les f-strings
print accepte plusieurs valeurs séparées par des virgules (une espace les sépare), et deux options : sep change le séparateur, end change ce qui termine la ligne. Une f-string (chaîne préfixée par f) insère des valeurs entre accolades ; après :, une spécification règle le format.
prenom = "Lina"
note = 17.5
print("Bonjour", prenom)
print("a", "b", "c", sep="-")
print("Chargement", end="...")
print("terminé")
print(f"{prenom} a {note}/20")
print(f"{note:.2f} | {42:05d} | {1234567:,} | {0.256:.1%}")
print(f"{prenom:>8}|{prenom:<8}|{prenom:^8}|")
print(f"{note * 2 = }")
AffichageBonjour Lina
a-b-c
Chargement...terminé
Lina a 17.5/20
17.50 | 00042 | 1,234,567 | 25.6%
Lina|Lina | Lina |
note * 2 = 35.0
| Spécification | Effet | Exemple |
:.2f | 2 chiffres après la virgule | f"{3.14159:.2f}" → 3.14 |
:05d | entier sur 5 caractères, complété par des zéros | f"{42:05d}" → 00042 |
:>8 :<8 :^8 | aligner à droite, à gauche, au centre | f"{'a':>3}" → a |
:, | séparateur de milliers | f"{1234567:,}" → 1,234,567 |
:.1% | pourcentage | f"{0.256:.1%}" → 25.6% |
:b :x | écriture binaire, hexadécimale | f"{10:b}" → 1010 |
Lire une saisie avec input
input(message) affiche le message, attend que l'utilisateur tape sa réponse puis la renvoie toujours sous forme de texte. Pour calculer, il faut convertir la saisie avec int() ou float().
prenom = input("Ton prénom : ")
age = int(input("Ton âge : "))
print(f"Dans un an, {prenom} aura {age + 1} ans.")
Si on saisit Lina puis 16Dans un an, Lina aura 17 ans.
if, elif, else : choisir quoi exécuter
Une instruction if teste une condition ; si elle est vraie, le bloc indenté qui suit s'exécute. elif (« sinon si ») propose une autre condition, else couvre tous les autres cas. Les branches sont examinées dans l'ordre et une seule est exécutée. L'indentation (quatre espaces) fait partie de la syntaxe, et chaque ligne d'en-tête se termine par :.
temperature = 28
if temperature >= 30:
print("Canicule")
elif temperature >= 20:
print("Il fait bon")
elif temperature >= 10:
print("Frais")
else:
print("Froid")
print("Fin du test")
AffichageIl fait bon
Fin du test
Le dernier print n'est pas indenté : il appartient au programme principal et s'exécute dans tous les cas. L'ordre des branches compte : si on testait temperature >= 10 en premier, les 28 degrés tomberaient dans cette branche.
On combine des conditions avec and et or. Exemple classique : une année est bissextile si elle est divisible par 400, ou si elle est divisible par 4 sans l'être par 100.
annee = 2100
if annee % 400 == 0 or (annee % 4 == 0 and annee % 100 != 0):
print(annee, "est bissextile")
else:
print(annee, "n'est pas bissextile")
Affichage2100 n'est pas bissextile
L'expression conditionnelle
Quand il s'agit seulement de choisir entre deux valeurs, on peut écrire une expression sur une ligne : valeur_si_vrai if condition else valeur_si_faux.
age = 20
statut = "majeur" if age >= 18 else "mineur"
x = -5
valeur_absolue = x if x >= 0 else -x
print(statut, valeur_absolue)