Aller au contenu

Sujet n°15

Sujet original

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

Exercice n°1

On a relevé les valeurs moyennes annuelles des températures à Paris pour la période allant de 2013 à 2019. Les résultats ont été récupérés sous la forme de deux listes : l’une pour les températures, l’autre pour les années :

t_moy = [14.9, 13.3, 13.1, 12.5, 13.0, 13.6, 13.7]
annees = [2013, 2014, 2015, 2016, 2017, 2018, 2019]
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.

Écrire la fonction mini qui prend en paramètres un tableau releve des relevés et un tableau date des dates et qui renvoie la plus petite valeur relevée au cours de la période et l’année correspondante. On suppose que la température minimale est atteinte une seule fois.

Exemple

>>> mini(t_moy, annees)
(12.5, 2016)
Une solution

Dans cette solution, on ajoute une assertion pour vérifier que les deux tableaux ont la même longueur.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def mini(releve, date):
    """
    releveb date - list, tableaux de même longueur
    Sortie: tuple, couple constitué du plus petit élément de releve
            et de la valeur de même indice dans le tableau date
    """
    assert len(releve) == len(date), "Tableaux n'ayant pas la même longueur"
    temp_mini = releve[0]
    date_mini = date[0]
    for i in range(len(releve)):
        if releve[i] < temp_mini:
            temp_mini = releve[i]
            date_mini = date[i]
    return temp_mini, date_mini


if __name__ == '__main__':
    # Exemple de l'énoncé
    t_moy = [14.9, 13.3, 13.1, 12.5, 13.0, 13.6, 13.7]
    annees = [2013, 2014, 2015, 2016, 2017, 2018, 2019]
    print(mini(t_moy, annees) == (12.5, 2016))

    # Exemple supplémentaire
    t_moy = [13.9, 14.2, 13.8, 16.9, 17.3, 15.1, 19.1, 13.2, 15.4, 17.6]
    annees = [2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022]
    print(mini(t_moy, annees) == (13.2, 2020))

Exercice n°2

Un mot palindrome peut se lire de la même façon de gauche à droite ou de droite à gauche : bob, radar, et non sont des mots palindromes.

De même certains nombres sont eux aussi des palindromes : 33, 121, 345543.

L’objectif de cet exercice est d’obtenir un programme Python permettant de tester si un nombre est un nombre palindrome.

Pour remplir cette tâche, on vous demande de compléter le code des trois fonctions ci-dessous sachant que la fonction est_nbre_palindrome s’appuiera sur la fonction est_palindrome qui elle-même s’appuiera sur la fonction inverse_chaine.

La fonction inverse_chaine inverse l'ordre des caractères d'une chaîne de caractères chaine et renvoie la chaîne inversée.

La fonction est_palindrome teste si une chaine de caractères chaine est un palindrome. Elle renvoie True si c’est le cas et False sinon. Cette fonction s’appuie sur la fonction précédente.

La fonction est_nbre_palindrome teste si un nombre nbre est un palindrome. Elle renvoie True si c’est le cas et False sinon. Cette fonction s’appuie sur la fonction précédente.

Compléter le code des trois fonctions ci-dessous.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def inverse_chaine(chaine):
    result = ...
    for caractere in chaine:
        result = ...
    return result

def est_palindrome(chaine):
    inverse = inverse_chaine(chaine)
    return ...

def est_nbre_palindrome(nbre):
    chaine = ...
    return est_palindrome(chaine)
Commentaires sur le code original
  1. Pour télécharger l'original du fichier à compléter, cliquer ici.

  2. D'une facilité déconcertante et pas vraiment optimal du point de vue algorithmique...

Exemples

>>> inverse_chaine('bac')
'cab'

>>> est_palindrome('NSI')
False

>>> est_palindrome('ISN-NSI')
True

>>> est_nbre_palindrome(214312)
False

>>> est_nbre_palindrome(213312)
True
Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def inverse_chaine(chaine):
    result = ""
    for caractere in chaine:
       result = caractere + result
    return result

def est_palindrome(chaine):
    inverse = inverse_chaine(chaine)
    return inverse == chaine

def est_nbre_palindrome(nbre):
    chaine = str(nbre)
    return est_palindrome(chaine)



if __name__ == '__main__':
    # Exemples de l'énoncé
    print(inverse_chaine('bac') == 'cab')
    print(est_palindrome('NSI') == False)
    print(est_palindrome('ISN-NSI') == True)
    print(est_nbre_palindrome(214312) == False)
    print(est_nbre_palindrome(213312) == True)

    # Exemples supplémentaires
    print(inverse_chaine('abracadabra') == 'arbadacarba')
    print(est_palindrome('A') == True)
    print(est_nbre_palindrome(111) == True)
    print(est_nbre_palindrome(101010) == False)