#### TP n°4: Étude de textes ####
#################



## Question 1 
chaine="Allez les Verts"
for i in range(len(chaine)):
    print(chaine[i])
### QUELQUES FONCTIONS DE MANIPULATION DE TEXTES ###
## Question 2 
def est_capitalise(mot):
    if mot[0]>="A" and mot[0]<="Z":
        return True
    else:
        return False
print(est_capitalise("Bonjour"))
print(est_capitalise("bonjour"))
## Question 3 
def met_point(phrase):
    if phrase[len(phrase)-1]==".":
        return phrase
    else:
        return phrase+"."
## Test de la fonction `met_point`; **à exécuter sans éditer**
ok=True
if met_point("Bonjour tout le monde")!="Bonjour tout le monde.": ok=False
if met_point("Bonjour tout le monde.")!="Bonjour tout le monde.": ok=False
if ok:
    print("Fonction met_point: test réussi!")
else:
    print("Fonction met_point: test échoué!")
## Question 4 
def compte_lettre(chaine,lettre):
    c=0
    for i in range(len(chaine)):
        if chaine[i]==lettre:
            c=c+1
    return c
print(compte_lettre("Allez les Verts","l"))
print(compte_lettre("Allez les Verts","y"))
## Question 5 
def indice_lettre(chaine,lettre):
    for i in range(len(chaine)):
        if chaine[i]==lettre:
            return i
    return -1
## Test de la fonction `indice_lettre`; **à exécuter sans éditer**
ok=True
if indice_lettre("Allez les Verts","V")!=10: ok=False
if indice_lettre("Allez les Verts","l")!=1: ok=False
if indice_lettre("Allez les Verts","y")!=-1: ok=False
if ok:
    print("Fonction indice_lettre: test réussi!")
else:
    print("Fonction indice_lettre: test échoué!")
### ÉTUDE D'UN TEXTE COMPLET ###
## Question 6 : Lecture du fichier
fichier=open("le_petit_prince.txt","r",encoding="utf-8")
lignes=fichier.readlines()
fichier.close()


## Question 7 : Recherche de mot
def trouve_mot(mot,liste):
    """ Recherche si un mot est présent dans le texte
    arguments: mot: le mot recherché
               liste: une liste des mots du texte
    renvoie: True ou False suivant si le mot est trouvé ou pas """
    trouve=False
    for i in range(len(liste)):
        if liste[i]==mot:
            trouve=True
    return trouve
print(trouve_mot("planète",listemots))
print(trouve_mot("satellite",listemots))
## Test de la fonction `trouve_mot`; **à exécuter sans éditer**
ok=True
if not(trouve_mot("il",["il","fait","beau"])): ok=False
if not(trouve_mot("beau",["il","fait","beau"])): ok=False
if trouve_mot("ai",["il","fait","beau"]): ok=False
if ok:
    print("Fonction trouve_mot: test réussi!")
else:
    print("Fonction trouve_mot: test échoué!")
## Question 8 : Recherche du mot le plus long
def mot_le_plus_long(liste):
    """ Recherche le mot le plus long dans une liste de mots
    arguments: liste: liste de mots
    renvoie: le mot le plus long """
    le_plus_long=""
    for i in range(len(liste)):
        if len(liste[i])>len(le_plus_long):
            le_plus_long=liste[i]
    return le_plus_long
print(mot_le_plus_long(listemots))
## Test de la fonction `mot_le_plus_long`; **à exécuter sans éditer**
ok=True
if mot_le_plus_long(["il","fait","chaud","à","Sainté","en","été"])!="Sainté": ok=False
if ok:
    print("Fonction mot_le_plus_long: test réussi!")
else:
    print("Fonction mot_le_plus_long: test échoué!")
## Question 9 : Recherche des deux mots les plus longs
def deux_mots_les_plus_longs(liste):
    """ Recherche les deux mots les plus longs dans une liste de mots
    arguments: liste: liste de mots
    renvoie: (le mot le plus long, le deuxième mot le plus long) """
    premier="" # le plus long
    second="" # le second plus long
    for i in range(len(liste)):
        if len(liste[i])>len(premier): # on a trouvé un nouveau plus long
            second=premier # le plus long devient second
            premier=liste[i]
        elif len(liste[i])>len(second): # sinon, c'est peut-être le second plus long
            second=liste[i]
    return (premier,second)
print(deux_mots_les_plus_longs(listemots))
## Test de la fonction `deux_mots_les_plus_longs`; **à exécuter sans éditer**
ok=True
if deux_mots_les_plus_longs(["il","fait","chaud","à","Sainté","en","été"])!=("Sainté","chaud"): ok=False
if ok:
    print("Fonction deux_mots_les_plus_longs: test réussi!")
else:
    print("Fonction deux_mots_les_plus_longs: test échoué!")


## Question 10 : Comptage des mots
dico={}
for i in range(len(listemots)):
    if listemots[i] in dico:
        dico[listemots[i]]=dico[listemots[i]]+1
    else:
        dico[listemots[i]]=1
## Question 11 : Mot le plus représenté
max=0
mot_max=""
for cle in dico:
    if dico[cle]>max:
        max=dico[cle]
        mot_max=cle
print("Le mot «"+mot_max+"» apparaît "+str(max)+" fois")
## Question 12 
max=0
mot_max=""
for cle in dico:
    if len(cle)>=6 and dico[cle]>max:
        max=dico[cle]
        mot_max=cle
print("Le mot «"+mot_max+"» apparaît "+str(max)+" fois")
## Question 13 
compteur=0
for cle in dico:
    if dico[cle]==1:
        compteur=compteur+1
print("Il y a "+str(compteur)+" mots sur "+str(len(dico))+" qui n'apparaissent qu'une seule fois")
### MANIPULATIONS DIVERSES ###
## Question 14 
def srevne(phrase):
    mots=phrase.split(" ")
    esarhp=mots[len(mots)-1]
    for i in range(1,len(mots)):
        esarhp=esarhp+" "+mots[len(mots)-1-i]
    return esarhp
print(srevne("Allez les Verts!"))
## Question 15 
dicol={}
for i in range(len(listemots)):
    mot=listemots[i].lower()
    for j in range(len(mot)):
        if mot[j] in dicol:
            dicol[mot[j]]+=1
        else:
            dicol[mot[j]]=1
lmax=""
nmax=0
for lettre in dicol:
    if dicol[lettre]>nmax:
        nmax=dicol[lettre]
        lmax=lettre
print("La lettre "+lmax+" apparaît "+str(nmax)+" fois.")
## Question 16 
dicol={}
for i in range(len(listemots)):
    mot=listemots[i].lower()
    for j in range(len(mot)):
        if mot[j] in dicol:
            dicol[mot[j]]+=1
        else:
            dicol[mot[j]]=1
while len(dicol)>0: # tant qu'il reste des lettres
    lmax=""
    nmax=0
    for lettre in dicol:
        if dicol[lettre]>nmax:
            nmax=dicol[lettre]
            lmax=lettre
    print("La lettre "+lmax+" apparaît "+str(nmax)+" fois.")
    del dicol[lmax]
