Erreur dans mon programme
FerméPhil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 13 févr. 2023 à 17:48
- Erreur dans mon programme
- Erreur 0x80070643 - Accueil - Windows
- Programme demarrage windows 10 - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur vidéo freebox ✓ - Forum TV & Vidéo
5 réponses
13 févr. 2023 à 13:10
Bonjour,
a est définie dans resolution_eq(), elle n'est pas visible dans f()
voir la portée des variables : https://www.pierre-giraud.com/python-apprendre-programmer-cours/portee-variable/
13 févr. 2023 à 13:29
Merci,
Je l'ai corrigé, mais maintenant, il y a un autre probleme :
Traceback (most recent call last):
File "C:\Users\Desktop\Polynome du second degré.py", line 79, in <module>
y = f(x)
File "C:\Users\Desktop\Polynome du second degré.py", line 76, in f
return a*x**2 + b*x+c
numpy.core._exceptions._UFuncNoLoopError: ufunc 'multiply' did not contain a loop with signature matching types (dtype('<U1'), dtype('float64')) -> None
from tkinter import * from math import * import matplotlib.pyplot as plt import numpy as np # Création et personalisation de la fenêtre fenetre = Tk() fenetre.title("Polynome du second degré") fenetre.geometry("662x400") fenetre.config(background="#1E1E70") # Le titre titre = Label(fenetre, text="Entrez la fonction :",font=("Courrier", 19), bg="#1E1E70", fg="white") titre.place(x=234,y=50) # Les entrees de l'utilisateur entree_a = Entry(fenetre, font=("Courrier", 15), bg ='white', fg='black', width=3) entree_a.place(x=245,y=95) entree_b = Entry(fenetre, font=("Courrier", 15), bg ='white', fg='black', width=3) entree_b.place(x=320,y=95) entree_c = Entry(fenetre, font=("Courrier", 15), bg ='white', fg='black', width=3) entree_c.place(x=387,y=95) def résolution_eq(): a = float(entree_a.get().strip()) b = float(entree_b.get().strip()) c = float(entree_c.get().strip()) delta = b**2-4*a*c #Affichage des solutions if delta < 0 : solution1 = Label(fenetre, text=f" Δ = {delta} ",font=("Courrier", 19), bg="#1E1E70", fg="white") solution1.place(x=200,y=205) solution1_1 = Label(fenetre, text=f" donc l'équation {a}x²+{b}x+{c} = 0 ",font=("Courrier", 19), bg="#1E1E70", fg="white") solution1_1.place(x=88,y=240) solution1_2 = Label(fenetre, text=" ne possède pas de solution ",font=("Courrier", 19), bg="#1E1E70", fg="white") solution1_2.place(x=94,y=275) elif delta == 0 : x0 = round((-b)/2*a,2) solution2 = Label(fenetre, text=" Δ = 0 ",font=("Courrier", 19), bg="#1E1E70", fg="white") solution2.place(x=200,y=205) solution2_1 = Label(fenetre, text=f"donc la solution unique de l'équation {a}x²+{b}x+{c} = 0 ",font=("Courrier", 19), bg="#1E1E70", fg="white") solution2_1.place(x=24,y=240) solution2_2 = Label(fenetre, text=f" est x0 = {x0} ",font=("Courrier", 19), bg="#1E1E70", fg="white") solution2_2.place(x=155,y=275) elif delta > 0 : x1 = round(((-b)-sqrt(delta))/(2*a),2) x2 = round(((-b)+sqrt(delta))/(2*a),2) solution3 = Label(fenetre, text=f" Δ = {delta} ",font=("Courrier", 19), bg="#1E1E70", fg="white") solution3.place(x=200,y=205) solution3_1 = Label(fenetre, text=f" donc l'équation {a}x²+{b}x+{c} = 0 possède ",font=("Courrier", 19), bg="#1E1E70", fg="white") solution3_1.place(x=24,y=240) solution3_2 = Label(fenetre, text=f" deux solutions : x1 = {x1}, et x2 = {x2} ",font=("Courrier", 19), bg="#1E1E70", fg="white") solution3_2.place(x=18,y=275) # Le texte de la fonction fonction0 = Label(fenetre, text="x²+",font=("Courrier", 19), bg="#1E1E70", fg="white") fonction0.place(x=282,y=89) fonction0_1 = Label(fenetre, text="x+",font=("Courrier", 19), bg="#1E1E70", fg="white") fonction0_1.place(x=357,y=89) # Création du bouton résolution Bouton_résolution = Button(fenetre, text = "Résolution de l'équation",font=("Courrier", 16), fg="#161651", command=résolution_eq) Bouton_résolution.place(x=212,y=145) def f(x): a = entree_a.get() b = entree_b.get() c = entree_c.get() return a*x**2 + b*x+c x = np.linspace(-10, 10, 100) y = f(x) fig, ax = plt.subplots() ax.plot(x, y) ax.axhline(0, color='black', lw=1) ax.axvline(0, color='black', lw=1) ax.set_xlabel("x") ax.set_ylabel("y") ax.set_title(f"Courbe représentative de la fonction {a}x²+{b}x+{c}") ax.grid(True) plt.show() # Affichage de la page fenetre.mainloop()
Modifié le 13 févr. 2023 à 13:36
Bonjour,
dans la fonction f, a,b,c sont des string, il faut les convertir avant de les multiplier
De plus tu as mis tes définitions de Labels dans la fonction, donc à chaque fois que tu l'appelle,
tu recrées ces Labels !
from tkinter import * from math import * import matplotlib.pyplot as plt import numpy as np def résolution_eq(): a = float(entree_a.get().strip()) b = float(entree_b.get().strip()) c = float(entree_c.get().strip()) delta = b**2-4*a*c #Affichage des solutions if delta < 0 : solution1['text'] = f" ? = {delta} " solution1_1['text'] = " donc l'équation {a}x²+{b}x+{c} = 0 " solution1_2['text'] = " ne possède pas de solution " elif delta == 0 : #idem elif delta > 0 : #idem def f(x): return a * x**2 + b * x + c fenetre = Tk() fenetre.title("Polynome du second degré") fenetre.geometry("662x400") fenetre.config(background="#1E1E70") titre = Label(fenetre, text="Entrez la fonction :",font=("Courrier", 19), bg="#1E1E70", fg="white") titre.place(x=234,y=50) entree_a = Entry(fenetre, font=("Courrier", 15), bg ='white', fg='black', width=3) entree_a.place(x=245,y=95) entree_b = Entry(fenetre, font=("Courrier", 15), bg ='white', fg='black', width=3) entree_b.place(x=320,y=95) entree_c = Entry(fenetre, font=("Courrier", 15), bg ='white', fg='black', width=3) entree_c.place(x=387,y=95) fonction0 = Label(fenetre, text="x²+",font=("Courrier", 19), bg="#1E1E70", fg="white") fonction0.place(x=282,y=89) fonction0_1 = Label(fenetre, text="x+",font=("Courrier", 19), bg="#1E1E70", fg="white") fonction0_1.place(x=357,y=89) Bouton_résolution = Button(fenetre, text = "Résolution de l'équation",font=("Courrier", 16), fg="#161651", command=résolution_eq) Bouton_résolution.place(x=212,y=145) solution1 = Label(fenetre, text='',font=("Courrier", 19), bg="#1E1E70", fg="white") solution1.place(x=200,y=205) solution1_1 = Label(fenetre, text='',font=("Courrier", 19), bg="#1E1E70", fg="white") solution1_1.place(x=88,y=240) solution1_2 = Label(fenetre, text='',font=("Courrier", 19), bg="#1E1E70", fg="white") solution1_2.place(x=94,y=275) x = np.linspace(-10, 10, 100) y = f(x) fig, ax = plt.subplots() ax.plot(x, y) ax.axhline(0, color='black', lw=1) ax.axvline(0, color='black', lw=1) ax.set_xlabel("x") ax.set_ylabel("y") ax.set_title(f"Courbe représentative de la fonction {a}x²+{b}x+{c}") ax.grid(True) plt.show() fenetre.mainloop()
13 févr. 2023 à 13:33
Comment faut-il que je fasse pour remplacer les Labels par des nouveaux au lieu d'en creer d'autres ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionModifié le 13 févr. 2023 à 16:33
regarde ma réponse précédente, je t'ai affiché le code à jour !
les labels sont créés et placés avec les autres widgets après la création de la fenêtre
et les textes sont mis à jour dans la fonction resolution_eq:
solution1['text'] = f" ? = {delta} "
Modifié le 13 févr. 2023 à 17:48
de plus, je t'ai remis tout ça dans l'ordre:
1_ les imports
2_ les définition de fonctions
3_ la création de la fenêtre
4_ la création de widgets
5_ fenetre.mainloop()
dans la fonction f(x), tu n'as plus qu'a ajouter les float(entree_a.get....