# FONCTIONS =======================================================================================
def afficher_fichier(pnomfic):
	with open(pnomfic, 'r') as _fic:
		_lignes = _fic.read().splitlines()
		print("| {:-^59} |".format(""))
		print("| {:^59} |".format("Statistiques Naissance 2018/2019"))
		print("| {:-^59} |".format(""))
		print("| {:<59} |".format("DEP : numéro de département"))
		print("| {:<59} |".format("LIBDEP : libellé du département"))
		print("| {:<59} |".format("TN19 : taux de natalité (pour mille) en 2019"))
		print("| {:<59} |".format("AGE19 : âge moyen de la mère en 2019"))
		print("| {:<59} |".format("NAISS18 : nombre de naissances en 2018"))
		print("| {:-^59} |".format(""))
		print("| {:^4} | {:^25} | {:^5} | {:^5} | {:^8} |".format("DEP", "LIBDEP", "TN19", "AGE19", "NAISS18"))
		print("| {:-^59} |".format(""))
		for i in range(1, len(_lignes)):
			_items = _lignes[i].split(";")
			print("| {:4} | {:25} | {:>5} | {:>5} | {:>8} |".format(_items[0], _items[1], _items[2], _items[3], _items[4]))
		print("| {:-^59} |".format(""))

def charger_fichier(pnomfic, pliste): # chargement du contenu du fichier en mémoire
	with open(pnomfic, 'r') as _fic:
		_lignes = _fic.read().splitlines() # on découpe le fichier ligne par ligne
		for i in range(1, len(_lignes)): # pour chaque ligne (sauf la première qui sont les libellés)
			_items = _lignes[i].split(";") # on découpe suivant le caractère de délimitation, ici le point-virgule
			pliste.append((_items[0], _items[1],\
							float(_items[2].replace(',', '.')), float(_items[3].replace(',', '.')),\
							int(_items[4]))) # on stocke les données dans une liste sous forme de tuples
							# on transtype les valeurs numériques en veillant à remplacer la virgule des décimaux en point

def calculer_total_naissance(pliste):
	_somme = 0
	for _record in pliste: # on récupère un enregistrement qui est un tuple de 5 éléments
		_naiss = _record[4]
		_somme = _somme + _naiss # on construit la somme total de proche en proche
	return _somme

def taux_natalite_max(pliste):
	_index = 0 # index de l'enregistrement dans pliste ayant le plus fort taux de natalité
	_tmax = pliste[0][2] # pliste[0] renvoit le premier élément de la liste dont pliste[0][2] renvoit le taux de natalité de cet élément
	for i in range(1, len(pliste)): # parcours de la liste
		_tn = pliste[i][2]
		if _tn > _tmax : # si on trouve un taux de natalité plus grand que le précédent
			_index = i # on conserve l'index de son enregistrement
			_tmax = _tn # et on remplace le taux précédent par ce taux
	return pliste[_index][1] # pour finir on renvoit le nom du département se situant à l'index où le taux est le plus grand

def taux_natalite_min(pliste):
	_index = 0
	_tmin = pliste[0][2]
	for i in range(1, len(pliste)):
		_tn = pliste[i][2]
		if _tn < _tmin :
			_index = i
			_tmin = _tn
	return pliste[_index][1]

def afficher_stats(pliste):
	print("")
	_totalnaissance = calculer_total_naissance(pliste)
	print("TOTAL des naissances en France en 2018 : " + str(_totalnaissance) + " soit {:.2f} bébés par minute.".format(_totalnaissance / (365.25*24*60)))
	print(str(taux_natalite_max(pliste)) + " est le département avec le plus fort taux de natalité.")
	print(str(taux_natalite_min(pliste)) + " est le département avec le plus faible taux de natalité.")

# PROGRAMME PRINCIPAL =============================================================================
lst_data = [] # liste d'enregistrements stockés sous la forme de tuple
afficher_fichier("data.csv")
charger_fichier("data.csv", lst_data)
afficher_stats(lst_data)
