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 :

Revenir "plus haut" dans un code python.


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Revenir "plus haut" dans un code python.
    Bonjour,

    Actuellement en STI2D SIN (Système Information et Numérique) je dois réaliser un programme pour la fin de l'année (à finir d'ici 1 mois). Avec notre groupe, nous avons donc choisi de réaliser une Alarme d'Habitation connectée. Avec site, envoie de mail et connexion des capteurs à la base principale (carte RaspberryPi) par radio.

    Mon problème est plutôt simple je pense, mais je n'ai pas suffisamment de connaissance en python pour le résoudre et mes recherches sur internet ont été infructueuse.

    Voici mon code :

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    from Testmail import mail
    from Testmail2 import maill
     
    import time
     
    import pigpio
    import vw
     
    import mysql.connector
    import time
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    ILS = "Alerte_capteur_ILS"
    IR = "Alerte_capteur_IR"
    REPOS = "Repos_capteur"
     
    RX=11
     
    BPS=2000
     
    pi = pigpio.pi()
     
    rx = vw.rx(pi, RX, BPS)
     
    -->while 1:
     
            conn = mysql.connector.connect(host="localhost", user="root", password="raspberry", database="alarme")
            cursor = conn.cursor()
     
            cursor.execute("""SELECT * FROM etat_capteurs""")
     
            rows = cursor.fetchall()
     
            for row in rows:
                    etat_alarme = row[1]
                    print(etat_alarme)
            **if (etat_alarme == 1):
                    print("Activation de l'alarme...")
    #               time.sleep(3)
                    print ("Chargement du programme, veuillez patienter...")
    #               time.sleep(3)
                    start = time.time()
     
                    print("En attente de la reception des données !")
                    print ("                                     ")
     
                    un_mail_repos = 0
                    temps_repos = time.time()
                    temps_mail = time.time()
     
                    while (etat_alarme == 1):
                            while rx.ready():
                                    reception = "".join(chr (c) for c in rx.get())
                                    if (reception == str(REPOS)):
                                            temps_repos = time.time()
                                    elif (reception == str(ILS) and (time.time()-temps_mail) > 3):
                                            print("ILS actif")
                                            temps_repos = time.time()
                                            mail()
                                            temps_mail = time.time()
                                    elif (reception == str(IR) and (time.time()-temps_mail) > 3):
                                            print("IR actif")
                                            temps_repos = time.time()
                                            mail()
                                            temps_mail = time.time()
     
                            if (un_mail_repos == 0):
                                    if (time.time()-temps_repos) > 15:
                                            maill()
                                            print ("MAIL REPOS")
                                            temps_repos = time.time()
                                            un_mail_repos = 1
    pi.stop()
     
    rx.cancel()
     
    conn.close()
    Ce que je souhaite faire, c'est qu'une fois que mon code vois que la fonction etat_alarme est à 0 (cf les 2 **), il doit pouvoir revenir dans le premier while (cf la flèche "-->").

    Donc ma question est, est-il possible de revenir plus haut dans mon code, c'est à dire au "while 1" après qu'il y soit déjà passé et ait exécuté d'autre while et for ?

    Merci de votre lecture.

    Cordialement.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Points : 1 189
    Points
    1 189
    Billets dans le blog
    2
    Par défaut
    Bonjour Giroulas,

    La réponse à ta question est non tu ne peux pas revenir dans ton code.

    Par contre cela ne veux pas dire qu'il n'y a pas de solution mais celle-ci est ailleurs (Aucune allusion à X-file).

    Pour revenir à ton code comme tu le dis toi même tu dois faire une boucle sur celui-ci avec un test.

    Dans ton code je vois une boucle while a 1 sans fonction break et à la fin des fermeture de base et de fichier, ce qui n'est pas possible tant que ta boucle est à 1 le programme ne pourra pas en sortir. Même chose pour l'envoie des mails.

    J'ai essayer d'apporter quelque amélioration à ton code mais pour cela résoudre tout les points de difficultés.

    Code python : 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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    from Testmail import mail
    from Testmail2 import maill
     
    import time
     
    import pigpio
    import vw
     
    import mysql.connector
    import time
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    ILS = "Alerte_capteur_ILS"
    IR = "Alerte_capteur_IR"
    REPOS = "Repos_capteur"
     
    RX=11
     
    BPS=2000
     
    pi = pigpio.pi()
     
    rx = vw.rx(pi, RX, BPS)
    conn = mysql.connector.connect(host="localhost", user="root", password="raspberry", database="alarme")
    cursor = conn.cursor() 
    while test ton paramètre:
     
            #definir un test 
     
            cursor.execute("""SELECT * FROM etat_capteurs""")
     
            rows = cursor.fetchall()
     
            for row in rows:
                    etat_alarme = row[1]
                    print(etat_alarme)
            **if (etat_alarme == 1):
                    print("Activation de l'alarme...")
    #               time.sleep(3)
                    print ("Chargement du programme, veuillez patienter...")
    #               time.sleep(3)
                    start = time.time()
     
                    print("En attente de la reception des données !")
                    print ("                                     ")
     
                    un_mail_repos = 0
                    temps_repos = time.time()
                    temps_mail = time.time()
     
                    while (etat_alarme == 1):
                    # tu n'as pas peur de spamer ton destinataire en bouclant sur cette partie ?   
                         while rx.ready():
                                    reception = "".join(chr (c) for c in rx.get())
                                    if (reception == str(REPOS)):
                                            temps_repos = time.time()
                                    elif (reception == str(ILS) and (time.time()-temps_mail) > 3):
                                            print("ILS actif")
                                            temps_repos = time.time()
                                            mail()
                                            temps_mail = time.time()
                                    elif (reception == str(IR) and (time.time()-temps_mail) > 3):
                                            print("IR actif")
                                            temps_repos = time.time()
                                            mail()
                                            temps_mail = time.time()
     
                            if (un_mail_repos == 0):
                                    if (time.time()-temps_repos) > 15:
                                            maill()
                                            print ("MAIL REPOS")
                                            temps_repos = time.time()
                                            un_mail_repos = 1
                       break
    pi.stop()
     
    rx.cancel()
     
    conn.close()

    Bien Cordialement.

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

    Citation Envoyé par Giroulas Voir le message
    Mon problème est plutôt simple je pense, mais je n'ai pas suffisamment de connaissance en python pour le résoudre et mes recherches sur internet ont été infructueuse.
    Ce n'est pas une question "python" mais une question de "programmation".

    Citation Envoyé par Giroulas Voir le message
    Donc ma question est, est-il possible de revenir plus haut dans mon code, c'est à dire au "while 1" après qu'il y soit déjà passé et ait exécuté d'autre while et for ?
    Il suffit de "programmer"
    Partons de la base, une séquence d'instructions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            print ('A', end='')
            print ('B', end='')
            print('C', end='')
    Ce ne sont que des "print" mais on pourrait les remplacer par des blocs d'instruction plus conséquents.
    On peut répéter cette séquence avec "while 1" ou un "for x in range(10)" - histoire que çà se termine.
    Ca donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> for x in range(10):
    ...     print ('A', end='')
    ...     print ('B', end='')
    ...     print ('C', end='')
    ...
    ABCABCABCABCABCABCABCABCABCABC>>>
    >>>
    Cela posé, comment changer l'ordre de cette séquence (et éventuellement revenir en arrière)?
    Il suffit d'ajouter une logique d'états:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> state = 0
    >>> for x in range(10):
    ...     if state == 0:
    ...         print ('A', end='')
    ...         state = 2
    ...     elif state == 1:
    ...         print ('B', end='')
    ...         state = 0
    ...     elif state == 2:
    ...         print('C', end='')
    ...         state = 1
    ...
    ACBACBACBA>>>
    Dit autrement, le "print" (le bloc d'instruction) sera exécuté suivant la valeur de la variable "state".
    A la sortie du bloc, on peut calculer l'état suivant en fonction de conditions (ici je me contente d'une simple assignation).
    Voilà pour l'idée.... A vous d'essayer de la mettre en musique avec votre code.

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

Discussions similaires

  1. Selectionner la graphique le plus haut dans la feuille excel
    Par geonosis47 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/06/2014, 12h55
  2. Réponses: 5
    Dernier message: 10/09/2013, 07h23
  3. Intégrer du HTML dans le code Python
    Par michel42 dans le forum Général Python
    Réponses: 4
    Dernier message: 07/05/2012, 10h47
  4. Réponses: 9
    Dernier message: 24/09/2011, 17h07
  5. conversion d'indentation dans un code python
    Par KINENVEU dans le forum Général Python
    Réponses: 2
    Dernier message: 26/02/2009, 04h04

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