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 :

Erreur de soustraction d'un entier dans une liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2024
    Messages : 8
    Par défaut Erreur de soustraction d'un entier dans une liste
    Bonjour,

    Je suis en train de coder un jeu d'action à jouer entre amis. Au début, on choisit les paramètres, dont le nombre d'actions de niveau 0 auxquelles on aura droit (actions un peu spéciales, c'est pourquoi on en a un nombre limité). Le nombre d'actions de niveau 0 des joueurs sera placé dans une liste.

    Une fois le jeu commencé, chaqu'un son tour, chaque joueur devra effectuer une action choisie au hasard parmi les 3 premiers niveaux, avec un joueur sélectionné au hasard. Si une action de niveau 0 est choisie, le joueur sélectionné au hasard perd une action de niveau 0, jusqu'à ce que tous les joueurs n'aient plus d'actions de niveau 0.

    Mon problème est que, pour une raison que je ne comprends pas, le nombre d'actions de niveau 0 des joueurs ne diminue pas toujours quand il le devrait, ou diminue quand il ne devrait pas.

    J'ai mis en pièce jointe le code complet.

    Si vous pouviez m'aider, je vous en serais reconnaissant.

    Merci d'avance
    Fichiers attachés Fichiers attachés

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    T'aurais pas un code plus court à tester ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2024
    Messages : 8
    Par défaut
    Je peux pas te donner un code plus court car je suis pas trop sûr de savoir où est l'erreur. Mais si tu regarde bien plus de la moitié du code ce sont les actions placé dans des listes, allant de la ligne 48 à la ligne 295.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 541
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 541
    Par défaut
    Citation Envoyé par AP0_64 Voir le message
    Mon problème est que, pour une raison que je ne comprends pas, le nombre d'actions de niveau 0 des joueurs ne diminue pas toujours quand il le devrait, ou diminue quand il ne devrait pas.
    pas regardé le code, mais ce que tu expliques semble indiquer que tu as écrit la logique inverse dans ton code

    Edit: après avoir regarder ton code, tu as des return enlevez(...) mais ta fonction enlevez ne retourne rien, et a contrario tu fais retourner des choses à ta fonction tour(..) mais nulle part tu utilises sa valeur de retour

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2024
    Messages : 8
    Par défaut
    Citation Envoyé par umfred Voir le message
    pas regardé le code, mais ce que tu expliques semble indiquer que tu as écrit la logique inverse dans ton code

    Edit: après avoir regarder ton code, tu as des return enlevez(...) mais ta fonction enlevez ne retourne rien, et a contrario tu fais retourner des choses à ta fonction tour(..) mais nulle part tu utilises sa valeur de retour


    tu veux dire quoi par "la logique inverse dans ton code" ?

    la fonction "enlever" n'est pas sensée renvoyer quelque chose, mais faire -1 dans la liste "vet" à la personne choisie.
    la fonction "tour" renvoie d'autres fonctions (enlever, action ou hasard, sachant que hasard renvoie soi enlever soi action). "enlever" ne renvoie rien et "action" renvoie l'action que le joueur "i" devra faire sur la personne choisie.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 541
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 541
    Par défaut
    Citation Envoyé par AP0_64 Voir le message
    tu veux dire quoi par "la logique inverse dans ton code" ?
    Vu que ça fait le contraire de ce que tu veux, la logique me semble donc inversée
    la fonction "enlever" n'est pas sensée renvoyer quelque chose, mais faire -1 dans la liste "vet" à la personne choisie.
    la fonction "tour" renvoie d'autres fonctions (enlever, action ou hasard, sachant que hasard renvoie soi enlever soi action). "enlever" ne renvoie rien et "action" renvoie l'action que le joueur "i" devra faire sur la personne choisie.
    A partir du moment où tu fais tu cherches à retourner le retour de enlever() donc comme elle ne renvoie rien, ça ne sert à rien non plus (ou presque à rien). ça ne retourne pas la fonction mais son résultat.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2024
    Messages : 8
    Par défaut
    Citation Envoyé par umfred Voir le message
    Vu que ça fait le contraire de ce que tu veux, la logique me semble donc inversée


    A partir du moment où tu fais tu cherches à retourner le retour de enlever() donc comme elle ne renvoie rien, ça ne sert à rien non plus (ou presque à rien). ça ne retourne pas la fonction mais son résultat.


    aaaaah d'accord merci

    edit : il y a toujours la même erreur donc il doit y avoir une autre erreur, au minimum :/

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par AP0_64 Voir le message
    Mon problème est que, pour une raison que je ne comprends pas, le nombre d'actions de niveau 0 des joueurs ne diminue pas toujours quand il le devrait, ou diminue quand il ne devrait pas.
    C'est votre code... et le boulot du programmeur sera d'arriver à relire son code pour trouver l'erreur et/ou de le construire intelligemment pour arriver à comprendre ce qu'il fait (et le relire).
    Ce que je fais dans ces cas là (je ne comprends plus la logique de ce que j'ai écris) sera de mettre le script dans un coin et de recommencer...

    Citation Envoyé par umfred Voir le message
    Edit: après avoir regarder ton code, tu as des return enlevez(...) mais ta fonction enlevez ne retourne rien, et a contrario tu fais retourner des choses à ta fonction tour(..) mais nulle part tu utilises sa valeur de retour
    La description de la fonction tour mentionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        """
        Renvoie une liste non vide au hasard parmi trois niveaux
        Si une liste est vide ou si le joueur choisie a 0 action niveau 0,
        on renvoie une liste non vide parmi les deux autres
        Si deux listes sont vide, on renvoie la seul liste non vide
        
        """
    ce qui suppose le retour d'une liste éventuellement vide.
    Avec des return sans rien... ça ne fait même pas ce que ça dit.
    Pire l'appelant, se fout pas mal de ce que retourne cette fonction.

    A partir de là, c'est un code pourri qu'on doit remettre sur la planche à dessin (conception) pour définir ce que fait tour et les responsabilités de l'appelant : dans quelle mesure le résultat change les données initiales du tour suivant?

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

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2024
    Messages : 8
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est votre code... et le boulot du programmeur sera d'arriver à relire son code pour trouver l'erreur et/ou de le construire intelligemment pour arriver à comprendre ce qu'il fait (et le relire).
    Ce que je fais dans ces cas là (je ne comprends plus la logique de ce que j'ai écris) sera de mettre le script dans un coin et de recommencer...



    La description de la fonction tour mentionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        """
        Renvoie une liste non vide au hasard parmi trois niveaux
        Si une liste est vide ou si le joueur choisie a 0 action niveau 0,
        on renvoie une liste non vide parmi les deux autres
        Si deux listes sont vide, on renvoie la seul liste non vide
        
        """
    ce qui suppose le retour d'une liste éventuellement vide.
    Avec des return sans rien... ça ne fait même pas ce que ça dit.
    Pire l'appelant, se fout pas mal de ce que retourne cette fonction.

    A partir de là, c'est un code pourri qu'on doit remettre sur la planche à dessin (conception) pour définir ce que fait tour et les responsabilités de l'appelant : dans quelle mesure le résultat change les données initiales du tour suivant?

    - W



    pour le cou, je sais que mon code est compliqué (sûrement inutilement) mais je le comprend. malgrés ca je vois pas où est l'erreur. mais je pense que je vais suivre ton conseil et tout recommencer si je trouve pas de solution.


    effectivement ça peut renvoyer une liste vide, et dans ce cas là ça fait une erreur. mais les listes des actions sont trop longue pour que ça fasse cette erreur théoriquement. sauf qu'ici tant que les entiers dans "vet" ne seront pas inférieur ou égal à 0, on ne peut pas sortir de la boucle donc les listes se vide et l'erreur apparaît.

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par AP0_64 Voir le message
    pour le cou, je sais que mon code est compliqué (sûrement inutilement) mais je le comprend. malgrés ca je vois pas où est l'erreur. mais je pense que je vais suivre ton conseil et tout recommencer si je trouve pas de solution.
    Si vous compreniez le code, vous auriez trouvé l'erreur...
    note: les mots ont un sens qui apparemment vous échappe.

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

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2022
    Messages : 326
    Par défaut
    Bonjour,
    Si tu es familier avec les objets sous python , utilise les ... Ca serait beaucoup plus simple , pratique , propre , etc.
    Si ton jeu consiste à ... En vrai j'ai pas compris je vais pas m'aventurer sur une pente glissante.
    Belle journée

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2024
    Messages : 8
    Par défaut
    Citation Envoyé par gabi7756 Voir le message
    Bonjour,
    Si tu es familier avec les objets sous python , utilise les ... Ca serait beaucoup plus simple , pratique , propre , etc.
    Si ton jeu consiste à ... En vrai j'ai pas compris je vais pas m'aventurer sur une pente glissante.
    Belle journée

    quand tu parles des objets sous python, tu veux dire quoi ? tu parles de faire des classes ?

  13. #13
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Dans la fonction enlever, vous pouvez vérifier deux choses :
    1. que vous récupérez bien l'indice correct du joueur perdant (un print en dessous de la variable perdant).
    2. que pers correspond bien au bon joueur (un print aussi).

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2024
    Messages : 8
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Bonjour,

    Dans la fonction enlever, vous pouvez vérifier deux choses :
    1. que vous récupérez bien l'indice correct du joueur perdant (un print en dessous de la variable perdant).
    2. que pers correspond bien au bon joueur (un print aussi).

    1. la partie avec l'indice du joueur perdant je l'ai vérifié plusieurs fois et ça fait bien -1 dans la liste "vet" à la bonne personne
    2. "pers" est sencé être égal à 0 car les sous-liste dans "listes_joueurs" n'ont qu'un élément, étant donné qu'il n'y a que 2 joueurs et ces sous-listes ont les prénoms de tout les joueurs sauf celui à qui appartient la sous-liste. j'ai vérifié et "pers" est bien égal à 0.

Discussions similaires

  1. [AC-2010] erreur lors d'un copier-coller dans une liste déroulante d'un formulaire
    Par freeman3869 dans le forum Access
    Réponses: 11
    Dernier message: 19/05/2015, 14h59
  2. Réponses: 8
    Dernier message: 22/04/2011, 21h27
  3. [AC-2007] Erreur lors de 'ajout de --tous-- dans une liste deroulante
    Par bernards111 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 13/12/2010, 11h20
  4. Périodicité et jounée entière dans une liste personnalisée
    Par cantanna1988 dans le forum SharePoint
    Réponses: 1
    Dernier message: 28/04/2009, 15h30

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