Bonsoir
(desolé je sais pas comment importer un script de code )
est ce que quelqu'un peut m'expliquer la ligne 34 svp?
-----
Bonsoir
(desolé je sais pas comment importer un script de code )
est ce que quelqu'un peut m'expliquer la ligne 34 svp?
Ligne 34, On fait la somme des coefficients pour calculer une moyenne pondérée. Et pour cela vu que chaque note est associée à une matière et que chaque matière a un coefficient, on va le chercher.
Apprendre à copier/coller le code et le mettre entre balises CODE serait la moindre des choses.
Bonjour
mon problème c'est que c'est Note qui a comme attribut matiere et non note
de même c'est Matiere qui a comme attribut coef et non matiere
Non, ton problème c'est que tu confonds le nom d'une classe avec le nom d'un attribut (ou variable d'instance) ou d'une variable.
La variable note est utilisée pour parcourir une liste qui contient des objets qui sont des instances de la classe Note.
Elle accède pour chacune de ces instances à l'attribut "matiere" défini par la classe Note.
Cet attribut est une instance de la classe Matiere. Laquelle définit un attribut coeff.
Pour poster du code:
Crochet code crochet
Code...
........
Crochet slash code crochet (crochets ouverts -fermés)
En clair:
[code]{code ici}[/code]
...
Liste des BBcode du forum ici
Dernière modification par Ikhar84 ; 15/01/2020 à 10h24.
J'ai glissé Chef !
Ou plus simplement bouton # dans l'éditeur avancé.
C'est écrit dans les règles d'usage situées en haut de la page.
goaoute, Ikhar84 et jack merci pour vos informations complémentaire; je m'en servirai la prochaine fois
pm42 est ce que si j'avais remplacé matière par un quelconque attribut autre que ce dernier il serait de type Matiere aussi?
C'est pour cela qu'il vaut mieux éviter de faire porter le même nom (à la majuscule prés) à une classe et une variable qui en est son instance....
Remplaces matiere (sans la majuscule) par le nom d'une matière (français, maths, etc...), et note (pareil, sans majuscule), par une note (le nom d'une interro par exemple: note1, note_POO, etc...) et là la différence te sautera aux yeux ...
Edit: vu comme les classes sont conçues, ca n'aura pas grand sens, mais ça aura le mérite de bien faire comprendre la distinction entre Classe et Instance...
Dernière modification par Ikhar84 ; 16/01/2020 à 12h08.
J'ai glissé Chef !
En effet. Ceci dit, c'est bien pratique souvent et c'est pour cela qu'on met des majuscules aux classes : pour pouvoir utiliser le même nom dans des variables en minuscules.
Re
L'astuce à mon époque (étudiant), c'était d'accoler les determinants un/une :
Pas joli mais radical...Code:Matiere uneMatiere Note uneNote
Edit:
Oui c'est bien pratique quand on maîtrise bien la conception et qu'on met en place une convention de nommage claire et stricte...
Dernière modification par Ikhar84 ; 16/01/2020 à 12h17.
J'ai glissé Chef !
J'ai fait la même chose mais uniquement pour les arguments passé au constructeur ou aux setters afin d'éviter le this.xxx = xxx qui n'est pas très grave mais on prend le risque à un moment d'utiliser la variable passée en argument et pas la variable d'instance.
Perso, je trouve cela un peu lourd d'utiliser toute forme de préfix, suffixe ou this. Cela rend le code moins lisible alors que la distinction par majuscules/minuscules marche plutôt bien.
Ici, le problème de cedric125 me semble plus être le fait qu'il ne maitrise pas encore les concepts de la programmation objet.
Je suis bien d'accord.
Quelquefois (dans un gros projet), on peut se retrouver face à ce problème de nommage, après des heures de "from scratch" pour "gagner du temps", heuresement que les ide modernes veuillent ...
Je suis aussi d'accord, il lui faut déjà comprendre la différence entre le moule et le gâteau dans un premier temps...
J'ai glissé Chef !
Ligne 36, indentation.
pour recentré un peu ma problématique :comment mon programme fait pour prendre matiere comme instance de la classe Matière vu que je ne l'ai pas (en tout cas pas explicitement défini matiere comme de type Matiere) ou encore comment prend t_il matiere comme comme instance de la classe Matiere et non par exemple vnoteEnvoyé par pm42Elle accède pour chacune de ces instances à l'attribut "matiere" défini par la classe Note.
Cet attribut est une instance de la classe Matiere. Laquelle définit un attribut coeff.
En vérité je viens de commencer la programmation orienté objet tout seul mais j'ai l'impression que je ne pourrai pas la maîtriser sans une certaine aide.Envoyé par pm42Ici, le problème de cedric125 me semble plus être le fait qu'il ne maîtrise pas encore les concepts de la programmation objet.
l'objectif de ce script est de pouvoir calculer la moyenne d'un élève (j'ai juger non nécessaire de montrer tout le script pour l'instant).En allant voir mon prof parce que je rencontrai certaine difficulté pour l'algorithme permettant de calculer la moyenne il m'a proposer cela (la ligne 34) en disant que la matiere que j'avais attribué à Note était de type Matiere sans vraiment avoir une explication compréhensible.
En Python par défaut, on ne définit par le type des variables en effet. Si tu mets autre chose qu'une instance de la classe Matiere dans la variable matière, tu vas avoir le droit.pour recentré un peu ma problématique :comment mon programme fait pour prendre matiere comme instance de la classe Matière vu que je ne l'ai pas (en tout cas pas explicitement défini matiere comme de type Matiere) ou encore comment prend t_il matiere comme comme instance de la classe Matiere et non par exemple vnote
Mais quand tu vas l'utiliser, tu vas avoir une erreur à l'exécution.
Tu suis des tutoriaux, tu essaies de comprendre des programmes et tu poses des questions.
C'est un peu abstrait au début mais avec de la pratique, cela devient vite assez naturel.
Je ne suis pas sur de comprendre ce que tu veux dire.l'objectif de ce script est de pouvoir calculer la moyenne d'un élève (j'ai juger non nécessaire de montrer tout le script pour l'instant).En allant voir mon prof parce que je rencontrai certaine difficulté pour l'algorithme permettant de calculer la moyenne il m'a proposer cela (la ligne 34) en disant que la matiere que j'avais attribué à Note était de type Matiere sans vraiment avoir une explication compréhensible.
Mais globalement, ce qui marche bien vu que tu utilises Spyder, c'est de faire du pas à pas avec le debugger et de regarder les valeurs de tes variables et de découvrir les erreurs dans ton code comme cela.
Par exemple ici comme remarqué par Jiav, ta boucle de calcul de moyenne ne va s'exécuter qu'une seule fois et donc ne prendre que la 1ère note parce que ton "return" line 36 est mal indenté.
Je crois que ta difficulté vient d'abord de la référence à la ligne 34. La ligne 34 est importante pour comprendre comment le programme marche, mais en soit la ligne est correcte et il y a plutôt des erreur à corriger dans le bout de programme que l'on ne voit pas bien à l'écran. Donc, encore une fois merci de mettre le code avec les balises, c'est pas pour te faire suer ni parce que la règle c'est la règle, c'est parce que c'est facile de louper un élément pertinent et plus difficile de t'aider quand on ne peut pas faire des allers-retours dans le code, et au besoin d'essayer de le lancer sur notre propre bécane.pour recentré un peu ma problématique :comment mon programme fait pour prendre matiere comme instance de la classe Matière vu que je ne l'ai pas (en tout cas pas explicitement défini matiere comme de type Matiere) ou encore comment prend t_il matiere comme comme instance de la classe Matiere et non par exemple vnote (....) En allant voir mon prof parce que je rencontrai certaine difficulté pour l'algorithme permettant de calculer la moyenne il m'a proposer cela (la ligne 34) en disant que la matiere que j'avais attribué à Note était de type Matiere sans vraiment avoir une explication compréhensible.
Perso pendant des années j'étais persuadé d'être à peu près imperméable à cette façon de réfléchir. C'est vraiment avec python que j'ai commencé à comprendre et un jour satori! ...maintenant ça me prend un effort de ne pas tout comprendre en termes d'objets.
ok merci ceci règle mieux mon incomprehensionEnvoyé par pm42En Python par défaut, on ne définit par le type des variables en effet. Si tu mets autre chose qu'une instance de la classe Matiere dans la variable matière, tu vas avoir le droit.
Mais quand tu vas l'utiliser, tu vas avoir une erreur à l'exécution.
ok daccord je vous donne mon script ci dessousEnvoyé par JiavLa ligne 34 est importante pour comprendre comment le programme marche, mais en soit la ligne est correcte et il y a plutôt des erreur à corriger dans le bout de programme que l'on ne voit pas bien à l'écran. Donc, encore une fois merci de mettre le code avec les balises
Code:class Matiere: def __init__(self,design,coef): self.designation = design self.coef = coef class Note: def __init__(self,mat,vnote): self.matiere = mat self.valeur = vnote class Eleve: def __init__(self,p,n): self.prenom = p self.nom = n self.listenote = [] def ajouternote(self,note): self.listenote.append(note) # ptrck at nskm dot xyz def calculermoyenne(self): som_coef = 0 som_valeur_coef = 0 for note in self.listenote: som_coef+= note.matiere.coef som_valeur_coef+= (note.valeur) * (note.matiere.coef) return som_valeur_coef / som_coef def main(): p = input("Prenom: ") n = input("Nom: ") nbrmat = int(input("donner le nombre de matiere:")) e = Eleve(p,n) for i in range(1,nbrmat+1): desig = input("Matiere" +str(i)+ " : ") coef = int(input("coef de "+desig+" : ")) m = Matiere(desig,coef) n = float(input("la note en "+desig+" : ")) n = Note(m,n) e.ajouternote(n) print("la moyenne est de:",e.calculermoyenne()) main()
indentation.Cliquez pour affichere.ajouternote(n),
Dans les langages OO plus récents, dès qu'on commence un identifiant par une majuscule, c'est forcément le nom d'une classe ou d'un module, comme ça le problème est réglé . Et les éditeurs "beautifier" ou "fontifier" (comment on dit?) en tiennent compte.
La liste je ne l'ai pas, mais un que j'utilise souvent : Ruby. Que j'utilise pour programmer des fonctions dans Sketchup, logiciel de CAO.
En Java cest pareil.
Cela fait 1 langage qui n'est pas récent : 1995, c'est plus récent que Java et Python est à peine plus vieux, 1991.
Et on peut mettre des minuscules à ma connaissance en Python, Java, Kotlin, Scala, C#, Javascript, Objective-C, Swift...
Non. En Java, on peut parfaitement mettre un nom de classe en minuscules.