## Exercice 1

# 1)

def valeur_absolue(x):
    if x > 0:
        return x
    else:
        return -x

# En Python on peut aussi écrire :

def valeur_absolue(x):
    return x if x > 0 else -x

# 2)

def plus_proche(a, b, c):
    if valeur_absolue(b-a) < valeur_absolue(c-a):
        return b
    else:
        return c


## Exercice 2

# 1)

def moyenne(L):
    somme = 0
    for x in L:
        somme = somme + x  # on peut écrire somme += x
    return somme/len(L)

# ou en utilisant sum :

def moyenne(L):
    return sum(L)/len(L)

def variance(L):
    m = moyenne(L)
    somme = 0
    for x in L:
        somme += (x-m)**2
    return somme/len(L)

# 2)

def mediane(L):
    L_triee = sorted(L)
    n = len(L)
    p = n//2
    if n%2 == 0:
        return (L_triee[p-1]+L_triee[p])/2
    else:
        return L_triee[p]


## Exercice 3

# 1) Une méthode possible :

def suivant(L):
    resultat = []
    n = len(L)
    i = 0
    while i < n:
        j = i + 1
        while j < n and L[j] == L[i]:
            j += 1
        resultat.append(j-i)  # le nombre d'éléments consécutifs égaux à L[i]
        resultat.append(L[i])
        i = j
    return resultat

# Une autre, pour les allergiques aux boucles while :

def suivant(L):
    resultat = []
    n = 1  # compteur qui représente le nombre d'éléments consécutifs égaux
    for i in range(len(L)):
        if i == len(L)-1 or L[i] != L[i+1]:
            resultat.append(n)
            resultat.append(L[i])
            n = 1
        else:
            n = n + 1
    return resultat

# Noter que sans le test i == len(L)-1 il faudrait ajouter la dernière série à la fin.

# 2) a)

def conway(n):
    L = [1]
    for i in range(1, n):
        L = suivant(L)
    return L

# 2) b)

def conway_p_chiffres(p):
    L = [1]
    n = 1
    while len(L) < p:
        L = suivant(L)
        n += 1
    return n

# Il vaut mieux ne pas utiliser la fonction conway ici sinon on refait plusieurs
# fois les mêmes calculs.
