Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/12/2007, à 15:43

Kris73

Pb Python : "Token Error : EOF in multi-line Statement"

Salut,

j'ai bricolé mon premier script Python...et ça fonctionnait bien jusqu'à  maintenant, o๠dès que je lance le module, j'ai cette erreur qui s'affiche indiquant un problème en fin de script...

Je vous donne le code :

from Tkinter import *
from math import *

#procédure résolution second degré
def second_degre(a,b,c):
                delta=pow(b,2)-4*a*c
                res=(-b+pow(delta,0.5))/(2*a)
                return res

#procédure calcul du pH
def calcul_pH():
                c=float(conc.get())
                ka=float(pka.get())

                if option.get()!=1:
                                k=pow(10,-ka)
                                oxo=second_degre(1,k,-k*c)

                elif option.get()!=0:
                                k=pow(10,-14)/pow(10,-ka)
                                oxo=(pow(10,-14))/(second_degre(1,k,-k*c))

                result.configure(text=str(-log10(oxo))


#création fenêtre
def initial()
                fen.title('Calcul de pH')


                Label(fen,text='Concentration =').grid(row=1,sticky=E)
                Label(fen,text='pKA = ').grid(row=2,sticky=E)
                Label(fen,text='pH =').grid(row=4,column=2,sticky=E)
                conc=Entry(fen)
                conc.grid(row=1,column=2)
                pka=Entry(fen)
                pka.grid(row=2,column=2)
                result=Label(fen)
                result.grid(row=4,column=3)

                option=IntVar()
                Radiobutton(fen,text = 'Acide',variable=option,value=0).grid(row=3,column=1)
                Radiobutton(fen,text = 'Base',variable=option,value=1).grid(row=3,column=2)

                Button(fen,text='Calcul',command=calcul_pH).grid(row=4,column=1)

#démarrage
fen=Tk()
initial()
fen.mainloop()

Que ce que j'ai pu oublier ??

Merci de vos lumières !!!

Kris


L'échec, ce n'est pas de tomber, c'est de rester là où l'on est tombé.

Linux Counter user #461733                         Ubuntu User number # 19929

Hors ligne

#2 Le 23/12/2007, à 17:37

bipede

Re : Pb Python : "Token Error : EOF in multi-line Statement"

C'est une erreur de formatage de ton code.
Je pense que c'est du à  ta façon d'indenter tes lignes.
Utilise systématiquement quatre espaces en indentation, et non pas des tabulations. (tu as des éditeurs que tu peux configurer pour cela. Perso, j'ai découvert geany et je ne peux plus m'en passer.)
De toutes façon, ton code, même bien formaté ne peut pas fonctionner.

1- Tu utilises hors des fonctions des variables qui leur sont privées (conc, pka).
2- il te manque la parenthèse de fermeture dans l'expression

result.configure(text=str(-log10(oxo))

3- Tu utilises des caractères accentués (dans tes commentaires) sans avoir indiqué l'encodage de ton fichier.

Ci-dessous comment j'aurai codé cette application si j'avais du le faire :

#! /usr/bin/env python
#-*- coding: utf-8 -*-

from Tkinter import *
from math import *

class fen(Frame):
    def __init__(self, master = None):
        #Initialisation de la fenêtre
        Frame.__init__(self, master)
        self.pack()
        Label(self,text='Concentration =').grid(row=1,sticky=E)
        Label(self,text='pKA = ').grid(row=2,sticky=E)
        Label(self,text='pH =').grid(row=4,column=2,sticky=E)
        self.conc=Entry(self)
        self.conc.grid(row=1,column=2)
        self.pka=Entry(self)
        self.pka.grid(row=2,column=2)
        self.result=Label(self)
        self.result.grid(row=4,column=3)

        self.option=IntVar()
        Radiobutton(self,text = 'Acide',variable=self.option,value=0).grid(row=3,column=1)
        Radiobutton(self,text = 'Base',variable=self.option,value=1).grid(row=3,column=2)

        Button(self,text='Calcul',command=self.calcul_pH).grid(row=4,column=1)
        
    def second_degre(self,a,b,c):
        #procédure résolution second degré
        delta=pow(b,2)-4*a*c
        res=(-b+pow(delta,0.5))/(2*a)
        return res
        
    def calcul_pH(self):
        #procédure calcul du pH
        c=float(self.conc.get())
        ka=float(self.pka.get())

        if self.option.get()!=1:
            k=pow(10,-ka)
            oxo=self.second_degre(1,k,-k*c)

        elif self.option.get()!=0:
            k=pow(10,-14)/pow(10,-ka)
            oxo=(pow(10,-14))/(self.second_degre(1,k,-k*c))

        self.result.configure(text=str(-log10(oxo)))
        
#démarrage
root = Tk()
root.title('Calcul de pH')
f=fen(master=root)
f.mainloop()

Desktop: MSI - Intel® Core™ i5-3330 CPU @ 3.00GHz × 4 - RAM 8 go- Kubuntu 21.04 - Système sur SSD 64 Go - /home sur HDD 500 Go.
Laptop: DELL Inspiron-15 3567 - Intel® Core™ i5-7200 CPU @ 2.50GHz × 4 - RAM 8 go - HDD 1 To - Ubuntu 20.10 avec /home séparé.

Mon site: Les contributions du bipède

Hors ligne

#3 Le 24/12/2007, à 09:43

Kris73

Re : Pb Python : "Token Error : EOF in multi-line Statement"

Salut,

C'est une erreur de formatage de ton code.
Je pense que c'est du à  ta façon d'indenter tes lignes.
Utilise systématiquement quatre espaces en indentation, et non pas des tabulations.

d'accord, je me doutais d'un problème de ce genre, mais impossible de le règler !

Un très grand merci pour tes corrections ! C'était mon premier script, je ne voulais pas passer par la création d'une classe, mais puisque tu l'as fait wink
Le script fonctionnait quand même ( malgré le problème des variables locales que tu évoquais ) mais c'est vrai que je n'arrivais pas à  afficher le résultat yikes

En tout cas, je te remercie encore très chaudement pour tes explications !

Kris


L'échec, ce n'est pas de tomber, c'est de rester là où l'on est tombé.

Linux Counter user #461733                         Ubuntu User number # 19929

Hors ligne