From 7866155768e99e15c72d26e8650d50c63984e2d5 Mon Sep 17 00:00:00 2001 From: Denis Leenaerts <> Date: Fri, 22 May 2026 14:45:43 +0200 Subject: [PATCH] Fonction listeTuple et un moyen d'utiliser les fonctions --- projet_knn_feat_denis_le_goat.py | 48 +++++++++++++++++++------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/projet_knn_feat_denis_le_goat.py b/projet_knn_feat_denis_le_goat.py index 9998e62..b75657b 100644 --- a/projet_knn_feat_denis_le_goat.py +++ b/projet_knn_feat_denis_le_goat.py @@ -1,12 +1,12 @@ import tkinter as tk from math import sqrt -def transfoEnInt(groupe): +def transfoEnFloat(groupe): """Prend en parametre un tuple ou une liste de réels de type str -et renvoie une liste de réels de type int""" +et renvoie une liste de réels de type float""" lst = [] for element in groupe: - lst += [int(element)] + lst.append(float(element)) return lst def lecture(nomFichier): @@ -28,10 +28,10 @@ True si elle l'est et False sinon""" def numeroJour(date): """Prend en parametre une date au format aaaa-mm-jj et renvoie un entier correspondant au numero du jour correspondant (de 1 à 365)""" - dateSeparee = transfoEnInt(date.split('-')) + dateSeparee = transfoEnFloat(date.split('-')) totalJours = 0 JoursMois = [31,28,30,31,30,31,31,30,31,30,31] #Nombre de jours de chaques mois - for i in range(dateSeparee[1]-1): + for i in range(int(dateSeparee[1])-1): totalJours += JoursMois[i] if estBissextile(dateSeparee[0]) and totalJours + dateSeparee[2] >= 60 and dateSeparee[1] > 2: #regarde si on est dans une année bissextile et apres fevrier @@ -40,9 +40,9 @@ correspondant au numero du jour correspondant (de 1 à 365)""" def distance(Tuple1 , Tuple2): """prend en parametre 2 tuples avec (Numéro du jour, Température moyenne, température -de référence) et renvoie la distance **euclidienne**""" - lst1 = transfoEnInt(Tuple1) - lst2 = transfoEnInt(Tuple2) +de référence) et renvoie la distance **euclidienne**""" + lst1 = transfoEnFloat(Tuple1) + lst2 = transfoEnFloat(Tuple2) minJours = min([lst1[0],lst2[0]]) maxJours = max([lst1[0],lst2[0]]) DiffJours = min([maxJours-minJours,365-maxJours+minJours]) @@ -58,10 +58,10 @@ def kPlusProches(point,lstRepre,k): #je ne sais pas si il faut mettre k ce n'est if k > len(lstRepre): k = len(lstRepre) for i in range(len(lstRepre)): - d = distance((point,lstRepre[i])) - lstvoisins.append(d,i) + d = distance(point,lstRepre[i]) + lstvoisins.append((d,i)) lstvoisins.sort() - return [lstvoisins[i][1] for i in range(k)] + return [lstvoisins[i] for i in range(k)] def puissanceMoyenne(listeTriee, tableau): """Prend une liste triée de tuple avec (distance, indice du tableau initial) @@ -72,18 +72,28 @@ def puissanceMoyenne(listeTriee, tableau): distance,indice = donnee PuissanceTotale += tableau[indice][1] return PuissanceTotale/len(listeTriee) - +def listeTuples(fichier): + """Prend une liste de tuples de type (date,pic journalier consommation, +temperature moyenne, temperature reference) et renvoie une liste de tuples de type +(numero jour, temperature moyenne, temperature de reference)""" + tableau = [] + for i in range(1,len(fichier)): + date, picJournalier, tempMoy, tempRef = fichier[i] + tableau.append((numeroJour(date),tempMoy,tempRef)) + return tableau def main(): -# nombreK = int(valeurk.get()) -# -# date = numeroJour(valeurdate.get()) -# temp = valeurtemp.get().split(" ") -# temp = transfoEnInt(temp) -# tempMoy, TempRef = temp + nombreK = int(valeurk.get()) - fichier = lecture('pic-journalier-consommation-brute-2023.csv') + date = numeroJour(valeurdate.get()) + temp = valeurtemp.get().split(" ") + temp = transfoEnFloat(temp) + tempMoy, tempRef = temp + fichier = lecture('pic-journalier-consommation-brute-2023.csv') + listeVoisins = kPlusProches((date,tempMoy,tempRef),(listeTuples(fichier)), + nombreK) + print(listeVoisins) fenetre = tk.Tk()