Aller au contenu

Produit de chaines de caractères par un entier⚓︎

D'après 2022, Centres étrangers, J2, Ex. 1

1. Voici une fonction codée en Python :

🐍 Script Python
def f(n):
    if n == 0:
        print("Partez !")
    else:
        print(n)
        f(n-1)

1.a. Qu'affiche la commande f(5) ?

Réponse

f(5) affiche

📋 Texte
5
4
3
2
1
Partez !

1.b. Pourquoi dit-on de cette fonction qu'elle est récursive ?

Réponse

Le code source de f contient un appel à elle-même, c'est donc une fonction récursive.

2. On rappelle qu'en python l'opérateur + a le comportement suivant sur les chaines de caractères :

🐍 Console Python
>>> S = 'a' + 'bc'
>>> S
'abc'

Et le comportement suivant sur les listes :

🐍 Console Python
>>> L = ['a'] + ['b', 'c']
>>> L
['a', 'b', 'c']

On a besoin pour les questions suivantes de pouvoir ajouter une chaine de caractères s en préfixe à chaque chaine de caractères de la liste chaines.

On appellera cette fonction ajouter.

Par exemple, ajouter("a", ["b", "c"]) doit renvoyer ["ab", "ac"].

2.a. Recopiez le code suivant et complétez ... sur votre copie :

🐍 Script Python
def ajouter(s, chaines):
    resultat = []
    for mot in chaines:
        resultat ...
    return resultat
Réponses
🐍 Script Python
def ajouter(s, chaines):
    resultat = []
    for mot in chaines:
        resultat.append(s + mot)
    return resultat

2.b. Que renvoie la commande ajouter("b", ["a", "b", "c"]) ?

Réponse

ajouter("b", ["a", "b", "c"]) renvoie ["ba", "bb", "bc"].

2.c. Que renvoie la commande ajouter("a", [""]) ?

Réponse

ajouter("a", [""]) renvoie ["a"].

3. On s'intéresse ici à la fonction suivante écrite en Python où s est une chaine de caractères et n un entier naturel.

🐍 Script Python
def produit(s, n):
    if n == 0:
        return [""]
    else:
        resultat = []
        for c in s:
            resultat = resultat + ajouter(c, produit(s, n - 1))
        return resultat

3.a. Que renvoie la commande produit("ab", 0) ? Le résultat est-il une liste vide ?

Réponse

produit("ab", 0) utilise le paramètre n égal à 0, donc elle renvoie [""]. (L'affichage en console sera [''])

[""] n'est pas une liste vide, c'est une liste qui contient un élément : la chaine de caractères vide.

3.b. Que renvoie la commande produit("ab", 1) ?

Réponse

produit("ab", 1) fait une boucle for avec deux tours :

  • Premier tour, avec c = 'a', resultat devient ["a"].
  • Second tour, avec c = 'b', resultat devient ["a"] + ["b"].

['a', 'b'] est renvoyé.

3.c. Que renvoie la commande produit("ab", 2) ?

Réponse

produit("ab", 2) fait une boucle for avec deux tours :

  • Premier tour, avec c = 'a', resultat devient ["aa", "ab"].
  • Second tour, avec c = 'b', resultat devient ["aa", "ab"] + ["ba", "bb"].

['aa', 'ab', 'ba', 'bb'] est renvoyé.