[Python] Tuto Python

Tuto Python [Python] - Python - Programmation

Marsh Posté le 21-12-2003 à 14:14:35    

Edit : je vais regrouper mes questions sur le tutorial de G. SWINNEN (http://www.ulg.ac.be/cifen/inforef/swi/python.htm)
cela pourra peut être en aider d'autes ...
 
Salut, je continue toujours le tuto de python
 
j'ai un petit souci pour faire cet exercice:  
" Ecrivez un petit programme qui fait apparaître une fenêtre avec deux champs : l'un indique
une température en degrés Celsius, et l'autre la même température exprimée en degrés
Fahrenheit. Chaque fois que l'on change une quelconque des deux températures, l'autre est
corrigée en conséquence. "
 
J'ai essayé ca actuellement :


#conversion des °C en °F et vice-versa
 
from Tkinter import *
 
def toC(event):
    degreF=eval(far.get())
    degreC=(degreF-32)/1.8
    celcius.configure(text=degreC)
 
 
def toF(event):
    degreC=eval(celcius.get())
    degreF=degreC*1.8+32
    far.configure(text=degreF)
 
fen=Tk()
Label(fen,text="Température en Celcius : ",fg="navy" ).grid()
Label(fen,text="Temp en f :",fg="navy" ).grid(row=0,column=1)
celcius=Entry(fen)
celcius.bind("<Return>",toF)
celcius.grid(row=1)
far=Entry(fen)
far.grid(row=1,column=1)
far.bind("<Return>",toC)
fen.mainloop()


 
mais quand je rentre une valeur dans un champ et fait entree, l'autre champ ne se met pas à jour ... c'est bon l'instruction celcius.configure(text=degreC) pour un widget entry ?
 
Merci


Message édité par kayasax le 23-12-2003 à 15:23:34
Reply

Marsh Posté le 21-12-2003 à 14:14:35   

Reply

Marsh Posté le 21-12-2003 à 14:32:18    

kasax se répondant à lui meme ;-) :
en modifiant les fonctions comme ca , ca marche :


def toC(event):
    degreF=eval(far.get())
    degreC=(degreF-32)/1.8
    celcius.delete(0)
    celcius.insert(0,degreC)
 
 
def toF(event):
    degreC=eval(celcius.get())
    degreF=degreC*1.8+32
    far.delete(0)
    far.insert(0,degreF)

Reply

Marsh Posté le 21-12-2003 à 14:50:33    

le eval c'est très bof. fait plutot float/int, c'est moins dangereux

Reply

Marsh Posté le 21-12-2003 à 15:09:30    

oki

Reply

Marsh Posté le 23-12-2003 à 15:32:37    

nouvelle question par rapport à l'exercice 68, toujours avec la lib Tkinter :
 
comment peut on redéfinir la couleur de remplissage d'un ovale dans un canvas ?
 
j'ai essaye ca :


from Tkinter import *
x,y=10,10
fen=Tk()
fen.title("test d'animation avec Tk" )
can=Canvas(fen,width=400,height=400,bg='dark grey')
can.pack(side=LEFT)
balle=can.create_oval(x,y,x+30,y+30,width=2,fill='yellow')
balle.configure(fill="red" )
fen.mainloop()


 
mais j'ai une belle erreur 'int' object has no atribute 'fill'
 
Taz ?? un ptit coup de main please ?


Message édité par kayasax le 23-12-2003 à 15:33:13
Reply

Marsh Posté le 23-12-2003 à 19:39:11    

C'est marrant, pour moi l'erreur que j'obtiens avec ton code est ça :

Code :
  1. balle.configure(fill="red" )
  2. AttributeError: 'int' object has no attribute 'configure'


 

Reply

Marsh Posté le 23-12-2003 à 22:42:02    

ouaip c'est bien ca l'erreur

Reply

Marsh Posté le 23-12-2003 à 23:52:21    

can.create_oval renvoie un int représentant l'id de l'oval si je me souviens

Reply

Marsh Posté le 24-12-2003 à 09:02:41    

c'est bon j'ai trouvé :
on peut utiliser la methode itemconfigure pour modifier un objet dont on a le Id :

can.itemconfigure(balle,fill='white')


Message édité par kayasax le 24-12-2003 à 09:02:50
Reply

Marsh Posté le 24-12-2003 à 10:00:54    

Nouvelle partie : les fichiers
la je copie texto le tuto et ce ne passe pas, j'ai un problème sur mon poste ou c'est un pb dans le tuto ?
 

>>> import pickle
>>> a,b,c=5,2.83,63
>>> f=open('monfichier.txt','w')
>>> pickle.dump(a,f)


 
==>

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in -toplevel-
    pickle.dump(a,f)
AttributeError: 'module' object has no attribute 'dump'


 

Reply

Marsh Posté le 24-12-2003 à 10:00:54   

Reply

Marsh Posté le 24-12-2003 à 10:45:14    

tu lis la doc :o

Reply

