Tous les articles par icnisnboissy

5- Les fonctions

5.1. Pourquoi a-t-on besoin de fonctions ?

Étudions le programme ci-dessous qui calcule et affiche la moyenne de 4 élèves sur trois notes: (Exécuter le programme ci-dessous)


prenom1 = "Anne"
note1 = 13
note2 = 10
note3 = 16
moyenneA = (note1 + note2 + note3) / 3
print("La moyenne de ", prenom1, " est : ", moyenneA)

prenom2 = "Boris"
note4 = 9
note5 = 7.5
note6 = 12
moyenneB = (note4 + note5 + note6) / 3
print("La moyenne de ", prenom2, " est : ", moyenneB)

prenom3 = "Céline"
note7 = 8
note8 = 12
note9 = 16
moyenneC=(note7 + note8 + note9) / 3
print("La moyenne de ", prenom3, " est : ", moyenneC)

prenom4 = "Denis"
note10 = 11
note11 = 14
note12 = 17
moyenneD = (note10 + note11 + note12) / 3
print("La moyenne de ", prenom4, " est : ", moyenneD)

Que se passe-t il si on ajoute 2 nouveaux élèves dans le groupe ? On ré-écrit le code de calcul de la moyenne pour les notes de ces élèves là. Un peu ennuyant.

Que se passe-t-il si on veux ajouter une note supplémentaire ?

prenom1 = "Anne"
note1 = 13
note2 = 10
note3 = 16
note_sup = 14
moyenneA=(note1 + note2 + note3 + note_sup) / 4
print("La moyenne de ", prenom1, " est : ", moyenneA)

On doit ajouter une note pour Anne, et on change le calcul de la moyenne en ajoutant la note supplémentaire et en divisant par 4. Et ensuite, on doit faire cela pour Boris, Celine, Denis et les deux nouveaux… Fastidieux !

Que se passe-t-il si on veut en plus afficher un message selon la moyenne obtenue?

Exemple pour Anne et Boris:

prenom1="Anne"
note1=13
note2=10
note3=16
note_sup=14
moyenneA=(note1+note2+note3+note_sup)/4
print("La moyenne de ", prenom1, " est : ",moyenneA)
if moyenneA>11:
    print("C'est en bonne voie")
else:
    print("Persévérez !")
prenom2="Boris"
note4=9
note5=7.5
note6=12
note_sup2=8
moyenneB=(note4+note5+note6+note_sup2)/4
print("La moyenne de ", prenom2, " est : ",moyenneB)
if moyenneB>11:
    print("C'est en bonne voie") 
else:
    print("Persévérez !")

On a joute du code pour chaque élève qui se ressemble. Ça commence à devenir long, compliqué, et on peut facilement se tromper, alors que les tâches sont très répétitives !

Quand une tâche peut être effectuée plusieurs fois dans un programme, il devient vite TRÈS INTÉRESSANT d’utiliser un morceau de programme qu’on va réutiliser : on isole alors ce morceau de code dans un BLOC qu’on appelle FONCTION

Exemple (la syntaxe de la fonction sera expliquée plus loin) :


#bloc fonction qui calcule et affiche la moyenne

def calcule_et_affiche_moyenne(prenom,note1,note2,note3):
    moyenne=(note1+note2+note3)/3
    print("La moyenne de ", prenom, " est : ",moyenne)

#appels répétés de la fonction dans le programme principal

calcule_et_affiche_moyenne("Anne", 13,10,16)
calcule_et_affiche_moyenne("Boris", 9,7.5,12)
calcule_et_affiche_moyenne("Céline", 8,12,16)
calcule_et_affiche_moyenne("Denis", 11,14,17)

Ce qu’on a gagné :

On a écrit une seule fois le calcul de la moyenne. Si on ajoute 2 élèves, on appelle 2 fois la fonction Si on ajoute une note, on ne change que le contenu de la fonction calcule_et_affiche_moyenne() Si on veut ajouter l’affichage d’un message, on peut le faire dans la fonction sans changer le programme principal

