Jump to content

informatique


Go to solution Solved by Sans-Visage,

Recommended Posts

Posted

salut a tous 🥱

 

c'est quoi cette erreur ???  😬

http://www.noelshack.com/2021-08-2-1614120190-informatique.png   

 

 

  • Ancien Responsable Matière
Posted (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 by Herlock
  • Ancien du Bureau
Posted

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

 

  • Ancien du Bureau
Posted
  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 ?

  • Ancien du Bureau
Posted
  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 😉 

  • Ancien du Bureau
  • Solution
Posted
  On 2/24/2021 at 12:09 PM, PassOuPACES said:
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é :'))) 

  • Ancien du Bureau
Posted

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:
Expand  

@MrPouple @clemens vous pourriez dire ce que vous en penser svp ? 👉🏼👈🏼🥺

  • Ancien du Bureau
Posted

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 😉 

 

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...