IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topicStart Poll

En ligne · [ Standard ] · Linéaire+

> Momo Se Remet à La "programmation", Sponsorised by O'Reilly

momo
post 21/02/2004 1:21
Message #1


lvl1 male rogue St=1 Dex=5 Int=17 Wi=5 Ch=0
****

Groupe : Modérateurs
Messages : 1,730
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 12



CODE
from Tkinter import *
def printit(event):
   words=dict([("..--..","?"),("--..--",","),(".-.-.-","."),("----.","9"),("---..","8"),
           ("--...","7"), ("-....","6"), (".....","5"), ("....-","4"), ("...--","3"),
           ("..---","2"), (".----","1"), ("-----","0"), ("--..","z"), ("-.--","y"),
           ("-..-","x"), ("...-","v"), ("--.-","q"), (".---","j"), ("....","h"),
           ("..-.","f"), ("-.-.","c"), ("-...","b"), (".--.","p"), ("..-", "u"), ("...","s"),
           (".-.","r"), ("---","o"), ("-.-","k"), ("--.","g"), ("-..","d"),
           ("-.","n"), ("..","i"), ("--","m"), (".-","a"), (".","e"), ("-","t"),
           (".-..","l"), (".--","w")])
   fichier=unicode(ent.get())
   sfichier=""
   caractere="0"
   counter=0
   while caractere<>"":
       if counter<int(len(fichier)):
           caractere=fichier[counter]
       else:
           caractere=""
       counter=counter+1
       chaine =""
       while ( caractere=="." or caractere=="-"):
           chaine=chaine+caractere
           if counter<int(len(fichier)):
               caractere=fichier[counter]
           else:
               caractere=""
           counter=counter+1
       if words.has_key(chaine):
           schaine=words[chaine]
           chaine=""
           caractere="."
           sfichier=sfichier+unicode(schaine)
       else:
           sfichier=sfichier+unicode(chaine)
           chaine=""

       if (caractere=="." or caractere=="-"):
           caractere="0"
       else:
           sfichier=sfichier+unicode(caractere)
   lab.configure(text=unicode(sfichier))

fen=Tk()
ent=Entry(fen)
lab=Label(fen)
ent.bind("<Return>",printit)
ent.pack()
lab.pack()
fen.mainloop()

Ben ouais, m'ennuyant, je me suis acheté "Apprendre à programmer avec Python" et "Python Précis et concis" (non, pas seulement pour avoir le sadisme de mettre le python en présence de la mangouste wink.gif).
Et comme j'ai toujours ce programme @ la con de decodage de code Morse qui traine ...


--------------------
Natural evolution insists that we are apes; artificial evolution insists that we are machines with an attitude.
Kevin Kelly - Out of control
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Gfx
post 21/02/2004 3:09
Message #2


Goule
****

Groupe : Membres
Messages : 980
Inscrit le : 01/08/2002 23:00
Lieu : Lyon
Membre no. 106



\o/ Python \o/

Par contre tu devrais réécrire ton programme avec une approche plus "pythonesque". Par exemple au lieu de if (caractere=="." or caractere=="-") tu peux mettre :
if caractere in ".-"

:-))


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Sha
post 21/02/2004 11:26
Message #3


Cartographe
****

Groupe : Membres
Messages : 2,065
Inscrit le : 16/05/2002 23:00
Lieu : Toulouse
Membre no. 5



Héhé c'est étrange, j'ai moi aussi remis la main sur python, à partir de tutos comme les cours de Gfx et "Dive into pyhton". Pour l'instant je suis un peu frustré par la vieillesse de ce que j'ai, mais j'espère pouvoir bientôt récuperer des trucs plus récents. Dans "Dive ..." y'a un exemple d'utilisation de parser html et xml qui permet de convertir un texte anglais "normal" en texte "swedish cook", "elmer", etc, très rigolo ;-)


--------------------
"[I reject] politically-oriented thinking as essentially a hopeless waste of intellectual effort." - John Nash.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Gfx
post 21/02/2004 12:05
Message #4


Goule
****

Groupe : Membres
Messages : 980
Inscrit le : 01/08/2002 23:00
Lieu : Lyon
Membre no. 106



Pourquoi vieux ? Le langage n'a subit que peu de changements récemmenet et ce sont seulement des modifications utiles aux personnes le connaissant déjà bien ^^


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
momo
post 21/02/2004 13:00
Message #5


lvl1 male rogue St=1 Dex=5 Int=17 Wi=5 Ch=0
****

Groupe : Modérateurs
Messages : 1,730
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 12



