IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

dans tinker exo swinner, faire avancer une balle et la faire reculer toujours avec le même bouton


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 96
    Par défaut dans tinker exo swinner, faire avancer une balle et la faire reculer toujours avec le même bouton
    Bonjour,
    je suis en train de suivre le livre de Swinnen et je bute sur l'exercice 8.17
    il faut dans tinker créer un cercle et en bas un bouton. Quand on clique sur le bouton, le cercle avance jusqu’au limite de la fenêtre , et toujours en cliquant sur le même bouton il doit reculer jusqu’à l’autre extrémité de la fenêtre.


    voilà le code que j’ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    from tkinter import *
     
    def avance(n, g):
        global x, y, step
        # nouvelles coordonnées :
        x[n] = x[n] + g # deplacement de l'axe des x
        # déplacement du dessin dans le canevas :
        can.coords(bille[n], x[n]-10, y[n]-10, x[n]+10, y[n]+10)
     
        # affichage pour info du x:
        Info.configure(text="Coordonnée x = " + str(x[n]))
     
     
        i = 0
        z = 400 # on part de 400 (limite fenetre) pour le deuxieme while
     
        while i < 400 and x[n] < 390:
            step = +20
            i = i+5
            return step
     
     
        while z >= 50 and x[n] >= 50:
            step = -20
            z = z-5
            return step
     
     
    def go():
        avance(0, step)
     
     
    bille = [0]      # liste servant à mémoriser les références du cercle
    x = [50]     # X de départ
    y = [100]    # y de départ
    step = 0   # "pas" de déplacement initial
     
    # Construction de la fenêtre :
    fen = Tk()
    fen.title("avance quand on clique jusqu'à la limite de la fenêtre et revient")
     
     
    Info = Label(fen) # pour afficher l'info du x
    Info.grid(row=3, column=0)
     
    # Canvas :
    can = Canvas(fen, bg="white", width=400, height=200)
    can.grid(row=2, column=0, columnspan=2)
    bille[0] = can.create_oval(x[0]-10, y[0]-10, x[0]+10, y[0]+10,
                               fill="blue")
     
    # bouton avance :
    f = Frame(fen)
    f.grid(row=4, column=0, sticky=W, padx=10)
     
    Button(f, text="Go", fg='blue', command=go).pack(side=LEFT)
     
    fen.mainloop()




    dans la deuxième boucle, ça recule d’un pas, mais du coup il se retrouve dans les conditions de la première boucle et ça avance au lieu de reculer (etc.)
    j’essaye de me cantonner à une solution avec while ( on n’a pas vu encore for etc..)


    merci de votre aide et suggestions

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Salut,

    Citation Envoyé par Zembla Voir le message
    dans la deuxième boucle, ça recule d’un pas, mais du coup il se retrouve dans les conditions de la première boucle et ça avance au lieu de reculer (etc.)
    j’essaye de me cantonner à une solution avec while ( on n’a pas vu encore for etc..)
    ben ouias, du coup c'est pas un problème dans le code mais dans l'algorithme ou plutôt dans la façon de traduire "j'avance dans une direction jusqu'à rencontrer le bord et alors j'avance dans la direction opposée jusqu'à rencontrer un autre bord".

    Essayez de réfléchir un peu avec crayon papier... tracer une droite, placer 3 marques 0, 1, 2. Si on est en 0 est qu'on avance de 1 jusqu'à 2 arrivé en 2 on va avancer de -1 non pas lorsqu'on est hors des bornes mais tant que la position reste >= 0.

    note: les swinnen vous donne les bases de Python avant de vous jeter dans tkinter... donc vous devriez savoir utiliser des boucles for mais ici elles n'ont pas plus grande utilité que le while.


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 96
    Par défaut
    merci
    j’ai testé avec un simple print et là il me décrémente bien quant il arrive à la valeur max.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while i < 400:
            i = i+50
            print("avance", i)
    while i > 0:
        i = i-50
        print("recule", i)
    je n’arrive pas à faire de même avec le code dans tinker.
    j’ai essayé de poser ça sur un papier, mais je n’arrive pas à comprendre la logique, j'ai un blocage.
    le code dans tinker ne fonctionne pas, après un premier pas de décrémentation, il incrémente et c’est la valse avance et recule(vu qu’on vérifie les conditions de la première boucle)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while x[n]  < 410:  # tant que la position x est inférieur à 410
            step = +20
            return step
     
        while x[n] > 50: # tant que x est supérieur à 50 ( position de départ)
            step = -20
            return step

  4. #4
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 96
    Par défaut
    dans mon post précédent j'ai mal indenté mon code , il est ok dans mon éditeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while x[n]  != 410:
    step = +20
    return step
     
    while x[n] >= 50:
    step = -20
    return step
    merci pour toute info

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Salut,

    Citation Envoyé par Zembla Voir le message
    je n’arrive pas à faire de même avec le code dans tinker.
    j’ai essayé de poser ça sur un papier, mais je n’arrive pas à comprendre la logique, j'ai un blocage.
    Parce qu'avec tkinter appuyer sur le Button appelle une fonction qui avance d'un pas.
    Le "while" est remplacé par des appuis successifs sur le Button.

    Reprenez la feuille de papier et mimer une fonction "bouge" qui avance comme dans l'exemple que je vous ai donné.
    Ca devrait vous donner des idées.

    Ceci dit, si vous n'avez pas vu les boucles "for", c'est que vous avez sauté des tas de chapitres et d'exercices qui vous permettraient d'y voir plus clair.
    Pourquoi vous acharner là dessus alors que vous avez déjà sauté des tas de trucs?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 96
    Par défaut
    merci pour votre aide
    en fait la boucle for est abordé au chap. 10 et là j'en suis au chapitre 8.
    Justement j'essaye de faire les exos le plus possible dans l’ordre pour bien assimiler l'apprentissage. C’est ce qui fait pour moi la grande valeur de ce livre.

    Bon, je retourne à mon crayon et j’essaye de sortir de ce brouillard.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Citation Envoyé par Zembla Voir le message
    en fait la boucle for est abordé au chap. 10 et là j'en suis au chapitre 8.
    ah oui, c'est vrai que les boucles "for" de Python sont bien plus compliquées qu'un while... néanmoins, ici, vous n'avez besoin ni de l'un ni de l'autre. Juste fonction et variable globale devrait suffire (et dans le premier code que vous avez posté, vous savez ce que c'est) => ce n'est pas un problème de codage (vous avez tout) mais de compréhension.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire du SSH avec la même flexibilité que Putty
    Par Ceubex dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 08/04/2015, 19h21
  2. Afficher/Fermer une fenêtre avec le même bouton
    Par unic0 dans le forum Tkinter
    Réponses: 7
    Dernier message: 08/03/2015, 17h48
  3. Réponses: 1
    Dernier message: 06/08/2013, 11h57
  4. Réponses: 3
    Dernier message: 26/05/2010, 17h45
  5. Réponses: 5
    Dernier message: 01/10/2003, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo