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 :

Secondes en heures, minutes, secondes


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Par défaut Secondes en heures, minutes, secondes
    Bonjour,

    Etant débutant, je cherche à effectuer des petits programmes sur Python. Je rencontre actuellement un problème avec ce type de programme :

    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
     
    def seconde(iterable):
     
    	heure = iterable / 3600
     
    	minute = (iterable - (3600 * heure)) / 60
     
    	secondes = iterable - (3600 * heure) - (60 * minute)
     
    	time = (heure, minute, secondes)
     
    	return time
     
     
    resultat = (seconde(456))
     
    print("%s heures, %s minutes, et %s secondes\n" %(resultat[0], resultat[1], resultat[2]))
    En effet, il me retourne n'importe quoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    0.12666666666666668 heures, -9.473903143468002e-16 minutes, et 0.0 secondes
     
    [Finished in 0.2s]
    J'ai du mal à comprendre ^^' je m'y prend visiblement mal.

    Merci

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    Ce n'est pas que cela retourne n'importe quoi, mais c'est dû à comment est représenté un nombre flottant en mémoire, voir la doc python pour une explication détaillée.
    https://docs.python.org/fr/3.7/tutor...tingpoint.html

    Pour résoudre ton problème, il suffit d'utiliser l'opérateur // de python (reste de la division entière), et comme tu as besoin de convertir des secondes en h, m, s, la fonction divmod s'avère la meilleure option à utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> secondes = 456
    >>> heures, secondes = divmod(secondes, 3600)
    >>> minutes, secondes = divmod(secondes, 60)
    >>> heures, minutes, secondes
    (0, 7, 36)

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 676
    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 676
    Par défaut
    Salut,

    heure = iterable / 3600 retourne un nombre flottant alors que vous voulez peut être effectuer la division entière ('//') ou mieux utiliser divmod.

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

  4. #4
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Par défaut
    Merci beaucoup pour vos réponses, je m'autoforme et je commence vraiment à vouloir évoluer dans ce langage, et votre aide est très précieuse

    Je me suis débrouillé, j'ai tripatouillé un peu et je suis arrivé à ce résultat qui retourne la même chose que vous.

    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
     
    def seconde(iterable):
     
    	heure = int((iterable / 3600))
     
    	minute = int((iterable - (3600 * heure)) / 60)
     
    	secondes = int(iterable - (3600 * heure) - (60 * minute))
     
    	time = (heure, minute, secondes)
     
    	return time
     
     
    les_secondes = (int(input("Combien de seconde\n")))
     
    resultat = (seconde(les_secondes))
     
    print("\n\n%s heures, %s minutes, et %s secondes\n" %(resultat[0], resultat[1], resultat[2]))
    Cette manière de programmer est-elle bonne selon vous ? Je regarderais plus tard la fonction divmod()

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 676
    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 676
    Par défaut
    Citation Envoyé par preliator Voir le message
    Cette manière de programmer est-elle bonne selon vous ? Je regarderais plus tard la fonction divmod()
    Si la division entière n'existait pas, ce pourrait être une solution... mais à partir du moment où la division entière existe, c'est un bricolage que vous aurez des difficultés à relire (comprendre) dans quelques semaines.
    Une autre façon de voir les choses est de comparer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    heure = int((iterable / 3600))
    avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    heure = iterable // 3600
    Dans le premier cas, on ne sait pas trop ce que çà fait: on prend un nombre, on le divise puis on en fait un entier... Dans le second, le '//' vous indique que heure sera le quotient de votre division entière.

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

  6. #6
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Par défaut
    Merci a vous

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 799
    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 799
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par preliator Voir le message
    Cette manière de programmer est-elle bonne selon vous ?
    Puisque tu fais pareil en plus compliqué, qu'en penses-tu ?

    Sinon en dehors de ce qui t'a été dit sur l'utilisation de "//" au lieu de "/", moi je m'étonne du nom de tes éléments. Une fonction destinée à convertir des secondes en HMS moi je l'aurais nommée "sec2hms" plutôt que "seconde" (nom plutôt destiné à représenter un nombre de secondes). Et nommer ce nb de secondes "iterable" ça c'est ce qu'il y a de pire. Le terme "iterable" en Python désigne un truc pouvant être itéré, c'est à dire sur lequel on peut boucler (un tuple, une liste, un générateur). En aucun cas il ne peut être utilisé pour stocker un simple nombre.
    Et enfin le nom "time" est un nom de module. Bon c'est pas interdit d'appeler ta variable ainsi mais dans ce cas, tu perds l'accès à ce module dans ta fonction. Et c'est d'autant plus dommage que cette variable ne sert qu'une fois => elle est donc inutile.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def sec2hms(ss):
    	(hh, ss)=divmod(ss, 3600)
    	(mm, ss)=divmod(ss, 60)
    	return (hh, mm, ss)
    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]

Discussions similaires

  1. [HIBERNATE] date sans heure minute seconde
    Par _juel_ dans le forum Hibernate
    Réponses: 1
    Dernier message: 30/06/2006, 14h43
  2. Réponses: 1
    Dernier message: 01/06/2006, 23h12
  3. Jour Mois anné, heure minute et seconde...
    Par SangKou dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 29/11/2005, 13h43
  4. [Dates] Jour Mois anné, heure minute et seconde...
    Par SangKou dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2005, 08h34
  5. Formater une durée sous la forme Heure:Minute:Seconde
    Par marsupile dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/01/2004, 23h29

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