Gabyder Posté(e) le 31 octobre 2020 Signaler Posté(e) le 31 octobre 2020 Bonjour à tous . J'ai un exercice en python et je ne le comprends pas. Je vous remerci de m'aider. -Créez un fichier texte que vous utiliserez comme base de données, • La base de données contiendra les noms des clients d'un site marchand. -Sur une connaissance pour chaque client de son nom, son prénom, son genre, son âge et son adresse. • Le programme sera disponible pour les clients de la base de donnés dans une source d'âge minimum ou maximum, qui indique les noms et prénoms des clients correspondants et leurs noms (Voir exemples page suivante). • On souhaite une gestion des erreurs de frappes. Si sur frappe une lettre au lieu d'un chiffre, programmez-le ne doit pas «planter» (Voir exemples page suivante). Aide: utilisez la fonction "age.isdigit ()". A Réaliser l'algorithme et ensuite le programme en Python
Leonarddoo Posté(e) le 2 novembre 2020 Signaler Posté(e) le 2 novembre 2020 Salut, tu as déjà commencé à faire quelque chose ou rien du tout ?
Gabyder Posté(e) le 2 novembre 2020 Auteur Signaler Posté(e) le 2 novembre 2020 il y a 5 minutes, Leonarddoo a dit : Salut, tu as déjà commencé à faire quelque chose ou rien du tout ? Oui j'ai commencer le début du programme , mais je suis bloquer ensuite (je ne sais pas si c'est correct): monfichier= open('site.txt','r') contenu= monfichier.read() a=int(input("Indiquer l'age: ")) t=1 for i in range(t) : print("") print("-La liste des personnes ayant à ",a," ans (taper 1)") print("-La liste des personnes dont l'age est supérieur à ",a," ans (taper 2)") print("-La liste des personnes dont l'age est inférieur à ",a," ans (taper 3)") x=int(input("Votre choix est le numéro: ")) for age in monfichier: mot=age.isdigit(x) if (a==mot[4]): contenu+=mot[0]+ " "+mot[1]+ " "+mot[2]+ " "+mot[3]+ " "+mot[4]
E-Bahut julesx Posté(e) le 3 novembre 2020 E-Bahut Signaler Posté(e) le 3 novembre 2020 Bonjour, Leonarddoo me confirmera ou m'infirmera, mais, pour moi, l'introduction des données d'age et de choix ne sont pas corrects. En postulant que l'age doit être compris entre deux valeurs extrêmes, moi, j'écrirais pour cette partie : age="a" while not age.isdigit() or age.isdigit and (int(age)<20 or int(age)>60): age=str(input("Indiquer l'age: ")) age=int(age) print("\n Indiquer si vous voulez trouver :\n", "- La liste des personnes ayant",age,"ans (taper 1)\n", "- La liste des personnes dont l'age est supérieur à",age,"ans (taper 2)\n", "- La liste des personnes dont l'age est inférieur à",age,"ans (taper 3)\n") numero="n" while not numero.isdigit() or numero.isdigit and (int(numero)<=0 or int(numero)>=4): numero=str(input("Votre choix est le numéro :")) numero=int(numero) Je ne peux pas aller plus loin car je ne sais pas comment est structuré ton fichier texte. Pour que quelqu'un puisse t'aider, il faudrait que tu le copies dans ton fil.
Gabyder Posté(e) le 3 novembre 2020 Auteur Signaler Posté(e) le 3 novembre 2020 Il y a 1 heure, julesx a dit : Bonjour, Leonarddoo me confirmera ou m'infirmera, mais, pour moi, l'introduction des données d'age et de choix ne sont pas corrects. En postulant que l'age doit être compris entre deux valeurs extrêmes, moi, j'écrirais pour cette partie : age="a" while not age.isdigit() or age.isdigit and (int(age)<20 or int(age)>60): age=str(input("Indiquer l'age: ")) age=int(age) print("\n Indiquer si vous voulez trouver :\n", "- La liste des personnes ayant",age,"ans (taper 1)\n", "- La liste des personnes dont l'age est supérieur à",age,"ans (taper 2)\n", "- La liste des personnes dont l'age est inférieur à",age,"ans (taper 3)\n") numero="n" while not numero.isdigit() or numero.isdigit and (int(numero)<=0 or int(numero)>=4): numero=str(input("Votre choix est le numéro :")) numero=int(numero) Je ne peux pas aller plus loin car je ne sais pas comment est structuré ton fichier texte. Pour que quelqu'un puisse t'aider, il faudrait que tu le copies dans ton fil. Bonjour, c'est tres gentil de m'aider! Et j'ai une question pourquoi avez-vous mis l'age entre 20 et 60 ans? Car l'age peut etre 5 ans comme 80 ans. Voici comment est constituer mon fichier texte. prénom, nom, sexe, age, et adresse
E-Bahut julesx Posté(e) le 3 novembre 2020 E-Bahut Signaler Posté(e) le 3 novembre 2020 J'ai mis "au pif" entre 20 et 60 ! C'était juste pour avoir une fourchette, pour éviter des réponses comme -50 ou +1000. Tu mets évidemment ce que tu veux. Tu as essayé mon script ? Par contre, je ne suis qu'un "amateur" dans ce domaine. Comment est-ce qu'on structure les données du fichier texte ?
Gabyder Posté(e) le 3 novembre 2020 Auteur Signaler Posté(e) le 3 novembre 2020 à l’instant, julesx a dit : J'ai mis "au pif" entre 20 et 60 ! C'était juste pour avoir une fourchette, pour éviter des réponses comme -50 ou +1000. Tu mets évidemment ce que tu veux. Tu as essayé mon script ? Par contre, je ne suis qu'un "amateur" dans ce domaine. Comment est-ce qu'on structure les données du fichier texte ? votre script pour le début du programme est super , il empêche le programme de planter si l'on met par exemple "p" à la place de 25 . Pour le fichier texte nous mettons les données les une après les autres et nous sautons d'une ligne pour un autre individu. Mais c'est la suite de l'exercice qui me pose problème , je ne sais pas comment écrire le programme pour qu'il affiche les personnes qui son concernés par l'âge demander.
E-Bahut julesx Posté(e) le 3 novembre 2020 E-Bahut Signaler Posté(e) le 3 novembre 2020 il y a 7 minutes, Gabyder a dit : votre script pour le début du programme est super , il empêche le programme de planter si l'on met par exemple "p" à la place de 25 . C'est demandé dans l'énoncé. J'ai un peu ramé pour trouver la bonne démarche. Cela dit, il y a peut-être plus simple, mais, comme dit, je ne suis pas spécialiste. il y a 9 minutes, Gabyder a dit : Pour le fichier texte nous mettons les données les une après les autres et nous sautons d'une ligne pour un autre individu. Et comment on identifie les différents termes ? Parce que, pour moi, c'est là le problème, il faut "sortir" de chaque ligne de données la partie age pour la comparer à la valeur choisie. Ensuite, c'est juste une histoire de if, elif, else pour les trois choix possibles.
Gabyder Posté(e) le 3 novembre 2020 Auteur Signaler Posté(e) le 3 novembre 2020 il y a 35 minutes, julesx a dit : C'est demandé dans l'énoncé. J'ai un peu ramé pour trouver la bonne démarche. Cela dit, il y a peut-être plus simple, mais, comme dit, je ne suis pas spécialiste. Et comment on identifie les différents termes ? Parce que, pour moi, c'est là le problème, il faut "sortir" de chaque ligne de données la partie age pour la comparer à la valeur choisie. Ensuite, c'est juste une histoire de if, elif, else pour les trois choix possibles. Merci !!j'essaierais de faire avec ceci
E-Bahut julesx Posté(e) le 3 novembre 2020 E-Bahut Signaler Posté(e) le 3 novembre 2020 OK, si tu veux, en cas de problème, poste ton script.
E-Bahut Denis CAMUS Posté(e) le 3 novembre 2020 E-Bahut Signaler Posté(e) le 3 novembre 2020 Bonsoir, Ça marcherait pas en utilisant des listes et des indices ? L'âge serait l'indice [3]. http://python.physique.free.fr/listes_et_tableaux.html
Leonarddoo Posté(e) le 3 novembre 2020 Signaler Posté(e) le 3 novembre 2020 Me revoilà, bon ba j'ai vu que vous l'avez aider Mais ouai si jamais tu as re-besoin d'aide on est là mais le mieux c'est que tu montre ce que tu as déjà fait et là où tu bloque.
E-Bahut julesx Posté(e) le 4 novembre 2020 E-Bahut Signaler Posté(e) le 4 novembre 2020 Il y a 13 heures, Denis CAMUS a dit : Ça marcherait pas en utilisant des listes et des indices ? Bonjour Denis, J'avais aussi envisagé cette possibilité. La seule chose qui me chiffonnait, c'est qu'on part d'un fichier texte, qu'il faut commencer à transformer en liste et je me demandais si l'élève avait une "solution miracle" car l'énoncé parle aussi de "base de donnée". Bon, on verra bien s'il y a un retour.
E-Bahut julesx Posté(e) le 4 novembre 2020 E-Bahut Signaler Posté(e) le 4 novembre 2020 @Denis CAMUS Juste pour info, ci-joint ce que ça donnerait avec une liste de listes fichier.txt
Gabyder Posté(e) le 5 novembre 2020 Auteur Signaler Posté(e) le 5 novembre 2020 Il y a 22 heures, julesx a dit : @Denis CAMUS Juste pour info, ci-joint ce que ça donnerait avec une liste de listes fichier.txt 1 Ko · 3 téléchargements malheureusement on doit utiliser un fichier texte Le 03/11/2020 à 21:49, Leonarddoo a dit : Me revoilà, bon ba j'ai vu que vous l'avez aider Mais ouai si jamais tu as re-besoin d'aide on est là mais le mieux c'est que tu montre ce que tu as déjà fait et là où tu bloque. Le 03/11/2020 à 21:47, Denis CAMUS a dit : Bonsoir, Ça marcherait pas en utilisant des listes et des indices ? L'âge serait l'indice [3]. http://python.physique.free.fr/listes_et_tableaux.html Bonjour à tous! J'ai essayer de faire la suite mais je n'y suis pas parvenu. J'ai essayé ceci mais rien ne s'affiche: Auriez-vous des solution? monfichier= open('site.txt','r') contenu= monfichier.read() age="a" while not age.isdigit() or age.isdigit and (int(age)<10 or int(age)>90): age=str(input("Indiquer l'age: ")) age=int(age) print("\n Indiquer si vous voulez trouver :\n", "- La liste des personnes ayant",age,"ans (taper 1)\n", "- La liste des personnes dont l'age est supérieur à",age,"ans (taper 2)\n", "- La liste des personnes dont l'age est inférieur à",age,"ans (taper 3)\n") numero="n" while not numero.isdigit() or numero.isdigit and (int(numero)<=0 or int(numero)>=4): numero=str(input("Votre choix est le numéro :")) numero=int(numero) if numero==1: for ligne in monfichier: mot=ligne.split("*") if age==mot[3]: print(mot[0]+" "+mot[1]+" a "+str(mot[3])+" ans") elif numero==2: for ligne in monfichier: mot=ligne.split("*") if mot[3]<age: print(mot[0]+" "+mot[1]+" a "+str(mot[3])+" ans") else: for ligne in monfichier: mot=ligne.split("*") if mot[3]>age: print(mot[0]+" "+mot[1]+" a "+str(mot[3])+" ans") site.txt
Gabyder Posté(e) le 5 novembre 2020 Auteur Signaler Posté(e) le 5 novembre 2020 il y a 43 minutes, julesx a dit : Bonjour, Pour moi, ça ne marche pas pour les raisons suivantes. * Il faut travailler avec la variable contenu, pas avec monfichier * Python ne sait pas quoi faire avec l'instruction for ligne in monfichier, donc, a fortiori, pas avec mot tel que tu le définis. Je ne sais pas si ce qui suit est le plus simple, mais cela a l'avantage de fonctionner (à noter que tu as fait une inversion de signes < et > dans les choix) monfichier= open('site.txt','r') contenu= monfichier.read() ligne=contenu.split("\n") crée une liste de lignes age="a" while not age.isdigit() or age.isdigit and (int(age)<10 or int(age)>90): age=str(input("Indiquer l'age: ")) age=int(age) print("\n Indiquer si vous voulez trouver :\n", "- La liste des personnes ayant",age,"ans (taper 1)\n", "- La liste des personnes dont l'age est supérieur à",age,"ans (taper 2)\n", "- La liste des personnes dont l'age est inférieur à",age,"ans (taper 3)\n") numero="n" while not numero.isdigit() or numero.isdigit and (int(numero)<=0 or int(numero)>=4): numero=str(input("Votre choix est le numéro :")) numero=int(numero) if numero==1: for i in range(len(ligne)): mot=ligne.split(" ") transforme chaque ligne en liste de mots if age==int(mot[3]): comme mot[3] est un str, on le transforme en int print(mot[0]+" "+mot[1]+" a "+str(mot[3])+" ans") elif numero==2: for i in range(len(ligne)): mot=ligne.split(" ") transforme chaque ligne en liste de mots if int(mot[3])>age: comme mot[3] est un str, on le transforme en int print(mot[0]+" "+mot[1]+" a "+str(mot[3])+" ans") else: for i in range(len(ligne)): mot=ligne.split(" ") transforme chaque ligne en liste de mots if int(mot[3])<age: comme mot[3] est un str, on le transforme en int print(mot[0]+" "+mot[1]+" a "+str(mot[3])+" ans") Tu regardes et tu commentes. j'ai compris la démarche , logique et mes erreurs. Mais quand je lance le programme et arrive après la demande du nombre. Sa affiche Indiquer l'age: 25 Indiquer si vous voulez trouver : - La liste des personnes ayant 25 ans (taper 1) - La liste des personnes dont l'age est supérieur à 25 ans (taper 2) - La liste des personnes dont l'age est inférieur à 25 ans (taper 3) Votre choix est le numéro :1 line 19, in <module> mot=ligne.split(" ") AttributeError: 'list' object has no attribute 'split' >>>
E-Bahut julesx Posté(e) le 5 novembre 2020 E-Bahut Signaler Posté(e) le 5 novembre 2020 Oui, l'éditeur supprime les éléments le i entre crochets et considère cette écriture comme le passage en italique pour la suite. Du coup, je supprime le script précédent. Je te joins un fichier texte, en espérant que ça résout le problème.script.txt
Gabyder Posté(e) le 5 novembre 2020 Auteur Signaler Posté(e) le 5 novembre 2020 il y a 12 minutes, julesx a dit : Oui, l'éditeur supprime les éléments le i entre crochets et considère cette écriture comme le passage en italique pour la suite. Du coup, je supprime le script précédent. Je te joins un fichier texte, en espérant que ça résout le problème.script.txt D'accord , problème résolu . En tout cas merci beaucoup de m'avoir aidé . Bonne soirée!
E-Bahut julesx Posté(e) le 5 novembre 2020 E-Bahut Signaler Posté(e) le 5 novembre 2020 OK, bonne soirée également.
Gabyder Posté(e) le 8 novembre 2020 Auteur Signaler Posté(e) le 8 novembre 2020 Le 05/11/2020 à 18:21, julesx a dit : OK, bonne soirée également. Bonsoir !desolé de renvoyer un message mais j'avais une petite question sur le programme , comment code ton la dernière ligne du programme , celle qui rappelle le nombre de personnes concerné?
E-Bahut julesx Posté(e) le 8 novembre 2020 E-Bahut Signaler Posté(e) le 8 novembre 2020 A priori, je ne pense pas qu'il y a une information dans le script existant qui correspond au décompte. Donc, pour moi, il faut rajouter dans chacun des 3 cas un compteur qu'on initialise à zéro au départ et qu'on incrémente à chaque fois qu'une réponse est bonne, du style if int(mot[3])>age: print(mot[0]+" "+mot[1]+" a "+str(mot[3])+" ans") compteur=compteur +1 et, à la fin, on affiche sa valeur avec le message correspondant. Tu essaies et, au cas où il y aurait un problème, tu reviens sur ce fil.
Gabyder Posté(e) le 8 novembre 2020 Auteur Signaler Posté(e) le 8 novembre 2020 il y a 4 minutes, julesx a dit : A priori, je ne pense pas qu'il y a une information dans le script existant qui correspond au décompte. Donc, pour moi, il faut rajouter dans chacun des 3 cas un compteur qu'on initialise à zéro au départ et qu'on incrémente à chaque fois qu'une réponse est bonne, du style if int(mot[3])>age: print(mot[0]+" "+mot[1]+" a "+str(mot[3])+" ans") compteur=compteur +1 et, à la fin, on affiche sa valeur avec le message correspondant. Tu essaies et, au cas où il y aurait un problème, tu reviens sur ce fil. c'est ce que j'avais fait mais quand je lance sa ne donne pas le rendu voulu, sa affiche comme ceci: Votre choix est le numéro :1 Louis Douet a 25 ans Il y a 1 personnes dans la liste ayant 25 ans. Loic Peron a 25 ans Il y a 2 personnes dans la liste ayant 25 ans. au lieu de: Louis Douet a 25 ans Loic Peron a 25 ans Il y a 2 personnes dans la liste ayant 25 ans. erreur d'espaces excusez moi jai trouver l'erreur
E-Bahut julesx Posté(e) le 8 novembre 2020 E-Bahut Signaler Posté(e) le 8 novembre 2020 Donc, c'est bon ?
Gabyder Posté(e) le 8 novembre 2020 Auteur Signaler Posté(e) le 8 novembre 2020 il y a 32 minutes, julesx a dit : Donc, c'est bon ? oui c'est bon , merci!
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.