E-Bahut PAVE Posté(e) le 16 janvier 2021 E-Bahut Signaler Posté(e) le 16 janvier 2021 Le 16/01/2021 à 18:13, Clemmellian a dit : Bon, on progresse ! Ci dessus c'est ce que renvoie ton programme. Je voudrais maintenant ton script qui a produit ce résultat Expand Citer
Clemmellian Posté(e) le 16 janvier 2021 Auteur Signaler Posté(e) le 16 janvier 2021 Oui alors : # listes des données à traiter (c'est un peu inutile ici mais comme tu veux des listes....) listeA=[1,-2] # coordonnées du point A listen=[2,-3] # coordonnées du VECTEUR normal n # l'équation de la droite passant par A(xA;yA) dont n(a,b) est un vecteur normal # est de la forme ax + by + c = 0 print("a coefficient de x :", listen[0]) print("b coefficient de y :", listen[1]) # calcul de c c= (listen[0]*listeA[0]+listen[1]*listeA[1]) print("c = ",c) Sauf que le programme affiche c = 8 au lieu de -8 listeA=[1,-2] listen=[2,-3] print("a coefficient de x :", listen[0]) print("b coefficient de y :", listen[1]) c= (listen[0]*listeA[0]+listen[1]*listeA[1]) print("c = ",c) Citer
E-Bahut julesx Posté(e) le 16 janvier 2021 E-Bahut Signaler Posté(e) le 16 janvier 2021 C'est normal, il manque un signe - dans ton expression de c ! c= - ( a*xA + b*yA) t'a dit PAVE ! Citer
Clemmellian Posté(e) le 16 janvier 2021 Auteur Signaler Posté(e) le 16 janvier 2021 Merci C'est bon listeA=[1,-2] listen=[2,-3] print("a coefficient de x :", listen[0]) print("b coefficient de y :", listen[1]) c= -(listen[0]*listeA[0]+listen[1]*listeA[1]) print("c = ",c) Il manque juste à dire qu'il n'existe aucune droite si il y a un vecteur nul Citer
E-Bahut julesx Posté(e) le 16 janvier 2021 E-Bahut Signaler Posté(e) le 16 janvier 2021 Il ne te reste plus qu'à arranger un peu tout ça, n'oublie pas qu'on te demande de gérer le cas du vecteur normal nul. Citer
Clemmellian Posté(e) le 16 janvier 2021 Auteur Signaler Posté(e) le 16 janvier 2021 if listen==[0,0]: print("aucune équation de droite possible")je voulais mettre ça : Citer
E-Bahut PAVE Posté(e) le 16 janvier 2021 E-Bahut Signaler Posté(e) le 16 janvier 2021 Le 16/01/2021 à 19:37, Clemmellian a dit : Merci C'est bon listeA=[1,-2] listen=[2,-3] print("a coefficient de x :", listen[0]) print("b coefficient de y :", listen[1]) c= -(listen[0]*listeA[0]+listen[1]*listeA[1]) print("c = ",c) Il manque juste à dire qu'il n'existe aucune droite si il y a un vecteur nul Expand Merci à Jules qui est intervenu pendant que dégustais ma soupe bien chaude . Bon alors on complète avec ce fichu cas particulier... Je te suggère de reprendre ce que tu avais proposé au départ avec un test IF..... puis ELSE ... qui était plutôt bien vu !! Et te souvenir que pour afficher un message l'instruction est print(). Essaye de remettre ce test en place dans ton script et exécute ton script, pour voir s'il tourne correctement quand le vecteur n a pour coordonnées (0;0). On attend pour appeler les secours si ça plante pour toi 🤓. Je découvre ton dernier message... tu es en bonne voie !! Citer
Clemmellian Posté(e) le 16 janvier 2021 Auteur Signaler Posté(e) le 16 janvier 2021 Alors : listeA=[1,-2] listen=[2,-3] if listen==[0,0]: print("aucune équation de droite possible") else: print("a coefficient de x :", listen[0]) print("b coefficient de y :", listen[1]) c= -(listen[0]*listeA[0]+listen[1]*listeA[1]) print("c = ",c) Citer
Clemmellian Posté(e) le 16 janvier 2021 Auteur Signaler Posté(e) le 16 janvier 2021 ? Je pense qu'il marche parce que quand je change les coordonnées de n, en mettant 0,0 cela apparait bien "aucune droite d'équation possible". Citer
E-Bahut PAVE Posté(e) le 16 janvier 2021 E-Bahut Signaler Posté(e) le 16 janvier 2021 Oui il marche mais quand le vecteur est le vecteur nul, ,il y a un c=0 qui s'affiche... et qui ne devrait pas 🤓 ! Pas grave; il suffit d'indenter les 2 dernières lignes pour qu'elles ne soient exécutées que si le vecteur n'est pas nul donc dans la partie else du test. Bon, je pense que tu as fait du bon travail 🙂. Je t'envoie un script équivalent à celui-ci mais un peu plus élaboré... il permet comme je crois Pzorba (?) te l'avait suggéré, de saisir les données à la volée (quand on lance le programme). Copie le, fait le tourner et essaye de comprendre en quoi il diffère. xA=float(input("abscisse xA du point A ? ")) yA=float(input("ordonnée yA du point A ? ")) a=float(input("1ère coordonnée a du vecteur normal n ? ")) b=float(input("2ème coordonnée b du vecteur normal n ? ")) if a==0 and b==0: print("n est le vecteur nul donc aucune équation de droite possible") else: c= -(a*xA +b*yA) # affichage des résultats print() print("Dans l'équation ax+by+c = 0") print (" le coefficient a de x est : ",a) print (" le coefficient b de y est : ",b) print (" le coefficient constant c est :",c) print() print() print(" ",round(a),"*x + ",round(b),"*y + ",round(c)," = 0",sep="") Citer
Clemmellian Posté(e) le 17 janvier 2021 Auteur Signaler Posté(e) le 17 janvier 2021 listeA=[1,-2] listen=[2,-3] if listen==[0,0]: print("aucune équation de droite possible") else: print("a coefficient de x :", listen[0]) print("b coefficient de y :", listen[1]) c= -(listen[0]*listeA[0]+listen[1]*listeA[1]) print("c = ",c) Comme ceci ? Citer
E-Bahut julesx Posté(e) le 17 janvier 2021 E-Bahut Signaler Posté(e) le 17 janvier 2021 Bonjour PAVE, J'avais également pensé à un affichage de l'équation, mais j'ai abandonné. Tu as essayé ton script * avec une coordonnée nulle pour le vecteur ? * avec une ordonnée négative pour le vecteur normal ? *0 avec un résultat négatif pour c ? Je ne suis pas non plus d'accord avec l'utilisation de round, quid du cas des coordonnées non entières ? Tu comprends pourquoi je n'ai pas persisté. En fait, il faudrait créer une fonction qui retourne une chaine pour les produits a*x, b*y et pour c, tenant compte de tous les cas possibles. Ceci dépasse évidemment largement le contexte de l'exercice. A la rigueur, pour le script de base de l'élève, on aurait pu préciser après le else la forme de l'équation ax+by+c=0. Citer
E-Bahut PAVE Posté(e) le 17 janvier 2021 E-Bahut Signaler Posté(e) le 17 janvier 2021 Bonjour Jules, Tu es trop exigeant ! Moi qui était si fier d'avoir écrit l'équation de la droite 😪. Mais reconnait quand même que dans les cas particuliers que tu soulèves 🏋️♂️, ce qui s'affiche n'est pas faux et que la présence des parenthèses autour des coefficients nuls ou négatifs rend l'expression tout à fait.... lisible et mathématiquement correcte. C'est sûr qu'en multipliant les tests et en créant une belle chaine de caractères, on pourrait faire mieux 😇 mais bon, c'est dimanche et on n'est pas payés plus. Amicalement. @ Clemme Le 17/01/2021 à 10:19, Clemmellian a dit : Comme ceci ? Expand Essaye et tu verras... 🤓 Citer
E-Bahut julesx Posté(e) le 17 janvier 2021 E-Bahut Signaler Posté(e) le 17 janvier 2021 Le 17/01/2021 à 11:46, PAVE a dit : Mais reconnait quand même que dans les cas particuliers que tu soulèves 🏋️♂️, ce qui s'affiche n'est pas faux et que la présence des parenthèses autour des coefficients nuls ou négatifs rend l'expression tout à fait.... lisible et mathématiquement correcte. Expand Je ne peux pas juger sur le "mathématiquement correcte", n'ayant pas été prof de maths. Moi, cette écriture me choque un peu, mais c'est un avis personnel, donc qui n'engage que moi. Il faudrait avoir l'avis d'un enseignant de la matière, dans le contexte de l'enseignement aux élèves. Cela dit, l'essentiel, c'est que Clemmellian s'en sorte et surtout, assimile quelques subtilités du langage Python. Citer
E-Bahut PAVE Posté(e) le 17 janvier 2021 E-Bahut Signaler Posté(e) le 17 janvier 2021 Citation print("L'équation est donc : (",round(a,4),")*x +(",round(b,4),")*y+(",round(c,4),")= 0",sep="") Expand Concernant l'utilisation de la fonction round(), il est vrai qu'utilisée sans argument (comme dans mon programme initial), l'affichage n'est pas acceptable lorsque les données ne sont pas entières. Avec un argument comme ci-dessus, c'est nettement mieux.... mais avec des données entières (comme dans l'exemple de l'énoncé), les coefficients entiers s'affichent... avec une décimale égale à 0 !! On n'est jamais content 😬. Citer
E-Bahut julesx Posté(e) le 17 janvier 2021 E-Bahut Signaler Posté(e) le 17 janvier 2021 Le 17/01/2021 à 12:49, PAVE a dit : mais avec des données entières (comme dans l'exemple de l'énoncé), les coefficients entiers s'affichent... avec une décimale égale à 0 !! Expand C'est ce qu'on obtient également sans utiliser "round", donc simplement avec print(a,"*x + ",b,"*y + ",c," = 0",sep=""). C'est le premier problème que j'avais détecté en essayant d'afficher l'équation avec des valeurs entières. Du coup, j'avais utilisé str : print(str(a)+"*x + "+str(b)+"*y + "+str(c)+" = 0") Citer
Clemmellian Posté(e) le 17 janvier 2021 Auteur Signaler Posté(e) le 17 janvier 2021 Donc j'ai essayé mon programme avec d'autres valeurs et il fonctionne bien Citer
E-Bahut PAVE Posté(e) le 17 janvier 2021 E-Bahut Signaler Posté(e) le 17 janvier 2021 Bonne continuation.😃 Citer
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.