TP - Chapitre 1 : Langage de programmation Python

N.B. Niveau : Première Générale, enseignement de spécialité NSI (Numérique et Sciences Informatiques)

 

D
É
C
O
N
N
E
C
T
É

  1. Programmer une suite d'instructions en langage phyton
  2. Les variables
  3. Le type int (integer : nombres entiers)
    • non validé Mission n°2 : Afficher la taille en octets et en bits d'un fichier
  4. Le type float (nombres en virgule flottante)
  5. Les fonctions mathématiques
  6. Le type str (string : chaîne de caractères)
  7. Conversions des types
  8. Le type list (liste)
    • non validé Mission n°9 : Convertir un entier compris entre 0 et 255 en Hexadécimal
  9. Le type bool (booléen)
    • non validé Mission n°10 : Vérifie la saisie d'un numéro de sécurité sociale
  10. Le type dict (dictionnaire)
  11. Autres types
  12. Programmation Orientée Objet (POO)

Chapitre 1 - Programmation, variables, types et opérateurs

1 - Programmer une suite d'instructions en langage python

Mission: Reconstruire la tour à l'identique à l'emplacement n°3.

Il est interdit de poser un grand cylindre sur un petit

Pour résoudre l'exercice manuellement, cliquez sur les boutons 1, 2 ou 3






Programme qui enchaînent plusieurs instructions, exécutées les unes après les autres, pour résoudre la tour de Hanoï:

Essayez de déplacer manuellement une tour ayant une hauteur de 3 cylindres, en 7 déplacements maximum : cliquez sur Rejouer et +

non validé Mission n°1 : Modifiez le programme précédent afin de déplacer une tour ayant une hauteur de 3 cylindres, en 7 déplacements maximum.

2 - Les variables

Dans un programme informatique, l’ordinateur va manipuler des informations. Il va faire des calculs et va stocker ses résultats dans sa mémoire, généralement la RAM.

Une mémoire de 4Go contient 232 cases mémoire. On peut comparer la mémoire à un immeuble comprenant 4 294 967 296 étages, numérotés de 0 à 4 294 967 295. Chaque étage contient un octet.

Exemple de stockage de la chaîne de caractères PYTHON :

tourRAM

La difficulté pour le programmeur serait d'organiser lui-même la mémoire et savoir où commence et termine le mot PYTHON. Les langages de programmation permettent d'affecter à une variable cette chaîne de caractères : mettre dans une boite étiquetée langage, le mot PYTHON.

boite

Pour affecter à la variable langage le mot PYTHON, il suffit de coder la ligne suivante :

langage = "PYTHON" 

Les variables peuvent aussi contenir des nombres entiers, décimaux, des couples (p-uplets)...

REGLES A RESPECTER :

  • ne jamais utiliser d'espace pour nommer les variables, les remplacer le par - ou _
  • éviter les caractères accentués.
  • éviter les majuscules elles sont réservées aux classe.
  • utiliser des noms de variable en liaison avec l'élément à stocker

3- Le type int (integer : nombres entiers)

Pour affecter (on dit aussi assigner) la valeur 17 à la variable nommée age :

>>> age = 17

La fonction print affiche la valeur de la variable :

>>> print(age)
17

La fonction type() retourne le type de la variable :

>>> type(age)
<type 'int'>

int est le type des nombres entiers.

>>> # ceci est un commentaire
>>> age = age + 1	# en plus court : age += 1
>>> print(age)
18 >>> age = age - 3 # en plus court : age -= 3 >>> print(age)
15 >>> age = age * 2 # en plus court : age *= 2 >>> print(age)
30
>>> a = 6*3-20
>>> print(a)
-2
>>> b = 25
>>> c = a + 2*b
>>> print(b,c) # ne pas oublier la virgule 25 48

L'opérateur // donne la division entière :

>>> d = 450//360
>>> print(d)
1

L'opérateur % donne le reste de la division (opération modulo) :

>>> reste = 450 % 360
>>> print(reste)
90

L'opérateur ** donne la puissance :

>>> mebioctet = 2**20
>>> print(mebioctet)
1048576

