Page 1 of 1

Aide projet isn

Unread postPosted: 26 Apr 2015, 20:16
by ibrahim93
J'ai un gros problème pour mon projet isn, j'ai un fichier texte qui comporte des contacts a la suite des autre sous la forme:
Code: Select all
nom
telephone
date de naissance
mail


et je dois faire un programme qui est capable d'ajouter par exemple une 2eme adresse mail a un contact mais je n'arrive pas a le faire ; voila mon code:
Code: Select all
#!/usr/bin/python3
#coding : utf-8

import time


def rechercheTel(fpath,s):
  tel = ""
  mail = ""
  anniv = ""
  f = open(fpath, 'r')
  i = 0
  while 1:
    line = f.readline()
    line = line.strip()
    i += 1
    if line:
      print("%d lignes lues"%i,end='\r')
      time.sleep(0.1)
      #print(len(line))
    else:
        break
    if line==s:
       o = input("telephone")
       tel = f.readline()
       doc = list()
       doc.append(tel)
       doc.append(o)
       print(doc)
       break
  f.close()
  if len(tel)!=0:
    return(tel)
  else:
    return("Inconnu")

def ecrireTel(fpath,s):
  f = open(repertoire.txt, 'a')
  f.write(o)
  f.close()


s = input("Nom recherché?")
print("Résultat de la recherche :"+rechercheTel('repertoire.txt',s))

Re: Aide projet isn

Unread postPosted: 26 Apr 2015, 20:26
by Bisam
Trois erreurs dans ton code : une grave, une moins grave et une dernière amusante mais mineure.

L'erreur grave, c'est de croire que ta variable "o" est encore définie dans la deuxième fonction... ce n'est évidemment pas le cas.
Il est logique que tu ne puisse pas modifier le fichier ainsi.

La deuxième erreur, c'est de vouloir écrire de la même façon un objet de type liste et un objet de type chaîne de caractères dans le fichier. Python y arrivera peut-être... mais des problèmes surviendront si tu essaies de rajouter une 3ème adresse, par exemple.

La dernière erreur, plus amusante, est que tu cherches à mettre une 2ème adresse mail... et que, partout, tu l'appelles "tel".

Re: Aide projet isn

Unread postPosted: 26 Apr 2015, 20:40
by ibrahim93
la 3eme c'est parceque j'ai fait plusieur test et j'ai pas changer tel, et comment je fait pour resoudre le 2eme probleme(avec str?). et donc la variable o je dois la reecrire

Re: Aide projet isn

Unread postPosted: 26 Apr 2015, 21:01
by Bisam
Pour la première erreur, tu peux rajouter ce qu'il faut écrire en argument dans ta fonction... mais il faut quand même se placer au bon endroit dans le fichier, et ce n'est pas une mince affaire.

Pour la deuxième, je te suggère d'écrire les différents numéros de téléphones séparés par des virgules s'il y en a plusieurs. Tu pourras les récupérer dans une liste avec un line.split(",") par exemple.

Mais c'est TON projet, alors je te laisse chercher comment faire tout cela.

Re: Aide projet isn

Unread postPosted: 27 Apr 2015, 15:29
by ibrahim93
Voila j'ai changer mon code mais le probleme c'est que je n'arrive pas a ajouter des infos a un contact
Code: Select all
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Données qui pourraient être lue d'un fichier
data = open('contact.txt', 'r')

NOM, TEL, EMAIL, DATE = (0, 1, 2, 3) # indices constants

liste = data.read().splitlines()
carnet = [] # Notre carnet de contact qui est une liste de listes
for entry in liste:
    carnet.append(entry.split(';'))
     

def recherche_telephone(carnet, num_tel):
    """ Retourne le contact avec le nom fourni """
    for entry in carnet:
        if entry[NOM] == nom_tel:
            return entry
     
    return None # C'est la valeur retournée par défaut par Python si on ne fait
                # pas de return.

def affiche_contact(contact):
    print("""\
Nom: {0}
Numéro de téléphone: {1}
Adresse email: {2}
Date de naissance: {3}""".format(contact[NOM], contact[TEL], contact[EMAIL], contact[DATE]))


nom_tel = input("Entrez un nom: ")

contact_trouve = recherche_telephone(carnet, nom_tel)
if contact_trouve is None:
    print("Aucun contact trouvé avec le nom", nom_tel)
else:
    print("Ce nom a pour information:")
    affiche_contact(contact_trouve)

data.close()

Re: Aide projet isn

Unread postPosted: 27 Apr 2015, 16:24
by Bisam
data.readline() ne lit qu'une seule ligne.
Je pense que tu voulais plutôt écrire : data.readlines().
C'est pour cette raison que tu ne trouves pas de contact quand tu fais un test.

Mais je trouve que la méthode que tu utilises pour manipuler ton fichier n'est pas adaptée.
Si ton fichier est énorme, tu vas te retrouver avec une quantité effroyable d'information en mémoire (dans la variable "carnet") pour n'en garder qu'une toute petite partie (le "contact").
Il serait plus habile d'ouvrir le fichier et de chercher dedans directement dans la fonction de recherche (et aussi dans la fonction d'écriture dans le répertoire).
Le second avantage, c'est que tu libères ainsi le fichier pour quelqu'un d'autre qui voudrait l'utiliser... ou même pour toi-même si tu veux écrire dedans par exemple.

