Aller au contenu

Langage et programmation en Python

Première · NSI · Langages et programmation

Langages et programmation

Variables, types et expressions

Variable et affectation

Un programme manipule des valeurs qu'il range dans des variables. En Python, l'instruction d'affectation s'écrit avec un simple signe égal :

age = 16
prix = 12.5
nom = 'Ada'


Attention, le signe = n'est pas l'égalité mathématique : c'est un ordre donné à la machine. « Range la valeur 16 dans la variable age. » C'est pour cela que la ligne x = x + 1, absurde en maths, est parfaitement correcte en programmation : elle signifie « calcule x + 1, puis range le résultat dans x ».

Les types de base

TypeNom PythonExemples de valeursOpérations courantes
Entierint0, 42, −7+ − * // % ** (précision exacte, pas de limite de taille)
Flottantfloat2.5, −0.75, 3.0+ − * / ** (valeur approchée du nombre réel)
Chaîne de caractèresstr'bonjour', "NSI", ''+ (concaténation), * (répétition), len()
BooléenboolTrue, Falseand, or, not

La fonction type(v) renvoie le type d'une valeur. On peut aussi convertir explicitement : int('12') vaut l'entier 12, str(12) vaut la chaîne '12', float(3) vaut 3.0.

Côté opérateurs, retiens la distinction essentielle entre les deux divisions :
• / est la division décimale : elle renvoie toujours un float, même quand le résultat tombe juste (7 / 2 vaut 3.5, et 6 / 3 vaut 2.0).
• // est la division entière (le quotient) et % le reste : 17 // 5 vaut 3 et 17 % 5 vaut 2.

Les opérateurs de comparaison (==, !=, <, <=, >, >=) produisent un booléen, que l'on combine avec and, or et not.

Langages et programmation

Conditionnelles, boucles et structuration d'un programme

L'instruction conditionnelle

Une conditionnelle choisit le bloc d'instructions à exécuter selon la valeur d'une expression booléenne.

if note >= 16:
    mention = 'très bien'
elif note >= 14:
    mention = 'bien'
elif note >= 12:
    mention = 'assez bien'
else:
    mention = 'sans mention'


Les tests sont examinés dans l'ordre et le premier vrai l'emporte : dès qu'une branche est prise, les suivantes sont ignorées. C'est pourquoi l'ordre des conditions compte énormément — si l'on commençait par if note >= 12, un 18 recevrait « assez bien » !

En Python, ce sont les indentations (4 espaces) qui délimitent les blocs : il n'y a ni accolades ni mot-clé de fin.

Boucle bornée, boucle non bornée

La boucle bornée (for) répète un bloc un nombre de fois connu à l'avance :

for i in range(5):   # i vaut 0, 1, 2, 3 puis 4
    print(i)


La fonction range(debut, fin, pas) produit les entiers de debut (inclus) à fin (exclu) : range(2, 10, 3) donne 2, 5 puis 8.

La boucle non bornée (while) répète tant qu'une condition reste vraie ; le nombre de tours n'est pas connu au départ :

n = 1
while n < 20:
    n = n * 3


Ici n prend les valeurs 1, 3, 9 puis 27 ; à ce moment la condition devient fausse et la boucle s'arrête : n vaut 27 à la sortie.

Comment Python exécute ton programme

Un processeur ne comprend que le langage machine, une suite d'instructions binaires. Un programme écrit dans un langage de haut niveau doit donc être traduit, et il existe deux stratégies :
• la compilation traduit tout le code source en un fichier exécutable une fois pour toutes (C, C++) : rapide à l'exécution, mais lié à un type de machine ;
• l'interprétation traduit et exécute les instructions au fil de l'eau (Python) : plus lent, mais plus souple et portable.

Python est un langage interprété, à typage dynamique, et relevant du paradigme impératif (une suite d'instructions qui modifient l'état des variables).

Enfin, on n'écrit jamais tout soi-même : les modules regroupent des fonctions déjà écrites, que l'on charge avec import.