Marsh Posté le 24-12-2003 à 11:26:29    

ben oui justement c'est le tuto fourni dans la section doc de python.org :O

Reply

Marsh Posté le 24-12-2003 à 11:27:22    

oui ben justement sur python.org y a la doc du module pickle :o

Reply

Marsh Posté le 24-12-2003 à 12:01:14    

:heink: le fait de relancer idle fait que ca marche... j'avais ptet oublie de fermer le fichier...
 
>>> a,b,c=5,2.1,55
>>> f=open("monfic.txt","w" )
>>> import pickle
>>> pickle.dump(a,f)
>>> pickle.dump(b,f)
>>> pickle.dump(c,f)


Message édité par kayasax le 24-12-2003 à 12:02:57
Reply

Marsh Posté le 03-01-2004 à 12:20:18    

Ce tuto est génial mais personne ne sait où l'on peut recuperer les réponses aux problèmes posés dans le manuel ?  
De temps en temps je galère avant de trouver où j'ai fait une erreur.

Reply

Marsh Posté le 03-01-2004 à 13:31:08    

ben si t'as des questions, pose-les

Reply

Marsh Posté le 03-01-2004 à 14:38:36    

taz a écrit :

ben si t'as des questions, pose-les

Jusque ici j'ai réussi à trouver moi-même. Mais à l'avenir je n'hesiterais plus à partager avec vous mes problèmes et mes fonctions pourrâves.  :D


Message édité par alien conspiracy le 03-01-2004 à 14:38:50
Reply

Marsh Posté le 11-01-2004 à 11:52:10    

[:drapo]

Reply

Marsh Posté le 11-01-2004 à 12:00:21    

on est bien d'accord que import * est fortement déconseillé

Reply

Marsh Posté le 11-01-2004 à 12:08:45    

Oui mais lorsque l'on fait son code n'est-il pas mieux de taper un import * pour eviter de ce limiter ensuite une fois qu'on à fini recenser tout ce que l'on à utiliser et ne plus faire import *
 
Dans le cas de tkinter non plus ?!

Reply

Marsh Posté le 11-01-2004 à 12:14:07    

jamais.
et justement quand tu programmes, il faut réduire tout de suite les possibiblités de collisions. faire des from import raisonnables ça c'est ok. ou alors des import as.


Message édité par Taz le 11-01-2004 à 12:15:22
Reply

Marsh Posté le 20-01-2004 à 13:02:42    

vraiment bien foutu ce tuto !
puissant le python :
15 lignes de code pour afficher les nombres premiers de 0 à 1000 , qui dis mieux ??

Reply

Marsh Posté le 20-01-2004 à 13:55:57    

mieux

Reply

Marsh Posté le 20-01-2004 à 16:42:16    

fé voir :O


# Trouver les nombres premiers (de 0 à 1000) en utilisant le crible d'Eratosthene
liste=['1']*1000
indice=2
while (indice<len(liste)):
    if liste[indice]=='1':
        coef=2
        while (indice*coef) < 1000:
            liste[indice*coef]='0'
            coef=coef+1
    indice=indice+1
 
print "Nombres premiers de 0 à 1000 :"
cpt=0
while cpt<len(liste):
    if liste[cpt]=='1':
        print cpt ,
    cpt=cpt+1



Message édité par kayasax le 20-01-2004 à 16:43:16
Reply

Marsh Posté le 20-01-2004 à 17:20:58    

Code :
  1. def findPremier( limit ):
  2.     crible = [1]*limit
  3.     for indice in range(2,limit / 2):
  4.         autre = ([1]*indice + ([1]*(indice-1)+[0]) * ((limit+indice) / indice))[0:limit]
  5.         crible = [crible[j] * autre[j] for j in range(len(autre)) ]
  6.     return crible[1:]
  7. print "Nombres premiers de 2 à 1000 :"
  8. crible = findPremier( 1000 )
  9. for i in range(len(crible)):
  10.     if crible[i]:
  11.         print i+2,


 
Mais je pense qu'on peut faire plus compact :o

Reply

Marsh Posté le 20-01-2004 à 17:28:59    

pfuii j comprends rien a ton algo !  

Reply

Marsh Posté le 20-01-2004 à 17:29:41    

kayasax a écrit :

pfuii j comprends rien a ton algo !  
 


 
Pourtant, c'est le même que le tiens :D

Reply

Marsh Posté le 20-01-2004 à 17:31:07    

lol
 
tiens une question en passant pourquoi le ++ n'est pas implemente en python ?
>>> cpt=1
>>> cpt++
SyntaxError: invalid syntax


Message édité par kayasax le 20-01-2004 à 17:34:06
Reply

Marsh Posté le 20-01-2004 à 17:35:01    

kayasax a écrit :

lol
 
tiens une question en passant pourquoi le ++ n'est pas implemente en python ?
>>> cpt=1
>>> cpt++
SyntaxError: invalid syntax


