#Exercice n°1
def list_inv(n):
    return([1/k for k in range(1,n+1)])

def list_harm(n):
    L=[]
    acc=0
    for j in range(1,n+1):
        acc+=1/j
        L.append(c)
    return(L)

#Exercice n°2
def somme(L):
    acc=0
    for e in L:
        acc+=e
    return(acc)

def moyenne(L):
    acc=0
    for e in L:
        acc+=e
    return(acc/len(L))

def mediane(L):
    if len(L)%2!=0:
        return(L[len(L)//2])
    else:
        return((L[len(L)//2-1]+L[len(L)//2])/2)

def indice_maximum(L):
    max=L[0]
    indice=0
    for i in range(1,len(L)):
        if L[i]>max:
            indice=i
            max=L[i]
    return(max,i)

def indices_minimum(L):
    min=L[0]
    L_indices=[0]
    for i in range(1,len(L)):
        if L[i]==min:
            L_indices.append(i)
        if L[i]<min:
            L_indices=[i]
            min=L[i]
    return(min,L_indices)

def decalage_droite(L):
    L1=[L[len(L)-1]]
    for i in range(1,len(L)):
        L1=L1+[L[i-1]]
    L=L1
    return(L)

#Exercice n°3
def longueur(chaine):
    cpt=0
    for car in chaine:
        cpt+=1
    return(cpt)

def recherche_e(chaine):
    cpt=0
    for car in chaine:
        if car=='e':
            cpt+=1
    return(cpt)

def stat(texte):
    lettres={}
    for c in texte:
        if c not in " ,;:!?.":
            if c in lettres:
                lettres[c]=lettres[c]+1
            else:
                lettres[c]=1
    return(lettres)

#Exercice n°4
liste=[[i,i] for i in range(10**6)]
from random import shuffle
shuffle(liste)
dico=dict(liste)

def recherche1(liste,k):
    for elt in liste:
        if elt[0]==k:
            return elt[1]

def recherche2(dico,k):
    if k in dico:
        return(dico[k])

from time import time

st=time()

for i in range (50):
    recherche1(liste,i)
print(time()-st)

st=time()
for i in range(50):
    recherche2(dico,i)
print(time()-st)