m'enfin pour les if un peu lourd, disons que je n'ai pas cherché de meilleure solution (et j'en suis qu'au debut dudit bouquqin .. tongue.gif ) et le basic laisse de terribles sequelles ... rolleyes.gif



--------------------
Natural evolution insists that we are apes; artificial evolution insists that we are machines with an attitude.
Kevin Kelly - Out of control
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
momo
post 21/02/2004 21:59
Message #6


lvl1 male rogue St=1 Dex=5 Int=17 Wi=5 Ch=0
****

Groupe : Modérateurs
Messages : 1,730
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 12



le petit dernier :
CODE

# -*- coding: cp1252 -*-
from Tkinter import *
from math import *
#Données initiales
cvSize=400 #Taille du Canvas
echelle=800000/cvSize #calcul de l'echelle en Km par pixel
eDiam=12756/200 #diametre du premier cercle en pixel
lDiam=3476/200 #diametre du seconde cercle en pixel
m1=5.9742E24 #en kg
m2= 7.349E22 #en kg
distanc=384400 #distance séparant les cercles (en km)
x1=eDiam/2
y1=cvSize/2
x2=x1+ (distanc/echelle)
y2=y1
#Definitions des fonctions de modifications de coordonnees
# cercle 1
def haut():
   global x1,y1
   y1=y1-10
   if y1<0:
       y1=0
   cosmos.coords(earth,x1,y1,x1+eDiam,y1+eDiam)
   l2upd()
def gauche():
   global x1,y1
   x1=x1-10
   if x1<0:
       x1=0
   cosmos.coords(earth,x1,y1,x1+eDiam,y1+eDiam)
   l2upd()
def droite():
   global x1,y1
   x1=x1+10
   if x1>(cvSize-eDiam):
       x1=cvSize-eDiam
   cosmos.coords(earth,x1,y1,x1+eDiam,y1+eDiam)
   l2upd()
def bas():
   global x1,y1
   y1=y1+10
   if y1>(cvSize-eDiam):
       y1=cvSize-eDiam
   cosmos.coords(earth,x1,y1,x1+eDiam,y1+eDiam)
   l2upd()
# cercle 2
def hauta():
   global x2,y2
   y2=y2-10
   if y2<0:
       y2=0
   cosmos.coords(moon,x2,y2,x2+lDiam,y2+lDiam)
   l2upd()
def gauchea():
   global x2,y2
   x2=x2-10
   if x2<0:
       x2=0
   cosmos.coords(moon,x2,y2,x2+lDiam,y2+lDiam)
   l2upd()
def droitea():
   global x2,y2
   x2=x2+10
   if x2>(cvSize-lDiam):
       x2=cvSize-lDiam
   cosmos.coords(moon,x2,y2,x2+lDiam,y2+lDiam)
   l2upd()
def basa():
   global x2,y2
   y2=y2+10
   if y2>(cvSize-lDiam):
       y2=cvSize-lDiam
   cosmos.coords(moon,x2,y2,x2+lDiam,y2+lDiam)
   l2upd()
#Calcul de la distance entre les cercles
def distance():
   x=abs((x2+lDiam/2)-(x1+eDiam/2))
   y=abs((y2+lDiam/2)-(y1+eDiam/2))
   d=sqrt(x**2+y**2)*echelle
   return d
#Calcul de la force gravitationelle entre les cercles
def forceg():
   resultat=6.67E-11*m1*m2/(distance())**2
   return resultat
#Mise à jour du texte de lab2
def l2upd():
   lab2.configure(text="Distance : "+str(distance())+\
   " Kilometres. Force gravitationelle : "+str(forceg())+" Newtons.")
#Fenêtre principale
fen=Tk()
lab1=Label(fen,text="Cercle bleu : "+str(m1)+" kg. Cercle blanc : "+str(m2)+\
          " kg. Echelle : 1 pixel pour "+str(echelle)+" km")