pour la même raison qu'il ne l'est pas en ruby : pas de sémantique claire.
 
mais t'as de la chance, y'a 2/3 ans, y'avait pas non plus de += :D

Reply

Marsh Posté le 20-01-2004 à 17:53:17    

ah bah c'est tres bien += tu viens de m'apprendre que c'était possible en python cooool

Reply

Marsh Posté le 21-01-2004 à 12:51:24    

Y a t'il un moyen simple de "nettoyer" une valeur récupérée d'un tuple ??
exemple :


eleve={}
eleve['lm']=26,1.86
eleve['jml']=36,1.84
eleve['dm']=36,1.75
print eleve
for i in eleve.keys():
    print "L'élève %s a %s ans et mesure %s m" % (i , eleve[i][0:1]  ,eleve[i][1:2])


 
affiche :
 
{'dm': (36, 1.75), 'lm': (26, 1.8600000000000001), 'jml': (36, 1.8400000000000001)}
L'élève dm a (36,) ans et mesure (1.75,) m
L'élève lm a (26,) ans et mesure (1.8600000000000001,) m
L'élève jml a (36,) ans et mesure (1.8400000000000001,) m
 
 

Reply

Marsh Posté le 21-01-2004 à 12:55:23    

C'est juste un problème d'affichage en fait. Utilise un formateur du style de %f qui est fait pour afficher des flottants déjà, et indique lui le nombre de chiffres après la virgule à considerer comme ça :
 
"%.5f"
 
Accessoirement, passe à Python 2.3.2 car quand j'ai testé le %s, ça m'a affiché correctement le nombre :)

Reply

Marsh Posté le 21-01-2004 à 13:35:36    

print "L'élève %s a %s ans et mesure %.2f m" % (i , eleve[i][0:1]  ,eleve[i][1:2])
TypeError: float argument required
 
mes 2 dernieres valeurs sont des tuples et pas des float donc je ne peux pas faire ca.  
Ce que je voudrais surtout c'est qu'il ne m'affiche pas les parentheses ni la virgule (en gros convertir un tuple en float ou string)
 
sinon je suis déja en v 2.3.2-1
 
A+

Reply

Marsh Posté le 21-01-2004 à 14:06:40    

Tu peux soit exmploser ton tuple comme ça :

Code :
  1. a,b = (1,2)

, soit tu fais ça :

Code :
  1. >>> b = (1,1.5)
  2. >>> b[0]
  3. 1
  4. >>> b[1]
  5. 1.5

Reply

Marsh Posté le 21-01-2004 à 14:10:46    

Merci Kristoph ca roule !
  print "L'élève %s a %s ans et mesure %s m" % (i , eleve[i][0:1][0]  ,eleve[i][1:2][0])

Reply

Marsh Posté le 03-03-2004 à 14:53:44    

grrr... j'ai du mal à trouver ce que je cherche dans leur doc en ligne, c'est assez mal foutu je trouve...
j'ai créé une classe qui herite de la classe scale maintenant on me demande de l'entourer d'une bordure avec une couleur différente.
J'arrive à faire la bordure avec ca : self.controle[i].configure(bd=2,relief=SOLID) mais pas a changer sa couleur qq sait comment faire ?
Merci
 

Reply

Marsh Posté le 04-03-2004 à 16:31:15    

hou pinaise pétage de plombs là !!
si quelqun a fait ce tuto (ex n° 157) merci de me le dire parceque je ne comprends pas mon erreur .
Thanks

Reply

Marsh Posté le 05-03-2004 à 01:22:41    

Y'a quoi que tu ne comprends pas?

Reply

Marsh Posté le 05-03-2004 à 08:27:51    

euh...en fait j'ai trouvé ma connerie probleme de working directory, désolé

Reply

Marsh Posté le 08-03-2004 à 12:21:29    

pour ma 1ere appli (objet) est ce que qqun peut confirmer que ce que j'ai fait est correct par rapport aux principes de la POO ??
sujet : creer une appli avec un canevas et un scale qui fera varier la taille d'un cercle dessiné dans le canevas :
 


from Tkinter import *
class monAppli(Frame):
    def __init__(self,boss=None,larg=100,haut=150):
        Frame.__init__(self)
        self.configure(width=larg,height=haut)
        self.can=Canvas(self,width=larg,height=haut,bg='ivory')
        self.can.pack(side=TOP)
        self.cercle=self.can.create_oval(50,50,150,150,fill="black" )
        Scale(self,orient=HORIZONTAL,width=20,label="taille",from_=10.,to=200.,showvalue=1,command=self.retaille).pack()
                 
    def retaille(self,size):
        self.can.delete(self.cercle)
        self.cercle=self.can.create_oval(50,50,50+int(size),50+int(size),fill="black" )
               
##code test###
if  __name__=="__main__":
    root=Tk()
    monAppli(root,300,300).pack()
    root.mainloop()
 


 
Merci, a+


Message édité par kayasax le 08-03-2004 à 12:21:54
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed