Aller au contenu

Chapitre 1 : Découvrir Python - Variables et entrées/sorties

Programme officiel (B.O.)

B.O. spécial n° 1 du 22 janvier 2019 - SNT Seconde

Contenus Capacités attendues
Affectations, variables Écrire et développer des programmes avec des variables.
Séquences d'instructions Comprendre et écrire une suite ordonnée d'instructions.
Instructions conditionnelles (if, elif, else) Programmer des choix dans un algorithme.
Boucles bornées (for) et non bornées (while) Programmer des répétitions.
Définitions et appels de fonctions Décomposer un programme en fonctions réutilisables.

1. Qu'est-ce que la programmation ?

Programmer, c'est écrire une suite d'instructions dans un langage compris par l'ordinateur pour lui faire accomplir une tâche. En SNT, le langage utilisé est Python, créé en 1991 par Guido van Rossum. Python est très répandu dans l'enseignement, la science des données, le développement web et l'intelligence artificielle.

Pourquoi Python ?

Python est choisi au lycée pour sa syntaxe simple et lisible, proche de l'anglais. Il permet de se concentrer sur la logique de programmation plutôt que sur des détails techniques complexes.

1.1. Les environnements de travail

Pour écrire et exécuter du Python, plusieurs outils existent :

Outil Description Idéal pour
Console Python (interpréteur) On tape une instruction, Python l'exécute immédiatement Tester rapidement une idée
Fichier .py (script) On écrit un programme complet puis on l'exécute d'un bloc Écrire de vrais programmes
Thonny Éditeur simple avec débogueur intégré Débuter en Python
EduPython Suite pédagogique (éditeur + modules scientifiques) Maths et sciences
Basthon (en ligne) Python dans le navigateur, rien à installer Travailler sans installation
VS Code Éditeur professionnel avec extensions Python Aller plus loin
# Mon tout premier programme Python
print("Bonjour, bienvenue en SNT !")

1.2. Console interactive vs script

>>> 2 + 3
5
>>> print("Bonjour")
Bonjour
>>> "SNT".lower()
'snt'

La console exécute chaque ligne immédiatement et affiche le résultat. Le symbole >>> s'appelle le prompt : c'est Python qui attend votre instruction.

# fichier : mon_programme.py
nom = input("Comment t'appelles-tu ? ")
print(f"Bonjour {nom} !")
print("Bienvenue en cours de SNT.")

Un script est un fichier texte contenant plusieurs instructions. On l'exécute d'un bloc avec le bouton « Exécuter » de l'éditeur ou via le terminal : python mon_programme.py.

Astuce

En console, Python affiche automatiquement le résultat d'une expression. Dans un script, il faut utiliser print() pour voir quelque chose à l'écran.

>>> 2 + 3       # En console : affiche automatiquement 5
5
# Dans un script : rien ne s'affiche sans print()
2 + 3            # Cette ligne ne produit aucun affichage !
print(2 + 3)     # Il faut écrire ceci pour voir 5

1.3. Les commentaires

Les commentaires sont des textes ignorés par Python, destinés aux humains qui lisent le code :

# Ceci est un commentaire sur une ligne entière
age = 16  # Ceci est un commentaire en fin de ligne

# Les commentaires servent à :
# - expliquer POURQUOI on fait quelque chose
# - rendre le code plus lisible
# - désactiver temporairement une ligne de code

Attention

Python n'a pas de commentaire multi-lignes à proprement parler. On utilise # sur chaque ligne :

# Ceci est un commentaire
# qui s'étend sur
# plusieurs lignes

2. Variables et affectations

2.1. Qu'est-ce qu'une variable ?

Une variable est un espace en mémoire dans lequel on stocke une valeur. On lui donne un nom pour pouvoir la retrouver et l'utiliser plus tard. On peut la voir comme une étiquette collée sur une boîte contenant une valeur.

prenom = "Alice"
age = 16
taille = 1.68
est_eleve = True

L'opération = s'appelle l'affectation : elle associe une valeur (à droite) à un nom de variable (à gauche).

Le = n'est pas l'égalité mathématique !

En Python, = signifie « stocker la valeur de droite dans la variable de gauche ». L'égalité mathématique s'écrit ==.

x = 5       # On STOCKE 5 dans x (affectation)
x == 5      # On TESTE si x vaut 5 (comparaison → True ou False)

2.2. Les types de données de base

Chaque valeur en Python a un type qui détermine ce qu'on peut en faire :

Type Description Exemples Remarques
int Nombre entier 42, -7, 0 Pas de limite de taille en Python !
float Nombre à virgule 3.14, -0.5, 1.0 Attention : on utilise le point, pas la virgule
str Chaîne de caractères (texte) "Bonjour", 'Python' Délimitée par des guillemets simples ' ou doubles "
bool Booléen (vrai ou faux) True, False Toujours avec une majuscule !