Travail à faire : Manipuler les variables

Faire les premiers exercices de sommes et contaténations de varibles, du site Inertnet silentteacher

non validé Mission n°2 ☆ : Afficher la taille en octets et en bits d'un fichier de 536 Kio.

On donne :

  • 1 kio (1 kibioctet) = 210 octets !!!
  • 1 octet = 8 bits

Cahier des charges à respecter :

  • Les résultats seront obligatoirement stockés dans 3 variables : taille_kio, taille_octets, taille_bits
  • Les variables taille_octets, taille_bits seront calculées par le programme.
  • Utilisez 3 instructions print(variable,"texte") pour afficher les résultats suivants :
536 kio font :
548864 octets
4390912 bits

Code python :



				
				

non validé Mission n°3 ★ : Trouvez la clé

Le numéro de sécurité sociale est constitué de 13 chiffres auquel s'ajoute la clé de contrôle (2 chiffres).

Exemple : n° : 2 69 05 49 588 157       clé de contrôle : 80

Carte vitale

La clé de contrôle est calculée par la formule : 97 - (numéro de sécurité sociale modulo 97)

Rappel : le modulo permet de trouver le reste d'une division, exemple, le résultat de 5%2 sera 1

Affecter la valeur entière 2690549588157 à la variable numero_secu

Stocker dans la variable cle le résultat du calcul de la clé

Afficher le résultat suivant :

La clé du numéro de sécurité sociale 2690549588157 est 80



				
				

Essayez avec votre numéro de sécurité sociale ou vérifier que la clé du numéro 1891126108268 est 91

Quel est l'intérêt de la clé de contrôle ?

4- Le type float (nombres en virgule flottante)

>>> b = 17.0 	# le séparateur décimal est un point (et non une virgule)
>>> print(b)
17.0 >>> type(b)
<type 'float'>
>>> c = 14/3
>>> print(c)
4.66666666667
>>> c = 14//3	# division entière
>>> print(c)
4.0

Notation scientifique :

>>> a = -1.784892e4
>>> print(a)
-17848.92

non validé Mission n°4 ★ : Calculer et afficher le nombre photos d'une taille moyenne de 3.5 Mo qu'on peut stocker sur une clé de 64 Go.

Clé USB 64 Mo

Rappel : 1 Go = 1*103 Mo

Algorithme :

début
taille_photos_Mo  ← 3.5
taille_cle_Go ← 64
nbr_photos ← taille clé en Mo divisé par taille des photos en Mo
Afficher "Nombre de photos :", nbr_photos 
nbr_photos ← taille clé en Mo division entière par taille des photos en Mo
Afficher "donc environ :", nbr_photos 
fin

Résultat exigé :

Nombre de photos : 18285.71428571429
donc environ : 18285.0

Programme :



				
				

Attention : La variable taille_photos_Mo ne doit jamais être égale à zéro ...

5- Les fonctions mathématiques

Pour utiliser les fonctions mathématiques, il faut commencer par importer le module math :

>>> import math

La fonction dir() retourne la liste des fonctions et données d'un module :

>>> dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan',
'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf',
'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum',
'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p',
'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

Pour appeler une fonction d'un module, la syntaxe est la suivante :
module.fonction(arguments)

Pour accéder à une donnée d'un module :
module.data

>>> print(math.pi)		# donnée pi du module math (nombre pi)
3.14159265359
>>> print(math.sin(math.pi/4)) # fonction sin() du module math (sinus)
0.707106781187
>>> print(math.sqrt(2)) 	# fonction sqrt() du module math (racine carrée)
1.41421356237
>>> print(math.sqrt(-5))
Traceback (most recent call last):
print(math.sqrt(-5.0))
ValueError: math domain error
>>> print(math.exp(-3)) # fonction exp() du module math (exponentielle) 0.0497870683679 >>> print(math.log(math.e)) # fonction log() du module math (logarithme népérien) 1.0
non validé Mission n°5 ★ : Calculer l'aire à partir du rayon

formule aire d'un cercle

Résultat exigé :