Par exemple :

#bloc qui affiche un message d'encouragement

def affiche_message(moyenne):
    if moyenne>11:
        print("C'est en bonne voie") 
    else:
        print("Persévérez !")

#bloc fonction qui calcule et affiche la moyenne

def calcule_et_affiche_moyenne(prenom,note1,note2,note3):
    moyenne=(note1+note2+note3)/3
    print("La moyenne de ", prenom, " est : ",moyenne)
    affiche_message(moyenne)

#appels répétés de la fonction dans le programme principal

calcule_et_affiche_moyenne("Anne", 13,10,16)
calcule_et_affiche_moyenne("Boris", 9,7.5,12)
calcule_et_affiche_moyenne("Céline", 8,12,16)
calcule_et_affiche_moyenne("Denis", 11,14,17)

Comparez maintenant ce dernier programme avec le premier : avec moins de lignes de programme, on fait plus de choses, et en plus ça reste très lisible ! c’est aussi très utile si la personne qui définit la fonction est différente de celle qui l’utilise on peut ainsi utiliser une fonction que l’on n’a pas codé sois même, simplement, on l’appelle ! Comme par exemple la fonction print()

Un script bien structuré contiendra un programme dit principal, et plusieurs sous-programmes codés dans des fonctions dédiées à des fonctionnalités spécifiques.

5.2. Syntaxe : comment écrire une fonction

La syntaxe Python pour la définition d’une fonction est la suivante :

def nom_fonction(liste de paramètres):
    bloc d'instructions   #corps de la fonction

Vous pouvez choisir le nom de votre choix pour la fonction que vous créez, sauf les mots-clés réservés du langage (par exemple ifwhile…), sans utiliser de caractère spécial ou accentué (le caractère souligné « _ » est autorisé).

On utilise par convention des minuscules, notamment au début du nom.

Comme les instructions if, for et while l’instruction def est une instruction composée. La ligne contenant cette instruction se termine obligatoirement par un deux-points :, qui introduisent un bloc d’instructions qui est précisé grâce à l’indentation. Ce bloc d’instructions constitue le corps de la fonction.

def calcule_somme(note1,note2,note3):
    somme = (note1+note2+note3)      # corps de 
    return somme                     # la fonction

print(calcule_somme(128,1256,322))

5.3. Fonctions et paramètres

 Fonction sans paramètre.

Exemple :

def bonjour():
    print("Bonjour")
def compteur():
    for i in range(3):
        print(i)

Nous avons défini une première fonction qui affiche le texte Bonjour et une deuxième fonction simple qui affiche les entier de 0 à 4.
Notez bien les parenthèses, les deux-points, et l’indentation du bloc d’instructions qui suit la ligne d’en-tête (c’est ce bloc d’instructions qui constitue le corps de la fonction proprement dite).

Avoir une fonction, c’est bien mais encore faut-il l’utiliser :

bonjour()
compteur()

Nous pouvons maintenant réutiliser cette fonction à plusieurs reprises, autant de fois que nous le souhaitons.

Nous pouvons également l’incorporer dans la définition d’une autre fonction.

Exemple de fonction qui appelle une autre fonction :

def poli():
    for i in range(3):
        bonjour()
poli()

Une première fonction peut donc appeler une deuxième fonction, qui elle-même en appelle une troisième, etc.

Créer une nouvelle fonction offre l’opportunité de donner un nom à tout un ensemble d’instructions. De cette manière, on peut simplifier le corps principal d’un programme, en dissimulant un algorithme secondaire complexe sous une commande unique, à laquelle on peut donner un nom explicite.

Une fonction est donc en quelque sorte une nouvelle instruction personnalisée, qu’il est possible d’ajouter librement à notre langage de programmation.

Fonction avec paramètres.

Exemple :

def bonjour(nom):
    print("Bonjour {}".format(nom))
def compteur(stop):
    for i in range(stop):
        print(i)       