On peut connaître le type d'une variable avec la fonction type() :

x = 42
print(type(x))     # <class 'int'>

y = 3.14
print(type(y))     # <class 'float'>

nom = "Alice"
print(type(nom))   # <class 'str'>

vrai = True
print(type(vrai))  # <class 'bool'>

Piège classique : le point décimal

En Python (et dans tous les langages de programmation), le séparateur décimal est le point ., jamais la virgule ,.

taille = 1.68    # ✅ Correct
taille = 1,68    # ❌ Crée un tuple (1, 68), pas un nombre !

Piège classique : les guillemets autour des chaînes

Un texte doit toujours être entouré de guillemets. Sans guillemets, Python croit que c'est un nom de variable.

nom = Alice      # ❌ NameError: name 'Alice' is not defined
nom = "Alice"    # ✅ Correct

2.3. Nommer ses variables

Règles obligatoires (sinon Python refuse) :

  • Le nom commence par une lettre ou un underscore _
  • Il ne contient que des lettres, chiffres et underscores (pas d'espaces, pas de tirets, pas d'accents)
  • Il ne doit pas être un mot réservé de Python
# ✅ Noms valides
age = 16
nom_eleve = "Alice"
_compteur = 0
note2 = 15.5

# ❌ Noms invalides
2nd_note = 12       # SyntaxError : commence par un chiffre
nom-eleve = "Bob"   # SyntaxError : le tiret est interdit
mon age = 16        # SyntaxError : les espaces sont interdits
for = 5             # SyntaxError : for est un mot réservé
Les 35 mots réservés de Python

Ces mots ont une signification spéciale et ne peuvent pas être utilisés comme noms de variables :

False, None, True, and, as, assert, async, await, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield

Conventions (pas obligatoires, mais fortement recommandées) :

  • Utiliser le snake_case : mots en minuscules séparés par des underscores
  • Choisir des noms explicites qui décrivent le contenu
# ❌ Mauvais noms (fonctionnent mais incompréhensibles)
a = 16
b = "Alice"
x = 15.5

# ✅ Bons noms (on comprend immédiatement)
age_eleve = 16
prenom = "Alice"
note_maths = 15.5

Python distingue majuscules et minuscules

age = 16
Age = 25
AGE = 30
# Ce sont TROIS variables différentes !

2.4. L'affectation en détail

Affectation simple

x = 10          # x reçoit la valeur 10
x = x + 5      # x reçoit la valeur de x + 5, soit 15

Lire x = x + 5

Cette ligne ne signifie pas « x est égal à x + 5 » (ce qui serait absurde en maths). Elle signifie : « calculer la valeur de x + 5 (soit 15), puis stocker le résultat dans x ». La variable x est mise à jour.

Affectation augmentée (raccourcis)

Python propose des raccourcis pour modifier une variable :

x = 10
x += 3      # Équivalent à : x = x + 3    → x vaut 13
x -= 2      # Équivalent à : x = x - 2    → x vaut 11
x *= 4      # Équivalent à : x = x * 4    → x vaut 44
x //= 5     # Équivalent à : x = x // 5   → x vaut 8
x %= 3      # Équivalent à : x = x % 3    → x vaut 2
x **= 4     # Équivalent à : x = x ** 4   → x vaut 16

Affectation multiple

On peut affecter plusieurs variables en une seule ligne :

# Variante 1 : plusieurs valeurs sur une ligne
x, y, z = 1, 2, 3

# Variante 2 : même valeur pour toutes
a = b = c = 0

# Astuce : échanger deux variables (très pratique !)
x, y = 10, 20
x, y = y, x      # Maintenant x = 20 et y = 10

L'échange sans variable temporaire

Dans la plupart des langages, échanger deux variables nécessite une variable temporaire :

# Méthode classique (fonctionne dans tous les langages)
temp = x
x = y
y = temp

# Méthode Python (plus élégante)
x, y = y, x

2.5. Conversions de types

On a souvent besoin de convertir une valeur d'un type à un autre :

# str → int
age = int("16")          # 16

# str → float
taille = float("1.68")   # 1.68

# int → str
texte = str(42)           # "42"

# float → int (tronque la partie décimale, ne l'arrondit PAS)
n = int(3.7)              # 3 (pas 4 !)
n = int(-3.7)             # -3 (pas -4 !)

# int → float
x = float(5)              # 5.0

