Variables et types — comment un programme se souvient
Stocker des valeurs dans des variables, les règles pour les nommer, les quatre types de base (int, float, str, bool) et l'erreur que les débutants rencontrent le plus souvent.
Comment voulez-vous apprendre ?
Le problème que nous résolvons
Jusqu'à présent, nos programmes n'ont rien gardé en mémoire. Tout ce qui était affiché a disparu.
Dans le travail réel, ce n'est pas le cas. Dans un programme de facturation, un prix est calculé une seule fois et utilisé à trois endroits. Dans un rapport, un total doit être calculé au début, puis utilisé plus tard. Le programme doit se souvenir.
Et il y a un second problème lié à cela. Dans le chapitre précédent, "2" + "3" donnait 23, alors que 2 + 3 donnait 5 — le même symbole, deux comportements différents. Cela vient du fait qu'aux yeux de Python, ces deux choses sont de natures différentes. Cette nature s'appelle un type, et c'est de là que vient la plus grande part des erreurs des débutants.
À la fin de ce chapitre, vous pourrez
- Stocker une valeur dans une variable et la modifier plus tard
- Choisir des noms que Python accepte et qu'un humain peut lire
- Reconnaître les quatre types de base :
int,float,str,bool - Vérifier le type de n'importe quelle valeur avec
type() - Lire une
TypeErroret dire exactement ce dont elle se plaint
Prérequis : Voir avec print, expliquer avec des commentaires.
Une variable, c'est un nom
city_count = 4Lisez cette ligne de droite à gauche : la valeur 4 est créée, et l'étiquette city_count y est attachée. À partir de là, chaque fois que vous écrivez city_count, vous obtenez cette valeur.
city_count = 4
print("Cities:", city_count)
print("Double:", city_count * 2)Cities: 4
Double: 8=ne signifie pas « égal ». En mathématiques,x = 4est une affirmation : x et 4 sont identiques. En Python,=est une instruction : « stocke cette valeur sous ce nom ». C'est pourquoitotal = total + 5— impossible en mathématiques — est parfaitement normal en Python. Cela signifie : « prends ce quetotalcontient actuellement, ajoute 5, et remets le résultat danstotal». Pour vérifier si deux choses sont égales, on utilise un autre symbole :==, que nous verrons plus tard.
Modifier une valeur
Attribuer une nouvelle valeur à une variable efface complètement l'ancienne :
stock = 20
print("Before:", stock)
stock = stock - 3
print("After:", stock)Before: 20
After: 17Voyez ce qui se passe quand deux noms pointent vers la même valeur :
a = 10
b = a
a = 99
print(a, b)99 10La ligne b = a signifie : attache l'étiquette b à la même valeur que celle à laquelle a est attaché. Les deux noms font maintenant référence au même 10. Ensuite, a = 99 détache l'étiquette a et l'attache à la nouvelle valeur 99 — b reste là où il était, sur 10. Attribuer une nouvelle valeur à un seul nom ne déplace que ce nom-là, pas l'autre.
Gardez cette image en tête : deux noms peuvent faire référence à la même valeur. Avec les nombres et les chaînes de caractères, cela ne pose aucun problème, mais plus tard, lorsque vous apprendrez les listes — dont le contenu se modifie sur place — ce point deviendra très important.
Règles pour les noms
Ce que Python n'accepte pas :
- Commencer par un chiffre :
2nd_priceest refusé,price_2est correct - Un tiret au milieu :
total-priceest refusé, Python l'interprète comme une soustraction - Un espace au milieu :
total priceest refusé - Les mots-clés de Python :
class,for,if,import,return,Nonene peuvent pas être utilisés comme noms
Ce que Python accepte, mais que vous ne devriez pas écrire :
x1 = 4500 # clear today, meaningless in three weeks
Total_Price = 4500 # legal Python, but not the Python convention
l = 4500 # lowercase L and the digit one look almost identicalLa convention professionnelle en Python est le snake_case — tout en minuscules, avec des traits de soulignement entre les mots :
total_price = 4500
customer_name = "Rafi"
items_in_cart = 3Perdre du temps sur les noms peut sembler inutile, mais le code est écrit une ou deux fois et lu vingt fois. Un nom qui s'explique tout seul fait le travail d'un commentaire.
Les quatre types de base
items = 7 # int — a whole number
price = 249.50 # float — a number with a decimal point
name = "Rafi" # str — text, inside quotes
is_paid = True # bool — only True or False
print(type(items))
print(type(price))
print(type(name))
print(type(is_paid))<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>type() est votre outil pour lever tout doute. Quand une variable se comporte bizarrement, la première chose à faire est d'afficher son type. Le plus souvent, la réponse est juste là.
Deux petites remarques importantes :
True et False commencent par une majuscule. Écrivez true et Python le traite comme un nom de variable, puis vous signale qu'il ne le connaît pas.
"7" et 7 ne sont pas la même chose. Le premier est une chaîne de caractères, le second est un nombre. Ils se ressemblent beaucoup, mais pour Python ils sont totalement différents :
a = 7
b = "7"
print(type(a), type(b))
print(a * 3)
print(b * 3)<class 'int'> <class 'str'>
21
777L'erreur que tout le monde commet
age = "22"
print(age + 1)Traceback (most recent call last):
File "C:\Users\Rafi\python-lab\lesson-04\demo.py", line 2, in <module>
print(age + 1)
~~~~^~~
TypeError: can only concatenate str (not "int") to strCe message a l'air intimidant, mais il est précis : on ne peut joindre (concaténer) qu'une str à une autre str, et non un int. Python ne peut pas savoir si vous vouliez additionner ou concaténer — plutôt que de deviner, il s'arrête.
La ligne File indique le chemin complet de votre propre fichier, donc il sera différent sur votre ordinateur. Les autres lignes restent identiques.
Lisez les messages d'erreur de bas en haut. La dernière ligne indique ce qui est faux ; celle juste au-dessus indique où ça l'est. Beaucoup de débutants paniquent à la vue d'un traceback et l'ignorent complètement, alors que les messages d'erreur de Python sont le texte le plus utile qui s'affiche à l'écran.
La solution est de transformer ce texte en nombre :
age = "22"
print(int(age) + 1)23int() convertit une chaîne de caractères en nombre entier. Les cas où cette conversion réussit et ceux où elle échoue seront traités à fond dans un chapitre ultérieur sur input(), car c'est là que ce problème survient à chaque fois.
Un exemple complet
Créez invoice.py :
# Invoice for a single order, all figures in one place
customer_name = "Rafi"
unit_price = 249.50
quantity = 3
is_member = True
subtotal = unit_price * quantity
discount = 50.0
total = subtotal - discount
print("Customer :", customer_name)
print("Quantity :", quantity)
print("Subtotal :", subtotal)
print("Discount :", discount)
print("Total :", total)
print("Member :", is_member)Customer : Rafi
Quantity : 3
Subtotal : 748.5
Discount : 50.0
Total : 698.5
Member : TrueRemarquez l'intérêt réel de cette approche : pour changer le prix, il vous suffit de modifier uniquement la ligne unit_price, et tous les calculs ci-dessous se mettent à jour automatiquement. Si les nombres avaient été écrits directement dans les appels print, vous auriez dû les chercher un par un partout — et en oublier un seul rendrait le rapport erroné.
En cas de problème
NameError: name 'total' is not defined Le nom que vous avez utilisé n'a pas encore reçu de valeur, ou il contient une faute d'orthographe. Python traite total et totl comme deux noms différents. Notez aussi que la casse compte : Total n'est pas total.
TypeError: can only concatenate str (not "int") to str Vous avez essayé de concaténer un nombre à une chaîne de caractères. Soit vous le convertissez avec int(), soit vous utilisez une virgule — print("Age:", age) — car print sait gérer lui-même les types différents.
SyntaxError: cannot assign to expression here. Maybe you meant '==' instead of '='? Un tiret dans un nom provoque cette erreur. Sur la ligne total-price = 5, Python voit un calcul (soustraire price de total) et on ne peut pas stocker une valeur dans un calcul. Utilisez un trait de soulignement : total_price.
SyntaxError: invalid syntax Vous avez essayé d'utiliser l'un des mots-clés de Python comme nom, par exemple class = 10. Le message ne mentionne pas les mots-clés ; il indique juste un ^ sous le =, donc vous devez vérifier vous-même si ce nom est un mot-clé. Choisissez-en un autre : class_name, grade.
NameError: name 'true' is not defined. Did you mean: 'True'? True et False commencent par une majuscule.
Étape 4 sur 6 — Prédire
Vérifiez votre compréhension
Que s'affiche exactement avec ce code ?
a = 10
b = a
a = 99
print(a, b)- A10 99
- B10 10
- C99 99
- D99 10
Lequel de ces noms est un nom de variable valide en Python ?
- Aclass
- Bitem-2
- C2nd_item
- Ditem_2
Ce programme provoque une TypeError. Quel est exactement le problème, et comment le corriger ?
age = "22"
next_year = age + 1
print("Next year:", next_year)- A`next_year` a été utilisé sans avoir été défini au préalable
- B`age` contient une chaîne de caractères, et non un nombre — écrivez `age = 22`, ou utilisez `int(age) + 1`
- CÉcrire `age + "1"` au lieu de `age + 1` donnerait 23
- DIl faut utiliser `+` au lieu d'une virgule dans `print`
Répondre nécessite un compte
Connectez-vous pour vérifier vos réponses
Les questions sont ci-dessus, et les résoudre de tête est ce qui compte vraiment. Connectez-vous pour voir les réponses, les explications et les indices à trois niveaux.
À vous de jouer
Écrivez un fichier appelé shipping.py qui contient :
- Quatre variables — une
int, unefloat, unestr, unebool— toutes portant un nom significatif, en snake_case - Au moins un calcul qui utilise deux d'entre elles pour produire une troisième variable
- Le type des quatre variables, affiché avec
type() - Une variable à qui vous donnez d'abord une valeur, puis que vous réattribuez — en affichant sa valeur aux deux étapes
Puis, cassez-le volontairement : prenez une variable de type str, écrivez + 1 à sa suite, et exécutez le fichier. Lisez l'intégralité de l'erreur, surtout la dernière ligne. Vous rencontrerez ce message de nombreuses fois ; l'avoir provoqué aujourd'hui vous permettra de le reconnaître plus facilement plus tard.
Cette mission va plus loin
Ce que vous avez lu ci-dessus est la mission complète — rien n’en a été retiré. Pro ajoute :
- Ce qui se passe vraiment en coulisses : comment Python exécute ce code
- La solution complète de l’exercice, expliquée étape par étape
- Des exercices supplémentaires plus difficiles
- La question d’entretien sur ce sujet, avec une réponse modèle
Étape 6 sur 6
Défi — le quiz du chapitre
Dix questions, de la plus facile à la plus difficile. Les dernières sont difficiles exprès.
Connectez-vous pour faire le quiz