Aller au contenu

Programmation python


Messages recommandés

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
 
 
 
 
 

20201026_163944.jpg

Lien à poster
Partager sur d’autres sites
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]

Lien à poster
Partager sur d’autres sites
  • E-Bahut

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.

Lien à poster
Partager sur d’autres sites
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

20201103_170150[1].jpg

Modifié par Gabyder
Lien à poster
Partager sur d’autres sites
  • E-Bahut

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 ?

Lien à poster
Partager sur d’autres sites
à 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.

Lien à poster
Partager sur d’autres sites
  • E-Bahut
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.

Lien à poster
Partager sur d’autres sites
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

 

Lien à poster
Partager sur d’autres sites
  • E-Bahut
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.

Lien à poster
Partager sur d’autres sites
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

Modifié par Gabyder
Lien à poster
Partager sur d’autres sites
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'
>>> 

 

Modifié par Gabyder
Lien à poster
Partager sur d’autres sites
  • E-Bahut

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

 

Lien à poster
Partager sur d’autres sites
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!

Lien à poster
Partager sur d’autres sites
  • E-Bahut

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.

Lien à poster
Partager sur d’autres sites
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

 

Lien à poster
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...
spam filtering