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 :

Écrire une fonction my_insert


Sujet :

Python

  1. #1
    Membre habitué
    Femme Profil pro
    Lycéen
    Inscrit en
    Novembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2019
    Messages : 12
    Par défaut



    j'ai écrit ça comme code mais ça ne marche pas :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    n=int()
    def my_insert(liste):
        if type(n) != int: return None 
         liste.append(n)
         liste.sort()

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

    Si vous racontez:
    Citation Envoyé par Prada1020 Voir le message
    my_insert qui reçoit comme premier paramètre une liste d’entiers relatifs triés par ordre croissant et comme deuxième paramètre un entier relatif n, et qui renvoie une liste correspondant à la liste reçue
    et que vous écrivez:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    n=int()
    def my_insert(liste):
        if type(n) != int: return None 
         liste.append(n)
         liste.sort()
    vous devriez vous rendre compte qu'il n'y a ni de deuxième paramètre ni de renvoi d'une liste.

    Citation Envoyé par Prada1020 Voir le message
    j'ai écrit ça comme code mais ça ne marche pas :/
    Votre code devrait ressembler à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def my_insert(liste, n):
          ...
          return liste
    j'ai bien deux paramètre et çà retourne une liste.
    Reste à remplacer les ... par des instructions qui vont insérer n dans la liste.

    Et si on vous dit que liste est une liste d’entiers relatifs triés par ordre croissant, c'est qu'on vous demande d'écrire une boucle qui va parcourir la liste pour trouver le premier élément plus grand que n pour insérer n avant cet élément et traiter les cas limites où cet élément est le premier ou le dernier de la liste.

    Le but de l'exercice est de montrer que vous savez écrire une boucle, comparer, et un minimum de choses sur les listes. Si vous utilisez .sort, çà marche mais ce n'est pas ce qu'on vous demande.

    Déjà poster un code qui essaie de faire le boulot qu'on vous demande de faire.... Et si le code ne fonctionne pas essayez de montrer que vous avez un peu réfléchi à ce que vous avez écrit et essayé de comprendre ce qui ne se passe pas comme attendu.

    C'est la rédactio, d'une petite histoire dans laquelle vous racontez que si on appelle my_insert avec liste contenant ... et n ayant pour valeur ... çà retourne ... alors qu'on attend ...
    Le nom savant de cette petite histoire est "description du problème".

    Puis comme vous avez un peu réfléchi à ce que le code de my_insert fonctionne, il y a un soucis entre ce que vous pensiez avoir compris et le résultat obtenu (sinon vous auriez pu le corriger vous même sans venir râler ici).

    L'un dans l'autre, vous réaliser qu'avant de venir demander de l'aide, il vous faut montrer que vous avez raisonnablement bossé et non juste poster 3 lignes de code qui ne ressemble à rien dans l'espoir qu'on vous débarrasse d'un boulot qui ne semble pas vous intéresser (et moi/nous encore moins que vous).

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

  3. #3
    Membre habitué
    Femme Profil pro
    Lycéen
    Inscrit en
    Novembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2019
    Messages : 12
    Par défaut Écrire une fonction my_insert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    n= int()
    def my_insert(liste,n):
        if type(n) != int:
            return None
     
        liste.append(n)
        liste.sort()
        return liste
    La première partit du code avec None fonctionne mais quand j'essaye de faire la deuxième partit je reçoit ça :
    avec lst = [1,5,78]:
    my_insert(lst,39) ne donne pas le bon résultat
    (mauvais return ou modifie lst)

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

    Citation Envoyé par Prada1020 Voir le message
    La première partit du code avec None fonctionne mais quand j'essaye de faire la deuxième partit je reçoit ça :
    Relisez votre code et essayer d'imaginer ce que va faire l'ordinateur/Python lorsqu'il exécute les instructions que vous lui avez demandé.
    On part de my_insert(lst,39).
    Ce qui appelle la fonction my_insert avec les arguments liste= lst et n=39.
    On arrive donc à la première instruction de la fonction if n != int: qui teste la condition n != int.
    Lancez l'interpréteur Python pour voir ce qu'il en fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> 39 != int
    True
    >>>
    Python évalue la condition à Vrai et donc retourne None (au lieu d'une la liste triée attendue).

    Donc la vraie question est de savoir qu'est ce que vous aviez en tête en écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        if n != int:
            return None
    Et tout le boulot qui est de relire votre code en se mettant à la place de Python pour l'exécuter "à la main" et comprendre ce qu'il va faire des instructions que vous lui demandez d'exécuter fait partie de votre apprentissage.
    note: si vous devez faire un devoir de math ou de français, vous vous relisez pour vous assurer que vos phrases sont bien construites et que le lecteur pourra comprendre ce que vous lui racontez. Là, c'est pareil, il faut apprendre à vous relire pour comprendre ce que Python fait (ou fera).

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

  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 Prada1020 Voir le message
    Citation Envoyé par wiztricks Voir le message
    On arrive donc à la première instruction de la fonction if n != int: qui teste la condition n != int.
    Le plus marrant, c'est que la première version (if type(n) != int), elle, fonctionnait sur ce point (même si ce point n'est à priori pas demandé dans l'énoncé). Sans déconner quoi, tu es arrivé avec un code à 2 ronds et wiztricks te dit qu'il y a un souci sur la partie "insertion". Qu'est-ce que tu es allé modifier alors cette partie qui fonctionnait ?

    Citation Envoyé par Prada1020 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def my_insert(liste,n):
        liste.append(n)
        liste.sort()
        return liste
    Tu as bien conscience que, même si ça fonctionne, ce n'est pas ce que le prof te demande ?

    Citation Envoyé par Prada1020 Voir le message
    n=int()
    Quel est le but de cette instruction ?

    Citation Envoyé par Prada1020 Voir le message
    La première partie du code avec None fonctionne mais quand j'essaye de faire la deuxième partie je reçois ça
    C'est pas parce que tu es dans un forum de prog qu'il faut oublier le français. Le français n'est pas que un truc fait pour te gonfler, c'est aussi un truc pour se faire comprendre. Et il est donc tout aussi utile en prog.
    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 habitué
    Femme Profil pro
    Lycéen
    Inscrit en
    Novembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2019
    Messages : 12
    Par défaut Écrire une fonction my_insert
    je vous est peut-être pas envoyer l’annoncé en entier

    Écrire une fonction my_insert qui reçoit comme premier paramètre une liste d’entiers relatifs triée par ordre croissant et comme deuxième paramètre un entier relatif n, et qui renvoie une liste correspondant à la liste reçue, mais dans laquelle le nombre n a été inséré à la bonne place.
    La liste donnée en paramètre ne doit pas être modifiée par votre fonction.

    Vous pouvez supposer que le premier paramètre sera bien une liste triée d’entiers, mais si le deuxième paramètre n’est pas du bon type, la fonction retourne None.

  7. #7
    Membre habitué
    Femme Profil pro
    Lycéen
    Inscrit en
    Novembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2019
    Messages : 12
    Par défaut Écrire une fonction my_insert
    et là on revient avec mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    n= int()
    def my_insert(liste,n):
        if type(n) != int:
            return None
     
        liste.append(n)
        liste.sort()
        return liste

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Ce code n'est pas celui que vous avez présenter sur le message #3.
    Ce nouveau code fonctionne (dans le sens ou Python ne vous crache pas une erreur lorsque vous l'éxécutez) et si vous l'essayez

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lst = [1,5,78]
    print( my_insert(lst,39) )  ### Affiche [1, 5, 39, 78]
    ca renvoie bien le résultat attendu.

    Donc à présent pour moi il n'y a plus de problème.
    Après soit ce code vous satisfait, soit vous en chercher une autre implémentation plus astucieuse, tirant parti du fait que lst est déjà trié, comme il vous l'a été suggéré.

  9. #9
    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
    Citation Envoyé par Prada1020 Voir le message
    La liste donnée en paramètre ne doit pas être modifiée par votre fonction.
    et là on revient avec mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    n= int()
    def my_insert(liste,n):
        if type(n) != int:
            return None
     
        liste.append(n)
        liste.sort()
        return liste
    Donc mis à part le fait que ce code n'est pas "dans l'esprit" de l'apprentissage du langage (cf remarque de wiztricks "Le but de l'exercice est de montrer que vous savez écrire une boucle, comparer, et un minimum de choses sur les listes. Si vous utilisez sort, çà marche mais ce n'est pas ce qu'on vous demande" et donc que si j'étais ton prof je le refuserais ; manque de bol, les instructions liste.append() et liste.sort() modifient toutes deux la liste donnée en paramètre. Et accessoirement tu ne m'as pas expliqué ce n=int() stupide en début de ton code.

    Donc on va arrêter là. Si tu veux juste te débarasser de ce TP (et accessoirement débarasser le forum de ton parasitisme de faignasse) tu écris simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def my_insert(liste,n):
        if type(n) != int:
            return None
     
        return sorted(liste + [n,])
    Et ça marchera, et répondra aux consignes, mais cela ne t'empêchera pas de récolter quand-même ta bulle.

    Ou alors si tu veux vraiment bosser alors tu t'y mets sérieusement et là on t'aide.
    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]

  10. #10
    Membre habitué
    Femme Profil pro
    Lycéen
    Inscrit en
    Novembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2019
    Messages : 12
    Par défaut
    pourquoi t'a écris + [n,] ? enfin j'aimerais comprendre ton raisonnement stp

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Citation Envoyé par Prada1020 Voir le message
    pourquoi t'a écris + [n,] ? enfin j'aimerais comprendre ton raisonnement stp
    Toujours pareil, vous lancez l'interpréteur Python et vous regardez ce que font:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> lst + [36]
    [1, 5, 78, 36]
    >>>
    puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> sorted(_)
    [1, 5, 36, 78]
    >>>
    Et s'il y a des écritures qui vous échappent, il doit y avoir dans votre cours un chapitre sur les listes à revoir.

    De toutes façons, si l'énoncé vous dit "La liste donnée en paramètre ne doit pas être modifiée par votre fonction." et que vous écrivez lst.append(n), visiblement vous ne comprenez pas le français. Pas la peine qu'on s'em... à essayer de vous expliquer (en français) quoi que ce soit.

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

  12. #12
    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
    Citation Envoyé par Prada1020 Voir le message
    pourquoi t'a écris + [n,] ? enfin j'aimerais comprendre ton raisonnement stp
    Oh là là... T'as ouvert un livre Python dans ta vie toi ? Ou même ouvert le moindre livre de programmation ???

    Je crée une liste en mémoire composée de la liste d'origine à laquelle je rajoute (+) une nouvelle liste composée de cet unique nombre "n" ([n,]). La virgule n'est pas obligatoire pour les listes mais comme elle l'est pour les tuples, j'ai pris l'habitude de l'écrire tout le temps quand j'utilise l'un ou l'autre de ces deux ensembles.
    La nouvelle liste étant en mémoire, la liste d'origine n'est pas modifiée. Et je retourne cette nouvelle liste triée.
    Et (encore une fois), ça marche, répond aux consignes... MAIS comme cette solution ne correspond pas au but de ce TP (et que visiblement en plus elle utilise des notions que tu ne connais pas), elle sera bien évidemment refusée par ton prof (qui en plus verra de suite qu'elle ne peut pas être de toi).
    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]

  13. #13
    Membre habitué
    Femme Profil pro
    Lycéen
    Inscrit en
    Novembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2019
    Messages : 12
    Par défaut
    AH oui j'ai compris enfaîte ct easy mercii

  14. #14
    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
    Citation Envoyé par Prada1020 Voir le message
    mercii
    Encore une fois, cette solution fonctionne, répond aux consignes MAIS elle n'est pas LA solution demandée pour l'exercice. Ce serait pire de la montrer à ton prof que de ne rien montrer car si tu ne montres rien tu seras catalogué comme branleur (ce qui, je pense, est déjà un fait connu de tous ceux qui te fréquentent) mais si tu la montres, tu seras catalogué comme branleur+tricheur. Ne te fais pas d'illusions, n'importe qui qui connait Python et qui te connait verra obligatoirement qu'elle ne peut pas être de toi.

    Citation Envoyé par Prada1020 Voir le message
    enfaîte ct easy
    Ca c'est vrai. Généralement les solutions des exos sont toutes easy car elles n'utilisent que des chose que tu sais faire. Et plus encore en Python qui a été fait SPECIALEMENT POUR être easy.
    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]

  15. #15
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 21
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2022
    Messages : 10
    Par défaut upylab my_insert part 2
    Bonjour la deuxieme patie de ce code etait ca:
    L’exercice est le même que le précédent, mais ici, si les paramètres ont le type attendu, la fonction modifie la liste en place et ne retourne rien. Si les paramètres ne sont pas valides, une erreur se produit à l’exécution.
    et voila on code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def my_insert(lst,n):
        assert isinstance(n,int)
        if type(n) == int:
            lst = lst+[n]
            lst.sort()
    est ce que vous pouvez detectez ma faute

  16. #16
    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 s-chrtghhyo Voir le message
    L’exercice est le même que le précédent, mais ici, si les paramètres ont le type attendu, la fonction modifie la liste en place et ne retourne rien. Si les paramètres ne sont pas valides, une erreur se produit à l’exécution.
    est ce que vous pouvez detectez ma faute
    Faute = exercice qui ne produit pas le résultat attendu. Or tel que je lis ton code, si les paramètres sont de type attendu la fonction modifie bien la liste en place et ne retourne rien, ce qui correspond à l'énoncé tel que tu l'as décrit. Donc pour moi pas de faute. Juste une aberration où tu utilises isinstance() pour vérifier le type puis tu vérifies encore le type une seconde fois () mais là sans utiliser isinstance(). Visiblement donc tu ne sais pas à quoi sert cette fonction.
    Accessoirement je ne sais pas si assert() est de toi ou de ton prof mais il faut savoir que cette fonction n'est pas traitée quand on exécute le code en mode dit "optimisé" (une option de Python). Donc si vraiment tu veux obligatoirement une erreur, il ne te faut pas utiliser cette fonction mais demander explicitement l'erreur via raise() si le type n'est pas int.
    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]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2013] Écrire une fonction paramétrée ramenant les données numériques d'une table
    Par morobaboumar dans le forum VBA Access
    Réponses: 3
    Dernier message: 14/12/2018, 09h53
  2. Comprendre comment écrire une fonction
    Par bo_yoyo dans le forum Débuter
    Réponses: 10
    Dernier message: 11/05/2017, 15h18
  3. Réponses: 4
    Dernier message: 04/10/2015, 11h04
  4. écrire une fonction comme first
    Par elliott dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/07/2007, 07h52
  5. [fonction d'Ackermann] Écrire une fonction récursive
    Par java+ dans le forum Mathématiques
    Réponses: 5
    Dernier message: 19/06/2007, 01h14

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