Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction qui renvoie un None Type au lieu d'un str

Sujet résolu
    3 mars 2021 à 9:17:34

    Hey tout le monde ^^,

    J'aurais une question sur une fonction que j'ai écrit pour transformer un nombre de secondes en une phrase dont voici le code :

    def translatetime(s):
        m=0
        h=0
        while(s>=60):
            s=s-60
            m=m+1
        while(m>=60):
            m=m-60
            h=h+1
        if(h==24):
            h=0
        if(m==0 and h==0):
            print(s," secondes")
        if(m!=0 and h==0 and s!=0):
            print(m," minutes ",s," secondes")
        if(m!=0 and h==0 and s==0):
            print(m," minutes")
        if(m==0 and h!=0 and s==0):
            print(h," heure")
        if(m!=0 and h!=0 and s==0):
            print(h," heure ",m," minutes")
        if(m==0 and h!=0 and s!=0):
            print(h,"heure",s," secondes")
        if(m!=0 and h!=0 and s!=0):
            print(h," heure ",m," minutes ",s," secondes")

    Je pensais donc me retrouver avec une string mais je me retrouve deux lignes (la phrase et un None) et cela fait que la sortie est de type de NoneType et je ne comprends pas trop pourquoi :

    1  heure  1  minutes  1  secondes
    None
    <class 'NoneType'>

    Merci d'avance pour vos réponses ^^


    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      3 mars 2021 à 9:34:04

      Slt,

      c'est normal étant donné que ta fonction ne retourne aucune valeur si tu fais:

      print(translatetime(600))
      
      • Partager sur Facebook
      • Partager sur Twitter
        3 mars 2021 à 10:17:23

        Yes merci pour ta réponse,

        Du coup j'ai changé et mis un return a la place des prints dans la fonction mais autre problème

        En gros, le but final c'est d'envoyer la phrase par mail donc avec le NoneType cela ne fonctionnait pas mais avec le return ca sort un tuple de int et str et le mail ne veut toujours pas s'envoyer (avec cette erreur):

        'ascii' codec can't encode character '\xe9' in position 180: ordinal not in range(128)
        Du coup j'ai essayé de voir si je vais pouvais convertir mon tuple en str mais comme c'est un mélange de int et de str je ne trouve pas de formule ^^'

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          3 mars 2021 à 10:43:27

          Utilise le formatage de chaine :

          def translatetime(s):
              m=0
              h=0
              while(s>=60):
                  s=s-60
                  m=m+1
              while(m>=60):
                  m=m-60
                  h=h+1
              if(h==24):
                  h=0
              if(m==0 and h==0):
                  print(s," secondes")
              if(m!=0 and h==0 and s!=0):
                  print(m," minutes ",s," secondes")
              if(m!=0 and h==0 and s==0):
                  print(m," minutes")
              if(m==0 and h!=0 and s==0):
                  print(h," heure")
              if(m!=0 and h!=0 and s==0):
                  print(h," heure ",m," minutes")
              if(m==0 and h!=0 and s!=0):
                  print(h,"heure",s," secondes")
              if(m!=0 and h!=0 and s!=0):
                  return f"{h} heure {m} minutes {s} secondes" # Formatage
          
          chaine = translatetime(6001)
          print(chaine, type(chaine))



          • Partager sur Facebook
          • Partager sur Twitter
            3 mars 2021 à 13:17:47

            Yes merci cela fonctionne parfaitement
            • Partager sur Facebook
            • Partager sur Twitter

            Fonction qui renvoie un None Type au lieu d'un str

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown