import csv from math import sqrt iris = list(csv.DictReader(open("iris.csv"))) print(len(iris), "données dans le fichier") long = float(input("Longueur pétale : ")) larg = float(input("Largeur pétale : ")) def dist(d): """renvoie la distance entre d et (long, larg)""" dlong = float(d["petal_length"]) dlarg = float(d["petal_width"]) return sqrt((dlong - long) ** 2 + (dlarg - larg) ** 2) def insere(d, t): """insère une nouvelle donnée d dans le tableau t en maintenant t croissant pour dist""" t.append(d) i = len(t) - 1 while i > 0 and dist(t[i - 1]) > dist(d): t[i] = t[i - 1] i = i - 1 t[i] = d def majoritaire(t): """renvoie un élément majoritaire dans t on suppose t non vide""" assert len(t) > 0 c = {} mx = 1 mj = t[0] for x in t: if x not in c: c[x] = 0 c[x] += 1 if c[x] > mx: mx = c[x] mj = x return mj def ppv(k): t = [] # maintenu en ordre croissant de distance for d in iris: insere(d, t) if len(t) > k: t.pop() # print([dist(d) for d in t]) return majoritaire([x["species"] for x in t]) for k in range(1, 10): print("k=", k, "donne", ppv(k))