You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.6 KiB
86 lines
3.6 KiB
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['bg'] = "lavender"
|
|
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, bg = "lavender",highlightthickness = 0, width = 10, height = 10)
|
|
canva.grid()
|
|
|
|
label = tk.Label(fenetre, pady = 5, text = "choisir le nombre de k plus proches voisin voulus : ", width = 50, bg = "lavender")
|
|
label.grid(row = 1, column = 0)
|
|
entree=tk.Entry(fenetre, width = 30)
|
|
entree.grid(row = 2, column = 0)
|
|
|
|
texte = tk.Entry()
|
|
fenetre.mainloop()
|