compteur(5)

Pour tester ces fonctions, il faut les appeler avec un argument :

bonjour("toto")
compteur(4)

On peut bien sûr avoir des fonctions qui appellent des fonctions :

def trespoli(nbfois):
    for i in range(nbfois):
        bonjour("tata toto")
trespoli(3)

Utilisation d’une variable comme argument.

L’argument que nous utilisons dans l’appel d’une fonction peut être une variable.

Exemple :

a = "Bart Simpson"
bonjour(a)

Dans l’exemple ci-dessus, l’argument que nous passons à la fonction bonjour() est le contenu de la variable a.
À l’intérieur de la fonction, cet argument est affecté au paramètre stop, qui est une tout autre variable.

Notez donc bien dès à présent que :

  • Le nom d’une variable que nous passons comme argument n’a rien à voir avec le nom du paramètre correspondant dans la fonction.
  • Ces noms peuvent être identiques si vous le voulez, mais vous devez bien comprendre qu’ils ne désignent pas la même chose (en dépit du fait qu’ils puissent contenir une valeur identique).

Fonction avec plusieurs paramètres.

Exemples :

def bonjour(prenom, nom):
    print("Bonjour " + prenom + " " + nom)

bonjour("Homer","Simpson")
bonjour("Marge","Simpson")

La fonction suivante utilise trois paramètres : start qui contient la valeur de départ, stop la borne supérieure exclue comme dans l’exemple précédent et step le pas du compteur :

def compteur(start, stop, step):
    for i in range(start, stop, step):
        print(i)
compteur(1, 7, 2)

À retenir:

  • Pour définir une fonction avec plusieurs paramètres, il suffit d’inclure les paramètres entre les parenthèses qui suivent le nom de la fonction, en les séparant à l’aide de virgules.
  • Lors de l’appel de la fonction, les arguments utilisés doivent être fournis dans le même ordre que celui des paramètres correspondants (en les séparant eux aussi à l’aide de virgules).
    Le premier argument sera affecté au premier paramètre, le second argument sera affecté au second paramètre, et ainsi de suite.
def politesse(nom, titre ="Monsieur"):
    print("Veuillez agréer,", titre, nom, ", mes salutations distinguées.")
    
politesse("Dupont")

Valeurs par défaut pour les paramètres

Dans la définition d’une fonction, il est possible de définir un argument par défaut pour chacun des paramètres. On obtient ainsi une fonction qui peut être appelée avec une partie seulement des arguments attendus.

Exemples :

def compteur(start, stop, step=1):
    for i in range(start, stop, step):
        print(i)
compteur(1, 4)

Lorsque l’on appelle cette fonction en ne lui fournissant que les deux premier arguments, le troisième argument step second reçoit tout de même une valeur par défaut (ici 1).

alors que l’oubli d’un paramètre amène à une erreur comme ci-dessous.

def compteur(start, stop, step):
    for i in range(start, stop, step):
        print(i)
compteur_complet(1, 7)

Arguments avec étiquettes

Dans la plupart des langages de programmation, les arguments que l’on fournit lors de l’appel d’une fonction doivent être fournis exactement dans le même ordre que celui des paramètres qui leur correspondent dans la définition de la fonction.

Python autorise l’appel aux fonctions en fournissant les arguments correspondants dans n’importe quel ordre, à la condition de désigner nommément les paramètres correspondants.

Exemple :

def compteur(start, stop, step):
    for i in range(start, stop, step):
        print(i)
compteur_complet(step=2, stop=4, start=1)

5.4.  Les fonctions avec return

Vous avez vu en mathématiques les fonctions pour un x donné retournent une valeur f(x) (éventuellement).

python utilise le mot clé return

Par exemple pour la fonction f : x ⟼ 2x + 3 on utilisera la fonction :

def f(x):
    return 2*x+3

print(f(0))
print(f(1))

