π
<-

Aide projet isn

Discussions scientifiques et scolaires

Aide projet isn

Unread postby ibrahim93 » 26 Apr 2015, 20:16

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))
Last edited by Excale on 26 Apr 2015, 23:27, edited 1 time in total.
User avatar
ibrahim93
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Level up: 46.7%
 
Posts: 5
Joined: 13 Oct 2014, 20:35
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: terminal s

Re: Aide projet isn

Unread postby Bisam » 26 Apr 2015, 20:26

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".
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Aide projet isn

Unread postby ibrahim93 » 26 Apr 2015, 20:40

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
Last edited by ibrahim93 on 26 Apr 2015, 20:47, edited 1 time in total.
User avatar
ibrahim93
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Level up: 46.7%
 
Posts: 5
Joined: 13 Oct 2014, 20:35
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: terminal s

Re: Aide projet isn

Unread postby Bisam » 26 Apr 2015, 21:01

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.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Aide projet isn

Unread postby ibrahim93 » 27 Apr 2015, 15:29

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()
Last edited by ibrahim93 on 27 Apr 2015, 16:15, edited 1 time in total.
User avatar
ibrahim93
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Level up: 46.7%
 
Posts: 5
Joined: 13 Oct 2014, 20:35
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: terminal s

Re: Aide projet isn

Unread postby Bisam » 27 Apr 2015, 16:24

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 ?
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Aide projet isn

Unread postby ibrahim93 » 27 Apr 2015, 16:46

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.
Last edited by Excale on 27 Apr 2015, 17:02, edited 1 time in total.
User avatar
ibrahim93
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Level up: 46.7%
 
Posts: 5
Joined: 13 Oct 2014, 20:35
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: terminal s

Re: Aide projet isn

Unread postby Bisam » 27 Apr 2015, 17:14

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.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Aide projet isn

Unread postby ibrahim93 » 29 Apr 2015, 21:30

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()
User avatar
ibrahim93
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Level up: 46.7%
 
Posts: 5
Joined: 13 Oct 2014, 20:35
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: terminal s


Return to Maths, physique, informatique et autre...

Who is online

Users browsing this forum: ClaudeBot [spider] and 5 guests

-
Search
-
Social TI-Planet
-
Featured topics
Grand Concours 2024-2025 - Programmation Python
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
800 utilisateurs:
>779 invités
>15 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)