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 :

Problème avec des listes


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 19
    Par défaut Problème avec des listes
    Bonjour,

    voilà, je réalise un petit programme Mastermind. Dans ma fonction de vérification je rencontre quelques difficultés.
    Je n'arrive pas à comprendre une de mes erreurs.
    Voici le code de la fonction en question :

    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
    def vérification(propo,combi):  # vérification de la proposition
        """fonction permettant de vérifier la proposition du joueur"""
        BP=0
        MP=0
        combi2=combi[:]
        propo2=propo[:]
        for position,lettre in enumerate(propo2):
            for p,c in enumerate(combi2):
                if c==lettre:
                    combi2.remove(c)
                    if p==position:
                        BP+=1
                    else:
                        MP+=1
                else:
                    propo2.remove(lettre)
     
        return BP,MP
    Pourquoi Python me dit que lettre ne se trouve pas dans la liste propo2 ? Je trouve cela étrange puisque lettre est une variable décrivant les éléments de la liste en question...

    Merci !

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Pas de souci chez moi.

    Par contre : à éviter, les noms de fonctions, variables, ... avec des accents !

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Je pense que marco056 a dut essayer avec deux listes particulières parce que le code doit normalement se planter.

    Il ne faut jamais modifier la longueur d'un itérable pendant une itération.

    Supprime tes deux remove() et ça fonctionnera.

  4. #4
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Non, non, le programme plante effectivement mais pas de souci pour les variables de boucle.
    Sinon, oui, évidemment, comme des éléments disparaissent en cours de boucle, cela ne peut fonctionner...

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 19
    Par défaut Marche toujours pas
    Bon... J'ai un peu modifié le code. Cela marche mieux mais cela ne fait toujours pas ce que je veux apparemment.
    J'aimerais que la fonction me retourne le nombre de lettres à la bonne place et le nombre de lettres à la mauvaise position. (principe du Mastermind)
    J'ai fait ça :
    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
    def verification(propo,combi):  # vérification de la proposition
        """fonction permettant de vérifier la proposition du joueur"""
        BP=0
        MP=0   
        for position,lettre in enumerate(propo):
            if lettre in combi:
                #print(" ",lettre, " est dans combi")
                if lettre==combi[position]:
                    BP+=1
                    #print("Et à la bonne place")
                else:
                    MP+=1
                    #print("mais à la mauvaise place")
            else:
                print("")
                #print(" ",lettre, "n'est pas dans combi")   
        return BP,MP

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Où est le problème ?

    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
     
    # -*- coding: utf-8 -*-
     
    def verification(propo,combi):
        """fonction permettant de vérifier la proposition du joueur"""
        BP=0
        MP=0   
        for position,lettre in enumerate(propo):
            if lettre in combi:
                if lettre==combi[position]:
                    BP+=1
     
                else:
                    MP+=1
     
        return MP, BP
     
    secret = list("hgtjki")
    props = ["jlkion", "ghmpov", "hsgjai", "fhgtik"]
     
    for prop in props:
        prop = list(prop)
        print(secret)
        print(prop)
        print("%s bonnes lettres, %s bien placées" % verification(prop, secret))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ['h', 'g', 't', 'j', 'k', 'i']
    ['j', 'l', 'k', 'i', 'o', 'n']
    3 bonnes lettres, 0 bien placées
    ['h', 'g', 't', 'j', 'k', 'i']
    ['g', 'h', 'm', 'p', 'o', 'v']
    2 bonnes lettres, 0 bien placées
    ['h', 'g', 't', 'j', 'k', 'i']
    ['h', 's', 'g', 'j', 'a', 'i']
    1 bonnes lettres, 3 bien placées
    ['h', 'g', 't', 'j', 'k', 'i']
    ['f', 'h', 'g', 't', 'i', 'k']
    5 bonnes lettres, 0 bien placées
    C'est bon, non ?

Discussions similaires

  1. problème avec des listes
    Par alice.br dans le forum Général Python
    Réponses: 7
    Dernier message: 22/11/2014, 18h03
  2. Problème avec des listes déroulantes liées
    Par guitsch dans le forum GTK+ avec C & C++
    Réponses: 9
    Dernier message: 22/10/2008, 16h07
  3. Problème de rendu avec des listes
    Par Erwane dans le forum Scheme
    Réponses: 19
    Dernier message: 03/03/2008, 21h27
  4. Problème avec des listes et des variables
    Par Knuckles dans le forum Général Python
    Réponses: 3
    Dernier message: 09/05/2006, 18h24
  5. Problèmes avec des cases à cocher et une liste déroulante
    Par rob2-9 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/01/2006, 10h52

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