Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de boucle

    28 décembre 2010 à 21:09:36

    Bonjour à tous, je suis nouveau, je me suis lancé dans Python il n y a pas trop longtemps, j'ai fais une partie du tutoriel, mais pas entièrement.
    Je me suis amusé à créer un programme qui dessine des fonctions selon nos envies, cependant j'ai un problème un moment au niveau de la boucle :

    demande = str(input("Quelle fonction désirez-vous dessinez ?"))
    
    if demande == 'cercle' :
        rayon = int(input("Quel rayon désirez-vous ?"))
        x = int(input("Abscisse ? "))
        y = int(input("Ordonnée ? "))
        up()
        goto(x,y)
        down()
        circle(rayon)
    
    if demande == 'ligne' :
        longueur = int(input("Quel hauteur désirez-vous ? "))
        forward(longueur)
    
    else :
        print("rien")
    
    j = "oui"
    while j == "oui":
        j = input("Voulez vous encore dessinez ?")
        if j == "oui":
            nouvelledemande == str(input("Quelle autre fonction désirez-vous dessinez ? "))
            
            if nouvelledemande == 'cercle' :
                rayon = int(input("Quel rayon désirez-vous ?"))
                x = int(input("Abscisse ? "))
                y = int(input("Ordonnée ? "))
                up()
                goto(x,y)
                down()
                circle(rayon)
    
            if nouvelledemande == 'ligne' :
                longueur = int(input("Quel hauteur désirez-vous ? "))
                forward(longueur)
    
            else :
                print("rien")
    
        elif k=="non":
            print("C'est fini")
    
        else:
            print("Erreur")
    


    Voilà, donc lorsque j'exécute une première fois le programme, je demande de créer un cercle sur la fenetre Python Turtle, je dis ensuite que je veux continuer le dessin, et je veux cette fois-ci dessiner une ligne, cependant, cela ne marche pas, et je ne comprends pas pourquoi. J'aimerais dessiner à chaque fois de nouveau dessin sur la fenetre de Python tant que j'en ai envie, et que la boucle se répète tant que je le souhaite.

    Merci d'avance pour votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      28 décembre 2010 à 21:53:46

      Tu répètes 2 fois le même bout de code. Englobe le tout dans une boucle comme ceci (code non testé) :

      j = "oui"
      while j == "oui":
      	demande == str(input("Quelle autre fonction désirez-vous dessinez ? "))
      			
      	if demande == 'cercle' :
      			rayon = int(input("Quel rayon désirez-vous ?"))
      			x = int(input("Abscisse ? "))
      			y = int(input("Ordonnée ? "))
      			up()
      			goto(x,y)
      			down()
      			circle(rayon)
      
      	elif demande == 'ligne' :
      			longueur = int(input("Quel hauteur désirez-vous ? "))
      			forward(longueur)
      
      	else:
      			print("rien")
      
      	j = input("Voulez vous encore dessinez ?")
      
      	if k == "non":
      		print("C'est fini")
      	elif k != "oui":
      		print("Erreur")
      
      print("C'est termine")
      
      • Partager sur Facebook
      • Partager sur Twitter
        28 décembre 2010 à 21:57:35

        Merci tout d'abord, je viens de m'apercevoir d'une petite erreur à la fin, c'est j et non k.
        Sinon, j'ai un autre problème, regardez :

        Quelle autre fonction désirez-vous dessinez ? cercle
        Quel rayon désirez-vous ?10
        Abscisse ? 34
        Ordonnée ? 45
        Voulez vous encore dessinez ?oui
        Quelle autre fonction désirez-vous dessinez ? ligne
        Quel rayon désirez-vous ?100
        Abscisse ? 23
        Ordonnée ? 23
        Voulez vous encore dessinez ?
        


        Je demande qu'il me dessine une ligne et le module me demande le rayon et les coordonnées et me redessine un cercle, alors que j'ai demandé une ligne.

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          28 décembre 2010 à 22:10:44

          Oula j'avais mal regardé, regarde la ligne où tu demandes la fonction desirée =)
          • Partager sur Facebook
          • Partager sur Twitter
            28 décembre 2010 à 22:15:35

            Désolé mais je n'arrive pas à comprendre là ...
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              28 décembre 2010 à 22:18:44

              demande == str(input("Quelle autre fonction désirez-vous dessinez ? "))
              Cherche un peu l'erreur, c'est tout bête ;)

              Prends également le réflexe d'utiliser la fonction raw_input au lieu de input , cette dernière étant obsolète.
              • Partager sur Facebook
              • Partager sur Twitter
                28 décembre 2010 à 22:42:03

                Oui, je vois, c'était lié au double égal, je vous remercie.
                J'ai quelques questions à présent pour aller dans le affinement de mon programme.
                Si je veux poser également des coordonnées pour la ligne, est-ce que j'ai le droit de utiliser les points x et y utilisés auparavant pour la fonction cercle ?
                Savez-vous comment faire un dégradé de couleur ? Ou avez-vous un petit tutoriel ?
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  28 décembre 2010 à 23:13:25

                  Citation

                  Prends également le réflexe d'utiliser la fonction raw_input au lieu de input , cette dernière étant obsolète



                  Non au contraire dans la version 3, c'est raw_input qui est obsolète.

                  Et il utilise la version 3 apparemment.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    28 décembre 2010 à 23:24:15

                    Citation : fred1599

                    Citation

                    Prends également le réflexe d'utiliser la fonction raw_input au lieu de input , cette dernière étant obsolète



                    Non au contraire dans la version 3, c'est raw_input qui est obsolète.

                    Et il utilise la version 3 apparemment.


                    OK je prends en note ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 décembre 2010 à 23:44:18

                      Sinon, vous ne savez pas pour mes deux questions ?

                      EDIT : J'ai quelques nouvelles questions en plus :
                      A présent, j'ai envie de demander avant la couleur du fond. L'utilisateur choisira sa couleur.
                      Maintenant, en fonction de cette couleur, j'ai envie d'imposer des restrictions, par exemple si la couleur rouge a été choisie je ne peux pas tracer de cercle. Ca donne ça :

                      from turtle import *
                      fond = str(input("Couleur du fond (rouge ou verte) : "))
                      if fond == 'rouge' :
                          bgcolor("red")
                      elif fond == 'verte' :
                          bgcolor("green")
                      else :
                          print("Non défini")
                      
                      j = "oui"
                      while j == "oui":
                          demande = str(input("Quelle fonction désirez-vous dessinez ? "))
                              
                          if demande == 'cercle' and fond == 'rouge' :
                              rayon = int(input("Quel rayon désirez-vous ?"))
                              x = int(input("Abscisse ? "))
                              y = int(input("Ordonnée ? "))
                              up()
                              goto(x,y)
                              down()
                              circle(rayon)
                          else :
                              print("Pas de cercle dans fond vert")
                      
                          if demande == 'ligne' and fond == 'verte' :
                              x = int(input("Abscisse ? "))
                              y = int(input("Ordonnée ? "))
                              longueur = int(input("Quel hauteur désirez-vous ? "))
                              goto(x,y)
                              forward(longueur)
                          else :
                              print("Pas de ligne dans fond rouge")
                          
                      
                          j = input("Voulez vous encore dessinez ?")
                      
                          if j == "non":
                              print("C'est fini")
                      
                          elif j != "oui" :
                              print("Erreur")
                      


                      Cependant, si j'ai choisi la couleur verte et que je demande un cercle, je veux qu'un message s'apparaisse "Pas de cercle dans fond vert". J'ai donc rajouté des else, mais cela ne marche pas, car si je demande une ligne, il m'apparait le message d'erreur pour le cercle. Comment faire pour que ça ne soit pas trop lourd et que je puisse afficher mon message d'erreur si la personne choisi par exemple le cercle sur fond vert ?
                      Merci encore de votre aide.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        29 décembre 2010 à 14:01:52

                        Il te manque donc des conditions, faut les rajouter.

                        Regarde toutes les combinaisons possibles par l'utilisateur.

                        Tu devrais normalement t'en sortir.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 décembre 2010 à 18:13:21

                          Oui, il manque des conditions, c'est ce que je pensais, mais cela ne risque t'il pas d'alourdir beaucoup trop le programme ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            29 décembre 2010 à 19:25:44

                            Eh bien s'il te les faut, non!
                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 décembre 2010 à 21:30:54

                              Ah, je viens de comprendre surement une méthode pour séparer en deux.
                              Je demande la couleur voulue.
                              et il me suffit d'imposer deux conditions après :
                              if fond == rouge :
                                 while ... (avec le reste du programme)
                              
                              elif fond == vert :
                                 while ... (avec le reste du programme modifié)
                              
                              else :
                                 print("Couleur non valide")
                              


                              Je pense que je ne peux pas faire plus simplifié que cela ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                29 décembre 2010 à 23:19:08

                                oui je voulais que tu utilises elif, pour la suite, j'attend de voir le code entier pour savoir si on peut ou non simplifier.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  29 décembre 2010 à 23:43:46

                                  from turtle import *
                                  fond = str(input("Couleur du fond (rouge ou verte) : "))
                                  if fond == 'rouge' :
                                      bgcolor("red")
                                  elif fond == 'verte' :
                                      bgcolor("green")
                                  else :
                                      print("Non défini")
                                  
                                  if fond == 'rouge' :
                                      j = "oui"
                                      while j == "oui":
                                          demande = str(input("Quelle fonction désirez-vous dessinez ? "))
                                          
                                          if demande == 'cercle' :
                                              rayon = int(input("Quel rayon désirez-vous ?"))
                                              x = int(input("Abscisse ? "))
                                              y = int(input("Ordonnée ? "))
                                              up()
                                              goto(x,y)
                                              down()
                                              circle(rayon)
                                  
                                  
                                          elif demande == 'ligne':
                                              print("Pas de ligne dans fond rouge")
                                      
                                          else :
                                              print("Il n'existe pas cette fonction")
                                  
                                      j = input("Voulez vous encore dessinez ?")
                                  
                                      if j == "non":
                                              print("C'est fini")
                                  
                                      elif j != "oui" :
                                              print("Erreur")
                                              
                                  elif fond == 'vert' :
                                      j = "oui"
                                      while j == "oui":
                                          demande = str(input("Quelle fonction désirez-vous dessinez ? "))
                                              
                                      if demande == 'cercle' :
                                          print("Pas de cercle dans fond vert")
                                              
                                      elif demande == 'ligne' and fond == 'verte' :
                                          x = int(input("Abscisse ? "))
                                          y = int(input("Ordonnée ? "))
                                          longueur = int(input("Quel hauteur désirez-vous ? "))
                                          goto(x,y)
                                          forward(longueur)
                                  
                                      else :
                                          print("Il n'existe pas cette fonction")
                                              
                                      j = input("Voulez vous encore dessinez ?")
                                  
                                      if j == "non":
                                          print("C'est fini")
                                  
                                      elif j != "oui" :
                                          print("Erreur")
                                  
                                  else :
                                      print("Erreur")
                                  


                                  Voici mon code. J'ai quelques questions en plus :
                                  - Si en plus de Erreur, je veux qu'il me repose la question si je veux encore dessiner ?
                                  - Existe t-il une fonction permettant de tout effacer et de recommencer, car j'aimerais l'ajouter à mon module de dessin.

                                  Merci d'avance pour votre aide.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 décembre 2010 à 0:07:27

                                    Citation : Monsieur_JaKy

                                    demande == str(input("Quelle autre fonction désirez-vous dessinez ? "))
                                    Cherche un peu l'erreur, c'est tout bête ;)

                                    Prends également le réflexe d'utiliser la fonction raw_input au lieu de input , cette dernière étant obsolète.



                                    L'OP utilise Python 3 d'après les print(), str(input()) est une conversion inutile, input() a remplacé raw_input() de python 2 et renvoie directement un objet string ;)
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Problème de 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