Projet
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

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()