Nombres palindromes - Sujet 25 - EP NSI 2025

Moyen Officiel
Python (3.14.0)

Énoncé du problème

Exercice 1

EXERCICE 1 (10 points)

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 tableaux (de type list) : l’un 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]

Écrire la fonction annee_temperature_minimale qui prend en paramètres ces deux tableaux 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 :

>>> annee_temperature_minimale(t_moy, annees)
(12.5, 2016)

Exercice 2

EXERCICE 2 (10 points)

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

De même certains nombres ont des écritures décimales qui sont 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 qui s’appuient les unes sur les autres :

  • inverse_chaine : qui renvoie une chaîne de caractères inversée ;
  • est_palindrome : qui teste si une chaîne de caractères est un palindrome ;
  • est_nbre_palindrome : qui teste si un nombre est un palindrome.

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

def inverse_chaine(chaine):
    '''Retourne la chaine inversée'''
    resultat = ...
    for caractere in chaine:
        resultat = ...
    return resultat

def est_palindrome(chaine):
    '''Renvoie un booléen indiquant si la chaine ch
    est un palindrome'''
    inverse = inverse_chaine(chaine)
    return ...

def est_nbre_palindrome(nbre):
    '''Renvoie un booléen indiquant si le nombre nbre
    est un palindrome'''
    chaine = ...
    return est_palindrome(chaine)

Exemples :

>>> inverse_chaine('bac')
'cab'
>>> est_palindrome('NSI')
False
>>> est_palindrome('ISN-NSI')
True
>>> est_nbre_palindrome(214312)
False
>>> est_nbre_palindrome(213312)
True

Les contraintes ci-dessous sont ajoutées par la plateforme et ne font pas partie du sujet.

Exercice 1

Contraintes :

  • t_moy et annees sont deux tableaux de type list, non vides et de même longueur
  • 1 <= len(t_moy) = len(annees) <= 10^3
  • t_moy[i] est un nombre de type float (ou int), avec -10^2 <= t_moy[i] <= 10^2
  • annees[i] est un entier, avec 1000 <= annees[i] <= 3000
  • La température minimale est atteinte une seule fois : il n’y a pas d’ex aequo dans t_moy
  • La fonction renvoie un tuple (température minimale, année correspondante), dans cet ordre

Exercice 2

Contraintes :

  • inverse_chaine et est_palindrome reçoivent une chaîne de caractères str composée de caractères ASCII, la chaîne vide comprise
  • 0 <= len(chaine) <= 10^3
  • La comparaison est effectuée telle quelle : la casse, les espaces et les caractères de ponctuation sont significatifs
  • est_nbre_palindrome reçoit un entier int positif ou nul, avec 0 <= nbre <= 10^18
  • inverse_chaine renvoie une chaîne de caractères str ; est_palindrome et est_nbre_palindrome renvoient un booléen bool