1. rive 1. rive
00h 01m 22s
Commentaires
Note*
*champ optionnel
SUJET
[Exemple 1] Programmes Python
**Programme 1** Compléter la fonction `puissance`. * La fonction prend en paramètres $a$ et $n$ avec $a$ et $n$ deux entiers positifs supérieurs ou égaux à zéro et renvoie $a^n$. * La fonction doit être une fonction récursive. * Indiquer dans le code, à l'aide de commentaires, la partie qui correspond à la condition d'arrêt et la partie qui correspond aux appels récursifs. **Programme 2** Compléter le code ci-dessous (dix `...` à compléter). Rappels: le 'slicing' ``` Soit L une liste L[1:] # sélection de tous les éléments sauf le premier (= suppression du premier élément) L[:2] # sélection des 2 premiers éléments L[-1] # sélection du dernier élément L[-3] # sélection du 3ème élément en partant de la fin L[-3:] # sélection des 3 derniers éléments L[1:3] # sélection de tous les éléments entre le 2ème (inclus) et le 4ème (exclu) ```
PROGRAMME 1
CODE ÉLÈVE
def puissance(a, n): def fonc():
CODE ENSEIGNANT
# Jeu de tests
assert puissance(10, 3) == 1000
assert puissance(2, 3) == 8
assert puissance(5, 0) == 1
assert puissance(0, 0) == 1

print(puissance(10, 3))
print(puissance(2, 3))
print(puissance(5, 0))
print(puissance(0, 0))
SOLUTION POSSIBLE
def puissance(a, n):
    # Condition d'arrêt (cas a^0 = 1)
    if n == 0:
        return 1
    # Appels récursifs
    else:
        return a * puissance(a, n - 1)

# Jeu de tests
assert puissance(10, 3) == 1000
assert puissance(2, 3) == 8
assert puissance(5, 0) == 1
assert puissance(0, 0) == 1
PROGRAMME 2
CODE ÉLÈVE
def fusion(L1, L2):
    if L1 == [] or L2 == []:
        return ...
    if L1[0] <= L2[0]:
        return ... + fusion(L1[1:], L2)
    return [L2[0]] + ...


def tri_fusion(liste):
    if len(liste) <= 1:
        return ...

    milieu = ...

    demi_liste1 = liste[...]
    demi_liste2 = liste[...]

    demi_liste1_triee = ...
    demi_liste2_triee = ...

    return ...(demi_liste1_triee, demi_liste2_triee) def fonc():
CODE ENSEIGNANT
# Tests fonction tri_fusion
assert(tri_fusion([7]) == [7]), "Test 1 non réussi"
assert(tri_fusion([]) == []), "Test 2 non réussi"
assert(tri_fusion([9, 7, 5, -4]) == [-4, 5, 7, 9]), "Test 3 non réussi"
assert(tri_fusion([9, 2, 14, -4]) == [-4, 2, 9, 14]), "Test 4 non réussi"
assert(tri_fusion([4, 7, 14, 20]) == [4, 7, 14, 20]), "Test 5 non réussi"

print(tri_fusion([5, 8, 12, 1])) # [1, 5, 8, 12]
SOLUTION POSSIBLE
def fusion(L1, L2):
    if L1 == [] or L2 == []:
        return L1 + L2
    if L1[0] <= L2[0]:
        return [L1[0]] + fusion(L1[1:], L2)
    return [L2[0]] + fusion(L1, L2[1:])


def tri_fusion(liste):
    if len(liste) <= 1:
        return liste

    milieu = len(liste) // 2

    demi_liste1 = liste[:milieu]
    demi_liste2 = liste[milieu:]

    demi_liste1_triee = tri_fusion(demi_liste1)
    demi_liste2_triee = tri_fusion(demi_liste2)

    return fusion(demi_liste1_triee, demi_liste2_triee)
PROGRAMME 1
1 Code élève en lecture seule
2 Code enseignant
1
1+2
2
console
Prêt!
PROGRAMME 2
1 Code élève en lecture seule
2 Code enseignant
1
1+2
2
console
Prêt!