Cours Nsi Python
Cours Nsi Python
Cours Nsi Python
T NSI
NSI
Numérique et Sciences Informatique
Introduction à la programmation
On pourrait commencer par ne faire que de l’algorithmique pure mais ce serait assez
rapidement rebutant. On va donc plutôt se pencher sur de petits problèmes concrets
et voir comment on peut se débrouiller pour les résoudre. Les notions de
programmation structurée seront donc abordées selon les besoins du moment, à
travers les programmes réalisés : rien de mieux pour apprendre de façon ludique !
Pour cela, on va utiliser le langage de programmation PYTHON, qui a la bonne idée
d’être très bien documentée, portable (windows, linux), syntaxiquement simple,
puissant (nombreuses bibliothèques de fonctions) et est utilisée à l’université, donc
vous ne serez pas dépaysé.
-1-
Algorithmique et Programmation
T NSI
Sommaire
1- Les rudiments du langage
Les variables :
v1 = 10 v1 = 10
v2 = 20 v2 = 20
resultat = v1 * v2 resultat = v1 * v2
print (resultat) print ("resultat = ", resultat)
v1 = 10
v2 = 20
resultat = V1 * V2
print ("resultat = ", resultat)
Nom ‘V1’ n’est pas définit (Il ne fallait pas mettre de majuscule.)
On veut calculer l’aire d’un rectangle. Pour cela entrez le programme ci-dessous et exécutez-
le.
largeur = input ("entrez la largeur du rectangle : ")
hauteur = input ("entrez la hauteur du rectangle : ")
aire = largeur * hauteur
print ("resultat = ", aire, "cm2")
Une erreur est générée liée à la nature des variables. Sous Python 3.7 l’instruction « input »
attend en entrée une chaîne de caractères (string) ( type str signifie « string » en anglais )
Il faut donc convertir la chaîne en nombre :
-2-
Algorithmique et Programmation
T NSI
largeur = input ("entrez la largeur du rectangle : ") Essayez avec des valeurs
hauteur = input ("entrez la hauteur du rectangle : ") entières : 10 et 15 par exemple
largeur = int(largeur)
hauteur = int(hauteur)
aire = largeur * hauteur Essayez avec des valeurs
print ("resultat = ", aire, "cm2") décimales : 5.5 et 8 par exemple
Opérations mathématiques
-3-
Algorithmique et Programmation
T NSI
v1 = 7
v2 = 2
print (v1/v2)
print (v1//v2)
print (v1%v2)
Calculs itératif
En programmation, l’écriture « a = a + nombre » est très utilisée. Cela signifie que je prends
la valeur de « a », je l’additionne à « nombre » et je stocke le résultat dans « a ».
Exécuter le programme ci-dessous et donner les résultats affichés dans la zone commentaire :
a = 10
print ("au début on a = ",a) # 10
a=a+5
print ("ici a =",a) # 15
a=a+5
print ("et maintenant a =",a) # 20
a = a*2 # 20 a = a+1 # 2
a = a*2 # 40 a = a+1 # 3
La boucle for
Si on doit répéter une opération n fois, il serait fastidieux de l’écrire n fois. On utilisera pour
cela l’instruction « for » : Vérifier que les programmes ci-dessous donnent le même résultat
que précédemment :
a=5 a=0
for i in range (3): for i in range (3):
a=a*2 a=a+1
print (a) print (a)
Indiquer combien de fois la boucle est exécutée dans les 2 cas ci-dessous et le résultat final
affiché :
4 et 9 fois.
Programme « somme des n premiers entiers naturels »
-5-
Algorithmique et Programmation
T NSI
Signification des paramètres du range (début, fin, pas) : i prendra toutes les valeurs entre
début et fin-1 par incrément du « pas ».
if (condition) :
bloc …………………. Si la condition est vraie, le bloc d’instruction 1 est
…………………………. exécuté, sinon c’est le bloc d’instruction 2 qui est
….d’instructions 1 exécuté.
else :
bloc ………………….
………………………….
….d’instructions 2
Exemple :
if a==n:
print
La boucle ("a («
while est tant
égalque
à n")
»)
Exemple 1 :
# programme 1 # programme 2
a=0 a=0
while a<10: while a<=10:
a=a+1 a=a+1
print ("a =",a ) print ("a =",a )
Quelle est la différence entre ces deux programmes ? les résultats ne sont pas les mêmes.
Exemple 2 :
reponse =""
while reponse != "fin":
reponse = input ("Que voulez vous faire ? -fin pour sortir-: ")
print (reponse)
Exemple 3 :
Je veux générer la séquence de nombre suivante :
0 1.5 3 4.5 6 7.5 9
-7-
Algorithmique et Programmation
T NSI
Tester les 2 programmes, le programme 2 ne fonctionne pas car on ne peut pas mettre un pas
non entier dans les paramètres de « range » : donner le message d’erreur généré
Exercices
Exo 1
Soit la liste suivante :
-8-
Algorithmique et Programmation
T NSI
c - compléter le programme pour afficher uniquement les nombres impairs
d - compléter le programme pour compter les nombres pairs et impairs
Ci-dessous le format
d’affichage attendu
Exo 2
L1= [3, 27, 27, 19, 18, 113, 22, 14, 189, 7, 2, 23,21, 22, 23, 100]
Exo 3
# Programme principal
v=10 # ce n’est pas le même v que dans la fonction volume
v1 = volume(10,5,3) - 10 -
print (v1) # affiche 150 (10*5*3)
print (v) # va afficher 10 !! (et non 150)
Algorithmique et Programmation
T NSI
Par défaut, une variable est locale dans une fonction. On peut la déclarer en tant que
variable globale si on veut qu’elle soit utilisable ailleurs dans le programme :
# définition des fonctions
def volume(l1,l2,l3):
global v # ce sera le même que celui déclaré dans le programme principal
v=l1*l2*l3
# programme principal
v=0
volume(10,5,3)
D’une façon générale il vaut mieux éviter lorsque cela est possible l’usage des variables
print (v)
globales.
Si une fonction a besoin d’une variable, passez là en paramètre. Si elle doit effectuer des
calculs et modifier des variables, renvoyer les données en utilisant « return »
Exemple :
def calcul(a,b,c):
v1=a+b
v2=a+c
return v1,v2 # on renvoie les valeurs de v1 et v2
param1=5
param2=6
param3=10
Lorsque vous travaillez à plusieurs sur un projet pour réaliser un programme informatique,
moins vous aurez de variables globales, moins il y aura de risque d’écrasement ou
d’utilisations erronées des données (qui peuvent être utilisée dans d’autres routines)
Une variable locale, même si elle porte le même nom qu’une variable globale, n’interférera
pas car elle est créée au moment de l’exécution de la fonction et détruite dès qu’on sort de la
fonction.
Exercice 4
- 11 -
Algorithmique et Programmation
T NSI
a- Faire une fonction qui prend en paramètre la longueur et la largeur d’un triangle rectangle
et qui renvoie son aire.
# Votre programme Nom :
- 12 -
Algorithmique et Programmation
T NSI
Exercice 5
Soit la liste :
L1= [ 1, 27, 27, 19, 18, 113, 22, 1, 14, 189, 7, 2, 23,21, 22, 23, 100 , 1 , 100, 22, 14 ,100, 1]
1- Ecrire une fonction compter(n, liste) qui prend en paramètre une valeur « n » et une liste et
qui renvoie le nombre d’occurrences de n dans la liste. (occurrence = nombre de répétitions)
Contrainte : interdiction d’utiliser la fonction « count » de python …
def compter(n,liste):
compteur = …….
LongueurListe = ………
for i in range (..........................):
if liste[…] == n:
compteur = ………………
return compteur
L1= [ 1, 27, 27, 19, 18, 113, 22, 1, 14, 189, 7, 2, 23,21, 22, 23, 100 , 1 , 100, 22, 14 ,100, 1]
print (compter(1,L1))
def maximum(liste):
2- Ecrire max1 = ….........
une fonction maximum(liste) qui recherche le plus grand élément de la liste.
Contrainte : interdiction =d’utiliser
LongueurListe ……….la fonction « max » de python …
for ..... in range (..................):
if max1 < ................... :
max1 = ...................
return max1
L1= [ 1, 27, 27, 19, 18, 113, 22, 1, 14, 189, 7, 2, 23,21, 22, 23, 100 , 1 , 100, 22, 14 ,100, 1]
- 13 -
print ("max =",maximum(L1))
Algorithmique et Programmation
T NSI
3- Ecrire une fonction minimum(liste) qui recherche le plus petit élément de la liste.
Contrainte : interdiction d’utiliser la fonction « min » de python …
4- Optimisation python
Python permet de faire facilement beaucoup de choses, ce n’est pas le cas de tous les
langages. Voici par exemple comment traiter le problème ci-dessus en version optimisée
python :
Exercice 6
Logique combinatoire
La porte « NON » :
- 14 -
Algorithmique et Programmation
T NSI
A S
0 1
1 0
La porte « OU » :
A B S
0 0 0
0 1 1
1 0 1
1 1 1
Ladef NON(a):
porte « ET » :
if a==1: On souhaite maintenant programmer une table de
res= .... vérité quelconque :
A B
else: S
0 0 res= ....0 A B S
0 1 res 0
return 0 0 0
1 0 0 0 1 1
1 1 1 1 0 0
deffin
----- OU(a,b):
------ 1 1 1
La lampeifs’allume
a==1 or sib==1:
on appuie sur A ET sur B :
res = .... S=1 si (A = 0 et B=1) OU (A=1 et B=1)
else:
res = .... Ecrire la fonction porte(a,b) pour cette table de
Compléter et tester
return vérité :
res les programmes ci-dessous :
def porte(a,b):
def ET(a,b): if ( ...... and ......) or (...... and ...........):
if a== ... and b== … : res = 1
res = …. else:
else: res = 0
res = …. return res
return res # programme principal
print (porte(0,0))
print (NON(OU(1,0)))
S = OU(ET(0,1),NON(1)) - 15 -
print (S)
Algorithmique et Programmation
T NSI
# Proposition de solution pour l’exercice précédent Pour les boucles for, on aurait
def porte(a,b): pu écrire aussi :
if (a==0 and b==1) or (a==1 and b==1):
res = 1 for a in range (2) :
else: for b in range(2) :
res = 0 S =...
return res
« for a in (liste de valeur) »
print ("table de verite quelconque") fait prendre à a toutes les
print ("A B S") valeurs de la liste, et donc 0 et
for a in (0,1): 1 ici »
for b in (0,1):
S= porte(a,b)
print (a,b,S)
En s’inspirant de ce que vous avez fait précédemment et à partir des tables de vérité des portes
logiques ci-dessous, donner les programmes en python pour réaliser les fonctions
correspondantes :
- 16 -
Algorithmique et Programmation
T NSI
Exercice 7
On se propose ici de réaliser des petites figures géométriques en utilisant des caractères.
Les programmes pour les premières figures sont donnés, testez les et inspirez-vous en pour les
figures suivantes.
Figure 1 :
for i in range(5):
print ("x", end=" ")
Figure 2 :
ligne =5
colonne = 10
for i in range(ligne):
for j in range (colonne):
print ("x", end=" ")
print ()
Figure 4 :
Figure 4 : Ici, cela commence comme le précédent programme.
Aide:Vous devez ensuite faire le symétrique, il faudra donc
refaire une autre boucle avec range(ligne,0,-1):
Syntaxe :
print (t[ligne][colonne] )
avec ligne correspondant au numéro de la
ligne et colonne le numéro de la colonne,
en partant de zéro.
t est ici le nom du tableau, on peut bien
sur donner un autre nom (comme t1,
toto , MonTableau …)
t= [[0 ,1 ,2 ,3 ,4 ] ,
[5 ,6 ,7 ,8 ,9 ] ,
[10,11,12,13,14] ,
[15,16,17,18,19] ]
matrice =[[0 ,0 ,0 ,0 ,0 ] ,
[0 ,0 ,0 ,0 ,0 ] ,
[0 ,0 ,0 ,0 ,0 ] ,
[0 ,0 ,0 ,0 ,0 ] ]
for y in range(4):
for x in range(5):
valeur = random.randint(0,100) Ligne à compléter (bien lire le
…..[…..][…..] = …… code pour connaître quels noms
# Définition des if fonctions
valeur < 10: utiliser)
print (valeur, end=" ")
def compte(n, tableau,
else: nb_ligne, nb_colonne):
compteur = 0 print (valeur, end=" ")
forprint
........
() in range(nb_ligne):
for .......... in range(nb_colonne):
if tableau[……][…….]== ……:
compteur = compteur +1
return ………
Exercice 9 : les tableaux suite.
# programme principal
On veut réaliser une fonction qui compte
le nombre d’occurrences de n dans un
t=[[1,3,8,0,0,5],
tableau.
[2,2,1,1,3,9],
n : nombre entier
[3,3,7,8,0,0],
tableau : liste de liste
[0,0,0,8,0,0],
nb_ligne : nombre de ligne du tableau
[0,0,0,0,0,0]]
nb_colonne : nombre de colonne
nb_ligne = 5
- 20 - 1- Compléter le programme ci-contre.
nb_colonne = 6
print ("Nombre de 0 : ", compte(0,t,nb_ligne,nb_colonne))
Algorithmique et Programmation
T NSI
Compléter votre
programme avec la ligne
ci-contre pour compter le
for i in range (…): nombre d’occurrences de
print ("Nombre de ", …. , " : ", compte( …. ,t ,nb_ligne,nb_colonne)) tous les chiffres de 0 à 9
Méthode générale :
B o n j o u r
0 1 2 3 4 5 6
texte[0] correspond à B
texte[1] correspond à o
texte[2] correspond à n
texte[3] correspond à j
texte[4] correspond à o
texte[5] correspond à u
texte[6] correspond à r
Opération de « concaténation »
- 21 -
Algorithmique et Programmation
T NSI
Exercice 10
affiche("Bonjour", 3)
# codage
texte = "Bonjour Bertrand, comment vas tu ?"
for lettre in texte:
#print (lettre, end=" ")
code = ord(lettre) # on récupère le code ASCII de la lettre
print (chr(code+1), end= " ") # on affiche le caractère suivant
# encoder
def encrypte(texte):
texte_crypte = ""
for ……. in ……. :
On notera que lescode
espaces, virgules et toute la ponctuation correspond à du code ascii.
= ord(lettre)
texte_crypte=texte_crypte + chr (…………)
Compléter les fonctions
return ci-dessous permettant d’encrypter et décrypter un
texte_crypte Letexte :
cryptage présenté ici
s’apparente au code
texte_crypte = encrypte("Bonjour Bertrand, comment vas tu ?") Cesar. Cependant il
faudrait que le « z » soit
print ("texte encrypte = ", texte_crypte) codé avec le « a »
(rotation sur l’alphabet)
# decoder
def decrypte(texte): Essayer de réfléchir à
texte_decrypte = "" une solution pour
for …… in ……. : obtenir un code qui reste
code = ord(lettre) sur l’alphabet et qui
texte_decrypte = texte_decrypte + chr(……….. ) fonctionne avec un
return texte_decrypte décalage n au choix.
- 22 -
print ("texte decrypte = ", decrypte(texte_crypte))
Algorithmique et Programmation
T NSI
# recherche de chaine
Taper et exécuter le
² t1="Bonjour Bertrand, comment vas-tu ? " code
if "Bertrand" in t1:
print (" 'Bertand' est bien dans la chaine")
else:
print ("Chaine non trouvee")
def cherche(texte,chaine):
if ……………… :
............. Ecrire une fonction
else: cherche(texte,chaine) qui
............. prend en paramètre un texte et
return ............. une chaine de caractere et
renvoie True si la chaine est
# programme principal trouvée et False sinon
t1="Bonjour Bertrand, comment vas-tu ? "
print (cherche(t1,"comment"))
print (cherche(t1,"toto"))
- 23 -
Algorithmique et Programmation
T NSI
De nombreux jeux peuvent être modélisés en utilisant des tableaux (morpion, dames, échecs,
solitaire, pacman, puissance 4, bataille navale, bomber-man, snake….) . Nous allons voir
différents algorithmes de base qui pourront être utile pour des mini projets.
affiche_tableau(t1,9,8)
Algorithmique et Programmation
T NSI
- 25 -