IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Exercices Python Discussion :

Un programme récursif que je ne comprends pas


Sujet :

Exercices Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Un programme récursif que je ne comprends pas
    Bonjour à tous,

    Je pense que l'explication est vraiment simple pour une personne habitué à python. Je m'excuse d'avance du pavé mais c'est nécessaire.

    Je vais d'abord vous expliquer la situation de l'exercice.

    On a deux joueurs

    On a un jeu de 10 cartes(par exemple)
    posé et alignés sur une table.

    Chacun son tour, les joueurs prend une carte, jusqu'à l'épuisement total des cartes. On ne peut prendre que les extrémités : soit la première carte, soit la dernière.

    A la fin, on compare le score de chacun en additionnant les valeurs des cartes obtenus : le roi vaut 13, la dame vaut 12, le valet vaut 11, l'as vaut 1 et les autres valent le nombre qu'il porte.

    Le joueur ayant le score le plus élevé gagne la partie.


    Première contrainte :

    Notre adversaire est une petite nièce : sa stratégie de jeu prend systématiquement à chaque tour la carte de plus haute valeur.
    (glouton)

    Enoncé :

    Je dois élaborer une stratégie de jeu pour la battre.
    Et pour cela, je dois explorer toutes les enchainements de cartes possibles afin d'en déterminer le score maximum que je peux obtenir en battant petitenièce.

    Voici la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def score_max(jeu):
        if len(jeu) == 0 :
            return 0
        else :
            x = petiteniece(jeu)
            return max(score_max(  jeu[:-1])  +  jeu[-1],   score_max(jeu[1:])  +  jeu[0]  )
    Cette fonction marche. Score_max([2,10,1,1]) donne 11.

    Les cartes sont implémentés en liste : [1,9,8,7,13,5] par exemple est un jeu.


    Mais je ne comprends par la partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    max( score_max(jeu[:-1]) + jeu[-1]   ,  score_max(jeu[1:]) + jeu[0] )
    J'aurai besoin d'explication sur comment fonctionne la récursivité à ce stade ??

    Je vous remercie de votre attention et je reste disposé à vous donner plus d'informations si besoin.

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2013
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 80
    Points : 119
    Points
    119
    Par défaut
    Bonjour,

    La variable x est créée par la fonction petitenice. Problème : la fonction petiteniece n'est pas définie et la variable x n'est pas utilisée ???

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut la fonction petite niece
    Bonjour et merci de votre réponse,

    en effet j'avais oublié de le mentionné :

    voici la fonction petitenièce :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def petiteniece(jeu):
        if jeu[0] > jeu[len(jeu)-1]:
            b = jeu[0]
            del jeu[0]
            return(b)
        if jeu[len(jeu)-1] > jeu[0] :
            b = jeu[len(jeu)-1]
            del jeu[len(jeu)-1]
            return(b)
        else : 
            b = jeu[0]
            del jeu[0]
            return(b)
    Comme je l'ai dit, il prend systématiquement la carte de plus haute valeur dans l'une des extrémités
    lorsque c'est son tour.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Ludic3 Voir le message
    J'aurai besoin d'explication sur comment fonctionne la récursivité à ce stade ??
    La récursivité n'est pas spécifique à Python... et "à ce stade" mérite de dire clairement la question que vous vous posez (car on ne va pas vous expliquer des bases que vous devez connaître par ailleurs).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. std ::vector [erreur que je ne comprend pas]
    Par aaronw dans le forum SL & STL
    Réponses: 8
    Dernier message: 05/03/2006, 21h00
  2. [Débutant] Message d'erreur que je ne comprends pas
    Par Le Furet dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2006, 17h37
  3. [PostGreSQL] une erreur que je ne comprends pas
    Par flo78 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2006, 10h18
  4. [thread][methodologie]Quelque chose que je ne comprends pas!
    Par norkius dans le forum Général Java
    Réponses: 5
    Dernier message: 16/03/2005, 14h01
  5. [Rave] un message que je ne comprends pas
    Par Clotilde dans le forum Rave
    Réponses: 2
    Dernier message: 30/09/2003, 21h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo