:roll::roll:
j'ai écrit ça comme code mais ça ne marche pas :/
Code:
1
2
3
4
5 n=int() def my_insert(liste): if type(n) != int: return None liste.append(n) liste.sort()
Version imprimable
:roll::roll:
j'ai écrit ça comme code mais ça ne marche pas :/
Code:
1
2
3
4
5 n=int() def my_insert(liste): if type(n) != int: return None liste.append(n) liste.sort()
Salut,
Si vous racontez:
et que vous écrivez:
vous devriez vous rendre compte qu'il n'y a ni de deuxième paramètre ni de renvoi d'une liste.Code:
1
2
3
4
5 n=int() def my_insert(liste): if type(n) != int: return None liste.append(n) liste.sort()
Votre code devrait ressembler à:
j'ai bien deux paramètre et çà retourne une liste.Code:
1
2
3 def my_insert(liste, n): ... return 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
La première partit du code avec None fonctionne mais quand j'essaye de faire la deuxième partit je reçoit ça :Code:
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
Citation:
avec lst = [1,5,78]:
my_insert(lst,39) ne donne pas le bon résultat
(mauvais return ou modifie lst)
Salut,
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:
Python évalue la condition à Vrai et donc retourne None (au lieu d'une la liste triée attendue).Code:
1
2
3 >>> 39 != int True >>>
Donc la vraie question est de savoir qu'est ce que vous aviez en tête en écrivant:
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.Code:
1
2 if n != int: return None
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
Bonjour
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 ?
Tu as bien conscience que, même si ça fonctionne, ce n'est pas ce que le prof te demande ?
Quel est le but de cette instruction ?
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.
je vous est peut-être pas envoyer l’annoncé en entier
Citation:
É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.
et là on revient avec mon codeCode:
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
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
ca renvoie bien le résultat attendu.Code:
1
2 lst = [1,5,78] print( my_insert(lst,39) ) ### Affiche [1, 5, 39, 78]
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é.
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
Et ça marchera, et répondra aux consignes, mais cela ne t'empêchera pas de récolter quand-même ta bulle.Code:
1
2
3
4
5 def my_insert(liste,n): if type(n) != int: return None return sorted(liste + [n,])
Ou alors si tu veux vraiment bosser alors tu t'y mets sérieusement et là on t'aide.
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:
puis:Code:
1
2
3 >>> lst + [36] [1, 5, 78, 36] >>>
Et s'il y a des écritures qui vous échappent, il doit y avoir dans votre cours un chapitre sur les listes à revoir.Code:
1
2
3 >>> sorted(_) [1, 5, 36, 78] >>>
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
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).
AH oui j'ai compris 8O enfaîte ct easy 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.
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.
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:
est ce que vous pouvez detectez ma faute:(Code:
1
2
3
4
5 def my_insert(lst,n): assert isinstance(n,int) if type(n) == int: lst = lst+[n] lst.sort()
Bonjour
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 (8O) 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.