Les fonctions permettent donc de décomposer un programme complexe en une série de sous-programmes plus simples. De plus, les fonctions sont réutilisables : si nous disposons d’une fonction capable de calculer une racine carrée, par exemple, nous pouvons l’utiliser un peu partout dans notre programme sans avoir à la réécrire à chaque fois (on parle de factorisation du code)

La notion de fonction en informatique est comparable à la notion de fonction en mathématiques.

Si nous avons y = 3x+2, pour une valeur donnée de x, nous aurons une valeur de y.

Exemple : x=4 donc y= 14 (y = 3.4+2=14, attention ici le point correspond au signe « multiplié »).

La fonction en informatique est basée sur la même idée :

Voici la syntaxe employée en Python pour définir une fonction :

def nom_de_la_fonction(parametre):
	instruction_1
	instruction_2
	return y
suite programme			

La fonction renvoie la valeur contenue dans la variable y.

ATTENTION : Notez bien la présence du décalage entre la première ligne et les lignes suivantes. Ce décalage est appelé indentation, l’indentation permet de définir un bloc de code. Dans l’exemple ci-dessus, l’indentation nous permet de savoir que « instruction_1« , « instruction_2 » et « return y » constituent un bloc de code, ce bloc correspond au contenu de la fonction. « suite programme » ne fait pas partie de la fonction, car il n’est pas indenté. Pour indenter du code, il y a 2 solutions : mettre 4 espaces ou utiliser une tabulation. En Python il est conseillé d’utiliser les 4 espaces, mais ce n’est pas une obligation. Une chose est sûre, une fois que vous avez choisi une méthode, n’en changez surtout pas au cours d’un même programme !

Codons notre exemple (y = 3x + 2) en créant une fonction ma_fonction :

def ma_fonction(x):
	y = 3 * x + 2
	return y			

Pour « utiliser » la fonction ma_fonction, il suffit d’écrire : ma_fonction (4) (dans ce cas précis, notre fonction renverra le nombre 14).

À faire vous-même 28

Tester le programme suivant (quelle est la valeur référencée par la variable solution après l’exécution du programme) :

def ma_fonction(x):
	y = 3 * x + 2
	return y
solution = ma_fonction(4)			

Il faut savoir qu’au moment de l’exécution de votre programme le code ma_fonction(4) sera systématiquement remplacé par la valeur renvoyée par la fonction (toujours dans notre exemple le ma_fonction(4) sera remplacé par le nombre 14).


À faire vous-même 29

Coder en Python la fonction y = x2+2x+10


Il est possible d’écrire une fonction dans l’éditeur :

et d’utiliser la console (après exécution du programme) pour obtenir la valeur renvoyée par une fonction

Il est possible de faire passer plusieurs paramètres à une fonction.

À faire vous-même 30

Quel est le résultat renvoyé par la fonction ci-dessous si l’on saisit dans la console une_autre_fonction(5, 3)

def une_autre_fonction(x, b):
	y = 3 * x + b
	return y			

Les paramètres peuvent être des chaînes de caractères (ainsi que la valeur retournée)

À faire vous-même 31

Quel est le résultat attendu après l’exécution du programme ci-dessous et la saisie dans la console de « dit_bonjour(« toto », 14) » ?

def dit_bonjour(nom, age):
	phrase = f"Bonjour {nom}, vous avez {age} ans."
	return phrase			

Attention : remarquez bien les guillemets autour du paramètre « toto » (c’est une chaîne de caractères)


Les paramètres ne sont pas obligatoires.

À faire vous-même 32

Tester la fonction suivante :


def ma_fon():
	return "voici une fonction qui ne sert à rien"
			

Il faut aussi savoir qu’une fonction ne renvoie pas forcément de valeur (le mot clé return n’est pas obligatoire). Mais si elle ne renvoie pas de valeur, que fait-elle ? Elle peut faire plein de choses, par exemple elle peut tout simplement afficher une chaîne de caractères à l’aide d’un « print« . Sachez que dans certains langages, on utilise les termes méthode ou procédure pour qualifier une fonction « qui ne renvoie rien ».

