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 :

calcul de durée


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Par défaut calcul de durée
    Bonjour à tous,

    Je voudrais faire une calcul de durée entre plusieurs evenements "heure" (recuperation de l'heure sur une pression de touche) qui sont stockés dans des variables et j'ai un message d'erreur qui me dit que je n'ai pas le droit :

    c60d est mon heure de début, c60f mon heure de fin, et je veux avoir dans c60x la durée entre c60d et c60f.

    c60x=(c60f)-(c60d)
    TypeError: unsupported operand type(s) for -: 'str' and 'str'

    Comment résoudre ce problème ?

    Merci de votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import time
    saisie=0
    while saisie != "X":
        saisie=input("Tapez entree pour le début du code 60, X pour sortir : ") 
        c60d=(time.strftime("%H:%M:%S", time.localtime()))
        saisie=input("Tapez entree pour la fin du code 60, X pour sortir   : ")
        c60f=(time.strftime("%H:%M:%S", time.localtime()))
        print ("Debut ", (c60d))
        print ("Fin   ", (c60f))
        c60x=(c60f)-(c60d)
        saisie="X"

  2. #2
    Membre éprouvé
    Inscrit en
    Juillet 2013
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 80
    Par défaut
    Bonjour,

    Vous ne pouvez pas appliquer une opération mathématique sur une chaine de caractère ; gardez le format numérique en utilisant par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import time
    t_start = time.time()
    [...]
    t_end = time.time()
    print('Code duration : %.1f seconds'%(t_end-t_start))

  3. #3
    Membre confirmé
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Par défaut
    OK, merci ca fonctionne, mais le format de sortie est en secondes, est-ce que je peux le remettre en HH:MM:SS ?

    Ca me donne ca dans la console

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ================= RESTART: D:\Bureautique\Python\Scripts\c60.py ================
    Tapez entree pour le début du code 60, X pour sortir : 
    Tapez entree pour la fin du code 60, X pour sortir   : 
    Debut  13:09:19
    Fin    13:09:19
    Duree  0.8873214721679688
    ET je voudrais bien avoir un résultat de durée sur la forme 00:00:01, je me moque des centièmes, j'ai besoin d'une précision à la seconde, pas plus.

    Encore merci

  4. #4
    Membre confirmé
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Par défaut
    J'ai essayé de mettre un strftime sur ma variable de sortie qui m'affiche le bon résultat mais j'ai l'erreur suivante

    File "D:\Bureautique\Python\Scripts\c60.py", line 14, in <module>
    print ("Duree ", (c60x.strftime("%H:%M:%S")))
    AttributeError: 'float' object has no attribute 'strftime'

    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
    import time
    saisie=0
    while saisie != "X":
        saisie=input("Tapez entree pour le début du code 60, X pour sortir : ") 
        c60d=(time.strftime("%H:%M:%S", time.localtime()))
        c60dd=time.time()
        saisie=input("Tapez entree pour la fin du code 60, X pour sortir   : ")
        c60f=(time.strftime("%H:%M:%S", time.localtime()))
        c60ff=time.time()
        print ("Debut ", (c60d))
        print ("Fin   ", (c60f))
        c60x=(c60ff)-(c60dd)
        print ("Duree ",(c60ff)-(c60dd))
        print ("Duree ", (c60x.strftime("%H:%M:%S")))
        saisie="X"
    L'impression de la durée en ligne 13 fonctionne, mais pas en 14, la variable c60x est bien stockée avec la bonne valeur.

    Une fois que j'aurais résolu ce problème de format je pourrais meme supprimer les variables c60d et c60f en utilisant uniquement le format au moment de l'affichage et pas au moment de la saise ce qui m'oblique a utiliser des variables c60dd et c60ff, correct ?

    Merci de l'aide

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par jchuillier2 Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        print ("Debut ", (c60d))
        print ("Fin   ", (c60f))
        c60x=(c60ff)-(c60dd)
        print ("Duree ",(c60ff)-(c60dd))
    Pourquoi toutes ces parenthèses? Tu sais à quoi ça sert des parenthèses???

    Citation Envoyé par jchuillier2 Voir le message
    AttributeError: 'float' object has no attribute 'strftime'
    Oui, c'est effectivement vrai. Un objet "float" n'a pas d'attribut "strftime()". Et donc? Qu'attends-tu de nous à ce propos?
    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]

  6. #6
    Membre confirmé
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Par défaut
    Merci, j'ai supprimé les parenthèses, que je croyais nécessaire au calcul avec des variables, ca fonctionne mais mon problème de format n'est pas réglé, en bref je ne sais pas comment formatter 1.070474624633789 pour qu'il m'imprime 00:00:01

    Donc comment forcer ma variable c60x a passer à la moulinette du strftime("%H:%M:%S") ?

    je peux envoyé un résultat calculé à strftime ou il lui faut une variable ? En fait j'ai essayé les 2 et rien ne passe.

    Merci de l'aide

  7. #7
    Membre confirmé
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Par défaut
    Citation Envoyé par Sve@r Voir le message

    Oui, c'est effectivement vrai. Un objet "float" n'a pas d'attribut "strftime()". Et donc? Qu'attends-tu de nous à ce propos?
    Une piste sur comment afficher une durée calculée autrement qu'en 14.52547884 serait la bienvenue

    Désolé pour les question de débutant, mais c'est ce que je suis, si on parle de réglage de chassis de voiture de course et que tu me dis "ca glisse de l'avant" je ne vais pas seulement te répondre "ben oui ca sous vire" mais aussi t'expliquer pourquoi ca sous vire et te mettre sur la voie, ou meme carrément de faire un réglage de suspension ou de géométrie qui va réduire ton sous virage.

    Vu que mon calcul est fait à partir de 2 données "time" (les variables c60ff et c60dd) ca me parait bizarre qu'une simple soustraction sur 2 variables ne puisse pas supporter un coup de strftime, non ?

    Merci de l'aide

Discussions similaires

  1. deux calculs sur des echelles de temps differentes mais liees.
    Par antoinemignon dans le forum Simulink
    Réponses: 1
    Dernier message: 27/05/2010, 13h38
  2. Probleme temps de calcul sur un vector
    Par olivier21c dans le forum C++
    Réponses: 25
    Dernier message: 07/04/2010, 09h45
  3. Erreur de compilation sur un calcul de temps de diaporama
    Par epenede dans le forum VBA PowerPoint
    Réponses: 4
    Dernier message: 03/11/2009, 12h35
  4. Calcul de temps sur plusieurs critéres
    Par auracle68 dans le forum Excel
    Réponses: 17
    Dernier message: 04/09/2008, 18h31
  5. Calcul sur des temps de fonctionnement
    Par micbett dans le forum Modélisation
    Réponses: 10
    Dernier message: 28/02/2008, 16h44

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