# Question 1
def max_ind_liste(li,a,b):
    ind = a #On initialise l'indice au 1er élément possible
    for i in range(a,b): #On parcourt tous les indices
        if li[i]> li[ind]: #Si l'élément qu'on regarde est plus grand que celui qu'on a en mémoire
            ind = i #on met à jour l'élément
    return ind #On renvoie l'indice en mémoire

#Question 2

def tri_selection(li):
    a = 0 #On trie du début
    b = len(li) #à la fin
    for i in range(len(li)): #On remonte les éléments petit à petit
        ind = max_ind_liste(li,a,b) #On récupère l'indice du plus grand
        li[b-1], li[ind] = li[ind], li[b-1] #On le place à la fin
        b-=1 #On recommence avec une liste plus petite
    return li

# Question 3

def est_premier(n):
    #for i in range(2,n): #On parcourt tous les nombres de 2 à n-1
    for i in range(2,int(n**0.5)+1): #On parcourt les nombres de 2 à racine de n
        if n%i==0: #Si i divise n
            return False #n n'est pas premier
    return True #Si ce n'est jamais arrivé, n est premier

# Question 4

def cesar(k,txt):
    k = k%26
    res = "" #On initialise le résultat avec une chaine vide
    for lettre in txt: #On parcourt les lettres de notre texte
        if ord('a') <= ord(lettre) <= ord('z'):#On vérifie qu'on a bien une lettre minuscule
            if ord(lettre) +k > ord('z'): #Si on dépasse z
                res += chr(ord(lettre)+k-26) #On doit retourner au début de l'alphabet
            else : #Sinon
                res += chr(ord(lettre)+k) #On peut juste décaler de k
        elif ord('A') <= ord(lettre) <= ord('Z'):#On vérifie qu'on a bien une lettre majuscule et on fait pareil
            if ord(lettre) +k > ord('Z'):
                res += chr(ord(lettre)+k-26)
            else :
                res += chr(ord(lettre)+k)
        else : #Si on a pas une lettre, on ne modifie rien
            res += lettre
    return res #On renvoie le résultat

#Question 5

def bin(n):
    if n ==0: #Si on a fini
        return "" #On renvoie la chaine vide
    return bin(n//2) + str(n%2)  #Sinon, on renvoie le reste modulo 2 et on exécute la fonction reccursivement sur n//2

bin = lambda n : "" if (n==0) else bin(n//2)+str(n%2)

