Aller au contenu

Sujet n°6

Sujet original

Pour télécharger l'énoncé original, cliquer ici.

Exercice n°1

Écrire une fonction maxi qui prend en paramètre une liste tab de nombres entiers et qui renvoie un couple donnant le plus grand élément de cette liste ainsi que l’indice de la première apparition de ce maximum dans la liste.

Commentaires

Ici, le mot « liste » est à comprendre dans le sens « liste Python » (c'est-à-dire tableau) plutôt que dans le sens du type abstrait de données liste étudié en Terminale.

De plus, il semble sous-entendu que le tableau tab est non vide !

Exemple

>>> maxi([1, 5, 6, 9, 1, 2, 3, 7, 9, 8])
(9, 3)
Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
def maxi(tab):
    """
    tab - list, tableau d'entiers
    Sortie: tuple - couple constitué du maximum de tab
            et indice de la première apparition de ce maximum dans tab
    """
    if len(tab) == 0:
        return ()
    maxi = tab[0]
    i_maxi = 0
    for i in range(1, len(tab)):
        if tab[i] > maxi:
            maxi = tab[i]
            i_maxi = i
    return (maxi, i_maxi)


if __name__ == '__main__':
    print(maxi([1, 5, 6, 9, 1, 2, 3, 7, 9, 8]) == (9, 3))
    print(maxi([]) == ())

Exercice n°2

La fonction recherche prend en paramètres deux chaines de caractères gene et seq_adn et renvoie True si on retrouve gene dans seq_adn et False sinon.

Commentaires

Sujet hors-programme (recherche textuelle).

De plus, le code à compléter est inutilement compliqué avec sa double boucle while. On pourrait essayer de simplifier cette fonction en la coupant en deux.

Enfin, choisir le même nom pour désigner d'une part une fonction et d'autre part une variable n'est pas franchement une bonne idée...

Compléter le code Python ci-dessous pour qu’il implémente la fonction recherche.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def recherche(gene, seq_adn):
    n = len(seq_adn)
    g = len(gene)
    i = ...
    trouve = False
    while i < ... and trouve == ... :
        j = 0
        while j < g and gene[j] == seq_adn[i+j]:
            ...
        if j == g:
            trouve = True
        ...
    return trouve
Commentaire sur le code original

Pour télécharger l'original du fichier à compléter, cliquer ici.

Exemples

recherche("AATC", "GTACAAATCTTGCC")
True

>>> recherche("AGTC", "GTACAAATCTTGCC")
False
Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
def recherche(gene, seq_adn):
    n = len(seq_adn)
    g = len(gene)
    i = 0
    trouve = False
    while i < len(seq_adn) and trouve == False :
        j = 0
        while j < g and gene[j] == seq_adn[i+j]:
            j = j+1
        if j == g:
            trouve = True
        i = i+1
    return trouve



if __name__ == '__main__':
    print(recherche("AATC", "GTACAAATCTTGCC") == True )
    print(recherche("AGTC", "GTACAAATCTTGCC") == False )