import math
print(math.sqrt(16))  # 4.0

from random import randint
print(randint(1, 6))  # un entier au hasard entre 1 et 6, bornes comprises

Exercices corrigés

  1. Après l'exécution de x = 5 puis x = x + 3 puis x = x * 2, que vaut x ?

    • A.16Bonne réponse
    • B.13
    • C.11
    • D.40

    Réponse : A — 16

    Les affectations s'exécutent dans l'ordre, de haut en bas. x vaut 5, puis x = 5 + 3 = 8, puis x = 8 × 2 = 16. Répondre 13 revient à oublier la dernière ligne, et 11 à appliquer le × 2 avant le + 3 (soit 5 × 2 + ... ) : l'ordre des instructions compte. En programmation, x = x + 3 n'est pas une équation mais un ordre : « calcule x + 3 et range le résultat dans x ».

  2. Quelle condition Python teste correctement « n est un entier pair et strictement positif » ?

    • A.n % 2 == 0 or n > 0
    • B.n / 2 == 0 and n > 0
    • C.n % 2 == 1 and n > 0
    • D.n % 2 == 0 and n > 0Bonne réponse

    Réponse : D — n % 2 == 0 and n > 0

    Être pair signifie que le reste de la division par 2 est nul : n % 2 == 0. Les deux exigences devant être satisfaites en même temps, on les relie par and. Avec or, un nombre impair comme 7 passerait le test, puisqu'il est positif. Écrire n / 2 == 0 est faux : cela testerait que n vaut 0. Et n % 2 == 1 caractérise les nombres IMPAIRS.

  3. Quelle affirmation décrit correctement Python ?

    • A.C'est un langage interprété, à typage dynamiqueBonne réponse
    • B.C'est un langage compilé, à typage statique
    • C.C'est un langage interprété, à typage statique
    • D.C'est un langage machine directement exécuté par le processeur

    Réponse : A — C'est un langage interprété, à typage dynamique

    Python est interprété : les instructions sont traduites et exécutées au fil de l'eau, sans production préalable d'un exécutable autonome comme le ferait un compilateur C. Il est aussi à typage dynamique : le type d'une variable découle de la valeur qu'on lui affecte et peut changer en cours de programme. Un typage statique, comme en Java, exigerait de déclarer le type à l'avance. Et aucun processeur ne comprend Python directement : seul le langage machine binaire l'est.

  4. Quel est le type de la valeur renvoyée par l'expression 7 / 2 en Python ?

    • A.int
    • B.str
    • C.floatBonne réponse
    • D.bool

    Réponse : C — float

    L'opérateur / est la division décimale : elle renvoie toujours un float, ici 3.5. C'est vrai même quand le résultat tombe juste : 6 / 3 vaut 2.0, un flottant, et non 2. Pour obtenir un entier, il faut utiliser la division entière // : 7 // 2 vaut 3, de type int.

  5. Que vaut 17 // 5 en Python ?

    • A.3Bonne réponse
    • B.3.4
    • C.2
    • D.4

    Réponse : A — 3

    L'opérateur // renvoie le quotient de la division euclidienne : combien de fois 5 tient-il dans 17 ? Trois fois, car 5 × 3 = 15 et il resterait 2. Le résultat est donc l'entier 3. Répondre 3.4 correspond à 17 / 5, avec la division décimale. Répondre 2, c'est confondre avec le RESTE, que donne 17 % 5. Et 4 serait un arrondi au plus proche, ce que // ne fait pas : // tronque vers le bas.

  6. Combien de tours effectue la boucle for i in range(5) : ?

    • A.4
    • B.6
    • C.Cela dépend du contenu de la boucle
    • D.5Bonne réponse

    Réponse : D — 5

    range(5) produit les entiers 0, 1, 2, 3 et 4 : cinq valeurs, donc cinq tours. Le piège est de confondre le NOMBRE de tours (5) et la DERNIÈRE valeur prise par i (4) : la borne est exclue, mais on part de 0. Le contenu du corps de la boucle n'a aucune influence sur le nombre de tours d'un for : c'est le propre d'une boucle bornée.

  7. En Python, quelle instruction range la valeur 10 dans la variable compteur ?

    • A.compteur == 10
    • B.compteur = 10Bonne réponse
    • C.10 = compteur
    • D.compteur := 10 obligatoirement

    Réponse : B — compteur = 10

    L'affectation s'écrit avec un simple signe = et la variable est TOUJOURS à gauche : compteur = 10. Le double égal == est l'opérateur de comparaison : il ne modifie rien, il produit un booléen. Écrire 10 = compteur est une erreur de syntaxe, car on ne peut pas affecter quelque chose à une valeur littérale.

  8. Que vaut l'expression '3' + '4' en Python ?

    • A.'34'Bonne réponse
    • B.7
    • C.'7'
    • D.Une erreur TypeError

    Réponse : A — '34'

    Les guillemets indiquent qu'il s'agit de deux chaînes de caractères. Appliqué à des chaînes, l'opérateur + réalise la concaténation : il colle les deux textes bout à bout, ce qui donne '34'. Aucune addition n'est effectuée. En revanche '3' + 4 déclencherait bien une TypeError, car Python refuse de mélanger un str et un int.

  9. Que vaut l'expression not (True and False) ?

    • A.False
    • B.Une erreur de syntaxe
    • C.TrueBonne réponse
    • D.None

    Réponse : C — True

    On commence par la parenthèse : True and False vaut False, car le and n'est vrai que si SES DEUX opérandes sont vrais. Le not inverse ensuite ce résultat : not False vaut True. Retiens l'ordre de priorité : les parenthèses d'abord, puis not, puis and, puis or.

  10. Que vaut 17 % 5 ?

    • A.3
    • B.2Bonne réponse
    • C.3.4
    • D.0.4

    Réponse : B — 2

    L'opérateur % donne le RESTE de la division euclidienne. On écrit 17 = 5 × 3 + 2 : le quotient est 3 et le reste est 2. Répondre 3, c'est donner le quotient (17 // 5). Le reste est toujours un entier compris entre 0 et 4 quand on divise par 5 — un reste ne peut pas valoir 3.4.

  11. Quelles valeurs prend la variable i dans la boucle for i in range(2, 10, 3) : ?

    • A.2, 3, 4, 5, 6, 7, 8, 9
    • B.2, 5, 8, 11
    • C.3, 6, 9
    • D.2, 5, 8Bonne réponse

    Réponse : D — 2, 5, 8

    Avec trois arguments, range(debut, fin, pas) part de 2, avance de 3 en 3, et s'arrête AVANT 10. On obtient donc 2, puis 5, puis 8 ; la valeur suivante serait 11, mais elle dépasse la borne et n'est jamais produite. Attention : la borne de fin est exclue, et 11 ne fait donc pas partie de la séquence même si le pas y conduit.

  12. On exécute : n = 1 puis while n < 20 : n = n * 3. Que vaut n à la sortie de la boucle ?

    • A.18
    • B.20
    • C.27Bonne réponse
    • D.9

    Réponse : C — 27

    Déroulons : n = 1, la condition 1 < 20 est vraie donc n devient 3 ; 3 < 20 vrai, n devient 9 ; 9 < 20 vrai, n devient 27 ; on re-teste : 27 < 20 est FAUX, la boucle s'arrête. À la sortie, n vaut 27. L'erreur classique est de répondre 9 : c'est la dernière valeur INFÉRIEURE à 20, mais la boucle a bien effectué un tour de plus. Un while ne s'arrête pas pile sur le seuil, il le dépasse.

S'entraîner sur ce chapitre

Ce chapitre compte 38 exercices corrigés dans l'application, avec le suivi de ta progression.

Commencer les exercices