Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ou placer ma boucle ?

Sujet résolu
    6 mars 2011 à 12:28:32

    Bonjour a tous ,
    voila j'ai débutez le python il y a une petite semaine , j'ai commencer par lire des pdf et hier j'ai penser a venir voir sur le site du zero au cas ou il y ai des ptits tuto . Et miracle il y en avait. Arrivé au tp de Zcasino , vu que j'avais suivi des tutos sur Tkinter je me suis dis je vais essayé de faire Zcasino avec une petite interface graphique pour m'entrainner ....

    Ce ne fut pas facile du tout vu mon niveau , plusieur réecriture car j'avais des ptits soucis avec les variables et mes définitions ... et a vrai dire ce n'est pas encore au point du tout mais j'ai
    les idées en tete .Mais le gros soucis c'est que maintenant que j'ai écrit pas mal de ligne de code et bien du coup je ne sais plus ou mettre ma Boucle ...

    j'ai beau reflechir , d'un coup c'est le vide dans mon crane :s ... si quelqu'un aurait un ptit conseil je ne dirais pas non :)

    #-*- coding:Latin-1 -*-
    
    #Import des modules
    
    from random import randrange
    from Tkinter import *
    import tkMessageBox
    from math import ceil
    
    global bank , varBank , n
    
    #==================================================DEFINITION DES FONCTIONS
    
    def verif():
        global bank 
        a = eval(champMise.get())
        varMise.set(str(a))
        b = eval(champPari.get())
        varChoix.set(str(b))
        if a > bank or a <= 0 :
            print 'Erreur'
        elif b < 0 or b > 50:
            print 'erreur'
        else :
            print 'everythings OK ;p'
            bank = bank - a
            varBank.set(str(ceil(bank)))
        
        
        
    def color():
        global n
        n = n + 1
        if n == 0:
            bouttonColor.config(bg='black',fg='white')
        if n >= 1:
            bouttonColor.config(bg='red',fg='black')
            n = -1
    
    
    def result():
        
        h = randrange(0,50)
        varResult.set(str(h))
        return varResult
    
    
        
    root = Tk()                 #==================== FENETRE PRINCIPAL
    root.configure(bg='grey')
    root.title('Zroulette')
    
    bank = 1500                 #============ DECLARATION DES VARIABLES
    varChoix = StringVar()
    varMise = StringVar()
    varBank =  StringVar()
    varBank.set(str(bank))
    varResult = StringVar()
    n = 0
    
     
    fram1 = Frame(root,bg='red',width=60,height=35)                                                      # FRAME MISE EN PAGE
    fram1.grid(row=1,column=1)                                                                           #
    
    titre = Label(root,text='ZRoulette',font=('comic',18),bg='grey',relief=GROOVE,width=10)              # TITRE    
    titre.grid(row=1,column=2)                                                                           #
    
    fram2 = Frame(root,bg='black',width=60,height=35)                                                    # FRAME MISE EN PAGE
    fram2.grid(row=1,column=3)                                                                           #
        
    fram3 = Frame(root,bg='grey',height=15,width=200)
    fram3.grid(row=2,column=1,columnspan=3)
    
    label1 = Label(root,text='Dollar(s) restant :',bg='grey',font=('comic',11))                          #                       
    label1.grid(row=3,column=2,sticky=E)                                                                 #  AFIICHAGE DES DOLLARS             
    champBank = Entry(root,state=DISABLED,textvariable=varBank,width=10,relief=GROOVE,justify=RIGHT)     #  RESTANT
    champBank.grid(row=3,column=3,sticky=E)                                                              #
    
    fram4 = Frame(root,bg='grey',height=15,width=200)                                                    # FRAME MISE EN PAGE
    fram4.grid(row=4,column=1,columnspan=3)                                                              #
                
    label2 = Label(root,text='Entrer la mise :',bg='grey',font=('comic',11))                             #
    label2.grid(row=5,column=2,sticky=E)                                                                 # CHAMP DE MISE
                                                                                                         # 
    champMise = Entry(root,width=10,relief=GROOVE,justify=RIGHT)                                         #
    champMise.grid(row=5,column=3,sticky=E)                                                              #
    
    label3 = Label(root,text='Entrer un nombre entre 0 et 50:',font=('comic',11),bg='grey')              # CHAMP POUR LE CHOIX                                        
    label3.grid(row=6,column=1,columnspan=2)                                                             # DU NOMBRE
    champPari = Entry(root,width=10,relief=GROOVE,justify=RIGHT)                                         #
    champPari.grid(row=6,column=3,sticky=E)                                                              #
    
    fram5 = Frame(root,bg='grey',height=15,width=200)                                                    # FRAME MISE EN PAGE
    fram5.grid(row=7,column=1,columnspan=3)                                                              #
    
    bouttonColor = Button(root,text='Couleur',bg='black',fg='white',command=color,relief=GROOVE,width=9,height=2) # BOUTTON CHOIX 
    bouttonColor.grid(row=8,column=3)                                                                             # COULEUR
    
    bouttonGo = Button(root,text='Go !',command=verif,width=45)                                          # BOUTTON GO POUR LANCER
    bouttonGo.grid(row=9,column=1,columnspan=3,sticky=W)                                                 # VERIF
    
    fram6 = Frame(root,bg='grey',height=15,width=200)                                                    # FRAME MISE EN PAGE   
    fram6.grid(row=10,column=1,columnspan=3)                                                             #
    
    label4 = Label(root,bg='grey',text='Tirage :',font=('comic',13))                                     # AFFICHAGE DU TIRAGE                                 
    label4.grid(row=11,column=2,sticky=E)                                                                #
    champTirage = Entry(root,width=10,relief=GROOVE,state=DISABLED,justify=RIGHT,textvariable=result)    #
    champTirage.grid(row=11,column=3,sticky=E)                                                           #
    
    
    
    root.mainloop()
    


    Mon code n'est peut etre pas très joli ^^ on fait ce qu'on peut :lol:


    EDIT : Alors j'ai trouvé une solution , j'ai continuer a developper mon script dans la definition de verif ... A mon avis ce n'est pas comme sa que je devrais faire , je renvoi mon code d'ici 1 petite heure quand j'aurai fini vous me direz ce que vous en pensez ..
    pour l'instant sa a l'air fonctionel mais bon ..


    Au final j'ai tout refait....plus qu'a regler 2 ou 3 truc comme le fait de pas pouvoir etre a decouvert lol :-°

    #-*- coding:Latin-1 -*-
    
    #Import des modules
    
    from random import randrange
    from Tkinter import *
    import tkMessageBox
    from math import ceil
    
    #Fonction
    global bank
    
    
    def couleurChoix(event):
        a = eval(entrChoix.get())
        if a%2 == 0:
            entrChoix.config(bg='black',fg='white')
        elif a < 0 or a > 50:
            entrChoix.config(bg='grey',fg='black')
        else:
            entrChoix.config(bg='red',fg='black')
     
        
    def go():
        global bank , nB
        nB = 0
        nB = randrange(0,50)
        mise = eval(entrMise.get())
        varGo.set(str(nB))
        a = eval(entrChoix.get())
        c = 1
        bank = bank - mise
        varBank.set(str(bank))
        while c != 0:
            if a%2 == 0:
                e = 0
            elif a%2 !=0:
                e = 1
            if nB%2 ==0:
                labGain.config(bg='black',fg='white')
                f = 0
            elif nB%2 != 0:
                labGain.config(bg='red',fg='black')
                f = 1
            c = 0
        c = 1
        while c != 0:
            if nB == a:
                labGain.config(text='$ Gagné mise x 3 $')
                varBank.set(str(ceil(bank+(mise*3))))
                varGain.set(str(ceil(mise*3)))
            if e == f and nB != a :
                labGain.config(text='$ Gagné mise / 2  $')
                varBank.set(str(ceil(bank+mise/2)))
                varGain.set(str(ceil(mise-mise/2)))
            if nB != a and e != f:
                labGain.config(text='$ Perdu $')
                varGain.set(str(ceil(-mise)))
            c = 0
                
                        
    
    
        
        
    
            
    
    
    
    root = Tk()                           #===== fenetre principale          
    root.title('Zroulette')             
    
    titre = Label(root,text='Zroulette')  #===== déclarations des variable
    titre.pack()
    bank = 1500
    varA = StringVar()
    varA.set('0')
    varGo = StringVar()
    varBank = StringVar()
    varBank.set(str(bank))
    varGain = StringVar()
    
    
    fram1 = Frame(root,height=20)           #==== frame pour la mise en page
    fram1.pack()
    
    labBank = Label(root,text='Vos Dollar(s):')              #== label BANK et le champ pour voir sa fortune
    labBank.pack()
    entrBank = Entry(root,state=DISABLED,font=(12),fg='black',justify=CENTER,textvariable=varBank,width=14)
    entrBank.pack()
    
    labMise = Label(root,text='Entrer votre mise:')          #== Label MISE et le champ pour entrer la MISE                                                   
    labMise.pack()
    entrMise = Entry(root,justify=CENTER)
    entrMise.pack()
    
    labChoix = Label(root,text='Votre Numéro (0-50):')      # ==== Choix du nombre
    labChoix.pack()
    entrChoix = Entry(root,justify=CENTER,textvariable=varA,bg='black',fg='white')
    entrChoix.bind_all('<Leave>',couleurChoix)      #<===== 'Leave' pour que la couleur de la case change en fonction du nombre entrer...
    entrChoix.pack()                                        #.. ,le changement ce fait par simple survol de la souris
    
    boutGo=Button(root,text='Go !',width=20,command=go) #===Boutton pour lancer le tirage et le resultat
    boutGo.pack()
    
    labelTirage = Label(root,text='Tirage:',font=(18))  #affichage du tirage
    labelTirage.pack()
    entrTirage = Entry(root,state=DISABLED,justify=CENTER,textvariable=varGo)
    entrTirage.pack()
    
    labGain = Label(root,width=15,height=2,font=('comic',10,),relief=GROOVE)    #affichage de gain
    labGain.pack()
    entrGain = Entry(root,state=DISABLED,textvariable=varGain,relief=GROOVE)
    entrGain.pack()
    
    boutQuit = Button(root,width=13,text='Quit',font=(18),command=sys.exit)
    boutQuit.pack()
    
    
    
    
    
    
    root.mainloop()
    
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      6 mars 2011 à 18:57:51

      Une ou deux remarques vite fait car j'ai pas eu le temps de tout regarder.

      1) La gestion des mises supérieures à la valeur limite est absente (tu l'as dis dans le post précédent).
      2) La remise à 0 des mises pour éviter d'effacer à chaque fois l'ancienne mise.

      Si tu fais une faute de frappe (par exemple a00 à la place de 100), que se passe-t-il ?

      • Partager sur Facebook
      • Partager sur Twitter
        6 mars 2011 à 19:04:23

        ah oui , j'avais pas pensé a la faute de frappe! je vais me pencher la dessus et sur les limitations...

        je vais encore y perdre des cheveux :p


        EDIT:

        alors les petites modifications faites :

        - Boutton restart
        - Empechement de mettre se mettre a decouvert
        - impossible de choisir un nombre qui n'est pas entre 0 et 50

        voila par contre je n'arrive pas a contrer le probleme si on entre des lettres ou des signes...
        si quelqu'un a une petite idée ..

        je pense essayer de l'ameliorer avec la possibilité de rentrer un nom de joueur avec un tableau des plus grosse sommes ..

        et apres je vais tenté d'y incorporé un jeux de blackjack , je me disai que sa devrai pas etre dur a faire .


        #-*- coding:Latin-1 -*-
        
        #Import des modules
        
        from random import randrange
        from Tkinter import *
        from math import ceil
        
        #Fonction
        
        global bank , start
        def couleurChoix(event):
            a = eval(entrChoix.get())
            if a%2 == 0:
                entrChoix.config(bg='black',fg='white')
            elif a < 0 or a > 50:
                entrChoix.config(bg='grey',fg='black')
            else:
                entrChoix.config(bg='red',fg='black')
         
        def test(bank,mise,choix):
            if choix < 0 or choix > 50:
                labGain.config(text='un nombre entre 1 et 50')
                return 1
            if mise < 0 or mise > bank:
                labGain.config(text='Mauvaise mise')
                return 1
            if bank <= 0:
                labGain.config(text='Perdu')
                return 1
            else:
                return 0
            
        def go():
            global bank , nB , start
            nB, c, mise = 0, 1, eval(entrMise.get())
            a = eval(entrChoix.get())
            if test(bank,mise,a) == 0:
                
                nB = randrange(0,50)    
                varGo.set(str(nB))
                bank = bank - mise
                varBank.set(str(bank))
                while c != 0:
                    if a%2 == 0:
                        e = 0
                    elif a%2 !=0:
                        e = 1
                    if nB%2 ==0:
                        labGain.config(bg='black',fg='white')
                        f = 0
                    elif nB%2 != 0:
                        labGain.config(bg='red',fg='black')
                        f = 1
                    c = 0
                c = 1
                while c != 0:
                    if nB == a:
                        labGain.config(text='$ Gagné mise x 3 $')
                        varBank.set(str(ceil(bank+(mise*3))))
                        varGain.set(str(ceil(mise*3)))
                    if e == f and nB != a :
                        labGain.config(text='$ Gagné mise / 2  $')
                        varBank.set(str(ceil(bank+mise/2)))
                        varGain.set(str(ceil(mise-mise/2)))
                    if nB != a and e != f:
                        labGain.config(text='$ Perdu $')
                        varGain.set(str(ceil(-mise)))
                    c = 0
                varZero.set('0')
        
        def restart():
                bank = 1500
                varBank.set(str(bank))
                varGain.set('0')
                varA.set('0')
                varZero.set('0')
                varGo.set('0')
                labGain.config(text='$ Go $')
        
            
        root = Tk()             #===== fenetre principale          
        root.title('Zroulette')             
        
        titre = Label(root,text='Zroulette',font=('comic',16))  #===== déclarations des variable
        titre.pack()
        start = 0
        bank = 1500
        varGo = StringVar()
        varA = StringVar()
        varGain = StringVar()  
        varBank  = StringVar()
        varZero = StringVar()
        varA.set('0')
        varZero.set('0')
        varBank.set(str(bank))
        
        
        
        fram1 = Frame(root,height=20)      #==== frame pour la mise en page
        fram1.pack()
        
        labBank = Label(root,text='Vos Dollar(s):')      #== label BANK et le champ pour voir sa fortune
        labBank.pack()
        entrBank = Entry(root,state=DISABLED,font=(12),fg='black',justify=CENTER,textvariable=varBank,width=14)
        entrBank.pack()
                
        labMise = Label(root,text='Entrer votre mise:')    #== Label MISE et le champ pour entrer la MISE                                                   
        labMise.pack()
        entrMise = Entry(root,justify=CENTER,textvariable=varZero)
        entrMise.pack()
        
        labChoix = Label(root,text='Votre Numéro (0-50):')   # ==== Choix du nombre
        labChoix.pack()
        entrChoix = Entry(root,justify=CENTER,textvariable=varA,bg='black',fg='white')
        entrChoix.bind_all('<Leave>',couleurChoix)      #<===== 'Leave' pour que la couleur de la case change en fonction du nombre entrer...
        entrChoix.pack()                                        #.. ,le changement ce fait par simple survol de la souris
        
        boutGo=Button(root,text='Go !',width=20,command=go) #===Boutton pour lancer le tirage et le resultat
        boutGo.pack()
        
        labelTirage = Label(root,text='Tirage:',font=(18))  #affichage du tirage
        labelTirage.pack()
        entrTirage = Entry(root,state=DISABLED,justify=CENTER,textvariable=varGo)
        entrTirage.pack()
        
        labGain = Label(root,width=15,height=2,font=('comic',10,),relief=GROOVE)    #affichage de gain
        labGain.pack()
        entrGain = Entry(root,state=DISABLED,justify=CENTER,textvariable=varGain,relief=GROOVE)
        entrGain.pack()
        
        boutQuit = Button(root,width=13,text='Quit',font=(18),command=sys.exit)  #Bouton Quit
        boutQuit.pack()
        
        boutQuit = Button(root,width=13,text='Restart',font=(18),command=restart) # et un autre pour le Restart 
        boutQuit.pack()
        
        start = 0
        
        
        root.mainloop()
        


        si quelqu'un a une idée pour differrencier les nombre de tout les autres caracteres je suis preneur ^^
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          6 mars 2011 à 20:51:03

          A adapter à ton code

          while True:
              try:
                  nombre = int(input("Entrer N :"))
                  # traitement de nombre
                  break # on quitte la boucle
              except (ValueError, NameError):
                  continue # on revient au début de la boucle
          
          # Suite du code
          
          • Partager sur Facebook
          • Partager sur Twitter
            6 mars 2011 à 20:56:31

            je vais testé sa , je pense qu'il va falloir que je change le int(input("")) par un truc comme sa plutot int(Ma_variable.get())
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              6 mars 2011 à 21:00:06

              exact!

              Par contre il faudra que tu effaces ton entry si il y a faute de frappe

              Un truc du genre

              def clear():
                  e.delete(0, END)
              
              root = Tk()
              e = Entry(root)
              e.pack()
              btn = Button(root, text = "effacer", command=clear).pack()
              
              root.mainloop()
              
              • Partager sur Facebook
              • Partager sur Twitter
                6 mars 2011 à 21:24:25

                alors j'ai essayer de differente façon :


                nombre = int(eval(Ma_variable.get())
                
                et :
                mise = eval(ma_variable.get()
                while true:
                    try:
                        nombre = int(eval(mise)
                


                et aussi en mettant mise = eval(ma_variable.get()) directement entre le while et le try

                mais sans succes ;;

                je l'ai mis a l'entrer du bloc de définition "go" juste avant de l'envoyer dans la fonction "test"
                et egalement testé en le mettant au debut de test ;; mais sans succes
                je pense qu'il doit aller dans la fonction go comme sa sa verifie si ce n'est que des nombres et hop apres sa peut partir dans la fonctions test ;;

                faut que je bidouille ..

                au lieu de faire un bouton clear , je remeterai la variable a 0 juste apres le test si il s'avere faux.. enfin c'est ce que j'imagine lol , comme je m'imaginai que cette roulette allait me prendre 2 ou 3 heure grandd max au final c'est plutot 2 ou 3 jour xd
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  6 mars 2011 à 21:41:29

                  En fait je me suis planté, j'aurais dû tester avant.

                  La boucle infinie, ça fonctionnera pas avec tkinter, je te donne un code vite fait que j'ai testé et qui fonctionne comme tu le souhaiterais.

                  from tkinter import *
                  
                  def test():
                      try:
                          nb = int(e.get())
                          f.insert(0, nb)
                      except (ValueError, NameError):
                          e.delete(0, END)
                  
                  root = Tk()
                  e = Entry(root)
                  e.pack()
                  
                  f = Entry(root)
                  f.pack()
                  
                  bouton = Button(root, text="test", command=test).pack()
                  
                  root.mainloop()
                  


                  Dans tout les cas il te faudra un bouton test qui te permettra de vérifier les valeurs entrées par l'utilisateur.

                  Edit : Teste le!
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 mars 2011 à 21:47:06

                    Ok je test sa , je vais inclure ce bloc au debut de ma fonction autre fonction test .. comme sa je clique sur mon boutton go .. sa m'envoi dans la fonction go qui elle meme a renvoie le tout dans la fonction test et suivant ce que test répond sa continue dans la fonction go ...


                    c'est un peu fouilli car en fait programme qui se charge de calculé est inclu dans une fonction ..
                    enfin bon la prochaine fois je ferais mieux j'espere



                    EDIT: Et bien parfait , sa fonctionne. Merci a toi pour cette méthode , je la marque dans mon bloc note , elle me reservira a coup sur !!

                    je vais me lancer dans un la creation du tableau des scores :)
                    je met le Sujet en Resolu;
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      6 mars 2011 à 23:18:09

                      Si tu veux continuer à durcir l'exercice, il va falloir utiliser la POO, qui te permettra d'avoir un code organisé, car là, je dois dire que ton code part un peu (je suis gentil) dans tous les sens.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 mars 2011 à 23:43:16

                        Oui mon code c'est le B**** ^^ , faut bien un début a tout .. :D
                        j'ai du mal a savoir ou je vais par moment .. faudrai que je fasse un shema sur papier avant d'ecrire le code sa m'aiderai a voir d'avance comment je vais m'organiser .
                        La pour la roulette par exemple je ne savais pas par quoi commencé .. l'interface ou les fonctions ..ou peut etre encore listé les variables.. bref quand je commençais par un bout je me rendais compte que je pouvais pas continuer sans entamé un autre bout et ainsi de suite .. d'ou le titre de mon Post , maintenant je me rend compte que je cherchai a mettre une boucle comme dans les exercice que j'ai fait en mode console mais avec Tkinter sa ma un peu perdu ^^
                        Au final je suis quand meme content d'avoir fait ce ptit script, j'aurais decouvert pas mal de petit truc en bidouillant^^

                        EDIT : je viens de faire une autre petite modif , car si tu as testé de lancé mon script , quand on choisi un nombre en passant dessus sa met automatiquement la couleur correspondante.. met si il detectait un autre caracter inaproprier j'avais une erreur console vu que le test n'avais pas été lancé . Donc pour cette case , le test se lance automatiquement dès qu'on passe la souris dessus , et remet la valeur a zero de suite :)

                        Encore Merci pour ta méthode ;)
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          6 mars 2011 à 23:57:10

                          Oui mais ce que je veux dire, c'est qu'il vaut mieux continuer ton tuto sur le site et lorsque tu commenceras la POO, te remettre dessus pour avoir un code bien organisé.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            6 mars 2011 à 23:59:03

                            Oui , c'est pas une mauvaise idée ^^
                            d'ailleur je crois que vu que je me suis levé tard je vais me consacré la nuit sur la suite des tutos !
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Ou placer ma boucle ?

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown