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

Python Discussion :

Récursivité avec une classe


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2021
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Récursivité avec une classe
    Bonjour,

    Ce bout de programme récursif avec la variable locale truc fonctionne comme je le veux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    compteur=0
     
    def recurs(truc,chemin):
        global compteur
        if truc==0 and chemin==5:
            compteur+=1
            print("fin")
        elif truc==0 and chemin!=5:
            compteur+=1
            print("reste nul mais pas bon chemin")
        else:
            for i in range(0,2):
                compteur+=1
                print(truc, "    ", chemin,"   ",i,"     compteur : ", compteur)
                recurs(truc-1, chemin+i)
     
    recurs(9,0)
    J'aurais en fait besoin de remplacer la variable truc (une valeur entière), par une classe dont la valeur entière serait truc.reste. À cause de la récursivité, je crée une copie de l'instance truc2 en truc, histoire de "localiser" l'instance. Pourtant ça ne marche pas. Ci-dessous le programme qui ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    import copy
    global compteur
    compteur=0
    class Objet:
        def __init__(self,reste):
            self.reste=reste
    def coup(truc):
        truc.reste-=1
        return truc
    truc=Objet(9)
     
    def recurs(truc2,chemin):
        truc=copy.copy(truc2)
        global compteur
        if truc.reste==0 and chemin==5:
            compteur+=1
            print("fin")
        elif truc.reste==0 and chemin!=5:
            compteur+=1
            print("reste nul mais pas bon chemin")
        else:
            for i in range(0,2):
                compteur+=1
                print(truc.reste, "    ", chemin,"   ",i,"     compteur : ", compteur)
                recurs(coup(truc), chemin+i)
    recurs(truc,0)

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    c'est sensé faire quoi ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2021
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    En fait a la base, je veux faire un programme de resolution de TicTacToe avec Minimax, mais ca merdait et je suspectait un lié a la globalité de l'objet. Donc j'ai fait un programme plus simple pour verifier qu'avec une variable locale ca marchait, et c'est bien la qu'est le probleme. C'est un arbre dont je descends 9 etages et remonte pui redescend jusu'a atteindr la valeur5. Le but etant de verifier que je remonte a l'etage superieur avec l'etat d'avant. ca marche avec la variable local, pas avec l'instance de classe. Or je vais avoir beoin de classe, donc il faut que j'arribe a rendre "local" l'instance de classe

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Vos deux fonctions ne seraient-elles pas mieux placées en tant que méthodes de la classe Objet ?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2021
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Arioch Voir le message
    Vos deux fonctions ne seraient-elles pas mieux placées en tant que méthodes de la classe Objet ?
    j'ai essayé : ca ne change rien (en mettant toutes les fonctions sous la classe) : meme resultat

  6. #6
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par emmanuelmiralles Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        else:
            for i in range(0,2):
                compteur+=1
                print(truc, "    ", chemin,"   ",i,"     compteur : ", compteur)
                recurs(truc-1, chemin+i)
     
    recurs(9,0)
    Bonjour,
    J'ignore quel résultat est attendu, mais cette boucle ne peut pas fonctionner puisque dès la première valeur de i tu quittes la boucle ...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par emmanuelmiralles Voir le message
    ca marche avec la variable local, pas avec l'instance de classe.
    L'instance de classe, c'est un peu comme une variable globale. Faire une copie pourrait fonctionner mais il faut la faire avant sa modification (ou restorer à la main).

    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def recurs(truc2,chemin):
        truc=copy.copy(truc2)
        ...
                print(truc.reste, "    ", chemin,"   ",i,"     compteur : ", compteur)
                recurs(coup(truc), chemin+i)
    écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def recurs(truc,chemin):
            ...
                print(truc.reste, "    ", chemin,"   ",i,"     compteur : ", compteur)
                t=copy.copy(truc)
                recurs(coup(t), chemin+i)

    Citation Envoyé par emmanuelmiralles Voir le message
    je veux faire un programme de resolution de TicTacToe avec Minimax, mais ca merdait et je suspectait un lié a la globalité de l'objet.
    Vous avez pleins d'articles sur Internet qui expliquent comment coder un minimax sur le tic tac toe.

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

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2021
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    @wiztricks : super, ca a marché...

Discussions similaires

  1. [Surcharge]Operateur<< avec une classe maison
    Par KeNnEdY dans le forum C++
    Réponses: 6
    Dernier message: 14/09/2005, 15h51
  2. Pb avec une Classe d'exception EOleError
    Par raoulmania dans le forum Composants VCL
    Réponses: 2
    Dernier message: 27/05/2005, 12h39
  3. Utilisation iterator avec une classe perso
    Par SteelBox dans le forum C++
    Réponses: 19
    Dernier message: 07/03/2005, 11h30
  4. [C#][WebServices] Appel methode avec une classe en paramètre
    Par bran_noz dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/09/2004, 16h41
  5. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45

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