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 !

 

Il y a 6 heures, Herlock a dit :

@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.

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 ^^

 

Révélation

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 

 

  • Ancien du Bureau
Posted
il y a 8 minutes, PassOuPACES a dit :

ça m'affiche "null" 😟

 

ç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
il y a 3 minutes, PassOuPACES a dit :

@DuTACKauTac pourtant il m'affiche la mĂȘme chose si je met "if nb < 0" 😟

 

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
Posted
à l’instant, PassOuPACES a dit :

@DuTACKauTac ça marche toujours pas, ça m'affiche la mĂȘme chose 😔

 

Ah ouaaais ? Je peux voir un screen stp ?  

  • Ancien du Bureau
  • Solution
Posted
il y a 6 minutes, PassOuPACES a dit :

 

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Ă© :'))) 

Posted

@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Â đŸ˜¶

 

 

  • 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 😕 

 

il y a 22 minutes, PassOuPACES a dit :

@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...