Bonjour à tous, je souhaite exécuter la fonction ci-jointe mais ça me marque des erreurs quelque soient les corrections apportées, pourriez-vous m'aider s'il vous plaît ?![]()
Bonjour à tous, je souhaite exécuter la fonction ci-jointe mais ça me marque des erreurs quelque soient les corrections apportées, pourriez-vous m'aider s'il vous plaît ?![]()
Déjà, il faudrait montrer comment elle est appelée... et comment l'appelant "charge" le module exo.py pour que Moitie soit défini.
note: " exos d'algorithmique - cahier d'algorithmique" n'a aucun rapport avec Python. Dire "pourquoi ça lève l'exception NameError?" serait mieux. Dit autrement, pourquoi vous écrivez des lignes de Python est sans rapport avec le soucis que vous avez (et le pourquoi vous demandez de l'aide).
- W
Dit autrement : mettre un titre sans rapport avec le problème est signe de flemmardise (je me foule pas à chercher un titre correct) et surtout n'aide pas la communauté (si un jour un autre a le même souci il n'aura pas l'idée de venir ici voir s'il y a eu une solution)
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]
J'ai modifié l'intitulé de la discussion, c'est la première fois que je poste un message sur ce site donc c'est normal mais en faisant des erreurs qu'on apprend, n'est-ce pas ?
À présent, seriez-vous en mesure de me venir en aide parce que là, je sèche et je commence sérieusement à me lasser de ces exos, merci à vous
C'est une autre erreur que le NameError initial.
Vous voyez que ça râle en exécutant l'instruction n = 0 dans la fonction moitie à la ligne 5 qui contient n += 1.
=> le code exécuté ne correspond pas au code que vous montrez.
Après ça vous pouvez toujours demander de l'aide mais comme on ne va pas se déplacer pour voir ce que vous faites, il va falloir mettre plus de rigueur à exposer le problème que vous avez.
Note: le premier étant que vous utilisez un éditeur sophistiqué sans trop comprendre ce qu'il se passe sous le capot. Débutez avec un engin plus rustique histoire de comprendre les bases avant d'y ajouter un voile plus ou moins épais par dessus.
- W
Tu ne t'es pas creusé le citron beaucoup plus !!!
Non pas normal. Tu es assez grand pour pouvoir déduire tout seul que c'est le titre qui donne l'idée. Tu irais voir au cinéma un film qui s'intitule "un film"?
Accessoirement il y a plein d'autres topics qui peuvent te servir d'exemple.
Faudrait voir comment tu appelles la fonction (déjà dit par wiztricks) car je n'arrive pas à reproduire (d'ailleurs les règles précisent qu'on poste ses codes dans les topics au lieu de mettre des copies d'écran car ça permet déjà un copier/coller au lieu de tout se retaper à la mano). Le truc ne semble pas aimer que tu réaffectes "n" alors que c'est un paramètre de fonction. Et le n+=1 ne semble pas super sain (en plus de n'être franchement pas super intelligent vu que n doit récupérer les valeurs du range). Pas perspicace non plus de boucler sur une évaluation de V qui ne change pas durant la boucle.
Si déjà tu te lasses des études que tu as choisies je me demande ce que ça va donner dans la vie active. Ils seront content de te voir arriver ceux avec qui tu bosseras...
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]
c'est quoi ce truc ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part import none
De toute façon, ce script ne fait que définir une fonction, mais il faut qu'elle soit appelée ailleurs, donc vous ne montrez pas tout ou vous n'expliquez pas suffisamment ce que vous avez fait.
Laissez tomber, je vais me débrouiller tout seul, après tout, ça ne serait pas gratifiant si je passais toujours mon temps
à demander de l'aide mais même si ce ne sont que des exos niveau débutant, je trouve ça quand même très frustrant
d'avoir passé deux jours quasi complet à buter dessus sans avoir trouvé la bonne réponse, le bon algorithme quoi.
Je peux quand même vous afficher l'exo en image pour que vous puissiez me donner votre avis sur la question, svp ?
Sans me donner la réponse, juste avoir votre avis
Les captures d'écran n'aident pas beaucoup. Il vaut mieux poster le code en texte, en utilisant les balises prévues à cet effet. Ça permet aux intervenants de tester le code de leur côté, et reproduire le problème. Mais vous devez fournir tous les éléments du problème et expliquer clairement comment vous lancez le truc.
Je crois quand même que c'est plus un problème de maîtrise de l'environnement de développement que de Python ici.
Voici mon énième test qui a abouti à un résultat mais certainement pas celui escompté:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 def moitie(N): V = 0 while V >= (V * 0.5): for n in range(0,100): V = N * 0.98 ** n print(n) return round(V)
Après, vous n'avez pas dit quel résultat vous cherchiez à obtenir seulement des erreurs rencontrées...
Le but des exercices que vous faites est de vous familiariser avec les messages d'erreurs et vous forcer à apprendre à relire le code que vous avez écrit pour comprendre pourquoi il ne fait pas ce que vous voulez. Si on fait ce travail là à votre place, vous n'apprendrez pas grand chose (et autant attendre le corrigé).
Mais pour l'instant, vous en êtes toujours à essayer de décrire votre problème de façon intelligible qui est la première étape pour comprendre ce qui se passe et imaginer une solution (ça fait aussi partie de ce que vous devez apprendre).
note: comme on n'a pas eu les mêmes cours que vous, impossible de savoir ce qu'il faut calculer. Et comme je vous l'ai dit plus haut: ici on parle des soucis que vous avez avec Python et on ne fera pas vos exercices. Si vous ne comprenez pas l'énoncé, c'est pas vraiment un sujet python et il y a plein de façons de construire une solution. Si la méthode que vous avez retenue est raisonnable, vous allez la traduire en ce que vous connaissez de Python (qui n'a rien à voir avec le python qu'on peut pratiquer).
- W
Il s'agit d'un exercice progressif. On te demande une première fonction qui fait un certain travail (calculer le nombre de bactéries vivantes après n secondes), puis une seconde fonction qui doit donner le temps pour tuer la moitié des bactéries initiales. Il est clair que cette seconde fonction doit appeler la première et évaluer son résultat (combien mortes en 1 seconde, en 2 secondes, en 3 secondes etc).
Le prof s'en fout de ces bactéries et du temps pour qu'elles disparaissent, ce qu'il veut c'est que tu sois capable de construire les éléments de base puis les utiliser pour construire des éléments plus complexes.
Si par exemple je demande une fonction carre() et une autre cube(), on peut écrire def cube(n): return n*n*n mais je serai plus content si on m'écrit def cube(n): return n*carre(n)...
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]
Entendu, merci pour vos réponses, bonne soirée à vous
J'ai enfin résolu le problème, en fin de compte c'était vraiment évident comme solution
je pose le code ici:
C'est ce à quoi je songeais au départ mais ça me paraissait bien trop facile comme réponse
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 def moitie(n,N): V = N while V >= 500000: V = N * 0.98**n n = (n + 1) print(V) print(n) return round(V)
comme quoi, pourquoi s'embêter à vouloir faire compliqué quand on peut faire simple![]()
Essaye d'appeler moitie(50, ...) juste pour voir si le résultat est le même...
Et écrire 500000 en dur n'est pas fameux (ou alors c'est une fonction qui calcule combien de temps le nombre de bactéries initial quel qu'il soit tombe sous les 500000 mais ce n'est pas ce qui est écrit dans l'énoncé).
Accessoirement renvoyer "V" (nombre de bactéries) alors qu'elle soit renvoyer un nombre de secondes...
En réalité le plus évident c'est de résoudre directement l'équation N*0.98**n = N/2 ce qui donne n=log(1/2)/log(0.98)=34.31 soit 35 si on arrondit à l'entier immédiatement supérieur (et si comme je le crois tu as eu 36 alors tu as une erreur de plus). On remarquera d'ailleurs que N en réalité n'a absolument aucune importance (on aura toujours 35 secondes même avec seulement 10 bactéries au départ).
Donc désolé, c'est peut-être évident mais ça ne conviendra pas car tu n'utilises pas la première fonction écrite. Comme je l'ai dit, le but n'est pas d'avoir un résultat mais un travail de construction et ce travail n'y est pas. Mais bon si à toi ça te convient tu verras ce que te dit ton prof...
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]
En fait, c'est ce sur quoi je bossais quand j'étais en remise à niveau TSI-I mais ça fait bien quelques années maintenant que j'ai quitté la formation,
et comme j'ai quelques projets en tête, le seul moyen d'y parvenir c'est de savoir programmer, du coup, j'ai ressorti mon vieux cahier d'exos dans
l'optique de le compléter de mon côté.
Après, je suis d'accord avec toi, je savais qu'il y avait d'autres solutions possibles, j'en suis parfaitement conscient,
mais je n'étais pas certain que celle-ci fonctionne non plus, ceci étant, c'est en persévérant et en travaillant régulièrement
que je serais en mesure de trouver des solutions optimisées et adaptées à mes problèmes.
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 def bacteries(N, n): return int(N * 0.98**n) def moitie(N): n=1 while bacteries(N, n) >= N/2: n+=1 return n print(moitie(1000000))
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éfléchissez un peu: pourquoi 2 paramètres alors que moitie attend juste un nombre de bactéries pour retourner un nombre de secondes?
Si N est le nombre de bactéries, la condition le 500_000 dans la condition V >= 500000 n'a de sens que si le nombre de bactéries au départ est 1_000_000. Et dans ce cas, pourquoi passer le nombre de bactéries en paramètres, si c'est pas 1_000_000, le résultat sera faux.
Dans le code, V est le nombre de bactéries après n secondes. Si la fonction doit retourner un nombre de secondes, c'est plutôt n qu'elle doit retourner (pas V)!
Tout ça ce sont des incohérences entre ce qu'on vous demande et ce que fait le code où ce qui pèche est le manque de rigueur (et ça n'a rien à voir avec Python).
Dernière boulette: imaginez l'exécution de vos instructions dans la boucle.
A l'étape i, on calcule V = N * 0.98**n puis on incrémente n avant de tester la condition pour éventuellement sortir. Du coup, le nombre de secondes a été incrémenté avant qu'on ait testé le V et le résultat sera une seconde de trop (et faux).
Là on est plus dans la logique programmation, j'écris une boucle avec condition ou une variable doit être incrémentée à chaque itération.
Quelle doit être la valeur initiale? Quand incrémenter la variable quand c'est en relation avec la condition de sortie?
Et avec tout çà pas sûr que le résultat soit juste car je me suis contenté de lire le code que vous avez écrit...
- W
Pour le 500 000, je me suis basé sur ce que disait la fin de l'énoncé qui disait moitié de la population initiale,
j'ai quand même eu une longue hésitation et puis je me suis dit que ça faisait probablement référence à la
quantité de la consigne précédente puis j'ai fini par partir sur cette hypothèse.
quant à la fonction bacteries, c'est la solution qui a été donnée en correction à l'époque et elle n'émanait pas de moi
par conséquent, étant donné que c'était la solution de correction, je n'ai pas creusé plus loin de mon côté, mais avec
le recul, j'me dis que j'aurais peut-être dû.
Partager