kwark Posted February 23, 2021 Posted February 23, 2021 salut a tous c'est quoi cette erreur ??? http://www.noelshack.com/2021-08-2-1614120190-informatique.png Quote
Ancien Responsable Matière Herlock Posted February 23, 2021 Ancien Responsable Matière Posted February 23, 2021 (edited) @PassOuPACESJe crois que quand tu as défini ta fonction les accolades ou plutôt parentheses tu ne les as pas collées à ta fonction. Edited February 23, 2021 by Herlock Quote
Ancien du Bureau Sans-Visage Posted February 24, 2021 Ancien du Bureau Posted February 24, 2021 Salut ! On 2/23/2021 at 11:59 PM, Herlock said: @PassOuPACESJe crois que quand tu as défini ta fonction les accolades ou plutôt parentheses tu ne les as pas collées à ta fonction. Expand Alors je suis surpris aussi mais ça a l'air de marcher :'))) Ici ce qui pose problème, ce que dit le message d'erreur, c'est que tu fais une addition entre un "str" et un "none" Je te mets la "solution" en caché au cas où tu ai envie de chercher seul à partir de ce que je viens de dire ^^ Reveal hidden contents En fait, ton programme génère un "None" puisque tu fais "Return" tout court, en gros il est considéré comme "vide", ce n'est ni un int ni un str Donc, pour régler ça, vu que tu décides veux faire des additions entre ta fonction et une variable (int), il va falloir que ta fonction soit un int Pour cela, il suffit de retourner un int, donc => Return 0 Herlock 1 Quote
kwark Posted February 24, 2021 Author Posted February 24, 2021 (edited) salut @DuTACKauTac ah oui j'avais pas pensé à ca c'est vrai mais quand je change mon programme il marche toujours pas, ça m'affiche "null" http://www.noelshack.com/2021-08-3-1614166624-null.png Edited February 24, 2021 by PassOuPACES Quote
Ancien du Bureau Sans-Visage Posted February 24, 2021 Ancien du Bureau Posted February 24, 2021 On 2/24/2021 at 11:36 AM, PassOuPACES said: ça m'affiche "null" Expand ça je pense que c'est à cause du fait que tu as défini "if nb == -1" Du coup quand ton nb arrive à -1, plutot que de juste marquer 0, il va marque "" soit Null Tu comprends ? Quote
kwark Posted February 24, 2021 Author Posted February 24, 2021 @DuTACKauTac pourtant il m'affiche la même chose si je met "if nb < 0" Quote
Ancien du Bureau Sans-Visage Posted February 24, 2021 Ancien du Bureau Posted February 24, 2021 On 2/24/2021 at 11:49 AM, PassOuPACES said: @DuTACKauTac pourtant il m'affiche la même chose si je met "if nb < 0" Expand Parce que c'est exactement la même chose Il faudrait que tu fasses par exemple: if nb == 0 : return "0" Et il me semble que ça devrait marcher Quote
kwark Posted February 24, 2021 Author Posted February 24, 2021 @DuTACKauTac ça marche toujours pas, ça m'affiche la même chose Quote
Ancien du Bureau Sans-Visage Posted February 24, 2021 Ancien du Bureau Posted February 24, 2021 On 2/24/2021 at 11:57 AM, PassOuPACES said: @DuTACKauTac ça marche toujours pas, ça m'affiche la même chose Expand Ah ouaaais ? Je peux voir un screen stp ? Quote
kwark Posted February 24, 2021 Author Posted February 24, 2021 ouiii http://www.noelshack.com/2021-08-3-1614168501-null.png Quote
Ancien du Bureau Solution Sans-Visage Posted February 24, 2021 Ancien du Bureau Solution Posted February 24, 2021 On 2/24/2021 at 12:09 PM, PassOuPACES said: ouiii http://www.noelshack.com/2021-08-3-1614168501-null.png Expand Okay, j'ai fait un test en modifiant mon programme, je crois que le problème c'est que tu fais: print(affichercolonne(nombrelu)) Alors que le print() est pas nécessaire, puisqu'il est compris dans le programme (ça me fait la même chose que toi, ça me met "null") Du coup je crois que je t'ai dit une bêtise avant, essaies en modifiant juste ça, et si je me trompe par ton programme s'arrêtera à "1 0" et il te manquera le "0", donc à ce moment là il faudra remodifier la condition "if nb ==" désolé :'))) kwark 1 Quote
kwark Posted February 24, 2021 Author Posted February 24, 2021 @DuTACKauTac Merciiii ça a marché j'imagine que c'est parce que pour la dernière ligne on fait print alors qu'on a rien à afficher Quote
Ancien du Bureau Sans-Visage Posted February 24, 2021 Ancien du Bureau Posted February 24, 2021 Je pense que du coup quand on arrive au print() tout en bas y a tout le programme qui se déroule et donc qui s'imprime, et une fois que le programme a fini de se dérouler, le print() entre en jeu... sauf que du coup la dernière valeur retournée ça devrait être "0" donc je vois pas pourquoi Null On 2/24/2021 at 12:09 PM, PassOuPACES said: http://www.noelshack.com/2021-08-3-1614168501-null.png Expand @MrPouple @clemens vous pourriez dire ce que vous en penser svp ? Quote
Ancien du Bureau MrPouple Posted February 24, 2021 Ancien du Bureau Posted February 24, 2021 Salut ! Le problème vient du fait qu'à la fin ta fonction affichercolonne ne renvoie rien (et en programmation, rien, c'est "null" ou "None"). Alors la solution c'est : def affichercolonne(nb): if nb == 0: return "0" print(afficherligne(nb)) affichercolonne(nb-1) return "0" def afficherligne(nb): if nb == 0 : return "0" x = afficherligne(nb-1) return str(nb) + " " + x nombreLu = int(input()) print(affichercolonne(nombreLu)) Reprenons ensemble : Mettons que nombreLu = 1 pour faire simple. 1 - On appelle affichercolonne(1) 2 - La condition est pas remplie on appelle afficherligne(1) On est dans afficher ligne et nb est pas égal à 0 On appelle afficherligne(0) Ca nous envoie 0 x = 0 donc On retourne "1" + "0" On imprime donc ce que afficherligne(1) nous a renvoyé soit "1 0" On lance affichercolonne(0) Ca retourne 0 ta ligne affichercolonne(0) retourne donc 0 mais pas ta fonction de base Tu dois terminer enfin ta fonction en retournant 0 Ce qu'il faut bien se rendre compte ici, c'est que ton if nb == 0 dans affichercolonne est appelé à l'intérieur de cette même fonction, donc quand tu retournes 0 une fois que le compte à rebours est terminé, tu le retournes dans la fonction elle même et pas vers l'extérieur de la fonction. Puisque si tu y réfléchis bien, une fois que ton programme a dépassé la ligne affichercolonne(0), il est terminé. Tu peux donc très bien mettre ton return 0 juste à la fin. Peut-être que tu comprendras mieux en voyant que ce programme là fait exactement ce qui est demandé par l'exo : def affichercolonne(nb): if nb == 0: return "Le TAT c\' est la vie" print(afficherligne(nb)) affichercolonne(nb-1) return "0" def afficherligne(nb): if nb == 0 : return "0" x = afficherligne(nb-1) return str(nb) + " " + x nombreLu = int(input()) print(affichercolonne(nombreLu)) Voilà, n'hésite pas à poser des questions si tu ne comprends toujours pas, la récursion c'est vraiment un truc de taré ça fait vriller la tête hyper vite Mais ça peut se révéler très utile pour optimiser des algorithmes ou pour (qui l'eût cru) simplifier certains programmes. Au plaisir Sans-Visage 1 Quote
Ancien du Bureau Sans-Visage Posted February 24, 2021 Ancien du Bureau Posted February 24, 2021 Oooooh yes merci beaucoup !! <33 J'ai du relire à peu près 8 fois mais maintenant mon petit cerveau a compris mdrrr MrPouple 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.