Un cercle ayant un rayon de 20 cm aura une aire de 1256.637061435917 cm²

Programme :



				
				

6- Le type str (string : chaîne de caractères)

>>> nom = 'Dupont' 	# entre apostrophes
>>> print(nom)
Dupont >>> type(nom)
<type 'str'> >>> prenom = "Pierre" # on peut aussi utiliser les guillemets >>> print(prenom)
Pierre >>> print(nom,prenom) # ne pas oublier la virgule Dupont Pierre

La concaténation désigne la mise bout à bout de plusieurs chaînes de caractères.
La concaténation utilise l'opérateur +

>>> chaine = nom + prenom 	# concaténation de deux chaînes de caractères
>>> print(chaine)
DupontPierre >>> chaine = (prenom + nom) # concaténation de deux chaînes de caractères >>> print(chaine)
PierreDupont >>> chaine = prenom + ' ' + nom
>>> print(chaine)
Pierre Dupont >>> chaine = chaine + ' 18 ans' # en plus court : chaine += ' 18 ans' >>> print(chaine)
Pierre Dupont 18 ans

La fonction len() retourne la longueur (length) de la chaîne de caractères :

>>> print(len(chaine))
20
>>> print(chaine[0])	# premier caractère (indice 0)
P
>>> print(chaine[1])	# deuxième caractère (indice 1)
i
>>> print(chaine[1:4])
ier >>> print(chaine[2:])
erre Dupont 18 ans >>> print(chaine[-1]) # dernier caractère (indice -1) s >>> print(chaine[-6:])
18 ans
>>> chaine = 'Aujourd'hui'
SyntaxError: invalid syntax
>>> chaine  = 'Aujourd\'hui'		# séquence d'échappement \'
>>> print(chaine)
Aujourd'hui >>> chaine = "Aujourd'hui" >>> print(chaine)
Aujourd'hui

La séquence d'échappement \n représente un saut ligne :

>>> chaine = 'Première ligne\nDeuxième ligne'
>>> print(chaine)
Première ligne
Deuxième ligne

Plus simplement, on peut utiliser les triples guillemets (ou les triples apostrophes) pour encadrer une chaîne définie sur plusieurs lignes :

>>> chaine = """Première ligne
Deuxième ligne"""
>>> print(chaine)
Première ligne
Deuxième ligne

non validé Mission n°6 ★ Afficher les initiales

A partir des deux variables prenom et nom, créer la variable initiales qui contiendra les initiales puis affichez-les (par exemple LM pour Léa Martin).

Exemple de résultat souhaité :

Les initiales de Lea Martin sont : LM



				
				

non validé Mission n°7 ★☆ Créer un identifiant

L'identifiant d'accès au réseau du lycée est construit de la manière suivante : initiale du prénom puis les 8 premiers caractères du nom (le tout en minuscule).
Exemple : Alexandre Lecouturier → alecoutur
A partir des deux variables prenom et nom, construire l'identifiant composé de lettres minuscules uniquement. (Voir Methode la lower)



				
				
		



7 - Conversions des types

On ne peut pas mélanger les serviettes et les torchons (ici type <type 'str'> et <type 'int'>) :

>>> chaine = '17.45'
>>> type(chaine)
<type 'str'> >>> chaine = chaine + 2
TypeError: cannot concatenate 'str' and 'int' objects

La fonction float() permet de convertir un <type 'str'> en <type 'float'>

>>> nombre = float(chaine)
>>> print(nombre)
17.45 >>> type(nombre)
<type 'float'> >>> nombre = nombre + 2 # en plus court : nombre += 2 >>> print(nombre)
19.45

La fonction input() lance une invite de commande (en anglais : prompt) pour saisir une chaîne de caractères.

>>> chaine = input("saisir une chaîne de caractères et valider avec la touche Entrée")
>>> # j'ai saisi 14.56 au clavier et validé avec la touche entrée
>>> print(chaine) 
14.56 
>>> type(chaine)
<type 'str'> >>> nombre = float(chaine) # conversion de type >>> print(nombre**2)
211.9936