À faire vous-même 33

Soit le programme suivant :

def dit_bonjour(nom, age):
	phrase = f"Bonjour {nom}, vous avez {age} ans."
	print(phrase)			

Tester la fonction dit_bonjour à l’aide de la console (avec par exemple un dit_bonjour(« toto », 14))

À faire vous-même 34

L’indice de masse corporelle (IMC) est une grandeur qui permet d’estimer la corpulence d’une personne.
Il se calcule en fonction de la taille en mètre et de la masse en kilogramme.
La formule est IMC= masse / taille²
Écrire une fonction imc(masse,taille) qui retourne l’indice de la masse corporelle.


Exercice 1 – L’écho

Tri par insertion

Vous avez certainement utilisé cet algorithme, C’est celui que les joueurs de cartes utilisent pour organiser leurs mains. Le joueur pioche la carte qui est en haut du tas et la place (l’insère) à la bonne position dans la main. Cet algorithme se nomme le « tri par insertion ».

Pour simplifier nous allons trier une liste de 9 valeurs

[ 8, 6, 3, 9, 2, 1, 4, 5, 7 ]

pour commencer l’explication , utilisons 2 listes

A faire:

Réaliser le même schéma avec [ 5, 12, 3, 7, 4 ] sur le document Libre Office réponse joint.

Combien de comparaison? pour trier [ 8, 6, 3, 9, 2, 1, 4, 5, 7 ]

La première valeur pas de comparaison, on la prend et la pose en premier, la deuxième valeur à classer je la compare à la première ordonnée et je la pose devant ou derrière. Pour la troisième valeur , deux comparaison et ainsi de suite jusqu’à la dernière huit comparaison donc nous avons fait 1+2+3+4+5+6+7+8 comparaison soit 36 comparaison.

A faire: à vous par extension pour une liste à n éléments:

Voici une implémentation sous python avec 2 tableaux ou listes comme le graphique ci dessus

def tri_insertion(tableau):
    '''cette fonction prend en argument un tableau (tableau), et le trie avec la méthode de tri par insertion, elle renvoie le tableau trié (resultat)
    exemple:

    tri_insertion([22,8,32,1,69])
    >>> [1,8,22,32,69]
    tri_insertion([18,41,7,2,14])
    >>> [2,7,14,18,41]'''

    
    resultat=[]                                                                   
    longueur = len(tableau)                                                       
    while len(resultat) < longueur:
        '''tant que la taille du résultat n'est pas le même que celui du tableau initial'''
        for indice in range(0,longueur):                                          
            compteur = 0                                                          
            placer = True                                                         
            if resultat == []:                                                    
                resultat.append(tableau[0])                                       
                del tableau[0]                                                    
                
            for valeur_resultat in resultat:                                      
                if tableau == []:                                                 
                    return resultat                                               
                if valeur_resultat < tableau[0]:                                  
                    compteur += 1                                                 
                elif placer:                                                      
                    placer = False                                                
                    resultat.insert(compteur, tableau[0])                         
                    del tableau[0]                                                
                    compteur = 0                                                  
            if placer:                                                            
                resultat.append(tableau[0])                                       
                del tableau[0]                                                    

voici l’algorithme du tri par insertion ( ici une seule liste )

  1. PROCEDURE tri_Insertion ( Tableau a[1:n])
  2.     POUR i VARIANT DE 2 A n FAIRE
  3.         INSERER a[i] à sa place dans a[1:i-1];
  4. FIN PROCEDURE;

en python à essayer

def tri_insertion(tableau):
    print(tab)#affiche la liste tab pour visualiser l'algo
    for i in range(1,len(tableau)):
        en_cours = tableau[i]
        j = i
        #décalage des éléments du tableau }
        while j>0 and tableau[j-1]>en_cours:
            tableau[j]=tableau[j-1]
            j = j-1
        #on insère l'élément à sa place
        tableau[j]=en_cours

