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 :

Chronomètre dans Python ?


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Chronomètre dans Python ?
    Bonjour,

    J'ai effectué un programme qui a pour but de faire effectuer 20 multiplications au hasard en moins de 40 secondes, où la sortie sera le nombre d'opérations non effectuées et le nombre de bonnes réponses.
    J'ai effectué tout le code, mais je ne sais pas comment faire un chronomètre qui sera en marche en arrière-plan, pendant que l'utilisateur réponds aux différentes questions.
    Voici le chrono que j'ai codé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import time
     
    seconds = 40
     
     
    def Timer(seconds):
        print("Début chrono : 40s")
        for i in range(seconds):
            time.sleep(1)
            seconds -= 1
        if seconds == 0:
            print("Fin")


    Puis, voici une petite partie de mon code principal au cas où :
    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
     
    errorNumbers = 0
    goodAnswers = 0
     
    multi1 = "7*7"
    multi2 = "3*6"
    multi3 = "4*2"
     
    phraseRep = "Quelle est la réponse de"
     
     
    rep1 = input(phraseRep + " " + multi1)
    if rep1 == "49":
        rep2 = input(phraseRep + " " + multi2)
        goodAnswers += 1
    elif rep1 == "":
        errorNumbers += 1
        rep2 = input(phraseRep + " " + multi2)
    elif rep1 != "49":
        rep2 = input(phraseRep + " " + multi2)
     
    if rep2 == "18":
        rep3 = input(phraseRep + " " + multi3)
        goodAnswers += 1
    elif rep2 == "":
        rep3 = input(phraseRep + " " + multi3)
        errorNumbers += 1
    elif rep2 != "18":
        rep3 = input(phraseRep + " " + multi3)
     
    if rep3 == "8":
        rep4 = input(phraseRep + " " + multi4)
        goodAnswers += 1
    elif rep3 == "":
        rep4 = input(phraseRep + " " + multi4)
        errorNumbers += 1
    elif rep3 != "8":
        rep4 = input(phraseRep + " " + multi4)
     
    if rep4 == "16":
        rep5 = input(phraseRep + " " + multi5)
        goodAnswers += 1
    elif rep4 == "":
        rep5 = input(phraseRep + " " + multi5)
        errorNumbers += 1
    elif rep4 != "16":
        rep5 = input(phraseRep + " " + multi5)
    Merci d'avance pour vos réponses

  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,

    Il existe une fonction "Timer" du module threading qui est faite pour ça. On donne comme arguments le délai, la fonction à appeler et ses propres arguments, et Timer appellera cette fonction après que le délai sera écoulé.

    Voir: https://docs.python.org/3/library/th...#timer-objects
    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
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par marw4ne Voir le message
    J'ai effectué tout le code, mais je ne sais pas comment faire un chronomètre qui sera en marche en arrière-plan, pendant que l'utilisateur réponds aux différentes questions.
    Utiliser les thread. Le chrono tournant dans un thread tandis que les questions tournent dans un autre.

    Citation Envoyé par marw4ne Voir le message
    Voici le chrono que j'ai codé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import time
     
    seconds = 40
     
     
    def Timer(seconds):
        print("Début chrono : 40s")
        for i in range(seconds):
            time.sleep(1)
            seconds -= 1
        if seconds == 0:
            print("Fin")
    Mouais. Pas brillant. Déjà le chrono est censé fonctionner pour n'importe quelle valeur mais il indique qu'il tournera pour 40. Et surtout on ne voit pas trop pourquoi la variable "seconds" est décémentée ni pourquoi elle est testée à 0 à la fin. Il est évident que si la boucle s'exécute entièrement, alors le chrono est fini quand elle se termine !!!
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def Timer(seconds):
        print("Début chrono : %ds" % seconde)
        for i in range(seconds): time.sleep(1)
        print("Fin")
    # Timer()

    Citation Envoyé par marw4ne Voir le message
    Puis, voici une petite partie de mon code principal au cas où :
    Là tu aurais mieux fait de la cacher. Sans déconner, tu vas vraiment coder les 20 multiplications une à une ? Et si demain il en faut 50 ? Ou 500 ? Tu ne sais donc pas utiliser les tableaux et les boucles ??? Un tableau de tuple ou de dicos contenant la multiplication et la réponse attendue et roule. Ou mieux, une boucle de 20 itérations où les opérandes sont pris au hasard et le résultat calculé et voilà quoi. Voilà comment faire d'un bête code insipide de 500 lignes qui tournera 2 fois et qu'on ne voudra plus jamais modifier de sa vie un code plus attractif de 15 lignes qu'on pourra relancer et faire évoluer avec plaisir !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Citation Envoyé par marw4ne Voir le message
    J'ai effectué tout le code, mais je ne sais pas comment faire un chronomètre qui sera en marche en arrière-plan, pendant que l'utilisateur réponds aux différentes questions.
    Vous avez déjà une horloge dans votre ordinateur, et vous pouvez récupérer sa valeur en secondes via time.time() et faire la différence entre la valeur courante et une valeur t0 stockée au démarrage.

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

  5. #5
    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
    J'avais proposé d'utiliser Timer de threading, mais si on veut pouvoir interrompre les calculs entre 2 calculs (et non en plein milieu), il y a plus simple comme le propose wiztricks.

    Voilà un exemple avec des multiplications faites avec des nombres tirés au hasard:

    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
    from random import randint
    from time import time
     
    def calculs(delai):
        resultats = []
        t0 = time()
        while True:
            x = randint(1, 10**6)
            y = randint(1, 10**6)
            resultats.append([x, y, x*y])
            if time()-t0 >= delai:
                break # arrêt de la boucle
        return resultats 
     
    resultats = calculs(5)
     
    for resultat in resultats:
        print(resultat)
     
    print("Nombre de multiplications:", len(resultats))
    Cela tourne assez vite puisqu'on calcule comme ça 1.743.053 multiplications en 5 secondes!

    Exemple d'affichage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    [120158, 250223, 30066295234]
    [399270, 836221, 333877958670]
    [963951, 635770, 612851127270]
    [769444, 222569, 171254381636]
    [472016, 447322, 211143141152]
    [762195, 652612, 497417603340]
    ...
    Nombre de multiplications: 1743053
    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

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Cela tourne assez vite puisqu'on calcule comme ça 1.743.053 multiplications en 5 secondes!
    Chez-moi ça en a calculé 2.247.695 (question de puissance évidemment ; me suis payé un super truc à noel, avec 8 coeurs, 64G de RAM, CG de 8G).

    Mais ton truc génère et exécute des multiplications tandis que le problème du PO est de générer des multiplications et les proposer à un humain dans une sorte d'exercice de calcul mental qui dure 40s. Pas pareil non ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    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 Sve@r,

    Tu as raison. Je n’avais pas l’intention de résoudre le problème initial, mais de donner un simple exemple d’utilisation de time() dans une boucle.
    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

Discussions similaires

  1. integrer du code Assembleur (x86) dans python
    Par nephhh dans le forum Général Python
    Réponses: 2
    Dernier message: 11/02/2007, 11h50
  2. réalisation d'un chronométre dans le programme
    Par masterix59 dans le forum C
    Réponses: 11
    Dernier message: 30/12/2006, 18h19
  3. Masquer une commande système dans python
    Par Mysti¢ dans le forum Général Python
    Réponses: 5
    Dernier message: 03/11/2006, 16h33
  4. premiers pas dans Python - palindrome
    Par tarang dans le forum Général Python
    Réponses: 1
    Dernier message: 31/10/2006, 16h56
  5. Utilisation de Timer dans Python
    Par aliassaf dans le forum Général Python
    Réponses: 5
    Dernier message: 17/06/2006, 19h06

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