Projet "Création d'un répertoire téléphonique"

Vous allez maintenant travailler sur votre premier projet de l'année : un répertoire téléphonique, mais avant de s'intéresser à ce projet proprement dit, il est nécessaire de voir quelques points supplémentaires :

L'instruction input

l'instruction input va permettre aux utilisateurs de saisir des données au clavier.

À faire vous-même 1

Testez ce programme en créant un "repl" dans votre compte Repl.it:


age=input("Quel est votre âge ? ")
			

Quel est le contenu de la variable age après avoir exécuté le programme ci-dessus (utilisez la console pour répondre à cette question) ? Quel est le type de la valeur référencée par la variable age ?


Comme vous avez pu le constater, la valeur saisie par l'utilisateur sera toujours de type "string".

À faire vous-même 2

Testez ce programme :


a=input("Entrez un nombre")
a=a+1
			

Comme vous l'avez remarqué, nous avons une erreur puisque la valeur référencée par la variable a est de type string, la ligne "a=a+1" puisque nous avons un entier avec 1 et une chaîne de caractères avec la variable a, séparés par un signe +, (le signe + correspond à une concaténation ou à une addition ?) Python n'est pas capable de gérer le problème, nous avons donc une erreur.

Pour éviter ce genre de problème, il peut être nécessaire de "transformer" notre chaîne de caractères en entier :

À faire vous-même 2

Testez ce programme :


a=input("Entrez un nombre")
a=int(a)
a=a+1
			

Écrire et lire dans un fichier externe

Il est possible de lire ou d'écrire des données dans un fichier extérieur.

La première des choses à faire est d'ouvrir notre fichier texte. Pour ce faire nous utiliserons la méthode open.


with open('nomDuFichier', 'r') as f :
			

Nous utilisons ici une structure particulière que nous n'avons encore jamais rencontrée : le "with". Ce "with" indique que nous allons utiliser un "context manager". Cette notion de "context manager" n'est pas au programme de NSI, nous n'allons donc pas l'étudier en tant que tel. Vous avez juste besoin de savoir que son utilisation permet de manipuler des fichiers externes "proprement".

La méthode open prend 2 paramètres : le nom du fichier et le mode d'ouverture du fichier :

Il existe 3 modes d'ouverture :

Une fois le fichier ouvert, il est possible d'écrire dedans (à l'aide de write) ou de lire son contenu (à l'aide de read).

À faire vous-même 3

Étudiez et testez le programme suivant :


nom=input('Entrez un mot')
with open('fichier.txt','a') as f :
	f.write(nom)
			

Le répertoire courant devrait maintenant contenir aussi un fichier « fichier.txt ». Ouvrez ce fichier (avec un éditeur de texte) et vérifiez qu'il contient bien le mot entré par l'utilisateur.


À faire vous-même 4

Étudiez et testez le programme suivant :


with open('fichier.txt','r') as f :
	ligne=f.read()
			

Que va contenir la variable ligne après l'exécution de ce programme ? Vérifiez votre réponse.


À faire vous-même 5

Écrivez un programme permettant à l'utilisateur de sauvegarder 5 noms dans un fichier texte (fichier.txt)

Vérifiez que votre programme est correct en ouvrant le fichier «fichier.txt» à l'aide d'un éditeur de texte.


Votre fichier texte devrait être illisible (les mots s'enchaînent sans aucun espace ou saut à la ligne). Il est tout à fait possible de « forcer » le saut de ligne en utilisant la suite de caractères suivante: \n (l'enchaînement des caractères \ et n entraîne un "retour chariot"). L'instruction suivante :


print('hello \n world')
			

n'affiche pas : hello \n world

mais

hello

world

Nous avons bien un saut de ligne (un "retour chariot"). Le caractère \n n'est pas affiché.

À faire vous-même 6

Modifier votre programme du "À faire vous-même 5" afin d'avoir un nom par ligne dans le fichier texte (fichier.txt).


À faire vous-même 7

Voici un programme permettant de lire le fichier texte et de ranger les différents noms entrés par l'utilisateur dans une liste, testez ce programme :


noms=[]
with open('fichier.txt','r') as f :
    for ligne in f:
        ligne=ligne.replace("\n","")
        noms.append(ligne)
			

NB : la ligne "ligne=ligne.replace("\n","")" permet d'enlever la suite de caractères \n, car même si \n n'est pas visible dans le fichier texte, elle est tout de même présente.


Commenter son code

Afin de rendre votre programme plus clair, il est nécessaire, dès que votre code dépasse une dizaine de lignes, d'introduire des commentaires. Bien sûr cela peut permettre à une personne qui n'a pas écrit le programme de comprendre ce que vous avez voulu faire, mais cela peut aussi vous permettre, quelques mois après avoir terminé d'écrire votre code, de vous "rafraîchir la mémoire".

En Python, toute ligne commençant par le caractère dièse (#) sera considérée comme un commentaire par le système interpréteur/compilateur.

Voici un exemple de programme commenté :


# la fonction monMessage permet d'afficher un message
#****************début de la fonction monMessage******************
def monMessage(nom):
	return f"Bonjour {nom}"
#****************fin de la fonction monMessage********************
# interrogation de l'utilisateur
monNom=input("Quel est votre nom ? ")
# appel de la fonction monMessage
msg=monMessage(monNom) 
			

Attention, dans l'exemple ci-dessus j'ai volontairement alourdi le programme avec des commentaires inutiles vu la simplicité de ce dernier.

Projet

En utilisant les connaissances acquises jusqu'à présent, vous allez écrire un programme de gestion de répertoire téléphonique.

Cahier des charges

Ce programme devra proposer le menu suivant à l'utilisateur :

0-quitter
1-écrire dans le répertoire
2-rechercher dans le répertoire
Votre choix ?

Si le choix est 0 : Le programme sera stoppé.

Si le choix est 1 :

L'utilisateur devra saisir un nom ou 0 s'il veut terminer la saisie (" Nom (0 pour terminer) : ") :

exemple de saisie d'un utilisateur (toto)

Si le choix est 2 :

L'utilisateur devra saisir le nom recherché (" Entrer un nom : ").

L'utilisateur est ensuite redirigé vers le menu principal.

recherche des utilisateurs (toto et titi)

Voici une démonstation en vidéo :

Les noms et numéros de téléphone devront être stockés dans un fichier texte.

Votre programme devra être composé au minimum de 3 fonctions : une fonction " menu ", une fonction " lecture " et une fonction " ecriture ".

De plus, il ne doit pas y avoir de doublons sur le nom dans le répertoire.

C'est à dire que chaque nom ne peut apparaitre qu'une fois dans le fichier texte.

Important :

Vous coderez le programme Python demandé sur votre compte repl.it dans la partie nommée Projects et le projet se nomme Répertoire téléphonique.