"""
Partie listes du module lycee.
"""
"""
Créé à partir d' Edupython: http://edupython.tuxfamily.org/
Licence CECILL http://www.cecill.info/
"""
from math import floor, log
from .chaines import fich2chaine, chaine2fich
[docs]def CSV_ligne(num,fichier='optionnel'):
"""
Retourne une liste de nombres (float) correspondant à la ligne du fichier ``fichier``.
Si fichier n'est pas précisé, ouvre une boite de dialogue pour le choisir
Le fichier ne doit contenir que des nombres et le séparateur doit être ``;``
Arguments:
num (int): Un numéro de ligne.
fichier (file,optionnel): Le nom complet (avec le chemin) d'un fichier contenant des nombres.
"""
ch = fich2chaine(fichier)
L = ch.split("\n") # on separe les lignes en une liste
ligne = []
for i in L[num-1].split(";"):
if isinstance(i,str):
ligne.append(float(i.replace(",","."))) #gestion de la virgule avec un tableau de nombres en convention française
else:
ligne.append(float(i))
return(ligne)
[docs]def CSV_colonne(num,fichier='optionnel'):
"""
Retourne une liste de nombres (float) correspondant à la colonne du fichier ``fichier``.
Si fichier n'est pas précisé, ouvre une boite de dialogue pour le choisir
Le fichier ne doit contenir que des nombres et le séparateur doit être ``;``
Arguments:
num (int): Un numéro de colonne.
fichier (file,optionnel): Le nom complet (avec le chemin) d'un fichier contenant des nombres.
"""
ch = fich2chaine(fichier)
colonne = []
for i in ch.split("\n"): #on parcourt les lignes
contenu=i.split(';')[num-1] #dans chaque ligne on récupère le contenu de la bonne colonne
if isinstance(contenu,str):
colonne.append(float(contenu.replace(",","."))) #gestion de la virgule avec un tableau de nombres en convention française
else:
colonne.append(float(contenu))
return(colonne)
# Obsolète
# def CSV2liste(num, fichier='optionnel'):
# """
# Retourne une liste correspondant à la colonne ou la ligne nom du fichier ``fichier``.
#
# Si fichier n'est pas précisé, ouvre une boite de dialogue pour le choisir
# Le fichier ne doit contenir que des nombres et le séparateur doit être ``;``
#
# Arguments:
# num (str ou int): Un numéro de ligne ou un nom de colonne (``A`` à ``Z`` ).
# fichier (file,optionnel): Le nom complet (avec le chemin) d'un fichier contenant des nombres.
# """
# ch = fich2chaine(fichier)
# if isinstance(num, int):
# L = ch.split("\n")
# if len(L) >= num:
# R = []
# for n in L[num - 1].split(";"):
# try:
# R.append(eval(n))
# except BaseException:
# raise Exception("Problème lors de l'importation")
# return R
# if isinstance(num, str):
# num = num.upper()
# c = ord(num) - ord('A')
# R = []
# for m1 in ch.split("\n"):
# m2 = m1.split(";")
# if len(m2) > c and m2[c] != '':
# try:
# R.append(eval(m2[c].replace(' ', '').replace(',', '.')))
# except BaseException:
# raise Exception("Problème lors de l'importation")
# return R
[docs]def liste2CSV(L, fichier='optionnel'):
"""
Enregistre sous le nom ``fichier`` la liste ``L``.
Si fichier n'est pas précisé, ouvre une boite de dialogue pour le choisir
Arguments:
L (list): Une liste
fichier (file, optionnel): Le nom complet (avec le chemin) d'un fichier contenant du texte brut.
"""
for i in range(len(L)):
L[i] = str(L[i])
chaine2fich("\n".join(L), fichier)
[docs]def trier(liste1, liste2=[]):
"""
Retourne `liste1` triée.
Si `liste2` est renseignée, elle est réorganisée de la même manière que `liste1`.
Ex 1 : trier([5,3,4])=[3,4,5]
Ex 2 : `liste1=[3,2,1]` et `liste2=[10,20,30]`.
trier(liste1,liste2)=([1,2,3],[30,20,10])
Arguments:
liste1 (list) : Une liste avec UNIQUEMENT des nombres OU UNIQUMENT des chaines de caractères
liste2 (list,optionnel) : Une liste quelconque mais de même taille que `liste1`
"""
if liste2 == []:
return sorted(liste1)
if len(liste1) != len(liste2):
print("Erreur : les 2 listes n'ont pas la même taille !")
else:
# Il faut trier la liste selon l'ordre de liste_groupe
# On crée une matrice n x 2
L = []
for i in range(len(liste1)):
L.append([liste1[i], liste2[i]])
L.sort()
return [i for i, j in L], [j for i, j in L]
[docs]def transposer(L):
"""
L est une liste de liste, comme une matrice NxM. On prend la transposée.
Ex : L=[[a,b,c],[1,2,3]]. Retourne la liste [[a,1],[b,2],[c,3]]
Arguments:
L (list) : une liste de listes
"""
n = len(L[0])
for i in range(len(L)):
if n != len(L[i]):
print("Les listes n'ont pas la même taille !")
return list(map(list, zip(*L)))
[docs]def serie(deb, fin, pas=1):
"""
Renvoie une liste de nombre (float) de `deb` à `fin` (inclu) avec un `pas`
Arguments
deb (float ou int) : début de la série
fin (float ou int) : fin de la série
pas (float ou int, optionnel) : pas de la série
"""
l = [deb, fin, pas]
degmax = 10**(-min([floor(log(abs(float(i)))) for i in l]))
ToutEntier = [int(i * degmax) for i in l]
return [float(i) / degmax for i in range(ToutEntier[0],
ToutEntier[1] + ToutEntier[2], ToutEntier[2])]
[docs]def affiche_poly(L): # Pourquoi???
"""
Affiche la liste L sous forme d'un polynôme (L[n] étant le coefficient de degré n).
Arguments:
L (list): Une liste
"""
poly = ""
for i in range(len(L)):
c = L[i]
if c != 0 and poly != "":
poly = poly + '+'
if c != 0:
if i > 0:
if c == -1:
poly = poly + '-'
if abs(c) != 1:
poly = poly + str(c)
else:
poly = poly + str(c)
if i > 0:
poly = poly + 'X'
if i > 1:
poly = poly + '^' + str(i)
if poly == "":
poly = 0
return poly