Vous êtes sur la page 1sur 5

Représentation des données

Durée : 1h
Algorithmique Coef : 2
CORRECTION
DS 3 Eds Première NSI Page 1 / 5

Nom : Prénom :
I – Recherche d’un mot dans un fichier.
L’exemple ci-contre montre comment
rechercher une chaîne de caractères dans un
fichier.

Nom du fichier : temp.txt


Chaîne de caractères recherchée : « blabla ».

➢ Ecrire en Python la fonction « VerifChaine(f, c) » où f est une chaîne de caractères contenant le nom du
fichier, et « c » est la chaîne de caractères recherchée. En retour, la fonction donnera comme résultat
« True » si la chaîne est trouvée sinon le résultat sera « False ». (On n’oubliera pas de spécifier la fonction).

➢ Ecrire le programme principal demandant à l’utilisateur un nom de fichier et la chaine recherchée. Vous
devrez respecter les noms des variables utilisées. (Voir ci-dessous) :

Contenu Nom de la variable


Nom du fichier fichier
Chaîne de caractères recherchée chaine
Lors de l’exécution du programme, on affichera dans la console « Chaine trouvée » ou « Chaine absente ! ».
def VerifChaine(f, c):
"""
Recherche la chaine de caractères c dans le fichier f
f : Fichier texte. (Type : file)
c : Chaine de caractères à rechercher. (Type : str)
return : True si chaine trouvée sinon false. (Type : bool)
"""
with open(f) as temp_f:
datafile = temp_f.readlines()
for line in datafile:
if c in line:
return True
return False
# ***************************************************************************

# ****************** PROGRAMME PRINCIPAL ************************************


fichier = input("Entrer le nom du fichier : ")
chaine = input("Entrer la chaine de caractères recherchée : ")
if VerifChaine(fichier, chaine):
print("Chaine trouvée")
else:
print("Chaine absente !")
# ***************************************************************************
Représentation des données
Durée : 1h
Algorithmique Coef : 2
CORRECTION
DS 3 Eds Première NSI Page 2 / 5

II – Algorithme de Luhn.
L’ algorithme de Luhn ici présenté, permet de déterminer si un numéro de carte bleu est valide.

S0
Afficher (« Entrer le numéro à 16 chiffres de la carte bleue »)
Saisir L # L est une liste
Pour i allant de 0 à 7
L[2*i]  2*L[2*i]
Si L[2*i] > 9 Alors
L[2*i]  L[2*i] – 9
Fin Si
Fin Pour
Pour i allant de 0 à 15
S  S + L[i]
Fin Pour
Si S%10 = 0 Alors # reste de la division euclidienne de S par 10
Afficher (« Le numéro est valide »)
Sinon
Afficher (« Le numéro est incorrect »)

➢ Retranscrire cet algorithme en langage Python.


S = 0
L = []
num = input("Entrer le numéro à 16 chiffres de la carte bleu : ")
for c in num:
L.append(int(c))
for i in range(0,8):
L[2*i] = 2*L[2*i]
if L[2*i] > 9 :
L[2*i] = L[2*i]-9
for i in range(0,16):
S = S + L[i]
if S%10 == 0 :
print("Le numéro est valide")
else:
print("Le numéro est incorrect")
Représentation des données
Durée : 1h
Algorithmique Coef : 2
CORRECTION
DS 3 Eds Première NSI Page 3 / 5

III – Calcul clé du NIR.


Le numéro NIR (Numéro d’Inscription au Répertoire) est le numéro d’inscription au répertoire national
d’identification des personnes physiques, et il est identique au numéro de sécurité sociale.

La carte vitale ci-contre montre la


signification des différents champs.

Attention : La clé de contrôle (22) ne


correspond pas au numéro de sécurité
sociale présenté.

Un extrait de la documentation python sur les listes est donné ci-dessous :

Pour les réponses aux questions vous pouvez compléter le code en annexe.
Représentation des données
Durée : 1h
Algorithmique Coef : 2
CORRECTION
DS 3 Eds Première NSI Page 4 / 5

3.1 – Ecrire en python un programme qui demande à l’utilisateur son numéro de sécurité sociale saisi sans espace.
Cela représente donc au total 15 caractères. Le numéro sera stocké dans une variable nommée « nss » de type
string.

3.2 – Ecrire une fonction « AnalyseSS(n) » ou « n » est une chaîne de caractères représentant le numéro de sécurité
sociale. Cette fonction devra vérifier que le numéro SS est bien composé de 15 caractères, puis afficher dans la
console les différents champs selon le modèle ci-dessous :

Entrer votre numéro SS sans espace : 294037512000522


Sexe : Féminin
Année de naissance : 94
Mois de naissance : 03
Département de naissance : 75
Code commune INSEE : 120
N° ordre naissance : 005

3.3 – Ecrire une fonction python « CalculCle(n) » ou « n » est une chaîne de caractères représentant le numéro de
sécurité sociale. Cette fonction devra déterminer la clé selon l’algorithme ci-dessous.

Clé = 97 – (numéro NIR Mod 97).


On précise que le numéro NIR ne contient pas la clé. Dans notre exemple le NIR sera « 2940375120005 ».

La fonction devra déterminer la clé puis afficher dans la console la valeur de celle-ci si elle est valide sinon afficher
« Erreur dans la saisie du numéro ».
Représentation des données
Durée : 1h
Algorithmique Coef : 2
CORRECTION
DS 3 Eds Première NSI Page 5 / 5

ANNEXE
# -*- coding: utf-8 -*-
# ************************************************************
# * Lycée Saint Joseph PIERRE ROUGE *
# * Première - NSI *
# * Auteur : W. SOLER Version : 1 *
# * *
# * Fichier : DS3_Exo3.py *
# * *
# * Description : Calcul de la clé du numéro NIR *
# ************************************************************

# ********************** Fonction AnalyseSS *********************************


def AnalyseSS(n):
"""
Vérifie le nombre de caractères et identifie les champs en les affichants
dans la console.
- n : Numéro de SS. (Type : str)
- retour : none
"""
if len(n)==15: #Si le numéro est valide on extrait les champs
if n[0]=="1": #Sexe masculin
print("Sexe : Masculin")
else:
print("Sexe : Féminin")
print("Année de naissance : ",n[1:3])
print("Mois de naissance : ",n[3:5])
print("Département de naissance : ",n[5:7])
print("Code commune INSEE :", n[7:10])
print("N° ordre naissance : ", n[10:13])
else:
print("Numéro non valide")
# ***************************************************************************

# ********************** Fonction CalculCle *********************************


def CalculCle(n):
"""
Détermine la clé du NIR et vérifie la conformité de la saisie utilisateur
- n : Numéro de SS. (Type : str)
- retour : none
"""
nir = int(n[0:13]) # Extrait le NIR sans la clé
cle = 97 - (nir%97) # Calcul de la clé
if cle == int(n[13:]): #On vérifie la correspondance avec la clé saisie par
l'utilisateur
print("Clé de contôle : ", cle)
else:
print("Erreur dans la saisie du numéro !")
# ***************************************************************************

# ****************** PROGRAMME PRINCIPAL ************************************


nss = input("Entrer votre numéro SS sans espace : ")
#nss="294037512000522"
AnalyseSS(nss)
CalculCle(nss)
# ***************************************************************************

Vous aimerez peut-être aussi