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 :

Combiner boucle for / while [Python 3.X]


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Combiner boucle for / while
    Bonjour à tous,

    Dans le cadre d'un projet de type "timelapse", je souhaite utiliser une boucle infinie de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        for filename in camera.capture_continuous('img{counter:04d}.jpg'):
            print('Captured %s' % filename)
            time.sleep(1) # wait 5 minute
    que je cherche à limiter dans le temps.

    J'ai trouvé une solution pour cela en utilisant une boucle while de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a=(time.time())
    b=(time.time()+3)
    while a<b: a=(time.time())
    afin d'interrompre la boucle for au bout de 3 secondes (pour l'exemple).

    Mais je n'arrive pas à imbriquer correctement les deux boucles et ces dernières s'exécutent l'une après l'autre (d'abord les 3 secondes du while et après le for ou inversement).

    A titre d'exemple (et pour simplifier en remplaçant la partie timelapse par une boucle trèèèès longue qui est à interrompre en principe par le while) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import time
     
    a=(time.time())
    b=(time.time())+3
     
    while a<b:
        for c in range(100000000000000000000):
            print(c)
    a=(time.time())
    > le while n'est pas pris en compte

    J'imagine que je pourrais faire autrement mais j'aimerais au moins comprendre mon erreur et la logique des while / for.

    Merci par avance pour votre éclairage !

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne suis pas sûr d'avoir compris, mais une solution courante pour ce genre de problème, c'est:

    - une boucle infinie avec "while True:"

    - une condition de sortie avec un "if" qui déclenche un "break"

    - quand la boucle tourne trop vite, on la ralentit avec "time.sleep()"
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ce retour.

    Désolé si je n'étais pas super clair. Si je résume, j'ai le code suivant (qui fonctionne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    import picamera
     
    with picamera.PiCamera() as camera:
        camera.start_preview()
        time.sleep(2)
        camera.rotation = (180)
        camera.resolution = (2592, 1458)  
     
        for filename in camera.capture_continuous('img{counter:04d}.jpg'):
            print('Captured %s' % filename)
            time.sleep(1)
    et je souhaite en plus le limiter dans le temps (et l'interrompre après x secondes par exemple).

    Je comprends que je peux a priori remplacer le "for" par un "while True" (et jouer avec le time.time()) donc je vais explorer cette solution. Merci beaucoup !

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 241
    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 241
    Points : 36 698
    Points
    36 698
    Par défaut
    Salut,

    Pourquoi ne pas reprendre l'exemple donné dans la documentation de PiCamera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import time
    import picamera
    with picamera.PiCamera() as camera:
        camera.start_preview()
        try:
            for i, filename in enumerate(camera.capture_continuous('image{counter:02d}.jpg')):
                print(filename)
                time.sleep(1)
                if i == 59:
                    break
        finally:
            camera.stop_preview()
    note: tout est dans le "break" i.e. forcer la sortie de la boucle.

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

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Oui effectivement j'étais resté "bloqué" sur les "basic recipes" du site, et cette solution fonctionne à merveille.

    Merci beaucoup pour ce retour !

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

Discussions similaires

  1. Question sur les boucles for, while
    Par Spotjaune dans le forum Débuter
    Réponses: 9
    Dernier message: 18/10/2015, 12h28
  2. [Tableaux] boucle , for , while
    Par marty499 dans le forum Langage
    Réponses: 4
    Dernier message: 09/04/2008, 12h10
  3. HashMap : Boucle for / while
    Par JohnNC dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 27/03/2008, 16h27
  4. Structure while avec une boucle for en test
    Par le_voisin dans le forum C++
    Réponses: 9
    Dernier message: 09/09/2006, 20h16
  5. Réponses: 3
    Dernier message: 03/11/2005, 20h22

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