vous pouvez trouver des explications supplémentaire ici:

site de podcastscience , site de David Roche et sur le site http://lwh.free.fr

Retour vers article algorithme de tri

Tri par sélection

Pour simplifier nous allons trier une liste de 9 valeurs

[ 8, 6, 3, 9, 2, 1, 4, 5, 7 ]

pour commencer l’explication , utilisons 2 listes

Tri par sélection

A faire: sur le document réponse Libre Office.

Réaliser le même schéma avec [ 5, 12, 3, 7, 4 ] sur le document réponse Libre Office. En fin de document vous pouvez découper les numéros pour faire une simulation à la main.

Combien de comparaison? pour trier [ 8, 6, 3, 9, 2, 1, 4, 5, 7 ]

pour sélectionner l’élément le plus petit on liste les 9 valeurs et on fait 8 comparaisons, pour le deuxième on fait 7 comparaisons, pour le troisième 6 comparaisons et ainsi de suite. D’où nombre de comparaison= 8+7+6+….+1=36.

Par extension si notre liste est constituée de n valeurs, le nombre de comparaison = (n-1)+(n-2)+(n-3)+ …..+3+2+1 en factorisant nombre de comparaison=n*(n-1) /2 soit n²/2-n/2 .

On dit que l’algorithme de tri par sélection a donc une complexité en O(n²). On parle aussi de complexité quadratique.

Voici une implémentation sous python avec 2 tableaux ou listes comme le graphique ci dessus

def tri_selection(tableau):
    '''tri d'un tableau, l'argument tableau est un tableau ou liste, la fonction renvoie un autre tableau ou liste resultat'''
    resultat = [] 
    longueur = len(tableau)                 
    
    while len(resultat) != longueur:        
        minimum = tableau[0]                   
        
        for i in range(1, len(tableau)):        
            if minimum > tableau[i]:                
                minimum = tableau[i]                    
        resultat.append(minimum)                
        tableau.remove(minimum)                 
    return resultat 

voici l’algorithme du tri par sélection ( ici une seule liste )

  • PROCEDURE tri_Selection ( Tableau a[1:n])
  •     POUR i VARIANT DE 1 A (n – 1) FAIRE
  •         TROUVER [j] LE PLUS PETIT ELEMENT DE [i + 1:n];
  •         ECHANGER [j] ET [i];
  • FIN PROCEDURE;

en python à essayer

def tri_selection(tab):
   print(tab)
   for i in range(len(tab)):#boucle sur toute la liste
      # Trouver le min
       min = i
       for j in range(i+1, len(tab)):
           if tab[min] > tab[j]:
               min = j

       tmp = tab[i]
       print('tmp',tmp)#affiche tmp pour visualiser l'algo
       tab[i] = tab[min]
       print ('tab1',tab)#affiche la liste tab pour visualiser l'algo
       tab[min] = tmp
       print('tab2',tab)#affiche la liste tab pour visualiser l'algo
   return tab
# Programme principale pour tester le code ci-dessus
tab = [98, 22, 15, 32, 2, 74, 63, 70]#changer les valeurs de la liste pour un autre essai

tri_selection(tab)

print ("Le tableau trié est:")
print (tab)

vous pouvez trouver des explications supplémentaire ici:

site de podcastscience , site de David Roche et sur le site http://lwh.free.fr

Retour vers article algorithme de tri

Algorithmes de tri

Référence au programme de NSI

On veut trier une liste lorsqu’on pense que ses éléments sont dans le désordre, ou plus précisément dans un ordre qui ne nous convient pas. L’objectif du tri, en tant qu’algorithme, est de mettre les éléments dans le bon ordre. Par exemple sur STRAVA qui est un site et une application mobile pour enregistrer les activités sportives, l’utilisateur peut classer ses activités par années, semaines, distances parcourues, temps sur certains parcours mythiques (segment) .