Ceci étant, ton projet m'intéresse beaucoup parce que j'aimerais faire faire le même genre de choses à mes élèves.
Pourrais-tu joindre l'énoncé à l'un de tes posts, si tu n'y vois pas d'inconvénient ?

Re: Aide projet isn

Unread postPosted: 27 Apr 2015, 16:46
by ibrahim93
l'enoncé:
Problème
Le but de ce projet est définir et d’implémenter un format de données destiné à gérer les contacts d’un utilisateur.
Étapes
Les étapes possibles du développement sont les suivantes :
0 ~ Récolte d’informations sur les formats existants.
1 ► Définition du format. Justification des choix effectués.
2 ► Implémentation du format.
3 ► Implémentation des méthodes de lecture et d’écriture.
4 ► Phase de tests.
5 ► Propositions d’extensions.
Description
Le format
Le but est de créer un format de données destiné à stocker les informations personnelles des contacts (nom, prénom,
date de naissance, adresse mels, etc.) de l’utilisateur. On pourra, par soucis de débogage, utiliser un format lisible par
l’utilisateur (fichier texte). Il est impératif de prévoir l’extensivité du format (c’est-à-dire la possibilité d’ajouter des
informations sur chaque contact) ainsi qu’une flexibilité du format :certains utilisateurs peuvent avoir plusieurs
adresses mel par exemple. Le format devra être parfaitement documenté.
On pourra consulter les liens suivants :
http ://www.w3schools.com/xml/default.asp
L’interrogation de la base des contacts
L’application doit permettre à l’utilisateur d’entrer les coordonnées des contacts (sans éditer le fichier texte contenant les
données) mais aussi de rechercher une ou plusieurs informations précises sur un ou plusieurs contacts. Les résultats des
requêtes devront pouvoir étre écrites dans un ficher HTML.
Limites du projet
On ne demande pas d’utiliser une base de données : un fichier texte structuré fera l’affaire. On ne demande pas de faire
une interface graphique pour interroger/remplir le fichier des contacts :une interface console doit être amplement
suffisante. Rien n’empêche, bien entendu, un groupe ayant terminé son projet avec ses limites d’aller au -delà de ces
limites.

Re: Aide projet isn

Unread postPosted: 27 Apr 2015, 17:14
by Bisam
Merci pour l'énoncé. Je voulais surtout voir la formulation des contraintes et des libertés.

Pour ton projet, il est à mon avis primordial que tu sépares la partie "Outils et fonctions" de la partie "Interaction avec l'utilisateur" mais à part ça, je n'ai pratiquement aucun reproche à faire sur ta façon de rédiger tes programmes.

Re: Aide projet isn

Unread postPosted: 29 Apr 2015, 21:30
by ibrahim93
J'ai un probleme avec mon code . on me renvoir l'erreur:
Traceback (most recent call last):
File "C:\Users\IBRAHIM\Documents\Python\test3.py", line 71, in <module>
addColumn(lines, 'email', 'pseudo')
File "C:\Users\IBRAHIM\Documents\Python\test3.py", line 34, in addColumn
index = lines[0].index(nameColumn)
IndexError: list index out of range

voici mon code:
Code: Select all
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
# Données qui pourraient être lue d'un fichier
f = open('contact.txt', 'r+')
 
NOM, TEL, EMAIL, DATE = (0, 1, 2, 3) # indices constants
 
liste = f.read().splitlines()
carnet = [] # Notre carnet de contact qui est une liste de listes
for entry in liste:
    carnet.append(entry.split(';'))
     
 
def recherche_telephone(carnet, num_tel):
    """ Retourne le contact avec le nom fourni """
    for entry in carnet:
        if entry[NOM] == nom_tel:
            return entry
     
    return None # C'est la valeur retournée par défaut par Python si on ne fait
                # pas de return.
 
def affiche_contact(contact):
    print("""\
Nom: {0}
Numéro de téléphone: {1}
Adresse email: {2}
Date de naissance: {3}""".format(contact[NOM], contact[TEL], contact[EMAIL], contact[DATE]))
nom_tel = input("Entrez un nom: ")
pseudo = input("pseudo")

def addColumn(lines, nameColumn, newColumn):
    index = lines[0].index(nameColumn)
    lines[0].insert(index, newColumn)
    for line in lines[1:]:
        line.insert(index, repr(pseudo))

 
test = [
        ['Nom', 'Tel', 'email', 'date'],
        ['Bob', '0606060607', 'bob@contact.fr', '02/05/1997'],
       ]
 
addColumn(test, 'email', 'pseudo')
#print(test)


 
 


 
contact_trouve = recherche_telephone(carnet, nom_tel)
if contact_trouve is None:
    print("Aucun contact trouvé avec le nom", nom_tel)
else:
    print("Ce nom a pour information:")
    affiche_contact(contact_trouve)





 
lines = []
for line in f:
    LISTES = line.split(';')
    lines.append(LISTES)
 
addColumn(lines, 'email', 'pseudo')
 
for line in lines:
    phrase = ';'.join(line)
    f.write(phrase + '\n')
 
f.close()