## exo 2

def ajoute_indice(L):
    """ Cette fonction crée une liste M, telle que chaque élément de M correspond à celui de L auquel on a ajouté la valeur de son indice """
    n=len(L) # taille de la liste
    M=[] # initialisation de la liste M. On pourrait aussi définir M=n*[0], M contiendrait alors n fois 0, et on modifierait alors ces valeurs
    for k in range(n) : # k va prendre les valeurs de 0 à n-1
        M.append(L[k]+k) # on ajoute à M l'occurence désirée, à savoir l'élément d'indice k de L + l'indice k correspondant
    return M


## exo 3 la beauté des maths

L=[1/k**2 for k in range(1,1000001)] # liste en compréhension
S=sum(L) # on fait la somme des 1/k**2
import math as m
print(m.sqrt(6*S)) # on dirait pi, à comparer avec m.pi

# Moralité, on peut conjecturer, et c'est vrai d'ailleurs que \sum_{k=1}^n1/k**2=1+1/4+1/9+1/16+... tend vers pi**2/6 . C'est incroyable, non ?

## exo 4

L=[x+y  for x in "ABCD" for y in "ABCD"] # on s'inspire de l'exercice 6 du TP. x et y étant des lettres (str), le + est une concaténation..
print(L)

## exo 5-6

def secret(C):
    """ cette fonction travaille sur une chaîne de caractère C et renvoie une liste contenant le premier caractère de C, le dernier ainsi que la longueur de C"""
    return [C[0],C[-1],len(C)] # sans fioriture !




def censure(C):
    """ cette fonction travaille sur une chaîne de caractère C et renvoie une chaîne de caractère de même taille que C où tous les caractères excéptés le premier et le dernier sont remplacés par des * """
    n=len(C) # taille de la chaîne de caractère
    S=C[0] # on débute la chaîne de caractère avec le premier élément de C
    for k in range(1,n-1): # k va de 1 à n-2
        S+="*" # attention la méthode append ne s'applique pas aux chaînes de caractères. On ne peut également pas modifier les chaînes de caractères, donc on la construit de proche en proche
    S+=C[-1] # on n'oublie pas le dernier terme
    return S

    # Un version plus courte qui évite la boucle for : S=C[0]+(n-2)*"*"+C[-1]

## Transformation d'un entier en une liste

def listeentier(n):
    """ Cette fonction renvoie une liste correspondant aux chiffres de l'écriture décimale d'un entier n donné. Par exemple listeentier(365) doit renvoyer [3,6,5] """
    x=str(n) # je transforme n en chaîne de caractère
    l=[] # initialisation de la liste
    for c in x: # c va prendre comme valeurs successives les éléments de x qui correspondent aux chiffres de n
        l.append(int(c)) # on n'oublie pas de retransformer c en entier
    return l

def sommedeschiffres(n):
    """ Cette fonction renvoie la somme des chiffres d'un entier n donné"""
    L=listeentier(n) # on transforme n en la liste des entiers qui composent son écriture décimale
    return sum(L) # on utilise la fonction sum de Python

## exo 9 - 10

def retourne(mot):
    """ Cette fonction prend en entrée mot, une chaîne de caractères et renvoie la chaîne de caractère correspondant à celle de mot lue de droite à gauche """
    tom="" # initialisation
    for x in mot:
        tom=x+tom # la nouvelle lettre est placée à gauche
    return tom

def palyndrome(mot):
    """ Cette fonction renvoie True si mot est un palyndrome, False sinon """
    if mot==retourne(mot):
        return True
    else:
        return False