Un nombre décimal vers un entier : <type 'float'> vers <type 'int'>

>>> b = 17.5
>>> type(b)
<type 'float'>
>>> b=int(b)
>>> print(b)
17
>>> type(b)
<type 'int'>

Une chaine de caractères vers un entier : <type 'str'> vers <type 'int'>

>>> b = "120"
>>> b = b*2
>>> print(b)
120120
>>> type(b)
<type 'str'>
>>> b=int(b)
>>> print(b)
120120
>>> type(b)
<type 'int'>

Un nombre en une chaine de caractères : <type 'int'> vers <type 'str'>

>>> b = 50 	
>>> b = b * 2
>>> print(b)
100
>>> type(b)
<type 'int'>
>>> b = str(b)
>>> b = "0b" + b * 2
>>> print(b)
0b100100
>>> type(b)
<type 'str'>
>>> print(b[2])
1

non validé Mission n°8 ★★☆ Conversion binaire → décimal

La variable binaire contient la chaine de caractère suivante '0b1101'

Additionner le produit de chaque 0 et 1 contenu dans la chaîne de caractère et de son poids

Afficher le résultat sous la forme suivante :

Le quartet binaire 0b1101 équivaut à 13 en décimal



				
				





		
		

8 - Le type list (liste)

Une liste est une structure de données.
Le premier élément d'une liste possède l'indice (l'index) 0 (comme la chaîne de caractères).
Dans une liste, on peut avoir des éléments de plusieurs types.

>>> infoPerso = ['Pierre' , 'Dupont' , 17 , 1.75 , 72.5]
>>> # la liste infoPerso contient 5 éléments de types str, str, int, float et float >>> type(infoPerso)
<type 'list'> >>> print(infoPerso)
['Pierre', 'Dupont', 17, 1.75, 72.5] >>> print('Prénom : ',infoPerso[0]) # premier élément (indice 0) Prénom : Pierre >>> print('age : ',infoPerso[2]) # le troisième élément a l'indice 2 age : 17 >>> print('Taille : ',infoPerso[3]) # le quatrième élément a l'indice 3 Taille : 1.75

La fonction range() crée une liste d'entiers régulièrement espacés :

>>> liste = list(range(10))
>>> print(liste)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> type(liste)
<type 'list'>
>>> liste = list(range(1,10,2))		# range(début,fin non comprise,intervalle)
>>> print(liste)
range(1, 10, 2) >>> print(liste[2])
5

On peut créer une liste de listes, qui s'apparente à un tableau à 2 dimensions (ligne, colonne) :

012
101112
202122
>>> liste = list([[0,1,2],[10,11,12],[20,21,22]])
>>> print(liste[0])
[0, 1, 2] >>> print(liste[0][0])
0 >>> print(liste[2][1]) # élément à la troisième ligne et deuxième colonne 21 >>> liste[2][1] = 69 # nouvelle affectation >>> print(liste)
[[0, 1, 2], [10, 11, 12], [20, 69, 22]]

non validé Mission n°9 : Convertir un entier compris entre 0 et 255 en Hexadécimal

Pour convertir l'entier décimal 207 en hexadécimal, on procède comme suit :

  • Commencez par créer la liste hexa ci-dessus
  • Affectez la valeur décimale 207 à convertir dans la variable dec
  • Le résultat du calcul de la division entière entre dec et 16 sera stocké dans la variable quotient.
  • Le résultat du calcul du reste de la division entre dec et 16 sera stocké dans la variable reste.
  • Affichez le résultat par concaténation de chaines de caractères, en extrayant les caractères hexadécimaux de la liste hexa, aux index quotient et reste. Attention, dec est un entier qu'il faudra passer en string

Résultat exigé à l'espace prêt

Le nombre décimal 207 équivaut à 0xCF



				
				



9 - Le type bool (booléen)

Deux valeurs sont possibles : True et False

>>> a = True
>>> type(a)
<type 'bool'>

Les opérateurs de comparaison :

Opérateur Signification Remarques
< strictement inférieur
<= inférieur ou égal
> strictement supérieur
>= supérieur ou égal
== égal Attention : deux signes ==
!= différent
is identique Deux conditions : égal et même type
is not non identique

>>> b = 10
>>> print(b>8)
True >>> print(b==5)
False >>> print(b!=10)
False >>> print(0<= b <=20)
True

Les opérateurs logiques : and, or, not

>>> note=13.0
>>> mentionAB = note>=12.0 and note<14.0 # ou bien : mentionAB = 12.0 <= note < 14.0 >>> print(mentionAB)
True >>> print(not mentionAB)
False >>> print(note==20.0 or note==0.0)
False

L'opérateur in s'utilise avec des chaînes (type str) ou des listes (type list) :

>>> chaine = 'Bonsoir'
>>> #  la sous-chaîne 'soir' fait-elle partie de la chaîne 'Bonsoir' ?
>>> a = 'soir' in(chaine)
>>> print(a)
True >>> print('b' in(chaine))
False
>>> liste = list([4,8,15])
>>> # le nombre entier 9 est-il dans la liste ? >>> print(9 in(liste))
False >>> print(8 in (liste))
True >>> print(14 not in(liste))
True
non validé Mission n°10: Vérification de la saisie du numéro de sécurité sociale

On demande à l'utilisateur de rentrer son numréro de sécurité sociale complet avec sa clé sans espace ex : 269054958815780 (instruction input)

On stocke dans la variable numéro l'entier correspondant aux 13 premiers symboles rentrés

La clé correspond toujours au deux derniers chiffres du numéro de sécurité sociale saisi. (Revoir le type str)

Créer une variable booléenne dont le résultat sera True si le numéro calculé est égal au numéro saisi. (Revoir le calcul de la clé)

Résultat exigé :

Le numéro de sécurité sociale 2690549588157 et la clé 80 est True

Programme



				
				


10 - Le type dict (dictionnaire)

Un dictionnaire stocke des données sous la forme clé ⇒ valeur.
Une clé est unique et n'est pas nécessairement un entier (comme c'est le cas de l'indice d'une liste).

