Jump to content

Compte à rebours (je parle de l'info pas des résultats :'))


Go to solution Solved by MrPouple,

Recommended Posts

Posted

Hellooo y'aurait-il des génies de l'informatique qui comprennent quelque chose à la semaine 7 ?

 

J'ai l'impression que les corrections sont compliquées et qu'on pourrait faire plus simple (vous l'aurez compris j'ai pas encore trouvé comment)

Exemple dans "compte à rebours 3 étoiles" voici mon programme : https://zupimages.net/viewer.php?id=21/07/wfic.png qui affiche les nombres tous en colonne : est ce que quelqu'un sait comment revenir à la ligne sans créer une autre variable "suite" ect, ect (j'ai absolument pas compris cette partie)

 

Ou sinon je veux bien qu'on m'explique comment son programme à lui fait pour écrire les nombres en ligne  : https://zupimages.net/viewer.php?id=21/07/r8v1.png

 

Merciii et beaucoup de force à tout le monde pour demain 💛

 

  • Ancien du Bureau
Posted

Salut !

 

Petite question vu que je n'ai pas accès à la console : est-ce qu'il y a des contraintes ? Vous devez utiliser une technique particulière ? La récursion ?

 

Au plaisir 😉

Posted
il y a 1 minute, MrPouple a dit :

est-ce qu'il y a des contraintes ? Vous devez utiliser une technique particulière ? La récursion ?

Saluut alors déjà merci d'aider des PASS en galère ahah 

 

Le résumé des mots clés interdits et autorisés : https://zupimages.net/viewer.php?id=21/07/gwaj.png

La difficulté du thème c'est surtout d'avoir enlevé la possibilité de faire des boucles avec la fonction "for loop in range()"

  • Ancien du Bureau
Posted
il y a 3 minutes, jePASSparla a dit :

Saluut alors déjà merci d'aider des PASS en galère ahah

Ahah aucun problème, la programmation c'est quand vous voulez 😛 J'essaye de regarder souvent mais la plupart du temps il y a déjà une réponse. Ca marche je regarde si je trouve quelque chose de plus simple mais paradoxalement ta solution me parait etre déjà pas mal étant donné que les for loops sont interdites.

Posted
il y a 44 minutes, MrPouple a dit :

ta solution me parait etre déjà pas mal étant donné que les for loops sont interdites.

C'est la solution qui est proposée dans la vidéo de correction qui fonctionne mais je ne comprends pas ce qu'on fait (la deuxième photo dans le message d'origine) 

Je n'arrive pas à comprendre le rôle de la fonction "str"  ni pourquoi on crée "suite"

 

il y a 46 minutes, MrPouple a dit :

Ahah aucun problème, la programmation c'est quand vous voulez 😛

🥰 

  • Ancien du Bureau
  • Solution
Posted

La fonction 'str' transforme son argument en chaine de caractères, en string. Elle est utilisée ici parce que départ est une variable de type int. Pour pouvoir utiliser l'opérateur d'addition ici (le "+"), il faut que les variables (ici les trois) soient du même type. str(depart) est donc bien un str, "" est également un str et par extension suite en est aussi un (j'y reviens par la suite).

from printer import *
# Ce programme utilise le principe de récusion, à savoir appeler une fonction à l'intérieur de cette même fonction. 
def ligneRebours(depart):
  ''' Concrètement, lorsque l'on appelle cette fonction (mettons avec le chiffre 3, voilà ce qu'il se passe):
  1 - la condition est fausse (3 > 0) 
  2 - On arrive à la ligne suite = ligneRebours(depart - 1)
  3 - Cette ligne appelle la fonction dans laquelle nous sommes mais cette fois-ci avec le chiffre 2 (3 - 1)
  4 - 2 n'est toujours pas supérieur à 0
  5 - On recommence, appelle avec le chiffre 1
  6 - On recommence, appelle avec le chiffre 0
  7 - On recommence appelle avec le chiffre -1
  8 - A ce moment là, la conditon départ < 0 est vérifiée, donc la fonction retourne ""
  9 - Etant donné que la fonction a renvoyé quelque chose, la ligne suite = ligneRebours(départ - 1) peut enfin se traduire par suite = "" (départ était égal à 0)
  10 - Du coup pour la première fois, on fini la fonction et on retourne str(départ) + "" + suite qui vaut à ce moment là "0".
  11 - L'appelle de cette fonction étant complété, on peut maintenant assigné une valeur à la ligne suite =) ligneRebours(depart -1) (depart est égal à 1 ici). Suite vaut donc le retour de la fonction plus haut soir "0"
  12 - on finit cette fonction et on retroune str(depart) + "" + suite soit 1 0
  13 - Etc jusqu'à ce que tous les appels de fonction soient complétés.
  '''
  if depart < 0:
    return ""
  suite = ligneRebours(départ - 1)
  return str(depart) + " " + suite


def rebours(depart):
  if depart < 0:
    return ""
  print(ligneRebours(depart))
  rebours(depart - 1)

nombreLu = int(input())
rebours(nombreLu)

La récursion c'est un concept qui peut être parfois dur à s'imaginer. La clé ici c'est de ne pas oublier toutes les fonctions que l'on appelle et qui sont "en attente" d'une réponse. Une fois que la condition est remplie (depart > 0) on peut alors répondre à toutes les fonction en suspens et remonter la chaine. Tu peux essayer de faire l'algorithme à la main avec un petit nombre (genre 2) et voir à quel moment tu butes dans la compréhension.

 

On peut appliquer le même principe (en moins complexe) à la fonction rebours.

 

J'ai un peu cherché, je pense qu'il y a une solution alternative qui n'utilise qu'une fonction avec deux variables de récursion mais l'algorithme est plus complexe que celui-là donc il n'a pas vraiment d'intérêt.

 

Dans tous les cas n'hésitez pas si il y a besoin que je précise ces explications où si vous ne comprenez pas un point !! 

 

Au plaisir 😉 

 

Posted
Il y a 10 heures, MrPouple a dit :

La récursion c'est un concept qui peut être parfois dur à s'imaginer. La clé ici c'est de ne pas oublier toutes les fonctions que l'on appelle et qui sont "en attente" d'une réponse. Une fois que la condition est remplie (depart > 0) on peut alors répondre à toutes les fonction en suspens et remonter la chaine. Tu peux essayer de faire l'algorithme à la main avec un petit nombre (genre 2) et voir à quel moment tu butes dans la compréhension.

J'ai à peu près compris il faut encore que je me familiarise un peu plus avec le principe

 

Merci beaucoup pour ton aide!

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