# Vers booléen
bool(0)       # False     (0 est « faux »)
bool(42)      # True      (tout nombre non nul est « vrai »)
bool("")      # False     (chaîne vide est « fausse »)
bool("hello") # True      (chaîne non vide est « vraie »)

Erreurs fréquentes de conversion

int("3.14")      # ❌ ValueError : on ne peut pas convertir directement
                  # un texte avec un point en int
int(float("3.14"))  # ✅ Il faut d'abord passer par float : 3

int("abc")       # ❌ ValueError: invalid literal for int()
float("bonjour") # ❌ ValueError: could not convert string to float

2.6. Opérations sur les nombres

Opérateur Signification Exemple Résultat
+ Addition 7 + 3 10
- Soustraction 7 - 3 4
* Multiplication 7 * 3 21
/ Division (toujours un float) 7 / 2 3.5
// Division entière (partie entière) 7 // 2 3
% Modulo (reste de la division) 7 % 3 1
** Puissance 2 ** 10 1024

Pièges avec les divisions

# La division / renvoie TOUJOURS un float, même si le résultat est entier
10 / 2       # 5.0 (pas 5 !)
type(10 / 2) # <class 'float'>

# La division entière // tronque vers le bas (pas vers zéro !)
7 // 2       # 3   ✅ comme attendu
-7 // 2      # -4  ⚠️ pas -3 ! (arrondi vers le bas)

# Le modulo suit la même logique
7 % 3        # 1   (car 7 = 3 × 2 + 1)
-7 % 3       # 2   ⚠️ (car -7 = 3 × (-3) + 2)

À quoi sert le modulo % ?

Le modulo est très utile en programmation :

  • Tester si un nombre est pair : n % 2 == 0
  • Tester si un nombre est divisible par k : n % k == 0
  • Extraire le dernier chiffre : n % 10
  • Boucler dans un intervalle (horloge, jours…) : heure % 24

Priorité des opérations

Python respecte les mêmes règles de priorité qu'en mathématiques :

  1. ** (puissance) - priorité la plus haute
  2. *, /, //, % (multiplication, divisions, modulo)
  3. +, - (addition, soustraction) - priorité la plus basse
2 + 3 * 4       # 14  (pas 20 ! La multiplication est prioritaire)
(2 + 3) * 4     # 20  (les parenthèses changent l'ordre)
2 ** 3 ** 2      # 512 (= 2 ** 9, car ** s'évalue de droite à gauche)

En cas de doute, utilisez des parenthèses !

# Ambigu et difficile à lire
resultat = a + b * c // d - e

