Partage
  • Partager sur Facebook
  • Partager sur Twitter

Nonetype object au lieu d'un nombre valide

Sujet résolu
    19 octobre 2021 à 21:40:12

    Bonjour, j'essaie actuellement de faire un programme permettant de faire un calcul exprimer en NPI dans des piles, mais le problème est que quand je souhaite mettre au carré une valeur j'ai une erreur : TypeError: 'NoneType' object cannot be interpreted as an integer

    Voici mon code :

    from math import *

    class Pile:

        def __init__(self):
            self.valeurs = []


        def empiler(self, valeur):
            return self.valeurs.append(valeur)


        def depiler(self):
            if self.valeurs:
                return self.valeurs.pop()

        def estVide(self):
            if self.valeurs == [] :
                return True
            else :
                return False


        def __str__(self):
            ch = ''
            for x in self.valeurs:
                ch = "|\t" + str(x) + "\t|" + "\n" + ch
                ch = "\nEtat de la pile:\n" + ch
            return ch

        def taille(self):
            return len(self.valeurs)


        def calculNPI (self, pile2) :

            while self.estVide() == False :
                a = self.depiler()

                if type(a) == int:
                    pile2.empiler(a)

                elif a == "*" :
                    y = pile2.depiler()
                    x = pile2.depiler()
                    x= x*y
                    pile2.empiler(x)

                elif a == "/" :
                    y = pile2.depiler()
                    x = pile2.depiler()
                    x= x/y
                    pile2.empiler(x)

                elif a == "+" :
                    y = pile2.depiler()
                    x = pile2.depiler()
                    x= x+y
                    pile2.empiler(x)

                elif a == "-" :
                    y = pile2.depiler()
                    x = pile2.depiler()
                    x= x-y
                    pile2.empiler(x)

                elif a == "**" :
                    x = pile2.depiler()
                    y = pile2.depiler()

                    for i in range(y) :
                        x = x*x
                    pile2.empiler(x)



            return pile2

    pile1= Pile()
    pile1.empiler(4)
    pile1.empiler(2)
    pile1.empiler("**")
    pile2 = Pile()

    print(pile1.calculNPI(pile2))

    Pouvez-vous m'aider svp?

    -
    Edité par KdeuzxGaming 20 octobre 2021 à 18:03:43

    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2021 à 22:11:30

      Bonjour, Évitez les titres de sujet avec "problème", si vous postez on se doute que vous avez un problème inutile donc de l'indiquer dans le titre car cela n'apporte aucune information quant au contenu du sujet, soyez descriptif.

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: python;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Mauvais titre

      Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

      Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

      De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

      Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

      Pour modifier votre titre, éditez le premier message de votre sujet.

      (titre originel : Problème nonetype)

      Liens conseillés

      -
      Edité par AbcAbc6 19 octobre 2021 à 22:12:35

      • Partager sur Facebook
      • Partager sur Twitter
        19 octobre 2021 à 23:28:55

        Tu as un problème de logique dans ton code, sans te donner la réponse, tu n'as pas besoin de travailler sur deux piles. ton calculNPI n'a oas besoin de prendre une deuxième pile.
        • Partager sur Facebook
        • Partager sur Twitter
        Si vous ne savez pas quoi faire, ne faites rien !
          20 octobre 2021 à 18:06:34

          J'ai changé le code au final, je trouvais toujours la même erreur mais j'ai finis par empiler des float(nombre) et ça m'a réglé le problème, merci!

          -
          Edité par KdeuzxGaming 20 octobre 2021 à 18:14:45

          • Partager sur Facebook
          • Partager sur Twitter

          Nonetype object au lieu d'un nombre valide

          × 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