Sur ce tableau le classement est réalisé sur le temps d’ascension, par ordre croissant.

Nous allons étudier 2 algorithmes de tri :

(cliquez pour ouvrir les articles)

le tri par sélection et le tri par insertion.

Nous avons calculer le nombre comparaison que faisait les algorithmes dans le tri par insertion et sélection, On parle de complexité . La complexité d’un tri de « n » éléments se note avec un « omicron » : dites « grand O ». Par exemple, la complexité du « tri par sélection » sera en « O(n*(n-1) /2 ) », où « n*(n-1) /2 » est la formule qu’on avait utilisée un peu plus tôt. Comme on s’intéresse à des valeurs importantes et qu’on ne veut qu’un « ordre de grandeur », on considérera que cette « complexité » peut se « simplifier » en « O(n*(n-1)) », qui peut elle-même se simplifier en « O(n²) ». On dira que l’algorithme du « tri par sélection » est de « complexité quadratique » en « O(n²) ».

Pour notre classement il y a 80 000 valeurs à trier voici un tableau résumant le nombre d’opération et une estimation du temps en supposant qu’une opération dure 1 ms.

Nombre d’éléments « n »Nombre d’opérations pour un tri en « O(n²) »Durée pour un tri en « O(n²) »
10100100 ns
10010 00010 us
1 0001 000 0001 ms
10 000100 000 000100 ms
100 00010 000 000 00010 s
1 000 0001 000 000 000 00016 min 40 s
10 000 000100 000 000 000 00027 heures
100 000 00010 000 000 000 000 000115 jours
1 000 000 0001 000 000 000 000 000 00031 ans

Il y a 1.2 millions d’utilisateur de Strava , 3.4 milliard d’utilisateur de Facebook . Les données à trier ne manquent pas….Et le temps de les trier elles seront peut être obsolètes.

Comment faire ? Il existe des algorithmes de tri plus performant: Tri à bulles , Tri rapide , ….

A faire:

Essai évaluation par le temps d’exécution du programme de tri:

Estimation de complexité par le temps d’exécution (approximation car le temps d’exécution d’un algorithme est aussi lié à d’autres paramètres… )

En ouvrant et exécutant le programme de tri :

tris-avec_evaluation-temps-execution_programme.py

à télécharger en fin d’article.

 extrait du programme

# tri rapide avec affichage du temps passé
 debut_chrono=time.time() # lancement chrono
 trirapide(L) # lancement du tri
 temps_exe=time.time()-debut_chrono #arret chrono et calcul du temps 
 print("nombre de valeur =",len(L)) # affichage nb valeurs
 print("temps execution tri rapide =",temps_exe) # affichage crhono

Essayer de lancer ce programme en testant une liste aléatoire de 10, 100 , 1000, 10000 valeurs, faire un classement des tris.

Maintenant au lieu de trier une liste aléatoire, trions une liste déjà triée. Refaites votre classement .

Quelles conclusions tirez vous de vouloir classer la complexité d’un algorithme par son temps d’exécution?

(Rappel les deux algorithme fusion et insertion ont la même complexité)

Mini projet:

Amélioration , Il vaudrait mieux compter le nombre d’opération de comparaison dans l’algorithme de tri. Proposer une solution de compteur dans le programme de tri de votre choix

vous trouverez ici tous les fichiers à télécharger.

Projet : Compteur de point à la coinche

Fonctionnalités attendues

  1. Créer la partie, joueurs, équipe.
  2. Enregistrer les mises et annonces de départ.
  3. Créer interface résultats de la donne.
  4. Faire des statistiques, donneur, etc .
  5. Calculer les points de la donne.
  6. Faire les totaux pour chaque équipe.
  7. Développer interface Android.
  8. Arrêter la partie sur valeur maximum (à définir) ou sur demande.
  9. Préciser l’atout de la donne.
  10. Créer un rappel des règles et annonces du jeu.

Exemple de comptage en ligne

https://www.compteur-carte.net/belote/index.htm