• PYTHON > les boucles for et while

      while

      while condition :
         instructions de la boucle
      instructions après la boucle

       

      Il faut aussi s’assurer que la valeur choisie vous fasse rentrer dans la boucle !

      Vous pouvez faire un test en remplaçant "bidule" par "machin", puis par "". Que se passe-t-il lors de l’exécution ?

       

      entree=""
      while entree != "toto" :
         entree=input("Taper toto pour sortir de la boucle : ")
      print("Vous êtes sorti de la boucle.")

      break

      break sert à sortir de la boucle.

       

      print("*** Avant la boucle ***")
      entree="bidule"
      while entree != "":
         entree=input("Taper un mot : ")
         if entree=="ouistiti" :
            print("J'ai vu un ouistiti !")
            break
      print("*** Après la boucle ***")

      Simulation d’une boucle for

      nb_repetitions = 3
      i = 1
      while i <= nb_repetitions :
         print("Et "+str(i)+"!")
         i = i+1
         print("Zéro!")
      input("Appuyer sur ENTER pour terminer le programme. ")

      Dans la même rubrique

    • Caractères et chaînes de caractères en Python
    • Manipulation de listes avec Python
    • Création de listes en Python
    • Lecture et écriture dans un fichier (en Python)
    • Les affectations (en Python)
    • Les entrées/sorties (en Python)
    • Les instructions conditionnelles (en Python)
    • La boucle for (en Python)
    • La boucle while (en Python)
    •  

      Break

      number = 0
      
      for number in range(10):
         number = number +1 
         print'Number is ' + str(number))
      
      print('Out of loop')

      Continue

      continue permet de sauter d’un pas dans une boucle for. En fait, les instructions à l’intérieur de la boucle, après continue, ne sont pas exécuter et le pointeur revient directement au début de la boucle.

       

      num = 0
      
      for num in range(5):
         num = num + 1
      
         if num == 3:
            continue 
      
         print('num vaut ' + str(num))
      
      print('fin')
      
      num vaut 1
      num vaut 2
      num vaut 4
      num vaut 5
      fin

      Pass

      allows you to handle the condition without the loop being impacted in any way; all of the code will continue to be read unless a break or other statement occurs.

      As with the other statements, the pass statement will be within the block of code under the loop statement, typically after a conditional if statement.

      Using the same code block as above, let’s replace the break or continue statement with a pass statement:

       

      number = 0
      
      for number in range(10):
         number = number + 1
      
         if number ==5:
            pass    # pass here
      
         print('Number is ' + str(number))
      
      print('Out of loop')

       

      Number is 1
      Number is 2
      Number is 3
      Number is 4
      Number is 5
      Number is 6
      Number is 7
      Number is 8
      Number is 9
      Number is 10
      Out of loop

       

      The pass statement can create minimal classes, or act as a placeholder when working on new code and thinking on an algorithmic level before hammering out details.

       

      sortie de boucle while

       

      Pour ça, je voudrais pouvoir appuyer sur une touche du clavier (pourquoi pas ‘Q’ ) et donc intercepter cette frappe à la volée.

      Je connais vaguement la commande print(), mais malheureusement elle arrête le script et attend une entrée de l’utilisateur avant de poursuivre…

      Une partie de mon code

      cpt = 0
      char = ""
      while (cpt < 10 and char != "q"):
          char = input()
      
          for i in range (1,100):
              print("Première boucle - Valeur de i:", i)
              p.ChangeDutyCycle(i)
              time.sleep(0.1)
      
          for i in range (100, 1, -1):
              print("Seconde boucle - Valeur de i:", i)
              p.ChangeDutyCycle(i)
              time.sleep(0.1)
      
           cpt += 1

       

      Tu peux utiliser Ctrl+C sans stopper ton programme.

      Exemple:

      >>> import time
      >>> def func():
      … try:
      … for i in range(5000):
      … print(i, end=’ ‘)
      … time.sleep(0.5)
      … except KeyboardInterrupt:
      … return

      >>> while 1:
      … inp = input("Continue? ")
      … if inp.lower() == ‘q’:
      … break
      … func()

      Continue? o
      ^C0 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 Continue? o
      ^C0 1 2 3 Continue? q
      >>>

      Une autre solution est d’utiliser un framework qui gère les signaux et autres événements.

      Vincent

      Bonjour,

      Une autre solution est de tester le clavier pour savoir si une touche a été frappée et est disponible à la lecture.

      Mais le code est spécifique à l’OS utilisé.
      - Pour Windows, on utilise le module "msvcrt".
      - Pour Unix, on utilise le module "termios".

      C’est assez compliqué à coder! La solution avec "KeyboardInterrupt" est beaucoup plus simple.


      Merci pour vos réponses.
      Je regarde actuellement la bibliothèque curses et la fonction stdscr.getch()


      Une petite modernisation python 2 => 3 et ça marche très bien. La modernisation porte sur les print (‘print …’ => ‘print(…)’) ainsi que l’opérateur de condition (‘<>’ => ‘!=’).

      Un exemple d’utilisation:

      while True:
         if kbhit():
            ch = getch()
            if ch=='q':
               break
            sys.stdout.write('.')
         print('Fin')

      Le code parait compliqué, mais une fois au point, on le met en bibliothèque et on peut y faire référence à tout moment.

      NB: il s’agit d’une fonctionnalité prévue pour une console. Il n’est pas sûr que ça marche dans un outil de développement (idle, etc…).


      J’ai voulu tester ce code, en copiant le fichier kbhit.pi ( http://home.wlu.edu/~levys/software/kbhit.py )dans le même répertoire que mon fichier de test, modifié le code comme suit :

      import kbhit
      
      while True:
          if kbhit.kbhit():
              ch = getch()
              if ch=='q':
                  break
              sys.stdout.write('.')
      
          print('Fin')

      Mais j’ai l’erreur :File "test-kbhit.py", line 8, in <module>
      if kbhit.kbhit():
      AttributeError: ‘module’ object has no attribute ‘kbhit’

      Si j’utilise :

       if kbhit():

      , ça me retourne :TypeError: ‘module’ object is not callable

      je m’en sors pas…

      Avec le code dont tu donnes le lien, ça ne marche pas comme ça: kbhit est une des méthodes d’une classe "KBHit" qu’il faut instancier avant d’utiliser!

      Je n’ai pas essayé, mais ça devrait ressembler à ça:

      import kbhit
      
      clavier =  kbhit.KBHit()
      while True:
          if clavier.kbhit():
              ch = clavier.getch()
              if ch=='q':
                  break
              sys.stdout.write('.')

      J’avais en effet complètement omis d’instancier la classe.
      Je viens de tester le script en intégrant d’autres commandes à l’intérieur de la boucle et ça fonctionne parfaitement.

      #!/usr/lib/env python
      
      import kbhit, sys, time
      clavier = kbhit.KBHit()
      i = 0
      
      while (i < 100):
          print('coucou')
          time.sleep(0.5)
          if clavier.kbhit():
              ch = clavier.getch()
              if ch=='q':
                  break
              sys.stdout.write('')
              i += 1

      III. Tests et boucles

      1. Tests

      a. Test conditionnel if, if else

      La syntaxe d’un test est simple, mais il faut prendre garde à l’indentation :

      if test:
      #Instruction 1
      #Instruction 2
      #Instruction 3
      #Fin du test…

      Il en est de même pour un test if... else, les instructions if et else devant être alignées :

      if test:
      #Instruction 1
      #Instruction 2
      #Instruction 3
      else:
      #Instruction si test échoué 1
      #Instruction si test échoué 2
      #Fin du test…

      Exercice 1. Tester

      Énoncé
      Correction

      >Retour à la TdM

      2. Boucles

      a. Boucle for

      La boucle for, en Python, a une syntaxe légèrement différente des autres langages. Pour faire l’équivalent d’une boucle de 3 itérations, on écrira…

      for i in range(3):
      print(i)

      Si on veut parcourir les éléments d’une liste, on peut recourir à la fonction len :

      a = ["pain", "beurre", "confiture", "miel"]
      for i in range(len(a)):
      print(a[i])

      Mais on peut aussi indexer directement la liste (cette syntaxe ressemble à ce qu’il est possible de faire en JavaScript) :

      a = ["pain", "beurre", "confiture", "miel"]
      for i in a:
      print(i)

      Exercice 1. Boucle for

      Énoncé
      Correction

      Exercice 2. Boucle for (difficile)

      Énoncé
      Correction
      b. Boucle while

      La boucle while a, elle, une syntaxe tout à fait similaire à d’autres langages…

      i=0
      while i<3 :
      print(i)
      i = i+1
      print("Fin de la boucle")

      Exercice 3. Boucle while

      Énoncé
      Correction

       

       

       

 

Aucun commentaire

 

Laissez un commentaire