# Clair et sans ambiguïté
resultat = a + ((b * c) // d) - e

2.7. Opérations sur les chaînes de caractères

prenom = "Alice"
nom = "Martin"

# Concaténation (assemblage de chaînes)
nom_complet = prenom + " " + nom
print(nom_complet)    # Alice Martin

# Répétition
ligne = "-" * 30
print(ligne)          # ------------------------------

# Longueur
print(len(prenom))    # 5

# Accès à un caractère (l'index commence à 0 !)
print(prenom[0])      # A  (premier caractère)
print(prenom[1])      # l  (deuxième caractère)
print(prenom[-1])     # e  (dernier caractère)
print(prenom[-2])     # c  (avant-dernier)

Erreur fréquente : concaténer un nombre et une chaîne

age = 16
print("J'ai " + age + " ans")   # ❌ TypeError: can only concatenate str to str

# 3 façons de corriger :
print("J'ai " + str(age) + " ans")     # Conversion en str
print("J'ai", age, "ans")               # Virgules dans print()
print(f"J'ai {age} ans")                # f-string (recommandé)

Quelques méthodes utiles sur les chaînes

texte = "Bonjour le Monde"

texte.upper()       # "BONJOUR LE MONDE"  (tout en majuscules)
texte.lower()       # "bonjour le monde"  (tout en minuscules)
texte.capitalize()  # "Bonjour le monde"  (1re lettre en majuscule)
texte.replace("Monde", "Python")  # "Bonjour le Python"
texte.count("o")    # 3  (nombre d'occurrences de "o")
texte.startswith("Bon")  # True
texte.endswith("de")     # True

"  espaces  ".strip()    # "espaces"  (supprime les espaces autour)
"a,b,c".split(",")       # ["a", "b", "c"]  (découpe en liste)

Les chaînes sont immuables

On ne peut pas modifier un caractère individuel d'une chaîne :

mot = "Python"
mot[0] = "p"    # ❌ TypeError: 'str' object does not support item assignment

# Il faut créer une nouvelle chaîne
mot = "p" + mot[1:]   # ✅ "python"

Guillemets simples, doubles et triples

# Trois façons d'écrire une chaîne - elles sont équivalentes :
message1 = 'Bonjour'
message2 = "Bonjour"

# Utile quand la chaîne contient des guillemets :
phrase1 = "L'élève travaille"        # Guillemets doubles autour d'une apostrophe
phrase2 = 'Il a dit "bonjour"'       # Guillemets simples autour de guillemets doubles

# Triples guillemets : pour les textes sur plusieurs lignes
poeme = """Roses are red,
Violets are blue,
Python is great,
And so are you."""

# Caractères spéciaux avec l'antislash \
print("Première ligne\nDeuxième ligne")   # \n = saut de ligne
print("Colonne1\tColonne2")               # \t = tabulation
print("Il a dit : \"Bonjour\"")           # \" = guillemet dans la chaîne

3. Entrées et sorties

3.1. Afficher avec print()

La fonction print() est très flexible. Voici toutes les façons de l'utiliser :

nom = "Alice"
age = 16
print("Bonjour", nom, "tu as", age, "ans")
# Bonjour Alice tu as 16 ans

Les éléments sont automatiquement séparés par un espace et suivis d'un saut de ligne.

nom = "Alice"
age = 16
print(f"Bonjour {nom}, tu as {age} ans")
# Bonjour Alice, tu as 16 ans

# On peut mettre des expressions dans les accolades
print(f"Dans 10 ans, tu auras {age + 10} ans")
print(f"Note : {15.6789:.2f}")  # Note : 15.68 (2 décimales)
nom = "Alice"
age = 16
print("Bonjour " + nom + ", tu as " + str(age) + " ans")
# Plus lourd, il faut convertir les nombres en str
nom = "Alice"
age = 16
print("Bonjour {}, tu as {} ans".format(nom, age))
# Méthode plus ancienne, les f-strings sont préférées

Paramètres utiles de print() :

# sep : changer le séparateur (par défaut : espace)
print("Alice", "Bob", "Charlie", sep=", ")
# Alice, Bob, Charlie

print("2026", "07", "06", sep="-")
# 2026-07-06

# end : changer ce qui est ajouté à la fin (par défaut : saut de ligne)
print("Chargement", end="...")
print("Terminé !")
# Chargement...Terminé !

# Afficher sans saut de ligne dans une boucle
for i in range(5):
    print(i, end=" ")
# 0 1 2 3 4

3.2. Lire une saisie avec input()

La fonction input() affiche un message et attend que l'utilisateur tape quelque chose. Elle renvoie toujours une chaîne de caractères (str) :

prenom = input("Comment t'appelles-tu ? ")
print(f"Bonjour {prenom} !")

Piège n° 1 : input() renvoie toujours un str

age = input("Ton âge : ")  # L'utilisateur tape 16
print(type(age))            # <class 'str'> (c'est du texte, pas un nombre !)
print(age + 2)              # ❌ TypeError: can only concatenate str to str

# Il faut CONVERTIR :
age = int(input("Ton âge : "))      # Pour un entier
taille = float(input("Ta taille : "))  # Pour un décimal

Piège n° 2 : l'utilisateur saisit n'importe quoi

age = int(input("Ton âge : "))
# Si l'utilisateur tape "seize" → ValueError: invalid literal for int()
# Si l'utilisateur tape "16.5" → ValueError aussi ! (int n'accepte pas les décimaux en texte)
# Si l'utilisateur tape "" (rien) → ValueError

4. Séquences d'instructions

Un programme Python est une séquence (suite ordonnée) d'instructions exécutées les unes après les autres, de haut en bas :

# Étape 1 : lire les données
longueur = float(input("Longueur du rectangle : "))
largeur = float(input("Largeur du rectangle : "))

# Étape 2 : calculer
aire = longueur * largeur
perimetre = 2 * (longueur + largeur)

# Étape 3 : afficher les résultats
print(f"Aire : {aire}")
print(f"Périmètre : {perimetre}")

L'ordre des instructions est crucial !

# ❌ ERREUR : on utilise 'aire' avant de la calculer
print(f"Aire : {aire}")         # NameError: name 'aire' is not defined
aire = longueur * largeur

# ✅ CORRECT : on calcule d'abord, on affiche ensuite
aire = longueur * largeur
print(f"Aire : {aire}")

L'erreur NameError

C'est l'une des erreurs les plus fréquentes. Elle signifie que Python ne connaît pas le nom que vous utilisez :

NameError: name 'aire' is not defined

Causes possibles :

  • La variable n'a pas encore été créée (utilisée avant l'affectation)
  • Faute de frappe dans le nom (ariee au lieu de aire)
  • Oubli des guillemets autour d'un texte (print(Bonjour) au lieu de print("Bonjour"))