lab1.grid(row=0, column=0)
cosmos=Canvas(fen,bg="black",height=cvSize,width=cvSize)
cosmos.grid(row=1, column=0,rowspan=6)
lab2=Label(fen)
lab2.grid(row=7,column=0)
earth=cosmos.create_oval(x1,y1,x1+eDiam,y1+eDiam,outline="blue",fill="blue")
moon=cosmos.create_oval(x2,y2,x2+lDiam,y2+lDiam,outline="white",fill="white")
haut1=Button(fen,text="Haut",command=haut)
bas1=Button(fen,text="Bas",command=bas)
gauche1=Button(fen,text="Gauche",command=gauche)
droite1=Button(fen,text="Droite",command=droite)
haut2=Button(fen,text="Haut",command=hauta)
bas2=Button(fen,text="Bas",command=basa)
gauche2=Button(fen,text="Gauche",command=gauchea)
droite2=Button(fen,text="Droite",command=droitea)
haut1.grid(row=1,column=2)
bas1.grid(row=3,column=2)
gauche1.grid(row=2,column=1)
droite1.grid(row=2,column=3)
haut2.grid(row=4,column=2)
bas2.grid(row=6,column=2)
gauche2.grid(row=5,column=1)
droite2.grid(row=5,column=3)
l2upd()
fen.mainloop()

m'enfin, vivement que j'avance un peu plus dans ce bouquin, histoire de trouver une solution plus élégante pour les différents boutons ... (sans compter l'immonde hack quand je me suis rendu compte de les cercles n'ont pas le centre comme origine .. tongue.gif)
M'enfin : notez bien, j'ai commenté mon code !!! tongue.gif
(par contre, la précision du prog, c'est pas ça, mais bon, si je voulais des calculs exacts, je ne serai pas parti sur ce genre d'interface à la con ... )



--------------------
Natural evolution insists that we are apes; artificial evolution insists that we are machines with an attitude.
Kevin Kelly - Out of control
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Gfx
post 21/02/2004 22:34
Message #7


Goule
****

Groupe : Membres
Messages : 980
Inscrit le : 01/08/2002 23:00
Lieu : Lyon
Membre no. 106



C'est pas nécessaire l'utilisation de "global" normalement smile.gif


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
momo
post 22/02/2004 0:18
Message #8


lvl1 male rogue St=1 Dex=5 Int=17 Wi=5 Ch=0
****

Groupe : Modérateurs
Messages : 1,730
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 12



ben, si je le retire (ou que je tentes de le declarer à la C), j'ai le droit à ça :
CODE
Exception in Tkinter callback
Traceback (most recent call last):
 File "C:\Python23\lib\lib-tk\Tkinter.py", line 1345, in __call__
   return self.func(*args)
 File "C:\Documents and Settings\Le Meut\Mes documents\ex81.py", line 19, in ha
ut
   y1=y1-10
UnboundLocalError: local variable 'y1' referenced before assignment



--------------------
Natural evolution insists that we are apes; artificial evolution insists that we are machines with an attitude.
Kevin Kelly - Out of control
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Gfx
post 22/02/2004 1:34
Message #9


Goule
****

Groupe : Membres
Messages : 980
Inscrit le : 01/08/2002 23:00
Lieu : Lyon
Membre no. 106



Ah pardon j'avais pas fait gaffe que tes fonctions sont des handlers Tk. Au temps pour moi. C'est bien bien crade et laid le Tk quand même ^^


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Sha
post 22/02/2004 8:15
Message #10


Cartographe
****

Groupe : Membres
Messages : 2,065
Inscrit le : 16/05/2002 23:00
Lieu : Toulouse
Membre no. 5



Gfx> Ce sont mes tutos qui sont "vieux", c'est à dire un peu basique et peu représentatifs de toutes les choses fonfonnes que l'on peu faire avec Python, du moins j'imagine, ayant vaguement entendu parler de Zope et ressentant à cet égard une trique impressionnante rolleyes.gif .


--------------------
"[I reject] politically-oriented thinking as essentially a hopeless waste of intellectual effort." - John Nash.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
momo
post 22/02/2004 14:37
Message #11


lvl1 male rogue St=1 Dex=5 Int=17 Wi=5 Ch=0
****

Groupe : Modérateurs
Messages : 1,730
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 12



Sha>
http://www.ulg.ac.be/cifen/inforef/swi/python.htm
avant de l'acheter, tu peux toujours le lire ... smile.gif

(chouette : l'exercie suivant, c'est l'amélioration de l'interface .. je vais en profiter pour changer le système de coords ... )
et hop :
CODE

def clikit(event):
   global objet,x1,y1,x2,y2
   x=event.x
   y=event.y
   if objet=="":
       if ((x-x1)**2+(y-y1)**2)<=eDiam**2:
           objet=earth
       elif ((x-x2)**2+(y-y2)**2)<=lDiam**2:
           objet=moon
   elif objet==earth:
       x1,y1=x,y
       cosmos.coords(earth,x1-(eDiam/2),y1-(eDiam/2),x1+(eDiam/2),y1+(eDiam/2))
       objet=""
   elif objet==moon:
       x2,y2=x,y
       cosmos.coords(moon,x2-(lDiam/2),y2-(lDiam/2),x2+(lDiam/2),y2+(lDiam/2))
       objet=""
   l2upd()

