Youen Toupin
3 years ago
13 changed files with 12744 additions and 9199 deletions
@ -1,3 +1,4 @@ |
|||||||
#!/bin/bash |
#!/bin/bash |
||||||
cd src |
cd src |
||||||
../node_modules/typescript/bin/tsc |
../node_modules/typescript/bin/tsc |
||||||
|
node purify.js |
||||||
|
@ -0,0 +1,7 @@ |
|||||||
|
input[type=number] { |
||||||
|
-moz-appearance:textfield; |
||||||
|
} |
||||||
|
|
||||||
|
.wide-label .field-label { |
||||||
|
flex-grow: 2.5; |
||||||
|
} |
File diff suppressed because it is too large
Load Diff
@ -1,198 +0,0 @@ |
|||||||
import matplotlib.pyplot as plt |
|
||||||
import numpy as np |
|
||||||
import urllib.request |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def meteo_choix(choix_utilisateur): #par heures sur la zone géographique concerné |
|
||||||
lines = urllib.request.urlopen('https://vhelio.org/wp-content/uploads/2021/09/meteo_finale.csv').readlines() |
|
||||||
|
|
||||||
H1a=[] |
|
||||||
H1b=[] |
|
||||||
H1c=[] |
|
||||||
H2a=[] |
|
||||||
H2b=[] |
|
||||||
H2c=[] |
|
||||||
H2d=[] |
|
||||||
H3=[] |
|
||||||
|
|
||||||
del lines[0] |
|
||||||
del lines[0] |
|
||||||
del lines[8761] |
|
||||||
del lines[8760]#suppression des ';' en fin de csv |
|
||||||
for line in lines: |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
line = line.split(';') |
|
||||||
line[0]=line[0].rstrip(';') |
|
||||||
|
|
||||||
H1a.append(float(line[0])) |
|
||||||
H1b.append(float(line[1])) |
|
||||||
H1c.append(float(line[2])) |
|
||||||
H2a.append(float(line[3])) |
|
||||||
H2b.append(float(line[4])) |
|
||||||
H2c.append(float(line[5])) |
|
||||||
H2d.append(float(line[6])) |
|
||||||
H3.append(float(line[7])) |
|
||||||
|
|
||||||
del line[8] |
|
||||||
del line[9] |
|
||||||
del line[10] |
|
||||||
if choix_utilisateur=='h1a': |
|
||||||
return H1a |
|
||||||
if choix_utilisateur=='h1b': |
|
||||||
return H1b |
|
||||||
if choix_utilisateur=='h1c': |
|
||||||
return H1c |
|
||||||
if choix_utilisateur=='h2a': |
|
||||||
return H2a |
|
||||||
if choix_utilisateur=='h2b': |
|
||||||
return H2b |
|
||||||
|
|
||||||
if choix_utilisateur=='h2c': |
|
||||||
return H2c |
|
||||||
if choix_utilisateur=='h2d': |
|
||||||
return H2d |
|
||||||
if choix_utilisateur=='h3': |
|
||||||
return H3 |
|
||||||
return 'erreur dans la saisie de la composante de la région' |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def liste_annee_function(donnee_annee):#permet de séparer les 8760 données soit 365 jours avec 24 données + le jour de la semine (lundi,mardi,etc) |
|
||||||
annee=[] |
|
||||||
jour=[] |
|
||||||
l=0 |
|
||||||
heure_aller=8 |
|
||||||
heure_retour=16 |
|
||||||
heure_promenade_week_end=10 |
|
||||||
semaine=['lundi','mardi','mercredi','jeudi','vendredi','samedi','dimanche'] |
|
||||||
for i in range (len(donnee_annee)): |
|
||||||
|
|
||||||
if i==0: |
|
||||||
jour.append([donnee_annee[i],0]) |
|
||||||
continue |
|
||||||
else: |
|
||||||
|
|
||||||
if i%24==0:#permet de diviser les données par pack de 24 (soit un jour) |
|
||||||
|
|
||||||
jour.append(semaine[l]) |
|
||||||
if jour[-1]=='dimanche' or jour[-1]=='samedi' : |
|
||||||
jour[heure_promenade_week_end][1]=2# pour le week end on suspose une balade qui dure la distance moyenne journalière |
|
||||||
else: |
|
||||||
jour[heure_aller-1][1]=1#le vhelio sera utiiser a cette heure là |
|
||||||
jour[heure_retour-1][1]=1 |
|
||||||
annee.append(jour) |
|
||||||
jour=[] |
|
||||||
jour.append([donnee_annee[i],0]) |
|
||||||
if l==6: |
|
||||||
l=0 |
|
||||||
else: |
|
||||||
l=l+1 |
|
||||||
continue |
|
||||||
|
|
||||||
jour.append([donnee_annee[i],0]) |
|
||||||
annee.append(jour) |
|
||||||
return annee |
|
||||||
|
|
||||||
def Capacite_batt_dans_le_temps(liste_annee,conso_WH_par_km, capacite_batt,distance_moyenne): |
|
||||||
rendement_panneau=0.15 |
|
||||||
surface_panneau=1 |
|
||||||
capacite_batt_reel=capacite_batt |
|
||||||
|
|
||||||
compteur_de_charges=0 |
|
||||||
liste_finale=[] |
|
||||||
prix_moyen_kwh=0.192 |
|
||||||
|
|
||||||
|
|
||||||
electricite_utilise_par_le_moteur=0 |
|
||||||
for jours in range(len( liste_annee)): |
|
||||||
|
|
||||||
for heures in range(len(liste_annee[jours])-1): |
|
||||||
|
|
||||||
infos=liste_annee[jours][heures] |
|
||||||
|
|
||||||
# la capacité de la batterie varie selon ce que le panneaux fournit et la consommation éléctrique pendant l'utilisation du vhélio |
|
||||||
electricite_utilise_par_le_moteur= electricite_utilise_par_le_moteur+infos[1]*conso_WH_par_km*distance_moyenne/2 |
|
||||||
|
|
||||||
capacite_batt_reel=capacite_batt_reel+ infos[0]*rendement_panneau*surface_panneau*1-infos[1]*conso_WH_par_km*distance_moyenne/2 |
|
||||||
|
|
||||||
|
|
||||||
if capacite_batt_reel>capacite_batt: |
|
||||||
|
|
||||||
capacite_batt_reel=capacite_batt |
|
||||||
if capacite_batt_reel<=0: |
|
||||||
capacite_batt_reel=capacite_batt |
|
||||||
compteur_de_charges=compteur_de_charges+1 |
|
||||||
|
|
||||||
|
|
||||||
infos.append(capacite_batt_reel) |
|
||||||
liste_finale.append(capacite_batt_reel/capacite_batt*100) |
|
||||||
return liste_finale,liste_annee,compteur_de_charges,compteur_de_charges*(capacite_batt/1000)*prix_moyen_kwh, electricite_utilise_par_le_moteur |
|
||||||
|
|
||||||
def consommation_wh_par_km_estimation (denivele,poids): |
|
||||||
#Après les expèriences faites on arrive sur une moyenne de 16 sur du plat et 25 en montée (c'estdonnées seront mise à jour avec les nouveaux tests du vhélio 4) |
|
||||||
composante_poids=0 |
|
||||||
composante_poids=(4/200)*poids# approche linéaire |
|
||||||
if poids>=200: |
|
||||||
composante_poids=4 |
|
||||||
if poids<=0: |
|
||||||
composante_poids=0 |
|
||||||
|
|
||||||
|
|
||||||
if denivele==0: |
|
||||||
return 14+composante_poids |
|
||||||
if denivele>500: |
|
||||||
return 21+composante_poids#21 est une moyenne entre la consommation en montée et la consommation en descente sur une distance moyenne |
|
||||||
return 14+(7/500)*denivele+composante_poids# approximation linéaire de la consommation éléctrique |
|
||||||
|
|
||||||
def fonction_fianale(capacite_battrie_desiree,distance_moyenne_jour,denivele,poids,liste_ensolleillement_annee): |
|
||||||
#cette fonction utilise toute les fonctions définis avant et permet l'affichage |
|
||||||
|
|
||||||
liste_ensolleillement_finale=liste_annee_function(liste_ensolleillement_annee) |
|
||||||
liste_finale,liste_annee,compteur_de_charges,prix_annee,electricite_conso=Capacite_batt_dans_le_temps(liste_ensolleillement_finale,consommation_wh_par_km_estimation(denivele,poids),capacite_battrie_desiree,distance_moyenne_jour) |
|
||||||
couverture_solaire=round(100*(electricite_conso-(compteur_de_charges+1)*capacite_battrie_desiree)/electricite_conso) |
|
||||||
abs=np.linspace(0,8758,8759) |
|
||||||
xlabels = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin","Juillet","Aout", "Septembre", "octobre", "Novembre", "Décembre"] |
|
||||||
|
|
||||||
ord=liste_finale |
|
||||||
70 |
|
||||||
plt.plot(abs,ord) |
|
||||||
plt.xlabel(" ------|------------été--------------|---------------") |
|
||||||
plt.ylabel('%') |
|
||||||
plt.title(" Pourcentage de charge dans la batterie en fonction des heures de l'année " ) |
|
||||||
|
|
||||||
|
|
||||||
plt.show() |
|
||||||
|
|
||||||
print('il faudra recharger le vhelio sur secteur environ',compteur_de_charges,"fois sur l'annee") |
|
||||||
print("cela coutera" ,round(prix_annee,2),"€ sur l'annee") |
|
||||||
print("la couverture solaire du vhelio est de",couverture_solaire,'%') |
|
||||||
|
|
||||||
|
|
||||||
#%% |
|
||||||
|
|
||||||
print('Quelle capacite de batterie envisagez vous?\n(exemple: tapez" "700")' ) |
|
||||||
capacite_battrie_desiree=float(input()) |
|
||||||
print('Combien de kilometres fait vous chaque jour\n(exemple: tapez "10")') |
|
||||||
distance_moyenne_jour=float(input()) |
|
||||||
print('Quel est le denivele moyen de votre trajet journalier (en metres).\nPour indication: "0" signifie que le trajet se fait sur du plat, "100"m :legerement vallonne, "200": plutot vallonne, "300": vallonne, "500": montagneux, (exemple: tapez "100")') |
|
||||||
denivele=float(input()) |
|
||||||
print("Quel est le poids embarque en plus du conducteur (bagages + passagers).\n(exemple: un passagers de 80kg+50kg de chargement soit 130 kg.\nIl faut taper 130 dans le simulateur.)\n") |
|
||||||
poids=(float(input())) |
|
||||||
print("Veuillez rentrer votre zone climatique en miniscule.\nElle est indiquer sur la carte de france ci-dessus\n(exemple: taper h1a ou h2c) surtout ecrire les 3 caracteres en minuscules.") |
|
||||||
zone_climatique=input() |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
liste_ensolleillement_annee=meteo_choix(zone_climatique) |
|
||||||
fonction_fianale(capacite_battrie_desiree,distance_moyenne_jour,denivele,poids,liste_ensolleillement_annee) |
|
||||||
# .Le projet Vhélio est libre et collaboratif. Cette version du simulateur est une première version largement améliorable. N'hésitez pas à vous inscrire en tant que faiseur pour nous aider à l'améliorer. |
|
||||||
# Lien : https://www.helloasso.com/associations/velo-solaire-pour-tous/adhesions/adhesion-a-l-association-velo-solaire-pour-tous-faiseur |
|
@ -1,219 +0,0 @@ |
|||||||
# -*- coding: utf-8 -*- |
|
||||||
""" |
|
||||||
Created on Thu Sep 9 11:56:41 2021 |
|
||||||
|
|
||||||
@author: hugo |
|
||||||
""" |
|
||||||
import csv |
|
||||||
import numpy as np |
|
||||||
import matplotlib.pyplot as plt |
|
||||||
|
|
||||||
def charge_fichier_csv(fichier, delimiter=";",N=0): |
|
||||||
""" |
|
||||||
Charge un fichier csv et le renvoie sous forme de tableau |
|
||||||
|
|
||||||
:param: nom de fichier, délimiteur de cellules (par défaut ";"), |
|
||||||
nombre de lignes d'en-tête (en comptant les lignes vides) |
|
||||||
:returns: tableau des données |
|
||||||
""" |
|
||||||
|
|
||||||
with open(fichier, 'r') as f : |
|
||||||
rfichier = csv.reader(f, delimiter=delimiter) |
|
||||||
tableau=[] |
|
||||||
index_row=0 |
|
||||||
for row in rfichier: |
|
||||||
if index_row < N: |
|
||||||
index_row = index_row+1 |
|
||||||
else : |
|
||||||
for i in range (len(row)): |
|
||||||
if len(tableau) <= i: |
|
||||||
X = [] |
|
||||||
tableau.append(X) |
|
||||||
try: |
|
||||||
tableau[i].append(float(row[i].replace(",",'.'))) |
|
||||||
except ValueError: |
|
||||||
print('erreur:contenu de cellule non numerique') |
|
||||||
continue |
|
||||||
|
|
||||||
return (tableau) |
|
||||||
tableau=charge_fichier_csv('meteo_moy.csv',delimiter=";",N=1) |
|
||||||
H1a=tableau[4] |
|
||||||
H1b=tableau[5] |
|
||||||
H1c=tableau[6] |
|
||||||
H2a=tableau[7] |
|
||||||
H2b=tableau[8] |
|
||||||
H2c=tableau[9] |
|
||||||
H2d=tableau[10] |
|
||||||
H3=tableau[11] |
|
||||||
# print(H1a) |
|
||||||
h1a=[40.5, 60.6, 98.5, 139.5, 159.9, 180.2, 130.1, 163.0, 131.9, 89.9, 32.6, 37.2] |
|
||||||
h1b=[45.7, 62.3, 110.2, 147.4, 173.0, 157.2, 127.0, 150.7, 154.1, 57.5, 33.3, 23.0] |
|
||||||
h1c=[33.0, 79.0, 127.5, 146.1, 146.9, 190.4, 140.5, 169.0, 98.7, 75.7, 44.0, 42.8] |
|
||||||
h2a=[43.2, 68.6, 120.5, 146.5, 185.8, 184.6, 135.5, 163.0, 158.8, 86.2, 48.7, 46.3] |
|
||||||
h2b=[56.6, 77.8, 126.2, 174.2, 205.9, 236.2, 167.7, 196.2, 204.3, 78.9, 58.7, 32.6] |
|
||||||
h2c=[62.6, 86.5, 140.7, 153.0, 180.4, 196.9, 152.0, 174.3, 178.0, 101.9, 50.8, 41.3] |
|
||||||
h2d=[97.9, 135.3, 185.5, 212.4, 214.4, 293.7, 217.5, 256.1, 196.4, 128.9, 105.5, 93.7] |
|
||||||
h3=[120.2, 153.9, 179.4, 209.0, 247.8, 273.8, 219.9, 241.4, 173.6, 144.3, 92.0, 98.3] |
|
||||||
|
|
||||||
liste_mois=[[31,14,10],[28,13,11],[31,12,12],[30,10,14],[31,8,16],[30,8,16],[31,8,16],[31,9,15],[30,11,13],[31,13,11],[30,15,9],[31,15,9]] |
|
||||||
#liste mois est une liste contenant 3 infos pour chaque moi (mois janvier etc ) le nb de jours du mois |
|
||||||
#le nombre d''heure de nuit par jour , et le nombre de jours par jours |
|
||||||
#mois=[janvier,fevrier,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre] |
|
||||||
|
|
||||||
def creation_liste_annee (zone_geo,liste_mois): |
|
||||||
liste_annee=[] |
|
||||||
#objectif créer la liste année soit 365 element(jours) contenant 24 (heurs et ensolleillement)element avec les heure de nuit ou y'a 0 soleil et les heure de jours qui sont la moyenne solaire du mois divisee par le nombre d'heure ensolleiller |
|
||||||
#ci-dessous heure du matin |
|
||||||
for mois in range (len(liste_mois )): |
|
||||||
for jour_par_moi in range (liste_mois[mois][0]): |
|
||||||
liste_jour=[] |
|
||||||
if liste_mois[mois][2]%2==0: |
|
||||||
for w in range (int(liste_mois[mois][1]//2)): |
|
||||||
liste_jour.append(0) |
|
||||||
|
|
||||||
else: |
|
||||||
for w in range (int(liste_mois[mois][1]//2)+1): |
|
||||||
liste_jour.append(0) |
|
||||||
|
|
||||||
#ci dessus on ajoute les heure de soleil |
|
||||||
for heure_soleil in range(liste_mois[mois][2]): |
|
||||||
ratio_moy_heure_soleil=liste_mois[mois][0]/liste_mois[mois][2] |
|
||||||
liste_jour.append(zone_geo[mois]*ratio_moy_heure_soleil) |
|
||||||
# ci-dessous heure de la après midi nuit |
|
||||||
for i in range (int(liste_mois[mois][1]//2)): |
|
||||||
liste_jour.append(0) |
|
||||||
liste_annee.append(liste_jour) |
|
||||||
return liste_annee |
|
||||||
|
|
||||||
def Specification_jour_semaine(liste_annee,heure_aller,heure_retour): |
|
||||||
annee=[] |
|
||||||
jour=[] |
|
||||||
l=0 |
|
||||||
|
|
||||||
|
|
||||||
semaine=['lundi','mardi','mercredi','jeudi','vendredi','samedi','dimanche'] |
|
||||||
for i in range ((len(liste_annee))): |
|
||||||
|
|
||||||
jour.append(liste_annee[i]) |
|
||||||
#le 0 c'est l'indicateur d'activité pourune heure donné |
|
||||||
|
|
||||||
jour.append(semaine[l]) |
|
||||||
#if jour[-1]=='dimanche': |
|
||||||
# jour[0][heure_promenade_dimanche]=2 |
|
||||||
# else: |
|
||||||
|
|
||||||
# jour[0][heure_aller-1]=1 |
|
||||||
# " jour[0][heure_retour-1]=1 |
|
||||||
annee.append(jour) |
|
||||||
jour=[] |
|
||||||
|
|
||||||
if l==6: |
|
||||||
l=0 |
|
||||||
else: |
|
||||||
l=l+1 |
|
||||||
continue |
|
||||||
|
|
||||||
|
|
||||||
annee.append(jour) |
|
||||||
return annee |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def Capacite_batt_dans_le_temps(liste_annee,conso_WH_par_km, capacite_batt,distance_moyenne,heure_de_rentre,heure_de_sortie): |
|
||||||
rendement_panneau=0.15 |
|
||||||
surface_panneau=1 |
|
||||||
capacite_batt_reel=capacite_batt |
|
||||||
|
|
||||||
compteur_de_charges=0 |
|
||||||
liste_finale=[] |
|
||||||
prix_moyen_kwh=0.146 |
|
||||||
activite=0 |
|
||||||
|
|
||||||
|
|
||||||
for jours in range(len( liste_annee)): |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for heures in range(len(liste_annee[jours][0])):#ya le jour dans la semaine en 25 position |
|
||||||
|
|
||||||
infos=liste_annee[jours][0]#selection de la liste avec l'ensolleillement sur une journée |
|
||||||
|
|
||||||
|
|
||||||
if liste_annee[jours][1]!='dimanche': |
|
||||||
|
|
||||||
if heures==heure_de_rentre or heures==heure_de_sortie: |
|
||||||
activite=1 |
|
||||||
|
|
||||||
else: |
|
||||||
activite=0 |
|
||||||
else: |
|
||||||
activite=0 |
|
||||||
|
|
||||||
|
|
||||||
capacite_batt_reel=capacite_batt_reel+ infos[heures]*rendement_panneau*surface_panneau*1-activite*conso_WH_par_km*distance_moyenne/2 |
|
||||||
if capacite_batt_reel>capacite_batt: |
|
||||||
capacite_batt_reel=capacite_batt |
|
||||||
if capacite_batt_reel<=0: |
|
||||||
capacite_batt_reel=capacite_batt |
|
||||||
|
|
||||||
compteur_de_charges=compteur_de_charges+1 |
|
||||||
infos.append(capacite_batt_reel) |
|
||||||
liste_finale.append(capacite_batt_reel) |
|
||||||
|
|
||||||
return liste_finale,liste_annee,compteur_de_charges,compteur_de_charges*(capacite_batt/1000)*prix_moyen_kwh |
|
||||||
|
|
||||||
def consommation_wh_par_km_estimation (denivele): |
|
||||||
if denivele==0: |
|
||||||
return 16 |
|
||||||
if denivele>500: |
|
||||||
return 25 |
|
||||||
return 16+(9/500)*denivele# approximation inéaire de la consommation éléctrique |
|
||||||
|
|
||||||
#%% |
|
||||||
meteo=h1a |
|
||||||
capacite_battrie_desiree=700 |
|
||||||
distance_moyenne_jour=10 |
|
||||||
denivele=100 |
|
||||||
heure_aller=8 |
|
||||||
heure_retour=16 |
|
||||||
|
|
||||||
annee=creation_liste_annee(meteo,liste_mois) |
|
||||||
annee2=Specification_jour_semaine(annee,heure_aller,heure_retour) |
|
||||||
liste_finale,liste_annee,compteur_de_charges,prix_annee=Capacite_batt_dans_le_temps(annee2,consommation_wh_par_km_estimation(denivele),capacite_battrie_desiree,distance_moyenne_jour,heure_aller,heure_retour) |
|
||||||
|
|
||||||
plt.figure(1) |
|
||||||
|
|
||||||
|
|
||||||
abs=np.linspace(0,8759,8760) |
|
||||||
|
|
||||||
ord=liste_finale |
|
||||||
plt.plot(abs,ord) |
|
||||||
plt.xlabel('heures') |
|
||||||
#plt.grid(True) |
|
||||||
plt.ylabel('Wh dans la batterie ') |
|
||||||
plt.title(" Wh dans la batterie e fonction de l'annee " ) |
|
||||||
plt.legend() |
|
||||||
|
|
||||||
plt.show() |
|
||||||
print(compteur_de_charges) |
|
||||||
print(prix_annee) |
|
||||||
|
|
||||||
|
|
||||||
# def import_data(lien_zone_climatique):#fonction permettant de récupèrer es données d'ensolleillement |
|
||||||
# #par heures sur la zone géographique concerné |
|
||||||
# lines = urllib.request.urlopen(lien_zone_climatique).readlines() |
|
||||||
|
|
||||||
|
|
||||||
# liste_data=[] |
|
||||||
# del lines[0] |
|
||||||
# for line in lines: |
|
||||||
# line=line.decode("utf-8") |
|
||||||
# line = line.split(';') |
|
||||||
# data=line[0] |
|
||||||
|
|
||||||
# data_float=float(data) |
|
||||||
|
|
||||||
# liste_data.append(data_float) |
|
||||||
# return liste_data |
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,18 @@ |
|||||||
|
const purify = require("purify-css") |
||||||
|
|
||||||
|
// Reference of all HTML files from root directory
|
||||||
|
let content = ['../www/*.html']; |
||||||
|
|
||||||
|
// Reference of all CSS files from root directory
|
||||||
|
let css = ['*.css']; |
||||||
|
|
||||||
|
let files = { |
||||||
|
output: '../www/simulator.css', |
||||||
|
whitelist: ['is-multiple', 'is-loading', 'is-narrow'], |
||||||
|
minify: true, |
||||||
|
info: true |
||||||
|
}; |
||||||
|
|
||||||
|
purify(content, css, files, function (purifiedAndMinifiedResult) { |
||||||
|
console.log(purifiedAndMinifiedResult); |
||||||
|
}); |
@ -1,17 +0,0 @@ |
|||||||
--Readme-- |
|
||||||
|
|
||||||
réalisé par |
|
||||||
Trachsel Hugo |
|
||||||
pour le projet Vhélio |
|
||||||
|
|
||||||
--Utilisation du code python-- |
|
||||||
|
|
||||||
-télécharger puis dézipper les fichiers. |
|
||||||
-mettre le fichier météo_finale.csv dans le même dossier que le fichier code.py . |
|
||||||
-Lancer le fichier code.py sur une interface supportant le language python(éviter les versions en ligne qui n'ont pas toutes les bibliothèques). |
|
||||||
-Lancer le code. |
|
||||||
-Tapez les données demandées dans la console pyhton. |
|
||||||
-Lire les résultats. |
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in new issue