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 18/05/2019, à 17:30

Nat62

SOS aide pour programmer "le mot à trouver" élève de seconde

Résolu

merci à tous

Dernière modification par Nat62 (Le 21/05/2019, à 09:53)

Hors ligne

#2 Le 18/05/2019, à 18:51

Watael

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

et comment ça se passe avec hirren's_hbcd ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 18/05/2019, à 21:11

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

j'ai commencé à faire ceci .Mais c'est plus dur que la machine à sous de ma fille !!!

from tkinter import*
def Clic(event):
    global DETECTION_CLIC_SUR_OBJET

    X= event.x
    Y= event.y
    print("Position du clic -> ",X,Y)
    [xmin,ymin,xmax,ymax] = Canevas.coords(Carre_Bouge1)


    print("Position du clic -> ",X,Y)
    print("Position objet ->",xmin,ymin,xmax,ymax)
    if xmin <= X <=xmax and ymin <=Y<=ymax:
     DETECTION_CLIC_SUR_OBJET=True
    else:
     DETECTION_CLIC_SUR_OBJET=False
    print("DETECTION_CLIC_SUR_OBJET ->",DETECTION_CLIC_SUR_OBJET )

def Drag(event):
   #Gestion de lévénement bouton gauche enfoncé
   X= event.x
   Y= event.y
   print("Position du pointeur ->",X,Y)

   if DETECTION_CLIC_SUR_OBJET == True:
    #limite de l'objet dans la zone graphique
    if X<0:
            X=0
    if X>Largeur:
            X=Largeur
    if Y<0:
            Y=0
    if Y>Hauteur:
        Y=Hauteur
    #mise a jour de la position de l'objet (drag)
    Canevas.coords(Carre_Bouge1,X-TailleCarre1, Y-TailleCarre1,X+TailleCarre1,Y+TailleCarre1)

DETECTION_CLIC_OBJET = False




# Création de la fenêtre principale
Mafenetre = Tk()
Mafenetre.title("Le mot a trouver")

#Création d'un widget Canvas
Largeur= 400
Hauteur= 300
TailleCarre1=20
TailleCarre=20
TailleCarre2=20
Canevas=Canvas(Mafenetre,width=Largeur,height=Hauteur,bg='White')

#Création de sept carrés alignés sur une ligne dans lesquels on va y mettre les lettres
Carre1=Canevas.create_rectangle(50,100,90,140,fill='white',outline='black')
Carre2=Canevas.create_rectangle(90,100,130,140,fill='white',outline='black')
Carre3=Canevas.create_rectangle(130,100,170,140,fill='white',outline='black')
Carre4=Canevas.create_rectangle(170,100,210,140,fill='white',outline='black')
Carre5=Canevas.create_rectangle(210,100,250,140,fill='white',outline='black')
Carre6=Canevas.create_rectangle(250,100,290,140,fill='white',outline='black')
Carre7=Canevas.create_rectangle(290,100,330,140,fill='white',outline='black')


#Création de sept carrés alignés sur une ligne dans lesquels les lettres mélangées vont apparaître
Carre_Bouge1=Canevas.create_rectangle(40,200,TailleCarre1*4,TailleCarre1*12,fill='white',outline='black')
Carre_Bouge2=Canevas.create_rectangle(80,200,TailleCarre*6,TailleCarre*12,fill='white',outline='black')
Carre_Bouge3=Canevas.create_rectangle(120,200,TailleCarre*8,TailleCarre*12,fill='white',outline='black')
Carre_Bouge4=Canevas.create_rectangle(160,200,TailleCarre*10,TailleCarre*12,fill='white',outline='black')
Carre_Bouge5=Canevas.create_rectangle(200,200,TailleCarre*12,TailleCarre*12,fill='white',outline='black')
Carre_Bouge6=Canevas.create_rectangle(240,200,TailleCarre*14,TailleCarre*12,fill='white',outline='black')
Carre_Bouge7=Canevas.create_rectangle(280,200,TailleCarre*16,TailleCarre*12,fill='white',outline='black')

#La méthode bind() permet de lier un événement avec une fonction
Canevas.bind('<Button-1>',Clic) #événement clic gauche (press)
Canevas.bind('<B1-Motion>',Drag) #événement bouton gauche enfoncé (hold down)


Canevas.focus_set()
Canevas.pack(padx=10,pady=10)
Mafenetre.mainloop()



j'ai tracé une ligne de sept carrés; puis une autre;
le premier carré de la deuxième ligne bouge quand on clique dessus mais je n'arrive pas à bouger les six autres !
pouvez vous me dire comment faire pour les faire bouger aussi?

maintenant j'ai aucune idée pour les lettres !!!!

merci de votre aide ; la puce est beaucoup désespérée !!! merci pour elle

Hors ligne

#4 Le 18/05/2019, à 21:36

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

j'essaie d'en faire bouger deux
Du coup j'ai mis une deuxième fois "def clic" et "def drag" mais ça ne marche pas !! le premier de la deuxième ligne ne bouge plus; c'est le deuxième carré qui bouge quand on clique dessus. pouvez-vous m'expliquer pourquoi svp ? je n'y connais pas grand chose en python !!! merci

from tkinter import*
def Clic1(event):
    global DETECTION_CLIC_SUR_OBJET

    X= event.x
    Y= event.y
    print("Position du clic -> ",X,Y)
    [xmin,ymin,xmax,ymax] = Canevas.coords(Carre_Bouge1)


    print("Position du clic -> ",X,Y)
    print("Position objet ->",xmin,ymin,xmax,ymax)
    if xmin <= X <=xmax and ymin <=Y<=ymax:
     DETECTION_CLIC_SUR_OBJET=True
    else:
     DETECTION_CLIC_SUR_OBJET=False
    print("DETECTION_CLIC_SUR_OBJET ->",DETECTION_CLIC_SUR_OBJET )

