clemator7113 | Problème code Python : 3eme version =D |
1 #1 |
---|---|---|
Je m'installe
Inscrit: 16/05/2010 16:57
Post(s): 441
|
Anciens posts :
Citation :
[EDIT] J'ai enlevé le code du premier post, il est sur mon dernier com Merci d'avance !
Contribution le : 16/03/2016 17:55
Edité par clemator7113 sur 18/3/2016 11:51:35
Edité par clemator7113 sur 18/3/2016 11:55:48 Edité par clemator7113 sur 18/3/2016 11:56:41 Edité par clemator7113 sur 2/5/2016 15:29:56 Edité par clemator7113 sur 2/5/2016 15:30:09 Edité par clemator7113 sur 2/5/2016 15:46:24 |
|
Signaler |
Asmodeus | 0 #2 |
|
---|---|---|
Je masterise !
Inscrit: 19/02/2014 16:35
Post(s): 2113
Karma: 1085 |
@clemator7113 c'est pas un screen du code qu'il faut mais juste un copier coller avec les balises
[*code] ton code [*/code] sans les étoiles Fais juste attention au fait que l'indentation est très importante dans python, donc à chaque fois que tu finis un if ou une fonction, il faut descendre d'un niveau d'indentation.
Contribution le : 16/03/2016 18:15
|
|
Signaler |
clemator7113 | 0 #3 |
|
---|---|---|
Je m'installe
Inscrit: 16/05/2010 16:57
Post(s): 441
|
@Asmodeus
voilà Je précise que c'est un jeu ou on commence en bas du plateau et on doit monter en haut, en évitant les ennemis (un seul ennemi est presque fini de codé et les perso, c'est pas moi qui m'en occupe ^^) Du coup, le problème est au niveau de la partie "ennemis", j'ai une définition d'une fonction, puis un commentaire et la définition suivante est considérée automatiquement comme la suite de la première définition (idem pour la 3eme)
D'ailleurs, si vous avez des commentaires à faire sur le code (sur la façon dont c'est commenté par exemple, que je ne respecte pas les conventions ou un truc du genre, je suis preneur Et au fait, faites pas attention à la qualité ^^ je débute ^^
Contribution le : 16/03/2016 18:35
Edité par clemator7113 sur 18/3/2016 11:54:01
|
|
Signaler |
-Flo- | 0 #4 |
|
---|---|---|
Je poste trop
Inscrit: 08/01/2005 13:41
Post(s): 15190
Karma: 12562 |
@clemator7113 : Avec Python, l'indentation est très importante. C'est elle, et seulement elle, qui permet de définir où commence et se termine un bloc d'instructions comme la définition d'une fonction, un if, une boucle, etc.
Le problème dans ton code se situe donc au niveau de la partie "Ennemis", où toutes tes fonctions sont indentées les unes par rapport aux autres. Pour simplifier, dans ton cas précis, à chaque fois que tu passes à la définition d'une nouvelle fonction, tu dois revenir complètement à gauche, sans laisser d'espace devant ta ligne "def".
Contribution le : 16/03/2016 18:43
|
|
Signaler |
clemator7113 | 0 #5 |
|
---|---|---|
Je m'installe
Inscrit: 16/05/2010 16:57
Post(s): 441
|
J'ai essayé aussi, mais quand je la met complètement à gauche, j'ai un message d'erreur "unexpected indentation" ou un truc du genre ^^
[edit] J'ai ça comme erreur... et quand je reviens à l'indentation qu'Idle me propose (cf mon commentaire d'avant) j'ai plus mes fonctions définies puisque l'indentation pue...
Contribution le : 16/03/2016 18:48
|
|
Signaler |
-Flo- | 0 #6 |
|
---|---|---|
Je poste trop
Inscrit: 08/01/2005 13:41
Post(s): 15190
Karma: 12562 |
@clemator7113 : Parce que je vois aussi que tu définis une fonction dans laquelle tu n'écris aucune instruction (ligne "def ennemi_visuel(G):"). Du coup Python s'attend à une instruction indentée, mais trouve à la place une nouvelle définition de fonction au même niveau d'indentation.
Il faut soit que tu ajoutes au moins une instruction à cette fonction, ou soit que tu la commentes (ou la supprimes) pour ne pas qu'elle soit prise en compte.
Contribution le : 16/03/2016 18:51
|
|
Signaler |
clemator7113 | 0 #7 |
|
---|---|---|
Je m'installe
Inscrit: 16/05/2010 16:57
Post(s): 441
|
YAY ! Merci @-Flo- !!!
C'était juste la fonction d'avant qui foutait tout en l'air ! Je l'ai commentée et tout est revenu dans l'ordre ! Du coup, maintenant, mon code fonctionne, ou presque ! Enfin, j'ai plus d'erreur ! Merci encore !
Contribution le : 16/03/2016 19:02
|
|
_________________
_____________________________________ Des fois il vaut mieux ne rien et dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet. |
||
Signaler |
clemator7113 | 0 #8 |
|
---|---|---|
Je m'installe
Inscrit: 16/05/2010 16:57
Post(s): 441
|
Bon, comme j'ai posé une autre question, j'up mon post, je sais pas trop si j'ai le droit, si c'est pas le cas, promis je le ferai plus !
Contribution le : 18/03/2016 11:55
|
|
_________________
_____________________________________ Des fois il vaut mieux ne rien et dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet. |
||
Signaler |
Skity | 0 #9 |
|
---|---|---|
Je masterise !
Inscrit: 29/12/2013 23:48
Post(s): 2024
Karma: 521 |
Citation :
Hello Un petit premier truc que je ne comprends pas trop:
Si c'est une fonction (méthode) qui affiche bêtement le tableau, pourquoi elle retourne quelque chose ? Sinon je pense qu'il suffit que tu rajoutes un print("\n") dans ton premier for et que tu utilises un buffer (variable tampon) pour mettre tout ton affichage dedans et l'afficher à la fin Sinon, comme Python c'est puissant, tu peux utiliser les headers pour formater ton output vraiment comme tu le souhaites car print() ajoute un retour à la ligne par défaut:
Site --> http://linguistics.berkeley.edu/plab/guestwiki/index.php?title=Output_formatting_in_Python Sinon tu peux essayer ça dans un premier temps
Contribution le : 18/03/2016 13:51
|
|
Signaler |
clemator7113 | 0 #10 |
|
---|---|---|
Je m'installe
Inscrit: 16/05/2010 16:57
Post(s): 441
|
Bon...
Quand dans ma fonction je met :
J'ai ce message d'erreur :
Je ne comprend pas pourquoi... Parce que plateau_visuel n'est plus une chaine de caractères à partir du moment ou le l'ai listée avec (list) non ? Et du coup, quand je dé-commente le "return (plateau_visuel), j'arrive à afficher la liste mais toutes les lignes suivantes sont ignorées.... PS : @Skity, j'ai essayé de comprendre ce qu'étaient des headers, et de ce que j'ai compris, c'est une chaine de caractère qui respecte la mise en forme (une chaine entre '''chaine'''^)... Mais du coup, je ne vois pas le rapport avec ce que tu as écrit en dessous de ta proposition.... Et si non, pour l'instant, j'utilise ta dernière proposition, parce que j'ai compris comment ça marchait ^^
Contribution le : 18/03/2016 23:01
|
|
_________________
_____________________________________ Des fois il vaut mieux ne rien et dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet. |
||
Signaler |
Invité | 0 #11 |
|
---|---|---|
FantômeInvité
|
@clemator7113
J'y connais rien en python, mais ton objet sera toujours de type str, essaie de récupérer les valeurs dont tu as besoin, au lieu de récupérer l'objet entier, ou assigne le str à un autre objet str si tu veux sauver l’état actuel de l'objet. EDIT : Et tu devrais utiliser le debugger de ton IDE ( y'en a probablement un ), c'est un outil extrêmement puissant, a utiliser sans modération
Contribution le : 20/03/2016 11:35
|
|
Signaler |
Skity | 0 #12 |
|
---|---|---|
Je masterise !
Inscrit: 29/12/2013 23:48
Post(s): 2024
Karma: 521 |
@clemator7113
Hello, Alors il y a 3 sujets, je vais faire dans l'ordre : ################################################ ### 1- str does not support item assignement ### ################################################ Dans ton code:
Je ne vois à aucun moment dans ta fonction (méthode) la déclaration PEx et PEy. Ces variables sont-elles globales et/ou public ? En effet, avec list normalement tu as transformé ton plateau pour le traiter comme tu essayes de faire. Je pense que le problème est plus dû aux variable PExy. (N'hésites pas à coller tout le code si il n'est pas trop trop grand ) ####################################### ### 2- Késako les format avec print ### ####################################### Les formats permettent de dire à print comment tu veux afficher ta sortie. Par exemple, pour faire un tableau c'est typetop. L'exemple que j'ai donné n'est qu'un exemple tiré de monsieur Internet. Pour l'expliquer un peu mieux, voici un exemple un peu plus clair:
Dans le code, tu vas retrouver ma variable outputFormat qui va définir le format de sortie. {xxxxx} correspond à un élément qui va être remplacé. Si il y en a plusieurs, c'est dans l'ordre de mise en paramètres passé à la fonction format. !s défini le type. A la place de "s", j'aurais bien mettre "d","i", ... Je te laisse lire la doc pour les autres types :15 défini le nombre max de caractères attendu pour l'élément. Dans ton cas, je pense que au lieu du 15 dans mon exemple, je pense que ça serait plutôt ":1" ############################### ### 3- WTF mes propositions ### ############################### En fait, je t'ai fais deux propostions. La première est simplement un exemple de Internet avec comment utiliser les formats avec print en Python. La deuxième proposition (le dernier bout de code) n'est qu'une autre technique de ce que tu cherches à faire. Le problème c'est que c'est un peu moins propre et moins évolutif. Si plus tard tu décides de changer le design de ton tableau, bah ça sera un peu plus compliqué Voili voilou Bon courage
Contribution le : 21/03/2016 10:58
|
|
Signaler |
clemator7113 | 0 #13 |
|
---|---|---|
Je m'installe
Inscrit: 16/05/2010 16:57
Post(s): 441
|
@Skity
@-Flo- Salut mes sauveurs ! Alors déjà, (parce que j'ai oublié de le dire avant) MERCI BEAUCOUP ! Après, histoire de continuer à être chiant, j'ai un problème... Je mettrais mon code en fin de commentaire, histoire que ça soit à peu près lisible... Alors voilà. Je créé mon plateau avec mes pointillés, tout va bien. Je génère aléatoirement la position des ennemis, tout va bien. C'est dans la fonction 'ennemis_visuel' que tout se gâte... J'ai inséré un print() qui sert à rien au milieu de la fonction (celui qui est commenté à droite) pour voir ce qui clochait. Je m'explique : quand je print la liste 'TAMPON1', je n'ai qu'un seul ennemi qui apparait sur la liste. En revanche, quand je "''.join.plateau_visuel", j'ai 2 ennemis qui apparaissent (un ennemi étant représenté par un M) (on ne voit pas toujours le deuxième, donc s'il n'est pas là, relancez ^^). Je peux vous dire, si ça peut aider, que les deux M sont 'liés'. Je veux dire par là qu'ils font les mêmes déplacements en même temps. De plus, sur les deux, à chaque fois, l'un est dominant sur l'autre. C'est à dire que l'un respecte les limites définies, alors que l'autre s'en fout complètement : celui qui semble respecter les limites est celui du bas. (celui du haut serait donc un parasite ?) Je ne comprend absolument pas pourquoi ce deuxième M apparaît... J'ai demandé à mon prof qui m'a répondu 'J'ai déjà eu le problème, mais je ne sais plus comment on le résout"... Du coup, je vous demande de l'aide :roll: :roll: parce que vous êtes trop forts :coeur: :coeur: J'espère que j'ai été assez clair dans ma description de problème... Voilà mon code :
Merci d'avance !!
Contribution le : 02/05/2016 15:27
|
|
Signaler |
Invité | 0 #14 |
|
---|---|---|
FantômeInvité
|
Citation :
TAMPON1 += ''.join(plateau_visuel[(i*10)+k]) c'est pas (i*taille + k) plutôt? sinon essaye de print les coordonnées de l'ennemi avant d'afficher ton plateau, pour voir lequel est bien à sa place et lequel ne devrait pas être là
Contribution le : 02/05/2016 17:44
|
|
Signaler |
clemator7113 | 0 #15 |
|
---|---|---|
Je m'installe
Inscrit: 16/05/2010 16:57
Post(s): 441
|
@yakow
Oui effectivement, ça doit bien être i*taille, c'est qu'avant, j'avais pas de variable taille et du coup la taille c'était 10 ^^
Contribution le : 09/05/2016 00:50
|
|
_________________
_____________________________________ Des fois il vaut mieux ne rien et dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet. |
||
Signaler |