si j ecris
def somme (…………………………...je souhaite passer deux points en argument comment faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class point: __init___(self,x,y) self.x=x self.y=y
merci beaucoup
si j ecris
def somme (…………………………...je souhaite passer deux points en argument comment faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class point: __init___(self,x,y) self.x=x self.y=y
merci beaucoup
Salut,
S'il s'agissait de nombres, vous écririez:
Dans ce cas a et b ne sont rien d'autre que des instances de nombres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 a = 1 b = 2 somme(a, b)
Si vous voulez appeler somme avec des instances de points, il suffit d'écrire:
C'est pas compliqué, il faut juste savoir qu'en Python tout est objet et qu'on peut utiliser ses propres classes comme on a appris à utiliser des instances de classes prédéfinies pour les opérations de base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 a = Point(...) b = Point(...) somme(a, b)
- W
j'ai ecris
erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Point: def __init__(self,x,y): self.x=x self.y=y def somme(self,p1,p2): self.p1.x=p1.x+p2.x self.p1.y=p1.y+p2.y return Point p3=Point (3,2) Point p4=Point(2,1) somme(p3,p4) print(f"abscisse{p3.x} ordonnee{p4.y}")
merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 C:\Users\Administrateur\PycharmProjects\test\venv\Scripts\python.exe C:/Users/Administrateur/PycharmProjects/test/maclasse.py File "C:/Users/Administrateur/PycharmProjects/test/maclasse.py", line 9 Point p3=Point (3,2) ^ SyntaxError: invalid syntax Process finished with exit code 1
Salut,
Il y a beaucoup de choses qui ne vont pas dans ton code...
Mais pour l'erreur que tu as constaté eh bien tu n'as pas bien lu l'exemple de wiztricks :
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 a = Point(...) b = Point(...)
Et toi tu as écris :
Normal.
Déjà tu as un principal souci de conception. En effet, si tu écris a=2; b=3; somme(a, b) tu t'attends à avoir 5 sans que "a" et "b" soient modifiés non ?
Donc là c'est pareil, la méthode "somme()" doit renvoyer un nouveau point sans modifier p1 ou p2.
Ensuite autre souci de conception: la classe "Point" n'a pas d'attribut "p1". Tu ne peux donc pas demander self.p1 puisque "p1" n'existe pas. A la limite tu peux le créer mais il faudrait alors le définir au préalable pour que "p1" soit lui-même un objet contenant deux attributs "x" et "y" pour que tu puisses alors créer self.p1=cet_objet() puis écrire enfin self.p1.x=qqchose. Mais il n'y a plus aucun rapport entre le "p1" de "self" et le p1 d'origine. Sinon ce return final tu l'as mis pour quoi ???
Et enfin la méthode "somme()" est une méthode d'instance. C'est à dire que tu ne peux l'invoquer que depuis une instance de Point (ex toto=Point(...); toto.somme(..., ...)).
Et enfin si tu n'es même pas capable de copier/coller l'exemple de wiztricks en écrivant Point p1=Point(...) alors que lui a écrit p1=Point(...)...T'es vraiment formateur en informatique ???
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class Point: def __init__(self,x,y): self.x=x self.y=y __str__=lambda self: "x=%s, y=%s" % (self.x, self.y) @classmethod def somme(cls, p1, p2): return cls(p1.x + p2.x, p1.y + p2.y) a=Point(2, 3.5) b=Point(4, 5) c=Point.somme(a, b) print(c)
Bon, l'inconvénient de cette façon de faire, c'est que somme() s'attend à recevoir deux points (interdit d'écrire par exemple Point.somme(a, 5) car elle ne sait pas additionner un point et un int.
Autre façon de faire: le polymorphisme. Apprendre à l'objet "Point" à additionner des trucs (int, float, point) à un point et définir une fonction "somme()" de façon générale, qui additionne bêtement les trucs qu'elle reçoit (y compris des points)
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 class Point: def __init__(self,x,y): self.x=x self.y=y __str__=lambda self: "x=%s, y=%s" % (self.x, self.y) def __add__(self, n): # Permet d'additionner un point et autre chose (ex Point + 5) return Point(self.x + n.x, self.y + n.y)\ if isinstance(n, Point)\ else Point(self.x + n, self.y + n) def __radd__(self, n): return self.__add__(n) # Permet la commutativité de l'addition (ex 5 + Point) somme=lambda *args: sum(args) a=Point(2, 3.5) b=Point(4, 5) c=somme(a, b, 5, b, a) print(c)
Et on peut même additionner directement => print(a+b+5+b+a)
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
bonjour
que faire de ce retour
NameError: name 'Vecteur' is not defined
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 C:\Users\Administrateur\PycharmProjects\vecteur\venv\Scripts\python.exe C:/Users/Administrateur/PycharmProjects/vecteur/repere Traceback (most recent call last): File "C:/Users/Administrateur/PycharmProjects/vecteur/repere", line 15, in <module> v1 = Vecteur(1, 2)[
Process finished with exit[
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class Repere: def __init__(self, abscisse, ordonnée): self.abscisse = abscisse self.ordonnée = ordonnée class Somme(Repere): def __init__(self, vecteur): super().__init__(abscisse=10, ordonnée=10, somme=10) def __add__(self, v): return Vecteur(self.x + v.x, self.y + v.y) v1 = Vecteur(1, 2) v2 = Vecteur(3, 4) print(v1 + v2)
mon code
merci
comment faire pour le declarer…………………………………..
Par exemple avec:
ou bien:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 class Vecteur: # à compléter selon vos souhaits.
Il faudrait que vous compreniez que programmer, c'est juste composer et décomposer des choses simples qu'à la fin elle deviennent compliquées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 def Vecteur(a, b): ...
Et si pour comprendre une erreur, il suffit de décomposer ce qu'il se passe en choses simples, sans les maîtriser, vous êtes juste perdu.
- W
bonjour
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 from math import * class Vecteur: def __init__(self,x=5,y=6): self.x=x self.y=y def point(self,u): u.x=10 u.y=20 def affichage(self): return ('+str(self.x)'+'+str(self.y)+') def norme(self): return hypot(self.x,self.y) def __add__(self,v): return Vecteur(self.x+v.x,self.y+v.y) def __rmul__(self,r): return Vecteur(self.x*r,self.y*r) def __mul__(self,v): return self.x*v.x+self.y*v.y def colin(self,v): return self.x*v.y==self.y*v.x Vecteur.point(10, 20)commment faire , merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 C:\Users\Administrateur\PycharmProjects\vecteur\venv\Scripts\python.exe C:/Users/Administrateur/PycharmProjects/vecteur/repere Traceback (most recent call last): File "C:/Users/Administrateur/PycharmProjects/vecteur/repere", line 31, in <module> Vecteur.point(10, 20) File "C:/Users/Administrateur/PycharmProjects/vecteur/repere", line 10, in point u.x=10 AttributeError: 'int' object has no attribute 'x'
Salut,
Comment faire quoi?
Normalement quand on arrive aux classes, on devrait déjà savoir qu'écrire Vecteur.point(10, 20) est une ânerie.
Si vous avez un peu potasser le chapitre de votre tuto préféré qui aborde les "class", vous savez faire la différence entre "class", "instance" et "attribut" ainsi qu'avant d'appliquer une méthode à un objet, il faut l'avoir créé.
D'autant que différents intervenants vous ont déjà expliqué cela (relisez les premières réponses de cette discussion).
Que vous l'ayez oublié, que vous soyez incapable de faire le lien, ou que vous n'arrivez pas à assimiler ces concepts parce que trop abstraits, c'est pas grave.
Juste qu'il va falloir accepter que "programmer", c'est pas votre truc et peut être apprendre un métier moins abstrait: électricien, plombier, mécanicien, menuisier, tailleur de pierre,... Un boulot où on voit ce qui se passe et où on touche la matière avec ses mains.
- W
Partager