litchy Posté(e) le 20 avril 2022 Signaler Share Posté(e) le 20 avril 2022 Bonjour, J'envoie ceci car je ne comprend pas mon erreur. merci. module1.py titanic.csv Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut julesx Posté(e) le 20 avril 2022 E-Bahut Signaler Share Posté(e) le 20 avril 2022 Bonjour, Il y a plusieurs problèmes. D'abord, il ne faut pas convertir le fichier en liste mais le laisser en dictionnaire car tu perds la notion de correspondance entre la clé et la valeur associée (ce que tu veux faire avec personne['Embarked'], par exemple). Ensuite, les éléments additionnels dans "open" et "csv.DictReader" me semblent inutiles. Je les ai supprimé et ça marche tel quel. Enfin, tout ce qui est relatif à "titanic" doit être dans la partie with... Je te mets sous forme de code ton script avec mes modifications import csv # ouverture du fichier csv with open('titanic.csv') as fichier: titanic = csv.DictReader(fichier) compteurC = 0 compteurSurvivant = 0 for personne in titanic: if personne['Embarked'] == 'C' : if personne['Survived'] == '1': compteurC += 1 print ("Le nombre de survivant ayant embarquer a Cherbourg est de ",compteurC) Tu peux te passer des restrictions dues au "with" de la façon suivante import csv # ouverture du fichier csv fichier=open('titanic.csv', 'r') titanic = csv.DictReader(fichier) fichier.close compteurC = 0 compteurSurvivant = 0 for personne in titanic: if personne['Embarked'] == 'C' : if personne['Survived'] == '1': compteurC += 1 print("Le nombre de survivant ayant embarquer a Cherbourg est de " ,compteurC) N.B. : Il fallait aussi mettre C entre guillemets. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
litchy Posté(e) le 21 avril 2022 Auteur Signaler Share Posté(e) le 21 avril 2022 Il y a 23 heures, julesx a dit : Bonjour, Il y a plusieurs problèmes. D'abord, il ne faut pas convertir le fichier en liste mais le laisser en dictionnaire car tu perds la notion de correspondance entre la clé et la valeur associée (ce que tu veux faire avec personne['Embarked'], par exemple). Ensuite, les éléments additionnels dans "open" et "csv.DictReader" me semblent inutiles. Je les ai supprimé et ça marche tel quel. Enfin, tout ce qui est relatif à "titanic" doit être dans la partie with... Je te mets sous forme de code ton script avec mes modifications import csv # ouverture du fichier csv with open('titanic.csv') as fichier: titanic = csv.DictReader(fichier) compteurC = 0 compteurSurvivant = 0 for personne in titanic: if personne['Embarked'] == 'C' : if personne['Survived'] == '1': compteurC += 1 print ("Le nombre de survivant ayant embarquer a Cherbourg est de ",compteurC) Tu peux te passer des restrictions dues au "with" de la façon suivante import csv # ouverture du fichier csv fichier=open('titanic.csv', 'r') titanic = csv.DictReader(fichier) fichier.close compteurC = 0 compteurSurvivant = 0 for personne in titanic: if personne['Embarked'] == 'C' : if personne['Survived'] == '1': compteurC += 1 print("Le nombre de survivant ayant embarquer a Cherbourg est de " ,compteurC) N.B. : Il fallait aussi mettre C entre guillemets. Merci mais maintenant j'ai un autre problème : def survivantsClasse(classe): """ classe -- '1' , '2' ou '3' renvoie la proportion de survivants de la classe demander . """ CClasse = 0 #on crées 2 compteur CSurviant = 0 for i in titanic: if i['Pclass'] == 'classe': CClasse += 1 if i['Survived'] == '1': CSurviant += 1 return (CSurviant/CClasse*100) L'erreur me dit que ça divise par 0 mais je ne vois pas pourquoi. C'est toujours avec le titanic Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut julesx Posté(e) le 21 avril 2022 E-Bahut Signaler Share Posté(e) le 21 avril 2022 Bonjour, Inutile de citer l'intégralité de mes messages, ça surcharge pour rien ta réponse. Ne le fais que si tu as quelque chose à commenter dedans, mais même dans ce cas, ne cite que la partie incriminée. Pour en revenir à ton problème, a priori, il vient de l'instruction if i['Pclass'] == 'classe':, il faut enlever les guillemets if i['Pclass'] == classe: mais les mettre dans l'appel print(survivantsClasse('1')) par exemple. Mais ! J'ai fait des essais et ça marche bien avec le script suivant import csv # ouverture du fichier csv fichier=open('titanic.csv', 'r') titanic = csv.DictReader(fichier) fichier.close def survivantsClasse(classe): """ classe -- '1' , '2' ou '3' renvoie la proportion de survivants de la classe demander . """ CClasse = 0 #on crées 2 compteur CSurviant = 0 for i in titanic: if i['Pclass'] == classe: CClasse += 1 if i['Survived'] == '1': CSurviant += 1 return (CSurviant/CClasse*100) print(survivantsClasse('1')) Par contre, si je rajoute la partie précédente , ça ne va plus. Pareil, dans le script avec "with", ça ne fonctionne pas non plus. Pour faire cette partie, tu la mets à la suite de l'autre ou tu crées un nouveau script ? Cela dit, je suis loin d'être un spécialiste de Python, je bricole, quand ça marche, c'est bien, mais quand il y a un problème un peu compliqué, je ne sais pas l'expliquer, donc pas le résoudre. litchy a réagi à ceci 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut julesx Posté(e) le 21 avril 2022 E-Bahut Signaler Share Posté(e) le 21 avril 2022 Bonsoir, Après différents essais, j'ai constaté, sans pouvoir l'expliquer, cf. mon message précédent, qu'il fallait ré-initiaiiser le fichier .CSV avant chaque appel. Sinon, à la procédure suivante, c'est comme si ce fichier n'existait plus. Un spécialiste ? En tout cas, ce script avec 2 définitions de fonctions donne les résultats attendus. import csv def survivantsEmbarques(): compteurC = 0 compteurSurvivant = 0 for i in titanic: if i['Embarked'] == 'C' : if i['Survived'] == '1': compteurC += 1 return compteurC def survivantsClasse(classe): CClasse = 0 #on crées 2 compteur CSurviant = 0 for i in titanic: if i['Pclass'] == classe: CClasse += 1 if i['Survived'] == '1': CSurviant += 1 return CSurviant/CClasse*100 # ouverture du fichier csv fichier=open('titanic.csv') titanic = csv.DictReader(fichier) fichier.close print ("Le nombre de survivant ayant embarqués à Cherbourg est de ",survivantsEmbarques()) # ouverture du fichier csv fichier=open('titanic.csv') titanic = csv.DictReader(fichier) fichier.close print("Le nombre de survivant par classe est de ",int(survivantsClasse('1'))) Il y a surement une possibilité de passer outre à l'ouverture multiple, mais ça dépasse mes compétences ! Bonne soirée. litchy a réagi à ceci 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
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.