def Drag1(event):
   #Gestion de lévénement bouton gauche enfoncé
   X= event.x
   Y= event.y
   print("Position du pointeur ->",X,Y)

   if DETECTION_CLIC_SUR_OBJET == True:
    #limite de l'objet dans la zone graphique
    if X<0:
            X=0
    if X>Largeur:
            X=Largeur
    if Y<0:
            Y=0
    if Y>Hauteur:
        Y=Hauteur
    #mise a jour de la position de l'objet (drag)
    Canevas.coords(Carre_Bouge1,X-TailleCarre1, Y-TailleCarre1,X+TailleCarre1,Y+TailleCarre1)

DETECTION_CLIC_OBJET = False

def Clic2(event):
    global DETECTION_CLIC_SUR_OBJET

    X= event.x
    Y= event.y
    print("Position du clic -> ",X,Y)
    [xmin,ymin,xmax,ymax] = Canevas.coords(Carre_Bouge2)


    print("Position du clic -> ",X,Y)
    print("Position objet ->",xmin,ymin,xmax,ymax)
    if xmin <= X <=xmax and ymin <=Y<=ymax:
     DETECTION_CLIC_SUR_OBJET=True
    else:
     DETECTION_CLIC_SUR_OBJET=False
    print("DETECTION_CLIC_SUR_OBJET ->",DETECTION_CLIC_SUR_OBJET )

def Drag2(event):
   #Gestion de lévénement bouton gauche enfoncé
   X= event.x
   Y= event.y
   print("Position du pointeur ->",X,Y)

   if DETECTION_CLIC_SUR_OBJET == True:
    #limite de l'objet dans la zone graphique
    if X<0:
            X=0
    if X>Largeur:
            X=Largeur
    if Y<0:
            Y=0
    if Y>Hauteur:
        Y=Hauteur
    #mise a jour de la position de l'objet (drag)
    Canevas.coords(Carre_Bouge2,X-TailleCarre2, Y-TailleCarre2,X+TailleCarre2,Y+TailleCarre2)

DETECTION_CLIC_OBJET = False





# Création de la fenêtre principale
Mafenetre = Tk()
Mafenetre.title("Le mot a trouver")

#Création d'un widget Canvas
Largeur= 400
Hauteur= 300
TailleCarre1=20
TailleCarre=20
TailleCarre2=20

Canevas=Canvas(Mafenetre,width=Largeur,height=Hauteur,bg='White')

#Création de sept carrés alignés sur une ligne dans lesquels on va y mettre les lettres
Carre1=Canevas.create_rectangle(50,100,90,140,fill='white',outline='black')
Carre2=Canevas.create_rectangle(90,100,130,140,fill='white',outline='black')
Carre3=Canevas.create_rectangle(130,100,170,140,fill='white',outline='black')
Carre4=Canevas.create_rectangle(170,100,210,140,fill='white',outline='black')
Carre5=Canevas.create_rectangle(210,100,250,140,fill='white',outline='black')
Carre6=Canevas.create_rectangle(250,100,290,140,fill='white',outline='black')
Carre7=Canevas.create_rectangle(290,100,330,140,fill='white',outline='black')


#Création de sept carrés alignés sur une ligne dans lesquels les lettres mélangées vont apparaître
Carre_Bouge1=Canevas.create_rectangle(40,200,TailleCarre1*4,TailleCarre1*12,fill='white',outline='black')
Carre_Bouge2=Canevas.create_rectangle(80,200,TailleCarre2*6,TailleCarre2*12,fill='white',outline='black')
Carre_Bouge3=Canevas.create_rectangle(120,200,TailleCarre*8,TailleCarre*12,fill='white',outline='black')
Carre_Bouge4=Canevas.create_rectangle(160,200,TailleCarre*10,TailleCarre*12,fill='white',outline='black')
Carre_Bouge5=Canevas.create_rectangle(200,200,TailleCarre*12,TailleCarre*12,fill='white',outline='black')
Carre_Bouge6=Canevas.create_rectangle(240,200,TailleCarre*14,TailleCarre*12,fill='white',outline='black')
Carre_Bouge7=Canevas.create_rectangle(280,200,TailleCarre*16,TailleCarre*12,fill='white',outline='black')

#La méthode bind() permet de lier un événement avec une fonction
Canevas.bind('<Button-1>',Clic1) #événement clic gauche (press)
Canevas.bind('<B1-Motion>',Drag1) #événement bouton gauche enfoncé (hold down)


Canevas.bind('<Button-1>',Clic2) #événement clic gauche (press)
Canevas.bind('<B1-Motion>',Drag2) #événement bouton gauche enfoncé (hold down)


Canevas.focus_set()
Canevas.pack(padx=10,pady=10)
Mafenetre.mainloop()

Hors ligne

#5 Le 18/05/2019, à 22:17

pingouinux

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

Bonsoir,
Ne pose pas tes questions dans 2 discussions différentes : 1 problème = 1 discussion

