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 :

Aide premier script "pseudo horloge"


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    1er année Licence Informatique
    Inscrit en
    Octobre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : 1er année Licence Informatique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut Aide premier script "pseudo horloge"
    Bonjours à tous
    Tout d'abord merci de me lire, je viens d'arriver sur le forum.

    Petite présentation rapide du contexte : Je suis en 1er année de Licence Informatique (jusqu'ici mon expérience en informatique se résume à HTML et CSS). Récemment nous avons eu notre premier TP pour le cours Algorithmique et Programmation, et nous utilisons le langage Python (cqfd, sinon je ne serais pas dans cette section...), bref, lors de ce TP, il y avait un exercice consistant à demander à l'utilisateur l'heure qu'il est (format h:m:s) et lui donner l'heure une seconde plus tard. Jusque ici, pas très compliqués.

    Après le TP, j'ai voulus aller plus loin et programmer une "vrai" horloge. Ayant déjà "effleuré" JAVA, j'avais connaissance de l'existence des boucles. Ainsi avec une boucle while j'ai pus faire ceci :

    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
     
    #!/usr/bin/env python
    #Variables
    #d,h,m,s,ms,c : int
     
    h=int(input("Quelle heure est il ? "))   #initialise la variable h à l'heure voulue
    m=int(input("Combien de minutes ? "))    #idem h
    s=int(input("Combien de sencondes ? "))  #idem m et h
    d=0  # Compteurs jours passés.
         # A chaque fois que la boucle recommence, d prend +1.
     
    while s<=60 :
        print("Il est","d:",d,h,":",m,":",s) #Il est d:0 h:m:s
        s +=1
        if s==60 :
            m=m+1
            s=0
        if m==60 :
            h=h+1
            m=0
        if h==24 :
            s=0
            m=0
            h=0
            d=d+1
    Vous voyez tout de suite le problème ? Les présumées secondes ne défilent pas à la vitesse... d'une seconde, je m'en doutais un peu en écrivant le code, mais bon, à coeur vaillant rien d'impossible .

    J'ai cherché... cherché... et par désespoir de cause, j'ai tenté celà :

    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
     
    #!/usr/bin/env python
    #Variables
    #d,h,m,s,ms,c : int
     
    h=int(input("Quelle heure est il ? "))
    m=int(input("Combien de minutes ? "))
    s=int(input("Combien de secondes ? "))
    d=0
    ms=0
    c=0
     
    while c<=60 :
        print("Il est","d:",d,h,":",m,":",s)
        ms +=1
        if ms==100 :
            c=c+1
            ms=0
        if c==60 :
            s=s+1
            c=0
        if s==60 :
            m=m+1
            s=0
        if m==60 :
            h=h+1
            m=0
        if h==24 :
            s=0
            m=0
            h=0
            d=d+1
    Ici j'ai ajouté 2 autres variables (ms et c) censé simulé des millisecondes et... et je sais pas trop quoi en fait , d'autant que j'ai limité ces deux variables à 100 de manière casi arbitraire (les milliseconde se compte bien par cent ? non ?).

    Donc ma questions (suspens insoutenable), comment puis je ralentir au mieux l’exécution du script à un niveau seconde par seconde ? Et éventuellement, est ce que ma démarche de base (utilisation de la boucle while, nombres de variables...) est la bonne ?

    Je vous remercie d'avance pour vos réponses, et encore merci d'avoir pris le temps de me lire.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Commençons par le début, copie ton code et colle-le entre des balises CODE ( le # dans la barre d'outils)

    Quand ton code sera devenu lisible, on mettra ton horloge à l'heure.

  3. #3
    Membre à l'essai
    Homme Profil pro
    1er année Licence Informatique
    Inscrit en
    Octobre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : 1er année Licence Informatique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Je trouvais les photos lisible Enfin bon, je vais éditer alors.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Lisible peut-être, mais pas copiable, or moi j'arrondis mes fins de mois en revendant toutes les lignes de code que je trouve aux géants de l'informatique ....


    Bon, je savais que j'avais une vielle horloge qui traînait dans un tiroir.

    Tu regardes, tu la fais fonctionner, tu devrais, sans trop de difficultés, comprendre le mécanisme et tu récupères les pièces qui peuvent te servir.

    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
     
    # -*- encoding: utf-8 -*-
     
    from threading import Timer
    from datetime import datetime
     
    is_alive = False
     
    def clock():
        is_alive = True
     
        def __set_time():
            gmt = datetime.utcnow().strftime('%A %d %B %Y, %H:%M:%S')
            gmt = unicode(" " + gmt, 'UTF-8')
            lcl = datetime.today().strftime('%A %d %B %Y, %H:%M:%S')
            lcl = unicode(" " + lcl, 'UTF-8')
            print "GMT: %s, Locale: %s" %(gmt, lcl)
            if is_alive:
                timer = Timer(1, __set_time)
                timer.start()
     
        __set_time()
     
    if __name__ == '__main__':
        clock()
    Python 3
    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
     
    # -*- encoding: utf-8 -*-
     
    from threading import Timer
    from datetime import datetime
     
    is_alive = False
     
    def clock():
        is_alive = True
     
        def __set_time():
            gmt = datetime.utcnow().strftime('%A %d %B %Y, %H:%M:%S')
            lcl = datetime.today().strftime('%A %d %B %Y, %H:%M:%S')
            print ("GMT: %s, Locale: %s" %(gmt, lcl))
            if is_alive:
                timer = Timer(1, __set_time)
                timer.start()
     
        __set_time()
     
    if __name__ == '__main__':
        clock()

  5. #5
    Membre à l'essai
    Homme Profil pro
    1er année Licence Informatique
    Inscrit en
    Octobre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : 1er année Licence Informatique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Merci

    Lors de l'exécution il ressort une erreur de syntaxe à la ligne 16

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    print "GMT: %s, Locale: %s" %(gmt, lcl)
                              ^
    #SyntaxError: invalid syntax
    Mais même sans celà, les seuls instructions que je reconnaisse, ce sont les instructions print et if

    En regardant comme ça, je suppose que le script va "chercher" l'heure, plutôt que de demander à l'utilisateur de l'initialiser ?

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    C'est parce que tu utilises Python 3

    Changes la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print("GMT: %s, Locale: %s" %(gmt, lcl))

  7. #7
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Coucou,
    Et si c'est Python3 qui est utilisé, je pense qu'il est nécessaire aussi de supprimer les lignes 14 et 16 (Python3 ne connaît plus cette fonction: il gère lui-même ces conversions).

    Clodion

  8. #8
    Membre à l'essai
    Homme Profil pro
    1er année Licence Informatique
    Inscrit en
    Octobre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : 1er année Licence Informatique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Cette fois j'ai obtenus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    C:\Users\Quentin Etienne\Desktop\D2i>C:\Python33\python.exe test4.py
    Traceback (most recent call last):
     File "test4.py", line 24, in <module>
        clock()
     File "test4.py", line 21, in clock
        __set_time()
     File "test4.py", line 13, in __set_time
    NameError: global nam 'unicode' is not defined
    Edit: Merci Clodion, je vais essayer tout de suite

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    J'ai édité mon post, en fait.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut


    Citation Envoyé par Quartman Voir le message
    En regardant comme ça, je suppose que le script va "chercher" l'heure, plutôt que de demander à l'utilisateur de l'initialiser ?
    Oui, VinsS utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from threading import Timer
    from datetime import datetime
    qui permet l'importation de deux fonctions de deux modules dont le deuxième permet de renvoyer l'heure.

    clodion

  11. #11
    Membre à l'essai
    Homme Profil pro
    1er année Licence Informatique
    Inscrit en
    Octobre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : 1er année Licence Informatique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Désolé VinsS, je n'avais pas fait attention qui plus est je me suis rendus compte que lorsque j'ai effectué la première modification, j'ai effacé par mégarde une ligne du code, forcément... ça s'annonçait compliqué

    Maintenant ça marche J'ai dû mal à comprendre le pourquoi du comment, je pense que je vais un peu questionner un peu mon prof sur ton code.

    Merci beaucoup de m'avoir consacré un peu de temps, j'ai matière à étudié pour quelques jours

    Merci aussi Clodion pour ton explication

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 37
    Points : 67
    Points
    67
    Par défaut
    Intéressant! Je ne connaissais pas l'existence de Timer.

    Pour répondre à la première partie de la question initiale:
    comment puis je ralentir au mieux l’exécution du script à un niveau seconde par seconde
    le plus simple est d'utiliser time:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import time
    print("Je vais attendre une seconde")
    time.sleep(1)
    print("Une seconde écoulée")
    Tu introduis time.sleep(1) à la fin de ton while, et le tour est joué

  13. #13
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Sinon il y a la fonction sleep du module time qui permet de mettre notre programme en pose x secondes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    from time import sleep
    #saisie et tout
    sleep(1)
    #affichage de l'heure
    edit : j'avais pas vu que la solution avait déjà été donnée
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  14. #14
    Membre à l'essai
    Homme Profil pro
    1er année Licence Informatique
    Inscrit en
    Octobre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : 1er année Licence Informatique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Bonjour,
    Je vais essayer tout de suite

    Citation Envoyé par stalacta Voir le message
    edit : j'avais pas vu que la solution avait déjà été donnée
    Ta solution est quand même un peu plus compacte non ?

  15. #15
    Membre à l'essai
    Homme Profil pro
    1er année Licence Informatique
    Inscrit en
    Octobre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : 1er année Licence Informatique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Après essaie de vos deux solutions j'obtiens ceci :

    Solution de Delbor
    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
    h=int(input("Quelle heure est il ? "))
    m=int(input("Combien de minutes ? "))
    s=int(input("Combien de secondes ? "))
     
    import time
    print("Je vais attendre une seconde")
    time.sleep(1)
     
    while s<=60 :
        print("Il est",h,":",m,":",s)
        s +=1
        time.sleep(1)
        print("Une seconde écoulée")
        if s==60 :
            m=m+1
            s=0
        if m==60 :
            h=h+1
            m=0
        if h==24 :
            s=0
            m=0
            h=0
    Celle-ci marche nickel, c'est exactement ce que je souhaitais trouver Merci beaucoup.

    Solution de stalacta :

    Malheureusement, je n'ai pas sus la mettre en forme, j'ai essayé de différente manière :

    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
    from time import sleep
     
    h=int(input("Quelle heure est il ? "))
    m=int(input("Combien de minutes ? "))
    s=int(input("Combien de secondes ? "))
     
     
    while s<=60 :
        print("Il est",h,":",m,":",s)
        s +=1
        if s==60 :
            m=m+1
            s=0
        if m==60 :
            h=h+1
            m=0
        if h==24 :
            s=0
            m=0
            h=0
    sleep(1)
    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
    h=int(input("Quelle heure est il ? "))
    m=int(input("Combien de minutes ? "))
    s=int(input("Combien de secondes ? "))
     
    from time import sleep
     
    while s<=60 :
        print("Il est",h,":",m,":",s)
        s +=1
        if s==60 :
            m=m+1
            s=0
        if m==60 :
            h=h+1
            m=0
        if h==24 :
            s=0
            m=0
            h=0
            sleep(1)
    J'ai aussi mixés ces deux méthode, sans résultat, je ne parviens pas à déterminer "où va "quoi".

    EDIT Je dois réapprendre à réfléchir ! Ce que j'ai fais pour la première solution, je ne l'ai pas fais pour la deuxième... en plaçant correctement sleep(1) sous s +=1, le script tourne parfaitement . Je ne sais pas pourquoi je ne l'ais pas fais plus tôt

  16. #16
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Il faut malgré tout savoir que sleep() est bloquant.

    Le programme s'arrête et redémarre une fois le temps écoulé, il n'est donc pas possible de l'interrompre ou de modifier le comportement du programme pendant le temps qui s'écoule.

    Ce n'est peut-être pas un problème dans l'exemple basique exposé ici, mais c'est à retenir.



    Edit: Je vois ta dernière réponse. Dans le deuxième code la ligne sleep(1) doit appartenir au bloc de code while, tu l'as mis hors du bloc dans le premier cas et tu l'as conditionné au if h == 24 dans le deuxième cas.

  17. #17
    Membre à l'essai
    Homme Profil pro
    1er année Licence Informatique
    Inscrit en
    Octobre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : 1er année Licence Informatique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Merci VinsS, je m'en suis rendus compte juste avant que tu me réponde. Alors que j'avais l'avais correctement fais la première fois...

    Pour poursuivre sur ce que tu disais à propos de sleep(): effectivement dans ce cas, ce n'est pas embêtant. Et puis je n'avais pas penser à la possibilité de pouvoir influer sur le script durant son exécution, je trouve que pour une horloge ce n'est pas forcément utile (surtout aussi basique )

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

Discussions similaires

  1. Aide pour mon premier script sous linux
    Par bomonde dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 21/10/2010, 13h27

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