• # Oui

    Posté par  (site web personnel) . Évalué à 3.

    C'est payé comment et combien ?

    • [^] # Re: Oui

      Posté par  . Évalué à -1.

      Mets un print (n) juste avant la boucle

  • # un None qui apparaît...

    Posté par  (site web personnel) . Évalué à 2.

    Dans supprimerPremiereOccurence, si la condition est fausse, la fonction retourne quoi?

    Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

    • [^] # Re: un None qui apparaît...

      Posté par  (site web personnel) . Évalué à 3. Dernière modification le 07 mars 2019 à 22:57.

      Et mets en page ton code (voir l'aide mémoire de la syntaxe wiki avec trois ` en bas de la page de rédaction). Car du code Python sans avoir l'indentation… aye.

      # Du code avec coloration syntaxique
      def truc(x):
          return x-1

      Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

  • # Parenthèses

    Posté par  . Évalué à 2.

    Hello,

    Comme dit dans le premier commentaire, il va falloir commencer à envisager sérieusement de payer pour avoir des conseils :p (un job de prof quoi).

    Comme dit aussi un peu ensuite, il faut apprendre à poster du code correctement. Surtout pour du python, où l'indentation est importante.

    Enfin, et juste à mon avis, en mettant des parenthèses là où il faut, ça devrait marcher mieux. Je te laisse chercher afin de bien comprendre.

    Pour aller plus loin : https://docs.python.org/3/reference/expressions.html

    Cherche la précédence entre les opérateur >, and et ==. Une fois ça compris, tu comprendras le message d'erreur.

    Matricule 23415

  • # Des outils pour toi

    Posté par  (site web personnel) . Évalué à 3.

    Tu peux essayer ton script sur Python Tutor, ou encore en mode débogage dans Pyzo (ou autre IDE), tu verras ainsi quelles valeurs sont manipulées, où tu passes dans ton code, et tu pourras apprendre en identifiant ton erreur.

    Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

  • # Mystere

    Posté par  . Évalué à 1.

    Mystere…

    • [^] # Re: Mystere

      Posté par  . Évalué à 1.

      Mais ca va te couter 15 euros, je prend que paxum :)

      • [^] # Re: Mystere

        Posté par  . Évalué à 1.

        Je me pause une question.

        Les profs de francais on l'habitude des copier/coller de wikipédia, ils voyent les même chaque année.
        Et ils sanctionnent légérement.

        Si j'etais prof et que je gauler un éléve poster ses devoir "complets" sur linuxfr ou stackoverflow, combien j'enleverais de points?

        Zero pour des questions technique ou des conseils sur le type de l'erreur(ca va dans le sens de la recherche).
        Par contre, pour un devoir complet, je mettrais un 5/20 de base pour l'effort d'avoir mal codé un code bugué :)
        Et moins 2 point pour les nom de fonction ou variable en francais.

        Sadique ;)

        • [^] # Re: Mystere

          Posté par  . Évalué à 3.

          Salut,

          Je me pause une question.

          Play !

          Matricule 23415

  • # Re: ...

    Posté par  . Évalué à 3.

    Salut,

    Quand vous déboulez à deux ou trois avec des questions un peu basiques sur vos exercices de cours… bin le forum s'auto-défend. Plouf, moinssé, zou, next.

    Notez qu'aucun modérateur n'a supprimé vos dites questions.

    Personne n'a envie de vous répondre ? Bin normal. On n'est pas là pour remplacer votre prof (qui est payé, lui, pour répondre à vos questions).

    Que les devoirs soient notés ou pas n'est pas le problème : le gros problème est que si vous ne comprenez pas les réponses.

    Matricule 23415

  • # Re: ...

    Posté par  . Évalué à 2. Dernière modification le 08 mars 2019 à 13:21.

    Commence par lire ce que te dit ton interpréteur (ce n'est pas un compilateur), essaie de voir ce que vaut n avec un print. Ton interpréteur semble te dire que n est à None à un moment donné.

    Donne des vrais noms à tes variables, pour que les gens qui te lisent puisse comprendre le travail plus rapidement et donc envie de te répondre.

  • # Bon, j'aurais fais ca

    Posté par  . Évalué à 1. Dernière modification le 08 mars 2019 à 20:39.

    Déjà j'ai du mal à lire ton code, les parametres suivent pas entre les functions.
    J'imagine que le premier c'est un tableau, le deuxieme le nombre à supprimer, et le troisième(la profondeur?)

    Chez moi, ca donnerais ca:

    #!/usr bin env python
    def mystere( numbersList, wanted, nbToTest):
        i = 0
        while i <= nbToTest - 1:
            if numbersList[i] == wanted:
                numbersList.remove(numbersList[i])
                return numbersList
    
            i = i + 1
    
    if __name__ == '__main__':
        newList = mystere([2,-7,4,5,12,10,4,2,4,-18],5,4)
        print(newList)
    • [^] # Re: Bon, j'aurais fais ca

      Posté par  . Évalué à 1. Dernière modification le 08 mars 2019 à 14:08.

      J'ai pas trouvé la balise pour mettre le code en forme :( dsl
      !/usr/bin/env python, oublie pas les slash.

      C'est horrible sérieux. Si quelqu'un peut mettre la bonne balise svp!

    • [^] # Re: Bon, j'aurais fais ca

      Posté par  . Évalué à 1. Dernière modification le 08 mars 2019 à 21:07.

      Il marche même pas ce code! J'ai return trop tot :

      #!/usr/bin/env python
      def mystere( numbersList, wanted, nbToTest):
          i = 0
          while i <= nbToTest - 1:
              if numbersList[i] == wanted:
                  numbersList.remove(numbersList[i])
      
              i = i + 1
      
          return numbersList
      
      if __name__ == '__main__':
          newList = mystere([2,-7,4,5,12,10,4,2,4,-18],5,4)
          print(newList)
      
  • # Re: ...

    Posté par  . Évalué à 1.

    Je te l'accorde, c'est problème d'algo à la limitte.
    Mais avant toi ya un gars qui à posté ces trois ou quatres devoir, le prend pas méchament :)

  • # Ti conseil

    Posté par  . Évalué à 1.

    amho, pour virer un element d'un tableau, une function suffit. Voir une ligne si tu ne fais pas cette opération régulierement.

    Fait du code simple! Enlever un element = une fonction, pas trois qui s'enchainent avec des nom de parametres different(illisible) et encre moins une qui retourne un appel de fonction. Prend le retour, teste le, retourne le.
    Pense simple: 1 function, un truc.

    Je suis pas un pro du python, mais l'approche est la même avec tous les languages.
    C'est trolldi? A part le Fork peut-être.

  • # Correction

    Posté par  (site web personnel) . Évalué à 4. Dernière modification le 09 mars 2019 à 12:52.

    Bon, ton code fait très programmation "C" avec un tableau de taille fixe dont on gère le nombre d'éléments séparément. En Python on a un type list qui est un conteneur dynamiques, qui dispose des opérateurs/méthodes: t.remove(valeur), del t[index]… et dont on peut connaître le nombre d'éléments len(t).

    Bref, tu fais du C en Python, qui plus est avec un algo très compliqué pour réaliser une opération simple. Mais en restant dans ton code, en ajoutant docstring et commentaires (conseil, fait le, même pour toi, ça permet quand on lit/écrit d'identifier des écarts entre ce qu'on pense que la fonction fait et ce qu'elle fait réellement), ça donnerais:

    def supprimer(t,n,k):
        "Supprime l'élément à l'index k dans t (de taille n) et retourne la nouvelle taille"
        for i in range(k,n-1):
            # On décale les éléments (les anciennes valeurs restent "à droite")
            t[i]=t[i+1]
        return n-1
    
    def supprimerPremiereOccurence(t,n,elt):
        "Supprime la première occurence de elt dans t (de taille n) et retourne la nouvelle taille de t"
        for i in range(n):
            # Recherche la première occurence, et appelle la fonction de suppression
            if t[i]==elt:
                return supprimer(t,n,i)  # Retourne nouvelle taille du tableau
        # Si pas trouvé, la taille du tableau n'a pas changé !!!!!
        return n   # <------------ ton bug était là: si elt n'est pas dans t, tu ne passes pas
                   # par ton return et ça fait que ta fonction sort implicitement avec None,
                   # qui se retrouve stocké dans nbelem, propagé dans n, puis qui provoque une 
                   # comparaison NoneType avec int (n>0) au début de l'itération suivante.
    
    def mystere(t,n,x):
        "Supprime les éléments x de t (de taille n) et retourne la nouvelle taille de t"
        continuer = True
        while n>0 and continuer == True:
            nbelem = supprimerPremiereOccurence(t,n,x)
            if nbelem == n:
                continuer = False
            else:
                n = nbelem
        return n
    
    liData = [2,-7,4,5,12,10,4,2,4,-18]
    print(mystere(liData,len(liData),4))

    Note: Là on fait directement des modifications dans la liste passée en paramètre ; s'il n'y a pas de contrainte on préférera créer une nouvelle liste et la retourner (éviter les effets de bord).

    Et ça se fait même en 1 ligne avec les listes en compréhension:

    >>> liData = [2,-7,4,5,12,10,4,2,4,-18]
    >>> liData2 = [x for x in liData if x!=4]
    >>> liData2
    [2, -7, 5, 12, 10, 2, -18]

    Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

  • # merci à ceux apportant leur aide aux débutants

    Posté par  . Évalué à 1.

    C'est fou ça.

    Quelqu'un vient demander un peu d'aide poliment avec un début de script et l'incompréhension d'une erreur, donc un peu de travail derrière, et paf, on lui envoie que des commentaires désobligeants, on le catalogue de suite comme un pov' nul d'étudiant qui sait rien faire, bonjour les préjugés, à croire que tous ceux postant ce genre de commentaires n'ont jamais galéré sur de simples problèmes au tout début de leurs apprentissages en programmation.

    Si vous voulez faire fuir tous ceux débutants en programmation venant demander un petit coup de main, z'êtes sur la bonne voie.

    J'aurais compris ces réactions envers une personne demandant qu'on lui fasse tout son boulot sans avoir fait la moindre chose, mais ici je ne comprends pas.

    Heureusement qu'il y a encore des gens prêt à assister les débutants, merci à eux.

    • [^] # Re: merci à ceux apportant leur aide aux débutants

      Posté par  . Évalué à 1. Dernière modification le 09 mars 2019 à 22:43.

      Salut :)

      Quelqu'un déboule avec un nouveau compte comme les deux précédents et poste mal (l'OP a été un peu corrigé depuis je crois).

      Que veux-tu ?

      Moi, je veux bien ne pas catégoriser. Mais tu as vu des réponses intéressantes ? Un seul retour ?

      Un, on va dire que c'est une erreur. Deux un copieur. Trois, on tombe "statistiquement" dans un profil. :p

      Matricule 23415

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.