import tkinter as tk from math import sqrt def transfoEnInt(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""" lst = [] for element in groupe: lst += [int(element)] return lst def lecture(nomFichier): """Prend en parametre le nom du fichier csv à lire et renvoie un tableau.""" with open(nomFichier, 'r') as fichier: fichier_nettoye = [] for ligne in fichier: fichier_nettoye += [ligne.strip()] return fichier_nettoye def estBissextile(annee): """prend en compte une annee à verifier si elle est bissextile et renvoie True si elle l'est et False sinon""" return annee%4 == 0 and annee%100 != 0 or annee%400 == 0 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('-')) 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): 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 totalJours += 1 return totalJours + dateSeparee[2] 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) JoursOrdonnes = sorted([lst1[0],lst2[0]]) DiffJours = min([JoursOrdonnes[1]-JoursOrdonnes[0],365-JoursOrdonnes[1]+JoursOrdonnes[0]]) return sqrt(DiffJours**2 + (lst1[1]-lst2[1])**2+(lst1[2]-lst2[2])**2) def kPlusProches(point,lstRepre,k): #je ne sais pas si il faut mettre k ce n'est pas demandé dans l'ennoncé mais cela ne servirait à rien d'en mettre plus """Prend en parametre un tuple avec (Numéro du jour, Température moyenne, température de référence) correspondant au point à verifier, une liste de tuples de meme type et la consommation electrique Renvoie une liste triée en fonction de la distance avec le tuple dont les elements sont des tuple avec (distance, indice du tableau original)""" lstvoisins = [] if k > len(lstRepre): k = len(lstRepre) for i in range(len(lstRepre)): d = distance((point,lstRepre[i])) lstvoisins.append(d,i) lstvoisins.sort() return [lstvoisins[i][1] for i in range(k)] def puissanceMoyenne(listeTriee, tableau): """Prend une liste triée de tuple avec (distance, indcide du tableau initial) et un tableau de donnée et renvoie la moyenne de la puissance electrique des k plus proches voisins""" PuissanceTotale = 0 for tuple in listeTriee: PuissanceTotale += tableau[listeTriee[1]][1] return PuissanceTotale/len(listeTriee) fenetre = tk.Tk() fenetre.title("pour l'instant je sais pas quoi (FEUR) mettre") #Un truc comme gestionnaire du transport d'electricité non ? ou je pense que sur tkinter tu peux faire disparaitre #le dessus (mais faut rajouter un bouton pour fermer la fenetre et tout c'est galere) canva = tk.Canvas(fenetre, width = 400, height = 300, bg = "red") canva.grid() label = tk.Label(fenetre, text = "choisir le nombre de k plus proches voisin voulus : ", width = 50, bg = "red") label.grid(row = 1, column = 0) entree=tk.Entry(fenetre, width = 30) entree.grid(row = 2, column = 0) texte = tk.Entry() fenetre.mainloop()