>>> moyenne = {'math':12.5,'anglais':15.8}	# entre accolades
>>> type(moyenne)
<type 'dict'> >>> print(moyenne['anglais']) # entre crochets 15.8 >>> moyenne['anglais']=14.3 # nouvelle affectation >>> print(moyenne)
{'anglais': 14.3, 'math': 12.5} >>> moyenne['sport']=11.0 # nouvelle entrée >>> print(moyenne)
{'sport': 11.0, 'anglais': 14.3, 'math': 12.5}

non validé Mission n°11: recette du gâteau au chocolat selon Marmiton

On dispose du dictionnaire ingrédiants suivant, pour une personne :

ingrédients={"Beurre":15,"Chocolat":35,"Farine":10,"Sucre":15,"Oeufs":0.5}

La variable etape contient toutes les étapes de la recette

etapes='''Étape 1 : Préchauffer le four à 180°C.  Dans une casserole, faites fondre {} grammes de chocolat et {} grammes de beurre coupé en morceaux à feux doux.
Étape 2 : Dans un saladier, ajoutez {} grammes de sucre, {} oeufs, {} grammes de farine. Mélangez.
Étape 3 : Ajoutez le mélange chocolat/beurre. Mélangez bien.
Étape 4 : Beurrez et farinez votre moule puis y versez la pâte à gâteau.
Étape 5 : Faites cuire au four environ 20 minutes.
Étape 6 : A la sortie du four le gâteau ne paraît pas assez cuit. C'est normal, laissez-le refroidir puis démoulez-le.'''

Les accolades du texte seront remplacées par les ingrédiants

Utilisez la méthode format appliquée à une chaine de caractères décrite ci-dessous

Exemple :

>>>chanteuse={"nom":"Hoshi","Lieu":"Versailles","naissance":1996}
>>>print("{} est née en {} à {}".format(chanteuse["nom"],chanteuse["naissance"],chanteuse["Lieu"]))  
>>>Hoshi est née en 1996 à Versailles