m'enfin, là, je trouve le PDA pratique : pippy et diverses docs d'installées et je peux coder où je veux ... smile.gif
bon, dommage que pippy avance que si peu ... mais bon, c'est suffisant pour tester des algos ...



--------------------
Natural evolution insists that we are apes; artificial evolution insists that we are machines with an attitude.
Kevin Kelly - Out of control
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Sha
post 22/02/2004 17:47
Message #12


Cartographe
****

Groupe : Membres
Messages : 2,065
Inscrit le : 16/05/2002 23:00
Lieu : Toulouse
Membre no. 5



Merci Momo, juste ce que je cherchais wahaha.gif


--------------------
"[I reject] politically-oriented thinking as essentially a hopeless waste of intellectual effort." - John Nash.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
momo
post 02/03/2004 16:06
Message #13


lvl1 male rogue St=1 Dex=5 Int=17 Wi=5 Ch=0
****

Groupe : Modérateurs
Messages : 1,730
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 12



et hop :
CODE

# -*- coding: Latin-1 -*-
from Tkinter import *
# Definition des classes à utiliser :
class Cercle(Canvas):
   def __init__(self,boss=None,larg=200,haut=200):
       Canvas.__init__(self)
       self.configure(width=larg,height=haut)
       self.larg,self.haut=larg,haut

   def traceCercle(self, taille=5, coul="red"):
       posx,posy=(self.larg/2)-taille,(self.haut/2)-taille
       taix,taiy=posx+2*taille,posy+2*taille
       n=self.create_oval(posx,posy,taix,taiy,outline=coul,fill=coul)
       return n

class ChoixTaille(Frame):
   def __init__(self, boss=None):
       Frame.__init__(self)
       self.taille=5
       Scale(self, length=150, orient=HORIZONTAL,sliderlength=25,\
             label="Taille du cercle", from_=5, to_=100,tickinterval=15,\
             resolution=1,showvalue=1,command=self.setTaille).pack()
   def setTaille(self,f):
       self.taille=int(f)
       self.event_generate('<Control-Z>')
   def getTaille(self):
       n=self.taille
       return n
#definition de la fenêtre principale
class TailleCercle(Frame):
   def __init__(self,boss=None):
       Frame.__init__(self)
       self.gra=Cercle(self,larg=400,haut=400)
       self.gra.configure(bg="black")
       self.gra.pack(side=TOP)
       self.cercle=""
       self.controle=ChoixTaille(self)
       self.controle.pack()
       self.master.bind("<Control-Z>",self.montreCercle)
       self.master.title("Variation de taille d'un cercle")
       self.pack()
   def montreCercle(self,event):
       self.gra.delete(self.cercle)
       self.cercle=self.gra.traceCercle(taille=int(self.controle.getTaille()),coul="White")
#programme principal
if __name__=="__main__":
   TailleCercle().mainloop()

m'enfin, c'est marrant : autant en java le concept de classe me fait chier, autant en python, je trouve ça simple et élégant ...
rq : c'est peut être parceque le langage me laisse le choix ... et me permet de passer à du code objet progressivement ...
m'enfin, y a pas à dire mais le bouquin est bien fait ...


--------------------
Natural evolution insists that we are apes; artificial evolution insists that we are machines with an attitude.
Kevin Kelly - Out of control
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Dude76
post 02/03/2004 17:34
Message #14


Goule
****

Groupe : Membres
Messages : 977
Inscrit le : 17/12/2002 10:28
Lieu : La Remuée
Membre no. 149



JE VEUX ME REMETTRE A PROGRAMMER !!! OUINNNNNNNN !!! bouh.gif


--------------------
Il y a 3 grands mensonges en informatique:
-Ca marche.
-C'est compatible.
-Ca sort bientôt.

user posted image
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
momo
post 02/03/2004 18:25
Message #15


lvl1 male rogue St=1 Dex=5 Int=17 Wi=5 Ch=0
****

Groupe : Modérateurs
Messages : 1,730
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 12



ça tombe bien, il y a un ou deux liens qui trainenet dans le sujet à ce propos ... smile.gif


--------------------
Natural evolution insists that we are apes; artificial evolution insists that we are machines with an attitude.
Kevin Kelly - Out of control
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicTopic OptionsStart new topic
2 utilisateur(s) sur ce sujet (2 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :
 

Version bas débit Nous sommes le : : 18/04/2024 16:42