Programmer en Python en 2nde

Affectation d'une variable

Variable

Une variable est une simple étiquette (un nom) sur un objet Python.

On parle classiquement de l'affectation d'une valeur à une variable. Pour mieux saisir le fonctionnement, il est également pratique de parler plutôt de l'affectation d'un nom à une case mémoire.

On rappelle que cette affectation se fait en Python par le symbole « = ».

Exemple

Affectation de l'étiquette a à une boîte contenant l'objet Python (de type int) 2 :


a = 2

Voici une lecture classique de ce code a = 2 :

  1. on place la valeur 2 dans une boîte (adresse mémoire),
  2. on donne le nom a à cette boîte.

Après un code tel que a = 2, on peut parfois prendre des raccourcis et dire que la variable a est de type int. C'est en fait le contenu de la boîte nommée a qui est de type int. La distinction est importante, puisqu'en Python, on peut a priori trouver des codes tels que le suivant :


a = 9
print(type(a))  # affiche <class 'int'>
a = a/2
print(type(a))  # affiche <class 'float'>
	

Une simple opération change le type de la valeur désignée par le nom a (ceci serait impossible dans certains autres langages de programmation comme java ou C par exemple).

  • Complément : idPlus tard !
  • Complément : les noms de variablesPlus tard !

On peut utiliser id() qui retourne un entier, représentant l’identifiant interne de n’importe quel objet, quel que soit son type. On peut considérer qu'il s’agit de l’adresse mémoire dans laquelle il est stocké.



a = 9
b = 9
  
   
print(id(a))
print(id(b))


a = a/2
print("Après l'affectation a = a/2 : ")
print(id(a))
print(id(b))
	

Sur ma machine, j'obtiens :

10911424
10911424
Après l'affectation a = a/2 : 
139682486026792
10911424

On voit en exécutant ce code que a et b sont a priori des étiquettes de la même boîte (variables désignant le même objet python). Mais après l'affectation a = a/2, a ne désigne plus la même boîte.

Deux contraintes à respecter pour les noms de variable :

  • Une contrainte pour le programmeur : on choisit un nom de variable de façon à ce que le rôle de la variable dans le programme soit explicitée. On facilite ainsi la compréhension du code, sa relecture, son débogage.
  • Une contrainte syntaxique :
    • Une variable est une séquence de lettres et de chiffres, le symbole _ (underscore) peut également être utilisé.
    • En Python 3, les accents peuvent être utilisés pour les noms de variables mais il est préférable de les éviter.
    • Un nom de variable ne peut commencer par un chiffre.
    • Un certain nombre de mots ne peuvent être utilisés comme nom de variable, ils sont réservés par le langage (notamment and, if, def, for, from, or, while, in, is, return, True, False, None ...)

Opération et affectation : raccourcis

Pour incrémenter une variable, Python offre le raccourci suivant :


		
		

Le code n += 1 est donc un raccourci pour l'écriture usuelle n = n + 1.

Nombre de nos élèves de seconde ont encore beaucoup de difficultés pour saisir les différents usages du symbole « = » dans les textes mathématiques.

  • Le code n = n + 1 est un nouvel usage distinct des usages en mathématiques (et même a priori incompatible). Pour que ce code soit bien compris, il faut revenir au principe de la boîte étiquetée (c'est-à-dire de l'emplacement mémoire et de l'adresse de cet emplacement). Ainsi le code n = n + 1 doit être décrypté :
    1. en commençant par le membre de droite : on ajoute 1 au contenu de la boîte nommée n ;
    2. et en finissant par la partie gauche : cette valeur devient alors le nouveau contenu de la boîte nommée n.
  • Les codes du type n += 1 dans les cas où la même variable n intervient des deux côtés évitent ce problème d'interprétation. Le code n += 1 peut être lu plus naturellement :
    « la variable n est incrémentée d'une unité»
    On pourrait donc choisir de privilégier ce type de code dans les cas où la même variable n intervient des deux côtés.

De manière analogue, on a les équivalents suivants :

raccourcis
n = n+1 n += 1
n = n-1 n -= 1
n = n*2 n *= 2
n = n/3 n /= 3
n = n//2 n //= 2

Travail sur un entier

On a affecté à n un entier naturel. Sans tester sur machine, anticiper l'effet des codes suivants :

  1. n //= 10
  2. n %= 10
  • Question 1
  • Question 2
Le contenu de la boîte n est remplacé par le nombre de dizaines de l'ancien contenu.
Le contenu de la boîte n est remplacé par le chiffre des unités de l'ancien contenu.

Augmentation en pourcentage

Une quantité Q augmente de 20 %.

Donner différentes syntaxes possibles pour traduire cela à l'aide d'une variable Python nommée q.

  • Des codes possibles

Voici différentes syntaxes :

  • q = q + 20/100 * q
  • augmentation_absolue = 20/100 * q
       q = q + augmentation_absolue
  • augmentation_absolue = 20/100 * q
       q += augmentation_absolue
  • q *= 1.2
  • q = q * 1.2

Algorithme à traduire

Voici un algorithme (peu utile) comme on en trouve dans de nombreux manuels.


a ← n+1
b ← a*2
c ← b-4
	
  1. Quelle sera la valeur contenue dans la variable c si variable n contient la valeur 5 ?
  2. Traduire cet algorithme en langage Python (en affectant 5 à n) où la valeur finale de la variable c est affichée à l'écran.
  3. Exprimer le contenu de la variable c en fonction de n.
  • Une solution ?

					
					

La variable c contient la valeur 2*n-2.

Expression algébrique

Associer chacun des trois programmes (le résultat du programme est le contenu de la variable a dans chaque cas) ci-dessous à l'une des expressions en glissant les étiquettes de la bande horizontale du bas sur les zones grisées.

2+3*(6+7) 2+3*(6+7)
(2+3)*(6+7) (2+3)*(6+7)
(2+3)*6+7 (2+3)*6+7
  • Commentaire

Il suffit de tester pour vérifier...