#Exercice 1
def tester1(L,k) :
    test = False
    for i in range(len(L)) :
        if L[i] == k:
            test = True
    return test

def tester2(L,k) :
    test = False
    for a in L :
        if a == k:
            test = True
    return test

def tester3(L,k) :
    return k in L # c'est un peu de la triche et pas forcément autorisé au concours

# Remarque : il y a aussi la méthode par dichotomie mais elle nécessite que la liste soit triée au départ

#Exercice 2
def remplace(L) :
    for i in range(len(L)):
        if L[i] < 0:
            L[i] = 0
        if L[i] > 100:
            L[i] = 100
    return L # optionnel si on souhaite juste agir sur la liste (modification par effet de bord)

#Exercice 3

def recherche_min(L):
    min=L[0]
    pos=0
    for i in range(1, len(L)):
        if L[i] < min:
            pos=i
            min=L[i]
    return pos

# une deuxième version sans mémoriser min, en ne s'intéressant qu'aux indices
def recherche_min2(L):
    pos=0
    for i in range(1, len(L)):
        if L[i] < L[pos]:
            pos=i
    return pos

#Exercice 4


def tri_selection(L):
    for i in range(len(L)):
        pos=recherche_min(L[i:])+i
        L[i], L[pos] = L[pos], L[i]
        print(L)
    return L


def tri_selection2(L):
    for i in range(len(L)):
        pos=i
        min=L[i]
        for j in range(i+1,len(L)):
            if L[j]<min:
                pos=j
                min=L[j]
        L[i], L[pos] = L[pos], L[i]
    return L


#Exercice 5

def insere(L,k):
    if k > L[len(L)-1]:
        L.append(k)
    else :
        sauv=L[len(L)-1] # sauvergarde du dernier terme
        i=len(L)-1
        while i>0 and L[i-1]>k :
            L[i]=L[i-1]
            i=i-1
        L[i]=k
        L.append(sauv)
    return L

def test_palindrome(mot):
    for i in range(len(mot)//2):
        if mot[i]!=mot[len(mot)-1-i]:
            return False
    return True