Cette méthode permet de s'affranchir des conversions de types lors des concaténations de chaînes de caractères.

Déclarer les deux variables ingredients et etapes dans le programme et implantez l'instruction print qui permettra d'afficher la recette pour 1 personne.

Programme



				
				

Modifiez le programme qui demandera à l'utilisateur le nombre de personnes (avec un input) et vous modifierez la ligne print en fonction de ce nombre saisi.

11 - Autres types

Nous avons vu les types les plus courants.
Il en existe bien d'autres :

  • long (nombres entiers de longueur quelconque, par exemple 4284961775562012536954159102L)
  • complex (nombres complexes, par exemple 1+2.5j)
  • tuple (structure de données)
  • set (structure de données)
  • file (fichiers)
  • ...

12 - Programmation Orientée Objet (POO)

Python est un langage de programmation orienté objet (comme les langages C++, Java, PHP, Ruby...).
Une variable est en fait un objet d'une certaine classe.

Par exemple, la variable amis est un objet de la classe list.
On dit aussi que la variable amis est une instance de la classe list.
L'instanciation (action d'instancier) est la création d'un objet à partir d'une classe (syntaxe : NouvelObjet = NomdelaClasse(arguments)) :

>>> # instanciation de l'objet amis de la classe list
>>> amis = ['Nicolas','Julie']	# ou bien : amis = list(['Nicolas','Julie'])
>>> type(amis)
<type 'list'>

Une classe possède des fonctions que l'on appelle méthodes et des données que l'on appelle attributs.

La méthode append() de la classe list ajoute un nouvel élément en fin de liste :

>>> # instanciation d'une liste vide
>>> amis = list()
>>>
amis.append('Nicolas') # synthase générale : objet.méthode(arguments) >>> print(amis)
['Nicolas'] >>> amis.append('Julie') # ou bien : amis = amis + ['Julie'] >>> print(amis)
['Nicolas','Julie'] >>> amis.append('Pauline')
>>> print(amis)
['Nicolas','Julie','Pauline']
>>> amis.sort()			# la méthode sort() trie les éléments
>>> printamis
['Julie', 'Nicolas', 'Pauline']
>>> amis.reverse()		# la méthode reverse() inverse la liste des éléments
>>> printamis
['Pauline', 'Nicolas', 'Julie']

La méthode lower() de la classe str retourne la chaîne de caractères en casse minuscule :

>>> # la variable chaine est une instance de la classe str
>>> chaine = "BONJOUR"		# ou bien : chaine = str("BONJOUR")
>>> chaine2 = chaine.lower()	# on applique la méthode lower() à l'objet chaine
>>> print(chaine2)
bonjour >>> printchaine
BONJOUR

La méthode upper() de la classe str retourne la chaîne de caractères en casse majuscule

La méthode pop() de la classe dict supprime une clé :

>>> # instanciation de l'objet moyenne de la classe dict
>>> moyenne = {'sport': 11.0, 'anglais': 14.3, 'math': 12.5}
>>> # ou : moyenne = dict({'sport': 11.0, 'anglais': 14.3, 'math': 12.5}) >>> moyenne.pop('anglais')
14.3 >>> print(moyenne)
{'sport': 11.0, 'math': 12.5}
>>> print(moyenne.keys())	# la méthode keys() retourne la liste des clés
dict_keys(['sport', 'math'])
>>> print(moyenne.values())	# la méthode values() retourne la liste des valeurs
dict_values([11.0, 12.5])

QCM

QCM sur les types int, float et str

Grille de notation

Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Mission 6 Mission 7 Mission 8 Mission 9 Mission 10 Mission 11 Total
/1 /1 /1 /1 /1 /1 /1 /1 /1 /1 /2
Fatal error: Uncaught TypeError: array_sum(): Argument #1 ($array) must be of type array, null given in /htdocs/NSI/TP/Chapitre1.php:1423 Stack trace: #0 /htdocs/NSI/TP/Chapitre1.php(1423): array_sum(NULL) #1 {main} thrown in /htdocs/NSI/TP/Chapitre1.php on line 1423