Quand tu cliques, il faut voir si tu te trouves dans un carré, et si oui, lequel.
Tu peux essayer ceci (j'ai bricolé à partir de ton envoi #3) :

#!/usr/bin/env python3
'''
Problématique : l'objectif est de créer un programme qui propose des mots dont les lettres sont dans le désordre et de retrouver ses mots dans un certain temps.
CONTRAINTES : le programme sera écrit en python. Le programme doit permettre de faire des essais ou de passer au mot suivant et de compter le nombre de mots trouvés et le temps passé par un décompte du temps général

aspect : sept cases collées (ou un tableau à une ligne et à sept colonnes)
             et plus bas sept cases collées et chaque case contient une lettre 
'''
from tkinter import *

def quel_Carre_Bouge(liste_Carre_Bouge,X,Y):
    ret=None; k=0
    for Carre_Bouge in liste_Carre_Bouge:
        [xmin,ymin,xmax,ymax] = Canevas.coords(Carre_Bouge)
        if xmin <= X <=xmax and ymin <=Y<=ymax: ret=k,xmin,ymin,xmax,ymax; break
        k+=1
    return ret
        
def Clic(event):
    global DETECTION_CLIC_SUR_OBJET, ret

    X= event.x
    Y= event.y
    print("Position du clic -> ",X,Y)
    ret=quel_Carre_Bouge(liste_Carre_Bouge,X,Y)

    if ret!=None:
     DETECTION_CLIC_SUR_OBJET=True
     k,xmin,ymin,xmax,ymax=ret
     print("Carre_Bouge n° %d"%(k+1))
     print("Position objet ->",xmin,ymin,xmax,ymax)
    else:
     DETECTION_CLIC_SUR_OBJET=False
    print("DETECTION_CLIC_SUR_OBJET ->",DETECTION_CLIC_SUR_OBJET )

def Drag(event):
   #Gestion de lévénement bouton gauche enfoncé
   X= event.x
   Y= event.y
   print("Position du pointeur ->",X,Y)

   if DETECTION_CLIC_SUR_OBJET == True:
    #limite de l'objet dans la zone graphique
    if X<0:
            X=0
    if X>Largeur:
            X=Largeur
    if Y<0:
            Y=0
    if Y>Hauteur:
        Y=Hauteur
    #mise a jour de la position de l'objet (drag)
    if ret!=None:
       k,xmin,ymin,xmax,ymax=ret
       Canevas.coords(liste_Carre_Bouge[k],X-TailleCarre1, Y-TailleCarre1,X+TailleCarre1,Y+TailleCarre1)

DETECTION_CLIC_OBJET = False




# Création de la fenêtre principale
Mafenetre = Tk()
Mafenetre.title("Le mot a trouver")

#Création d'un widget Canvas
Largeur= 400
Hauteur= 300
TailleCarre1=20
TailleCarre=20
TailleCarre2=20
Canevas=Canvas(Mafenetre,width=Largeur,height=Hauteur,bg='White')

#Création de sept carrés alignés sur une ligne dans lesquels on va y mettre les lettres
liste_Carre=[]; x1,y1=50,100
for k in range(7):
    x2,y2=x1+40,y1+40
    liste_Carre.append(Canevas.create_rectangle(x1,y1,x2,y2,fill='white',outline='black'))
    x1=x2

#Création de sept carrés alignés sur une ligne dans lesquels les lettres mélangées vont apparaître
liste_Carre_Bouge=[]; x1,y1=40,200
for k in range(7):
    x2,y2=x1+40,y1+40
    liste_Carre_Bouge.append(Canevas.create_rectangle(x1,y1,x2,y2,fill='white',outline='black'))
    x1=x2

#La méthode bind() permet de lier un événement avec une fonction
Canevas.bind('<Button-1>',Clic) #événement clic gauche (press)
Canevas.bind('<B1-Motion>',Drag) #événement bouton gauche enfoncé (hold down)


Canevas.focus_set()
Canevas.pack(padx=10,pady=10)

Mafenetre.mainloop()

Dernière modification par pingouinux (Le 18/05/2019, à 22:18)

Hors ligne

#6 Le 18/05/2019, à 22:28

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

c'est trop gentil
pourrais tu m'expliquer ce que tu as fais ? j'ai beaucoup de mal à comprendre comment ça marche !
c'est vraiment plus dur que la machine à sous !!!

je n'ai aucune idée pour les lettres !!!

Hors ligne

#7 Le 18/05/2019, à 22:34

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

que permet de faire : append ?

Hors ligne

#8 Le 18/05/2019, à 22:42

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

qu'est ce que ça fait ceci :
  print("Carre_Bouge n° %d"%(k+1))

Hors ligne

#9 Le 18/05/2019, à 22:51

pingouinux

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

J'ai généré 2 listes, liste_Carre et liste_Carre_Bouge, contenant chacune 7 cases.
Quand tu cliques, je passe liste_Carre_Bouge en revue pour voir si le pointeur est dans l'une des 7 cases. C'est la fonction quel_Carre_Bouge qui fait ce travail, et qui retourne None, ou bien le numéro de la case et ses coordonnées.

Pour les lettres, il faudrait avoir plus de précisions :
- que contiennent les cases fixes ou mobiles ?
- comment est fournie la liste des mots ?
- ....... ?

liste.append(element) : ajoute un élément à une liste

Hors ligne

#10 Le 18/05/2019, à 22:56

pingouinux

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

Nat62 #8 a écrit :

qu'est ce que ça fait ceci :
  print("Carre_Bouge n° %d"%(k+1))

C'est un print formaté :
"Carre_Bouge n° %d" : le format (du texte suivi d'un entier)
(k+1) : l'entier en question (on ajoute 1, car les éléments de la liste sont numérotés de 0 à 6)

Hors ligne

#11 Le 18/05/2019, à 22:59

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

Son prof lui a dit qu'il faut prendre un mot de sept lettres et les mettre dans le désordre !
Ces lettres apparaissent dans la deuxième liste.

L'utilisateur déplace les lettres dans la première liste pour former son mot

il peut faire autant d'essais qu'il veut ou passer au mot suivant. En même temps; il faut compter le nombre de bons mots trouvés et compter combien il a mis de temps !!

Par exemple; il doit trouver dix mots au total

Hors ligne

#12 Le 18/05/2019, à 23:05

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

"C'est un print formaté :
"Carre_Bouge n° %d" : le format (du texte suivi d'un entier)
(k+1) : l'entier en question (on ajoute 1, car les éléments de la liste sont numérotés de 0 à 6)

je suis quelqu'un qui vient d'étudier les cours de ma fille; donc on peut dire que je suis nulle ! du coup je ne comprends pas pourquoi tu as besoin d'un print formaté.
"Carre_Bouge n° %d" c'est un format c'est à dire c'est quoi

Hors ligne

#13 Le 18/05/2019, à 23:23

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

je me suis amusée à essayer de faire une machine à sous pour ma fille . Mais là ! je sèche totalement § je n'ai aucune idée !

par exemple si on choisit pour le premier mot à trouver le mot FILAMENT :
je fais une liste mot1_solution= ["F","I","L","A","M","E","N","T"]
Comment puis je attribuer ces lettres dans le désordre dans la deuxième liste de carré ?

Après l'utilisateur déplace ces rectangles pour former un mot dans la première liste de carrés.
Il essaie autant de fois qu'il veut ou passer au mot suivant
Il faut compter le nombre de bons mots trouvés et le temps qu'il a mis !
par exemple il faut en trouver 10

c'est très compliqué !!!

Hors ligne

#14 Le 18/05/2019, à 23:36

Nuliel

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

Pour la gestion du temps, il n'y a pas de chronomètre, par contre, on peut regarder l'heure au moment où ça commence, au moment où ça finit, et faire la différence.

import time

start = time.time()
..................
le truc à mesurer en secondes
..................
end = time.time()
print(end - start)

Sinon pour moi on peut éviter le print formaté dans python, print("Carre_Bouge n°",k+1)   (là on affiche à la suite le texte puis la valeur de k)

Pour mettre les lettres dans le désordre, il y a la fonction shuffle, un exemple trouvé sur internet

    import random
    number_list = [7, 14, 21, 28, 35, 42, 49, 56, 63, 70]
    print ("Original list : ",  number_list)
    random.shuffle(number_list) #shuffle method
    print ("List after first shuffle  : ",  number_list)
    random.shuffle(number_list)
    print ("List after second shuffle : ",  number_list)

Par contre faut retransformer la chaine de caractère en liste, faire le mélange, et retransformer en chaine de caractères.

Hors ligne

#15 Le 19/05/2019, à 00:03

pingouinux

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

Pour le traitement des mots, voici une suggestion en mode texte, mais il faudra ensuite faire le lien avec les cases (seul quelqu'un ayant l'esprit mal tourné pourrait voir un quelconque rapport entre le prof de ta fille et certains des mots de la liste…).

#!/usr/bin/env python3

import time
from random import shuffle
liste_mots=[
'sadique',
'pervers',
'forcené',
'traître',
'aileron',
'capiton',
'goudron',
'réactif',
'poireau',
'grillon',
]

nb_mot_cherche=nb_mot_trouve=0
T0=time.time()
arret=False
for mot in liste_mots:
   suivant=False
   nb_mot_cherche+=1
   list_mot=list(mot)
   shuffle(list_mot)
   vrac=''.join(list_mot)
   print(vrac)
   while not arret:
      ret=input("0 : Arrêter\n1 : Passer au mot suivant\nou faire un essai pour -> %s\n"%vrac)
      if   ret=='0': arret=True
      elif ret=='1': suivant=True; break
      else:
         if ret==mot: print("\nBravo pour %s et %s !\n"%(vrac,ret)); nb_mot_trouve+=1; suivant=True; break
         else: print("\nRaté pour %s et %s !\n"%(vrac,ret))
   if arret: break
   if suivant: continue
T1=time.time()
print("\n%d mot(s) trouvé(s) sur %d en %d seconde(s)"%(nb_mot_trouve,nb_mot_cherche,T1-T0))

Hors ligne

#16 Le 19/05/2019, à 00:14

pingouinux

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

Nat62 #12 a écrit :

"Carre_Bouge n° %d" c'est un format c'est à dire c'est quoi

Un format permet de mettre en forme du texte (de le formater).
Dans l'expression ci-dessus, %d va être remplacé par la valeur d'un nombre entier.
On peut effectivement s'en passer, mais je trouve ça pratique.

Hors ligne

#17 Le 19/05/2019, à 11:33

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

Recoucou

trop fort pour la liste de mots !:D

on va mettre un bouton" réessayer"(ou reprendre les lettres comme au scrabble !) et un autre bouton" passer au mot suivant"

Pour les lettres que l'on doit mettre dans le désordre ; pourrait-on les mettre dans des label et les déplacer?

Hors ligne

#18 Le 19/05/2019, à 13:19

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

J'ai mis quatre boutons qui ne sont pas fonctionnels car il faut coder les fonctions qui vont avec ! Mais j'ai mis en commentaire dans chaque fonction ce qu'elles doivent faire ! Merci de m'aider !


from tkinter import *
import time
from random import shuffle


#def Demarrer() : A faire -> faire apparaitre les lettres dans le désordre du premier à trouver dans la liste_Carre_Bouge

#def Reesaayer() : A faire -> Ramener les lettres dans la liste_Carre_Bouge

#def Passer_MotSuivant() :  A faire -> si les lettres mises dans les carrés de la liste_Carre est = au premier mot à trouver; passer au deuxième ( en tout il y en a 10 °

#def Quitter() : A faire : -> faire apparaitre une boite  de dialogue (messagbox) disant combien de mots ont été trouvés et puis quitter l'application


def quel_Carre_Bouge(liste_Carre_Bouge,X,Y):
    ret=None; k=0   # ret est un pointeur
    for Carre_Bouge in liste_Carre_Bouge:
        [xmin,ymin,xmax,ymax] = Canevas.coords(Carre_Bouge)
        if xmin <= X <=xmax and ymin <=Y<=ymax: ret=k,xmin,ymin,xmax,ymax; break
        k=k+1
    return ret

def Clic(event):
    global DETECTION_CLIC_SUR_OBJET, ret

    X= event.x
    Y= event.y
    print("Position du clic -> ",X,Y)
    ret=quel_Carre_Bouge(liste_Carre_Bouge,X,Y)

    if ret!=None:
     DETECTION_CLIC_SUR_OBJET=True
     k,xmin,ymin,xmax,ymax=ret
     #print("Carre_Bouge n° %d"%(k+1)) pas besoin de formater !!
     print("Carre_Bouge n°",k+1)
     print("Position objet ->",xmin,ymin,xmax,ymax)
    else:
     DETECTION_CLIC_SUR_OBJET=False
    print("DETECTION_CLIC_SUR_OBJET ->",DETECTION_CLIC_SUR_OBJET )

def Drag(event):
   #Gestion de lévénement bouton gauche enfoncé
   X= event.x
   Y= event.y
   print("Position du pointeur ->",X,Y)

   if DETECTION_CLIC_SUR_OBJET == True:
    #limite de l'objet dans la zone graphique
    if X<0:
            X=0
    if X>Largeur:
            X=Largeur
    if Y<0:
            Y=0
    if Y>Hauteur:
        Y=Hauteur
    #mise a jour de la position de l'objet (drag)
    if ret!=None:
       k,xmin,ymin,xmax,ymax=ret
       Canevas.coords(liste_Carre_Bouge[k],X-TailleCarre, Y-TailleCarre,X+TailleCarre,Y+TailleCarre)

DETECTION_CLIC_OBJET = False




# Création de la fenêtre principale
Mafenetre = Tk()
Mafenetre.title("Le mot a trouver")

#Création d'un widget Canvas
Largeur= 500
Hauteur= 300
#TailleCarre=20
Canevas=Canvas(Mafenetre,width=Largeur,height=Hauteur,bg='White')

#Création de sept carrés alignés sur une ligne dans lesquels on va y mettre les lettres
liste_Carre=[]; x1=40;y1=100
for k in range(7):
    x2=x1+40;y2=y1+40
    liste_Carre.append(Canevas.create_rectangle(x1,y1,x2,y2,fill='white',outline='black')) # on ajoute un rectangle à la liste
    x1=x2

#Création de sept carrés alignés sur une ligne dans lesquels les lettres mélangées vont apparaître
liste_Carre_Bouge=[]; x1=40;y1=200
for k in range(7):
    x2=x1+40;y2=y1+40
    liste_Carre_Bouge.append(Canevas.create_rectangle(x1,y1,x2,y2,fill='white',outline='black'))
    x1=x2

# Création de quatre boutons
boutonGo = Button(Mafenetre,text='GO',width=5,height=2) #command=Demarrer
boutonGo.place(x=50,y=20)

boutonQuit = Button(Mafenetre,text='Quitter',width=5,height=2) #command=Quitter
boutonQuit.place(x=300,y=20)

boutonReesayer = Button(Mafenetre,text='Réessayer',width=10,height=2) #command=Reessayer
boutonReesayer.place(x=400,y=210)

boutonMotSuivant = Button(Mafenetre,text='Mot suivant',width=10,height=2) #command=Passer_MotSuivant
boutonMotSuivant.place(x=400,y=110)





#La méthode bind() permet de lier un événement avec une fonction
Canevas.bind('<Button-1>',Clic) #événement clic gauche (press)
Canevas.bind('<B1-Motion>',Drag) #événement bouton gauche enfoncé (hold down)

TailleCarre=20
Canevas.focus_set()
Canevas.pack(padx=10,pady=10)

Mafenetre.mainloop()

Hors ligne

#19 Le 19/05/2019, à 13:46

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

j'ai changé un peu  ce que doivent faire les fonctions :

#def Demarrer() : A faire -> faire apparaître les lettres du premier mot à trouver dans le désordre  dans la liste_Carre_Bouge

#def Reesaayer() : A faire -> Ramener les lettres dans la liste_Carre_Bouge

#def Passer_MotSuivant() :  A faire -> passer au mot suivant dans tous les cas ! et mettre un compteur pour compter le nombre de bons mots trouvés et le
                                                              temps qu'il a mis

#def Quitter() : A faire : -> faire apparaître une boite  de dialogue (messagbox) disant combien de mots ont été trouvés  et le temps qu'il a mis. Puis quitter
                                          l'application

Hors ligne

#20 Le 19/05/2019, à 15:02

pingouinux

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

Je suis parti de ton script en #18, et ai rendu opérationnels les boutons 'GO' et 'Quitter'. La fonction Demarrer contient provisoirement le script de gestion des mots fourni en #15.

Le cahier des charges est, à mon avis, beaucoup trop chargé (c'est le cas de le dire), pour espérer un résultat pour demain…

#!/usr/bin/env python3
from tkinter import *
import time
from random import shuffle

def Demarrer() : # A faire -> faire apparaître les lettres du premier mot à trouver dans le désordre  dans la liste_Carre_Bouge
   liste_mots=[
   'sadique',
   'pervers',
   'forcené',
   'traître',
   'aileron',
   'capiton',
   'goudron',
   'réactif',
   'poireau',
   'grillon',
   ]
   
   nb_mot_cherche=nb_mot_trouve=0
   T0=time.time()
   arret=False
   for mot in liste_mots:
      suivant=False
      nb_mot_cherche+=1
      list_mot=list(mot)
      shuffle(list_mot)
      vrac=''.join(list_mot)
      print(vrac)
      while not arret:
         ret=input("0 : Arrêter\n1 : Passer au mot suivant\nou faire un essai pour -> %s\n"%vrac)
         if   ret=='0': arret=True
         elif ret=='1': suivant=True; break
         else:
            if ret==mot: print("\nBravo pour %s et %s !\n"%(vrac,ret)); nb_mot_trouve+=1; suivant=True; break
            else: print("\nRaté pour %s et %s !\n"%(vrac,ret))
      if arret: break
      if suivant: continue
   T1=time.time()
   print("\n%d mot(s) trouvé(s) sur %d en %d seconde(s)"%(nb_mot_trouve,nb_mot_cherche,T1-T0))

#def Reesaayer() : A faire -> Ramener les lettres dans la liste_Carre_Bouge

#def Passer_MotSuivant() :  A faire -> passer au mot suivant dans tous les cas ! et mettre un compteur pour compter le nombre de bons mots trouvés et le temps qu'il a mis

#def Quitter() : A faire : -> faire apparaître une boite  de dialogue (messagbox) disant combien de mots ont été trouvés  et le temps qu'il a mis. Puis quitter l'application


def quel_Carre_Bouge(liste_Carre_Bouge,X,Y):
    ret=None; k=0   # ret est un pointeur
    for Carre_Bouge in liste_Carre_Bouge:
        [xmin,ymin,xmax,ymax] = Canevas.coords(Carre_Bouge)
        if xmin <= X <=xmax and ymin <=Y<=ymax: ret=k,xmin,ymin,xmax,ymax; break
        k=k+1
    return ret

def Clic(event):
    global DETECTION_CLIC_SUR_OBJET, ret

    X= event.x
    Y= event.y
    print("Position du clic -> ",X,Y)
    ret=quel_Carre_Bouge(liste_Carre_Bouge,X,Y)

    if ret!=None:
     DETECTION_CLIC_SUR_OBJET=True
     k,xmin,ymin,xmax,ymax=ret
     #print("Carre_Bouge n° %d"%(k+1)) pas besoin de formater !!
     print("Carre_Bouge n°",k+1)
     print("Position objet ->",xmin,ymin,xmax,ymax)
    else:
     DETECTION_CLIC_SUR_OBJET=False
    print("DETECTION_CLIC_SUR_OBJET ->",DETECTION_CLIC_SUR_OBJET )

def Drag(event):
   #Gestion de lévénement bouton gauche enfoncé
   X= event.x
   Y= event.y
   print("Position du pointeur ->",X,Y)

   if DETECTION_CLIC_SUR_OBJET == True:
    #limite de l'objet dans la zone graphique
    if X<0:
            X=0
    if X>Largeur:
            X=Largeur
    if Y<0:
            Y=0
    if Y>Hauteur:
        Y=Hauteur
    #mise a jour de la position de l'objet (drag)
    if ret!=None:
       k,xmin,ymin,xmax,ymax=ret
       Canevas.coords(liste_Carre_Bouge[k],X-TailleCarre, Y-TailleCarre,X+TailleCarre,Y+TailleCarre)

DETECTION_CLIC_OBJET = False




# Création de la fenêtre principale
Mafenetre = Tk()
Mafenetre.title("Le mot a trouver")

#Création d'un widget Canvas
Largeur= 500
Hauteur= 300
#TailleCarre=20
Canevas=Canvas(Mafenetre,width=Largeur,height=Hauteur,bg='White')

#Création de sept carrés alignés sur une ligne dans lesquels on va y mettre les lettres
liste_Carre=[]; x1=40;y1=100
for k in range(7):
    x2=x1+40;y2=y1+40
    liste_Carre.append(Canevas.create_rectangle(x1,y1,x2,y2,fill='white',outline='black')) # on ajoute un rectangle à la liste
    x1=x2

#Création de sept carrés alignés sur une ligne dans lesquels les lettres mélangées vont apparaître
liste_Carre_Bouge=[]; x1=40;y1=200
for k in range(7):
    x2=x1+40;y2=y1+40
    liste_Carre_Bouge.append(Canevas.create_rectangle(x1,y1,x2,y2,fill='white',outline='black'))
    x1=x2

# Création de quatre boutons
boutonGo = Button(Mafenetre,text='GO',width=5,height=2,command=Demarrer) #command=Demarrer
boutonGo.place(x=50,y=20)

boutonQuit = Button(Mafenetre,text='Quitter',width=5,height=2,command=Mafenetre.destroy) #command=Quitter
boutonQuit.place(x=300,y=20)

boutonReesayer = Button(Mafenetre,text='Réessayer',width=10,height=2) #command=Reessayer
boutonReesayer.place(x=400,y=210)

boutonMotSuivant = Button(Mafenetre,text='Mot suivant',width=10,height=2) #command=Passer_MotSuivant
boutonMotSuivant.place(x=400,y=110)

#La méthode bind() permet de lier un événement avec une fonction
Canevas.bind('<Button-1>',Clic) #événement clic gauche (press)
Canevas.bind('<B1-Motion>',Drag) #événement bouton gauche enfoncé (hold down)

TailleCarre=20
Canevas.focus_set()
Canevas.pack(padx=10,pady=10)

Mafenetre.mainloop()

Hors ligne

#21 Le 19/05/2019, à 16:23

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

J'essaie des trucs de mon côté mais avec ce que j'ai compris dans le cours de ma fille.

j'ai refait deux lignes de sept carrés qui sont tous les deux fixes.

j'ai mis dans le bouton GO ( donc dans la fonction Démarrer) ceci :
"Quand je clique;  je fais apparaître les lettres mises dans le désordre du premier mot à trouver par exemple ABRICOT ( sous forme de label) dans les carrés du bas

est-ce possible de faire bouger ces lettres ( sous forme de label) pour les mettre dans la première ligne de carrés ?
Comment j'adapte le def clic et le def drag dans ce cas ?


from tkinter import *
import time
from random import shuffle

def Demarrer() : # A faire -> faire apparaître les lettres du premier mot à trouver dans le désordre  dans la liste_Carre_Bouge
   listeMot1_solution=["A","B","R","I","C","O","T"]
   shuffle(listeMot1_solution)
   labelLettre0 = Label(Mafenetre,text=listeMot1_solution[0])
   labelLettre0.place(x=60,y=220)
   labelLettre1 = Label(Mafenetre,text=listeMot1_solution[1])
   labelLettre1.place(x=100,y=220)
   labelLettre2 = Label(Mafenetre,text=listeMot1_solution[2])
   labelLettre2.place(x=140,y=220)
   labelLettre3 = Label(Mafenetre,text=listeMot1_solution[3])
   labelLettre3.place(x=180,y=220)
   labelLettre4= Label(Mafenetre,text=listeMot1_solution[4])
   labelLettre4.place(x=220,y=220)
   labelLettre5 = Label(Mafenetre,text=listeMot1_solution[5])
   labelLettre5.place(x=260,y=220)
   labelLettre6= Label(Mafenetre,text=listeMot1_solution[6])
   labelLettre6.place(x=300,y=220)

#def Reesaayer() : A faire -> Ramener les lettres dans la liste_Carre_Bouge

#def Passer_MotSuivant() :  A faire -> passer au mot suivant dans tous les cas ! et mettre un compteur pour compter le nombre de bons mots trouvés et le temps qu'il a mis

#def Quitter() : A faire : -> faire apparaître une boite  de dialogue (messagbox) disant combien de mots ont été trouvés  et le temps qu'il a mis. Puis quitter l'application


#def quel_Carre_Bouge(liste_Carre_Bouge,X,Y):
#    ret=None; k=0   # ret est un pointeur
#    for Carre_Bouge in liste_Carre_Bouge:
#        [xmin,ymin,xmax,ymax] = Canevas.coords(Carre_Bouge)
#        if xmin <= X <=xmax and ymin <=Y<=ymax: ret=k,xmin,ymin,xmax,ymax; break
#        k=k+1
#    return ret

#def Clic(event):
 #   global DETECTION_CLIC_SUR_OBJET, ret

  #  X= event.x
  #  Y= event.y
   # print("Position du clic -> ",X,Y)
   # ret=quel_Carre_Bouge(liste_Carre_Bouge,X,Y)

    #if ret!=None:
     #DETECTION_CLIC_SUR_OBJET=True
     #k,xmin,ymin,xmax,ymax=ret

     ##print("Carre_Bouge n° %d"%(k+1)) pas besoin de formater !!
     #print("Carre_Bouge n°",k+1)
     #print("Position objet ->",xmin,ymin,xmax,ymax)
    #else:
     #DETECTION_CLIC_SUR_OBJET=False
    #print("DETECTION_CLIC_SUR_OBJET ->",DETECTION_CLIC_SUR_OBJET )

#def Drag(event):
   ##Gestion de lévénement bouton gauche enfoncé
 # X= event.x
 #  Y= event.y
 #  print("Position du pointeur ->",X,Y)

  # if DETECTION_CLIC_SUR_OBJET == True:
    ##limite de l'objet dans la zone graphique
  #  if X<0:
   #         X=0
   # if X>Largeur:
   #        X=Largeur
   # if Y<0:
   #        Y=0
   #if Y>Hauteur:
   #     Y=Hauteur
    ##mise a jour de la position de l'objet (drag)
   # if ret!=None:
    #  k,xmin,ymin,xmax,ymax=ret
    #  Canevas.coords(liste_Carre_Bouge[k],X-TailleCarre, Y-TailleCarre,X+TailleCarre,Y+TailleCarre)

#DETECTION_CLIC_OBJET = False




## Création de la fenêtre principale
Mafenetre = Tk()
Mafenetre.title("Le mot a trouver")

#Création d'un widget Canvas
Largeur= 500
Hauteur= 300
#TailleCarre=20
Canevas=Canvas(Mafenetre,width=Largeur,height=Hauteur,bg='White')

#Création de sept carrés alignés sur une ligne dans lesquels on va y mettre les lettres (ligne du haut). reste FIXE
CarreH1=Canevas.create_rectangle(40,100,80,140,fill='white',outline='black')
CarreH2=Canevas.create_rectangle(80,100,120,140,fill='white',outline='black')
CarreH3=Canevas.create_rectangle(120,100,160,140,fill='white',outline='black')
CarreH4=Canevas.create_rectangle(160,100,200,140,fill='white',outline='black')
CarreH5=Canevas.create_rectangle(200,100,240,140,fill='white',outline='black')
CarreH6=Canevas.create_rectangle(240,100,280,140,fill='white',outline='black')
CarreH7=Canevas.create_rectangle(280,100,320,140,fill='white',outline='black')


#Création de sept carrés alignés sur une ligne dans lesquels les lettres vont apparaître (ligne du bas); reste FIXE
CarreB1=Canevas.create_rectangle(40,200,80,240,fill='white',outline='black')
CarreB2=Canevas.create_rectangle(80,200,120,240,fill='white',outline='black')
CarreB3=Canevas.create_rectangle(120,200,160,240,fill='white',outline='black')
CarreB4=Canevas.create_rectangle(160,200,200,240,fill='white',outline='black')
CarreB5=Canevas.create_rectangle(200,200,240,240,fill='white',outline='black')
CarreB6=Canevas.create_rectangle(240,200,280,240,fill='white',outline='black')
CarreB7=Canevas.create_rectangle(280,200,320,240,fill='white',outline='black')







#Création de sept carrés alignés sur une ligne dans lesquels les lettres mélangées vont apparaître
#liste_Carre_Bouge=[]; x1=40;y1=200
#for k in range(7):
#    x2=x1+40;y2=y1+40
 #   liste_Carre_Bouge.append(Canevas.create_rectangle(x1,y1,x2,y2,fill='white',outline='black'))
  #  x1=x2


# Création de quatre boutons
boutonGo = Button(Mafenetre,text='GO',width=5,height=2,command=Demarrer) #command=Demarrer
boutonGo.place(x=50,y=20)

boutonQuit = Button(Mafenetre,text='Quitter',width=5,height=2,command=Mafenetre.destroy) #command=Quitter
boutonQuit.place(x=300,y=20)

boutonReesayer = Button(Mafenetre,text='Réessayer',width=10,height=2) #command=Reessayer
boutonReesayer.place(x=400,y=210)

boutonMotSuivant = Button(Mafenetre,text='Mot suivant',width=10,height=2) #command=Passer_MotSuivant
boutonMotSuivant.place(x=400,y=110)

#La méthode bind() permet de lier un événement avec une fonction
#Canevas.bind('<Button-1>',Clic) #événement clic gauche (press)
#Canevas.bind('<B1-Motion>',Drag) #événement bouton gauche enfoncé (hold down)

#TailleCarre=20

#Canevas.focus_set() ## ça sert  quoi ?
Canevas.pack(padx=10,pady=10)

Mafenetre.mainloop()

Hors ligne

#22 Le 19/05/2019, à 19:30

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

RECOUCOU

j'ai relu ce qu'elle doit faire. on n'est pas obligé de faire bouger quoi que ce soit !!!
il a donné un visuel à respecter :
on doit voir deux lignes de rectangles une en haut et une bas.
Celle du bas doit contenir les lettres.

j'ai pensé à mettre pour la ligne du haut des "entry"
on doit récupérer les lettres tapées dans ces entry et comparer avec le mot à trouver !!
et bien sûr au bout des 10 mots à trouver; il faut dire combien de mots il a trouvé et le temps mis !!

Hors ligne

#23 Le 19/05/2019, à 20:08

pingouinux

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

Est-il obligatoire d'avoir un rectangle par lettre ? Sinon on peut se contenter de 2 rectangles, celui du bas contenant un mot en désordre, et celui du haut dans lequel on teste une solution.

Hors ligne

#24 Le 19/05/2019, à 20:37

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

non je ne pense pas

Hors ligne

#25 Le 19/05/2019, à 20:43

Nat62

Re : SOS aide pour programmer "le mot à trouver" élève de seconde

on peut peut-être mettre en bas sept boutons dans lesquels on mettrait les lettres en cliqauant sur un autre bouton.
Et quand on cliquerait sur un bouton contenant une lettre; la lettre se mettrait  dans le premier carré du dessus ainsi de suite.

Pour ramener une lettre dans un boutons; on clique sur un autre bouton...

J'ai trouvé ceci sur internet mais ça ne marche pas bien et il y a une grille qui apparaît dans le canevas !! il faut l'adapter mais je ne comprends pas tout ce qu'il fait !!!

from tkinter import * # importation de tous les modules
from random import * # fonction choice
from tkinter import messagebox # utilisation des messages

selected_letter = None
undo_stack = []

def apply_command(btn, label):

    global selected_letter
    saved_letter = selected_letter

    lettre = btn['text']
    btn.configure(text=' ', state='disable')
    label['text'] = lettre
    selected_letter = lettre

    def _undo():
        global selected_letter
        selected_letter = saved_letter
        btn.configure(text=lettre, state='normal')
        label['text'] = ' '

    return _undo


def do_select(btn):
    global undo_item

    x = len(undo_stack)
    label = labels[x]
    undo_stack.append( apply_command(btn, label) )

def do_undo():
    global undo_item

    if not len(undo_stack):
        return
    undo_stack.pop(-1)()

def cliquer(event):
    """fonction permettant de tracer la lettre dans le Canvas."""
    global drapeau, cercle, abscase,ordcase, lettre
    drapeau = 1
    abscisse = event.x
    ordonnee = event.y


    abscase = abscisse/33 -0.15
    ordcase = ordonnee/33 - 0.15
    abscase =int(abscase) + 0.5
    ordcase = int(ordcase) + 0.5
    abscases = int(abscase)
    ordcases= int(ordcase)
    iid = canvas.create_text(abscase*33 ,ordcase*33 , text=selected_letter)
    undo_stack.append(lambda: canvas.delete(iid))

def create_canvas(master):
    w = Canvas(root, width=500, height=500)
    for k in range(16):
        w.create_line(0, 33*k+3, 500, 33*k+3, width=1)
        w.create_line(33*k+3, 0, 33*k+3, 500, width=1)
    return w


labels = []

root = Tk()
canvas = create_canvas(root)
frame = Frame(root)

L = ['A','A','A','A','A','A','A','A','A', 'B','B','C','C','D','D','D','E','E','E','E','E','E','E','E','E','E','E','E','E','E','E','F','F','G','G','H','H','I','I','I','I','I','I','I','I','J','K','L','L','L','L','L','M','M','M','N','N','N','N','N','N','O','O','O','O','O','O','P','P','Q','R','R','R','R','R','R','S','S','S','S','S','S','T','T','T','T','T','T','U','U','U','U','U','U','V','V','W','X','Y','Z']

def get_lettres():
    letters = L[:]
    pioche = []
    for x in range(8):
        ch = choice(letters)
        pioche.append(ch)
        letters.remove(ch)

    return pioche

def do_pioche():
    pioche = get_lettres()
    for x, ch in enumerate(pioche):
        btn = Button(frame, text=ch)
        btn['command'] = lambda btn=btn: do_select(btn)
        btn.grid(row=0, column=x)

        label = Label(frame, text=' ')
        label.grid(row=1, column=x)
        labels.append(label)

canvas.grid(row = 0, column = 0)
frame.grid(row=1, column=0)
Button(root, text='undo', command=do_undo).grid(row = 3, column= 0)
canvas.bind("<Button-1>", cliquer)
Button(root, text ='pioche', command=do_pioche).grid(row = 3,column=1)
root.mainloop()

Hors ligne