Mes questions sur Python - Python - Programmation
Marsh Posté le 15-03-2011 à 20:47:34
Bonsoir carrion crow,
je n'ai rien d'un expert mais il me semble :
* que ta ligne 33 pourrait s'écrire plus simplement :
Code :
|
* qu'il vaut mieux éviter d'utiliser des variables globales dans ta fonction changecoul(); je ne vois pas comment simplement résoudre ce problème si ce n'est en créant une classe regroupant ta fonction changecoul et une variable self.c
* qu'il faut éviter les import * qui neutralisent l'intérêt des namespaces. Je pense qu'il vaut mieux écrire :
Code :
|
*edit : et non range(0,6) comme je l'avais écrit mais Masklinn a mieux encore (uide infra)
Marsh Posté le 15-03-2011 à 20:57:23
Quant au contenu de la fonction changecoul on pouvait aussi le faire ainsi, mais de manière plus abstraite et moins lisible (et en gardant le global) :
Code :
|
Encore une fois, je n'ai rien d'un expert; attendons les gurus !
Marsh Posté le 15-03-2011 à 22:14:25
Pour améliorer encore sur ce que suggère suizokukan, le `0` est optionnel dans range. Par contre, la borne supérieure n'est pas include donc il faut écrire `for i in range(7)` (sinon il manque une raie du passage), et retirer le x += 1 naturellement:
Code :
|
À partir de là, tu peux renommer x en "offset" et ne plus l'altérer, mais utiliser i à la place:
Code :
|
En python, False et True font parallèle à 0 et 1, et tant qu'on ne vérifie pas explicitement les types ils sont interchangeables, je suggérerais donc de remplacer 0/1 par un booléen:
diff -r dc7be27b08f2 swinnen.py |
On peut remarquer que l'inversion est redondante entre les deux clauses de changecoul. Je vais en profiter pour renommer c:
diff -r d38abb78fdab swinnen.py |
Bon. Maintenant on peut remarquer une chose: ton initialisation des feux dans le corps du script est identique au 2e cas de changecoul. Donc si on appellait changecoul pour qu'il exécute son 2e cas, paf pastèque.
Ce 2e cas arrive quand "not (not toggle)", donc toggle = True. Donc on inverse notre initialisation de toggle et on appelle changecoul:
diff -r 78ce1213a04f swinnen.py |
Au passage, les variables feu1 et feu2 sont settées n'importe comment, autant les dégager aussi dans changecoul:
diff -r 0d0cd1263a8d swinnen.py |
Bon. Le packing c'est bon, concentrons nous sur changecoul.
On voit que les deux cas sont le même code, la seule différence étant l'indice pour le tableau de couleurs.
Je vais commencer par inverser les clauses histoire d'arrêter de tester sur un not sans besoin:
diff -r f5e00b9d0311 swinnen.py |
puis, en virtue de ce que j'ai dit au dessus, remplacer les 0/1 par False/True:
diff -r dcbc754f32ef swinnen.py |
Maintenant, dans le premier cas "toggle" est trues donc on peut remplacer les "true" par "toggle" et les "false" par "not toggle".
Et on fait l'inverse dans le 2e cas (toggle est false, donc on remplace false par toggle et true par not toggle):
diff -r a9646c4fdfc9 swinnen.py |
Tiens c'est marrant, on aurait pas le même code dans les deux branches du "if", un peu? On va donc dégager la première branche:
diff -r a9646c4fdfc9 -r 4e1e38520db5 swinnen.py |
Bon après faire un peu de nettoyage: stylistiquement, les constantes sont en majuscules et au sommet du fichier avec les globales, les noms en anglais, les assignation (et plus généralement les opérateurs) ont des espaces sur les deux côtés (mais pas les paramètres nommés), on a aucun besoin de garder le bouton final (donc pas besoin de l'assigner à une variable):
diff -r 4e1e38520db5 swinnen.py |
On en arrive à ce programme "final":
Code :
|
Il y a encore des choses qu'on peut améliorer:
mais bon je vais aller me pieuter.
Marsh Posté le 16-03-2011 à 13:45:29
suizokukan
Masklinn pour ta correction très détaillée. J'ai compris le principe, je vais essayer d'appliquer cette méthode aux prochains exo, mais j'ai encore du boulot pour apprendre à penser comme ça
Par contre, le "for i in range", il me semble que je ne l'ai pas encore vu dans le livre.
edit: en parlant de trucs qu'on n'a pas vu dans le livre et qui sert pour les exos, ça arrive et ça m'énerve au plus haut point de bloquer alors que c'est un truc que je ne sais pas
Par exemple, je suis sur le 8.24, on doit faire changer de couleur une balle à chaque virage, il me faut donc la méthode .itemconfigure(), sauf que je ne l'ai pas encore vu dans le livre (merci internet du coup)
Marsh Posté le 17-03-2011 à 12:12:44
Put***, j'ai l'impression d'être un débile mental:
exercice 8.27: il faut simuler une balle qui tombe et rebondi en prenant en compte la vitesse de la chute.
Avec ce que j'ai fait, la balle tombe, rebondit, de moins en moins haut, de façon naturelle quoi, par contre après, elle roule (c'est pas grave à la limite)
Dans sa correction, l'auteur a une balle qui tombe et rebondit sans jamais perdre de hauteur. J'essaie de modifier mon code pour faire pareil mais je ne comprends pas la différence entre les deux, ils me semblent "pareil" (même fonctions, incrémentations...) sans être identiques bien sur.
Mon code:
Code :
|
La correction:
Code :
|
Qu'est-ce qui diffère? Pourquoi mon code ne fonctionne pas pareil?
Edit: quand avez un programme à faire, quelle méthode appliquez-vous? Vous faites une liste des différents paramètres dont vous aurez besoin, des différentes fonctions???
Marsh Posté le 18-03-2011 à 16:36:27
Rraaaahhh!!! Je vais péter un câble
Exercice 8.33: créer un jeu du serpent. Cet exercice m'a bien chauffé mais le 8.34: si le serpent se recoupe, la partie s'arrête, me prend la tête.
Le serpent est constitué de carrés. Une liste "snake" contient les coordonnées de ces carrés. Le dernier de la liste est celui de la tête.
J'ai écrit ce code, en gros si le x du nouveau carré (newx) est entre le x et le x+t d'un autre carré du serpent et le y du nouveau carré (newy) est entre le y et le y+t d'un autre carré
Code :
|
Ça me semble logique mais ça ne fonctionne pas
Voici le code entier:
Code :
|
Qu'est-ce qui ne va pas? (j'ai eu le même genre de problème pour faire manger les boules au serpent et j'ai écrit le code que je trouve bancal ligne 20 à 30)
Marsh Posté le 07-04-2011 à 12:15:01
Bonjour,
C'est encore moi . J'ai laissé un peu de coté python ces temps-ci mais j'essaie de m'y remettre, donc j'ai encore des questions de gros n00b
J'en suis au chapitre 9 "manipuler des fichiers"
Exercice 9.2: je dois écrire un script qui trouve et affiche la phrase la plus longue dans un fichier texte à disposition.
J'ai écrit ça, mais ça ne m'affiche rien
Code :
|
En tapant des lignes de commandes indépendamment, les différentes instructions fonctionnent mais pas ensemble dans un script.
Marsh Posté le 07-04-2011 à 13:27:45
Le scope de phrase est pas limité au while? Je fais pas de python justement à cause de cette convention que j’exècre sur les tabs remplaçant un scope bien explicite avec des {}, donc je sais pas comment marchent les scopes des variables en python, mais si c'est comme dans les langages usuels...
A+,
Marsh Posté le 07-04-2011 à 13:47:12
gilou a écrit : Le scope de phrase est pas limité au while? |
non.
gilou a écrit : Je fais pas de python justement à cause de cette convention que j’exècre sur les tabs remplaçant un scope bien explicite avec des {} |
{} c'est pas un indicateur de scoping mais de blocs.
gilou a écrit : donc je sais pas comment marchent les scopes des variables en python |
Function scope.
gilou a écrit : mais si c'est comme dans les langages usuels... |
Cette phrase ne veut rien dire, ya pas deux personnes qui ont les mêmes "langages usuels".
Marsh Posté le 07-04-2011 à 14:12:24
masklinn a écrit : |
OK, c'est ce que je me demandais.
masklinn a écrit : |
Tout a fait, mais dans de nombreux langages, une variable déclarée dans un bloc a pour scope ce bloc.
masklinn a écrit : |
masklinn a écrit : |
A part que c'est juste ainsi dans les langages dont la syntaxe dérive du C, et donc au moins 95% du code écrit dans un cadre autre que le recherche universitaire (et le HTML/XML, si tant est qu'on considère que l'écriture de données balisées relève de la catégorie langage de programmation).
A+,
Marsh Posté le 07-04-2011 à 15:02:31
gilou a écrit : A part que c'est juste ainsi dans les langages dont la syntaxe dérive du C |
non, c'est pas le cas en JS par exemple.
Marsh Posté le 07-04-2011 à 15:37:15
gilou a écrit : Le scope de phrase est pas limité au while? Je fais pas de python justement à cause de cette convention que j’exècre sur les tabs remplaçant un scope bien explicite avec des {}, donc je sais pas comment marchent les scopes des variables en python, mais si c'est comme dans les langages usuels... |
Alors gogole pour savoir ce qu'est "scope" parce-que j'en sais rien
Donc je pense que tu me demandais si ma variable "phrase" n'existait pas seulement à dans "while". Donc non, c'est juste quand on défini une fonction que, par défaut, la variable est "captive" de celle-ci (il y a peut-être d'autres cas mais je ne les ai pas encore abordés)
Sinon, une autre idée du pourquoi du comment ça ne fonctionne pas? Et s'il y a une méthode plus élégante (et pourquoi) je suis preneur aussi
Marsh Posté le 07-04-2011 à 15:56:21
carrion crow a écrit : Et s'il y a une méthode plus élégante (et pourquoi) je suis preneur aussi |
functools.reduce:
Code :
|
Marsh Posté le 07-04-2011 à 16:37:26
masklinn a écrit :
|
Par contre, je n'ai pas encore vu cette fonction dans le cours. Pour l'instant, je n'utilise que des while, if, elif, else
Marsh Posté le 21-04-2011 à 15:53:48
Bonjour, c'est encore moi
Dans l'exercice 10.14, il faut afficher les caractères ascii. Pas de soucis là dessus, mais dans le 10.15, il faut modifier le script pour afficher les caractères entre 128 et 256, et là ça me met une erreur:
Code :
|
Mon script:
Code :
|
Je ne comprends pas trop pourquoi ça ne fonctionne pas. Mon script est enregistré en Utf-8
Marsh Posté le 21-04-2011 à 16:28:36
carrion crow a écrit : Je ne comprends pas trop pourquoi ça ne fonctionne pas. Mon script est enregistré en Utf-8 |
Ce qui n'a aucun rapport avec la sortie du script, les encodages sont indépendants.
Apparemment ici il a décidé d'encoder ta sortie en cp850, je sais pas trop d'où il tire ça mais bon...
Marsh Posté le 21-04-2011 à 21:03:54
masklinn a écrit : |
J'ai vu que cp850 est utilisé par la console windows (http://fr.wikipedia.org/wiki/Page_de_code_850)
Mais ça me met pareil avec un terminal python
Marsh Posté le 26-05-2011 à 18:51:19
Bonjour,
Encore un soucis avec un exercice. En gros, il faut faire une classe avec des méthodes :
Code :
|
Mon code est quasi le même que la solution, mais quand je le lance, il ne met :
Code :
|
Pourquoi il y a une "erreur" au milieu
Marsh Posté le 26-05-2011 à 18:59:48
Si tu fais référence à ça :
<bound method Satellite.energie of <__main__.Satellite object at 0x0000000002537940>>
C'est parce que tu ne fais pas appel à la méthode :
print(s1.energie) à remplacer par print(s1.energie())
Tu as peut-être déjà fais du vb ont se genre de syntaxe est autorisé pour faire appel à une méthode ?
Marsh Posté le 26-05-2011 à 20:25:24
alien conspiracy a écrit : Si tu fais référence à ça : |
Putai*, je suis un boulet Je me focalisais sur la dernière ligne en me disant "J'ai bien mis les parenthèses, pourquoi est-ce que ça ne fonctionne pas ?" Sauf, que la faute était 5 lignes plus haut
Merci
Marsh Posté le 22-06-2011 à 23:23:32
Bonjour,
Au détour d'une lien, je suis tombé sur cette vidéo et sa méthode de réduction de fraction m'a interpelé. Je me suis donc dit que j'allais faire un script pour décomposer un nombre en produit de facteurs premiers.
Le voici :
Code :
|
C'est propre ? Il y a des endroits où je mérite des coups de pieds ?
Je vais peut-être continuer en faisant l'algorithme dont il parle dans la vidéo.
J'ai quasi fini le livre de Swinnen, mais j'ai du mal avec la POO, les self et l'héritage (ou les relations entre classes et méthodes plutôt), ça me perturbe. Je lis tous les tutos que je trouve qui traite de ça (enfin, j'ai commencé à lire celui du site du zéro )
Marsh Posté le 23-06-2011 à 08:12:12
Code :
|
En python on ne vérifie que très rarement le type des variables, ce qui va à l'encontre de ce que l'on enseigne généralement en programmation.
Il faut pratiquer le Duck Typing, grosso modo l'idée est que l'on se fou de savoir le type de la variable du moment qu'elle présente toutes les méthodes et attributs que l'on utilise dans le code. Ca rejoint, en partie, l'idée d'interface que l'on retrouve dans d'autres langages.
Concrètement si je reçois ton code et que je créé, pour une raison X ou Y, une classe qui se comporte comme un entier alors le code fonctionnera avec cette classe, ce qui ne serait pas le cas si tu laisse la vérification du type.
Marsh Posté le 23-06-2011 à 08:37:14
alien conspiracy a écrit :
|
Je suis obligé (?) de laissé le int, car input me crée un str et le code ne fonctionnerait pas avec (mon commentaire dans le code n'est pas vraiment approprié)
Marsh Posté le 23-06-2011 à 09:41:22
carrion crow a écrit : |
Effectivement mais dans ce cas la conversion de str() vers int() devrait se trouver en dehors de la classe (ie. dans le if __name__ == '__main__': ). Afin de ne pas contraindre le type que la classe peut accepter.
C'est juste une bonne habitude à prendre quand on programme en python mais dans l'ensemble c'est du chipotage par rapport au but de l'exercice.
Marsh Posté le 23-06-2011 à 09:46:02
alien conspiracy a écrit : |
Ok, au départ je l'avais mis dans le corps du programme, et c'est quand j'ai rajouté la classe que je me suis dit : "si je laisse le int dans if __name__ ... ça va poser problème si j'importe cette classe et que je ne me souviens pas qu'il faut lui donner du int à manger"
Marsh Posté le 23-06-2011 à 13:14:16
carrion crow a écrit : Bonjour,
|
1. Chuis vraiment pas persuadé de l'intérêt d'une classe pour un truc pareil
2. Ton calcul du prochain premier ne marche plus à partir de 7x7 (ou en dessous de 5) dans la mesure où les facteurs testés sont hardcodés, pourquoi ne pas implémenter un crible d'ératosthène?
3. Ne pas utiliser input, utiliser raw_input
4. les espacements autour des opérateurs & autres sont ne sont pas consistants, c'est désagréable à lire
5. nombrePremier est mal nommé
6. facteur.append(int(self.nb)) self.nb est déjà un entier, pas besoin de le re-convertir
Marsh Posté le 23-06-2011 à 16:40:09
masklinn a écrit : 1. Chuis vraiment pas persuadé de l'intérêt d'une classe pour un truc pareil |
C'était pour m'entrainer. Et là je suis en train d'écrire le code de la vidéo qui sert à réduire une fraction, je pense que c'est mieux d'avoir un objet qui me créer la liste. Cet objet peu peut-être me reservir plus tard pour autre chose
masklinn a écrit : 2. Ton calcul du prochain premier ne marche plus à partir de 7x7 (ou en dessous de 5) dans la mesure où les facteurs testés sont hardcodés, pourquoi ne pas implémenter un crible d'ératosthène? |
OK, je vais voir ça, je ne connaissais pas le crible d'èratosthène.
masklinn a écrit : 3. Ne pas utiliser input, utiliser raw_input |
En python3, input() a remplacer raw_input non ?
masklinn a écrit : 4. les espacements autour des opérateurs & autres sont ne sont pas consistants, c'est désagréable à lire |
Tu veux dire "ne sont pas constants", non ? Car je ne mets pas des espaces partout pareil. J'y ferais attention à l'avenir.
masklinn a écrit : 5. nombrePremier est mal nommé |
Ok
masklinn a écrit : 6. facteur.append(int(self.nb)) self.nb est déjà un entier, pas besoin de le re-convertir |
C'est pour virer le .0. Il y a peut-être une méthode plus appropriée. Le .0 n'est pas bien gênant mais il me gênait
Marsh Posté le 23-06-2011 à 16:50:03
carrion crow a écrit : En python3, input() a remplacer raw_input non ? |
Ah oui merde, j'oublie toujours que tu bosses en python 3
carrion crow a écrit :
|
Oui, me suis embrouyé avec l'anglais
Marsh Posté le 23-06-2011 à 18:14:29
Bon, soit je suis trop c*n, soit j'ai un énorme manque de connaissances en python (surement les deux ). J'ai regardé ce qu'était le crible d'Eratosthène, et j'ai essayé de le coder sans regarder le script python fournis, ce qui m'a donné ce début :
Code :
|
Euh , je fais ça comment. J'ai essayé des trucs mais voilà la catastrophe (et ça m'énerve de faire des trucs sans savoir ce que je fais )
Je regarde donc l'exemple de script python. Déjà, il lui faut une ligne pour faire la liste, là où il m'en faut trois
Code :
|
(par contre, pour faire une liste, il faut mettre l = list(range(2, LIMIT)) non ?)
Donc après avoir tourné à chercher tous les trucs que je ne connaissais/comprenais pas (et en avoir trouvé d'autres au passage) comme filter et lambda (vu dans le livre, mais je ne m'en souvenais plus), j'ai décidé de garder mon code et de la modifier comme suit, ça fonctionne comme ça non ? :
Code :
|
Sinon, dans un script sur cette page, il y a ce code que je ne comprends pas (et google ne doit pas comprendre les :: dans le champ de recherche), c'est quoi ces :: ?
Code :
|
Marsh Posté le 23-06-2011 à 18:25:57
carrion crow a écrit : Bon, soit je suis trop c*n, soit j'ai un énorme manque de connaissances en python (surement les deux ). J'ai regardé ce qu'était le crible d'Eratosthène, et j'ai essayé de le coder sans regarder le script python fournis, ce qui m'a donné ce début :
Je regarde donc l'exemple de script python. Déjà, il lui faut une ligne pour faire la liste, là où il m'en faut trois
(par contre, pour faire une liste, il faut mettre l = list(range(2, LIMIT)) non ?) |
Dans Python 3 oui; dans Python 2, range() renvoie une liste.
carrion crow a écrit : Donc après avoir tourné à chercher tous les trucs que je ne connaissais/comprenais pas (et en avoir trouvé d'autres au passage) comme filter et lambda (vu dans le livre, mais je ne m'en souvenais plus), j'ai décidé de garder mon code et de la modifier comme suit, ça fonctionne comme ça non ? :
|
Ça fonctionne jusqu'à 121 (11 * 11)
carrion crow a écrit : Sinon, dans un script sur cette page, il y a ce code que je ne comprends pas (et google ne doit pas comprendre les :: dans le champ de recherche), c'est quoi ces :: ?
|
http://docs.python.org/dev/library [...] html#slice http://docs.python.org/dev/library [...] l#index-27
C'est une slice (lst[a:b:c]) avec l'élément du milieu (la limite haute) retiré
Marsh Posté le 23-06-2011 à 18:51:44
masklinn a écrit : |
masklinn a écrit : |
ahhhhh, ça me fait chi**********. J'arrive pas à réfléchir et écrire direct un truc bien. Comment tu trouve que ça ne fonctionne que jusqu'à 11*11, il y a une formule ? (je viens de tester, effectivement après 113 (121), c'est plus bon, mais c'est un test et pas un raisonnement)
masklinn a écrit : |
Ah merci, dans le livre, j'ai vu [start:stop] mais pas [start:stop:step] pour une liste
Marsh Posté le 23-06-2011 à 19:33:57
Alors, mon code devient ça :
Code :
|
Ça fonctionne, enfin j'espère cette fois, mais ça ne me plait pas car je n'ai pas trouvé le crible d'ératosthène tout seul (je sais que je ne suis pas mathématicien , mais s'il l'a trouvé tout seul, je veux aussi le trouver tout seul) et je sens que c'est d'une inélégance assez fantastique (et je ne tolèrerais uniquement du code élégant de ma part. Je veux être comme Jensen avec le "decimal print routine" qui a fait un code de 46 lignes, là où les autres hackers du MIT bloquaient à 50 (je lis "Hackers" de Steven Levy en ce moment ), mais je ne suis pas un géni )
J'ai encore du mal à comprendre pourquoi et où, il faut mettre self. J'ai modifié mon code sans problème (mis à part le int ligne 16), mais je mets des self sans trop savoir.
Marsh Posté le 23-06-2011 à 20:53:04
carrion crow a écrit : ahhhhh, ça me fait chi**********. J'arrive pas à réfléchir et écrire direct un truc bien. Comment tu trouve que ça ne fonctionne que jusqu'à 11*11, il y a une formule ? (je viens de tester, effectivement après 113 (121), c'est plus bon, mais c'est un test et pas un raisonnement) |
Bah s'pas très compliqué, t'as une liste de premier que tu vérifies donc tous leurs multiples sont éliminés, mais comme cette liste est statique (2, 3, 5, 7) si on multiplie des premiers qui ne sont pas dans cette liste (11*11 ici) il ne peut plus les trouver.
carrion crow a écrit : Ça fonctionne, enfin j'espère cette fois, mais ça ne me plait pas car je n'ai pas trouvé le crible d'ératosthène tout seul (je sais que je ne suis pas mathématicien , mais s'il l'a trouvé tout seul, je veux aussi le trouver tout seul) et je sens que c'est d'une inélégance assez fantastique (et je ne tolèrerais uniquement du code élégant de ma part. |
Tu n'as pas trouvé le crible tout seul, ou bien tu n'as pas trouvé comment coder un crible en python?
Le principe du crible est vraiment pas compliqué: tu prends une séquence d'entiers (à partir de 2) et une listes de nombres premiers (initialement vide).
Ensuite le processus est trivial (mais relativement coûteux, et le coût augmente au fur et à mesure que tu avances, c'est très naif comme méthode):
En utilisant les générateurs et les bonnes fonctions des builtins et de la stdlib, ça tient en 6 lignes
Marsh Posté le 23-06-2011 à 21:24:47
masklinn a écrit : |
masklinn a écrit :
|
J'ai compris le principe, mon problème c'est que je n'ai pas eut la même démarche que Ératosthène pour trouver ("découvrir" ) moi-même son crible.
Je viens de trouver ce que je voulais : le test de primalité. Avec ça, je pourrais refaire ma fonction prochainNombrePremier et qu'elle fonctionne
Marsh Posté le 24-06-2011 à 13:31:18
Alors, voici le code pour réduire une fraction (j'ai virer les classes car ça m'embrouillait) :
Code :
|
Par contre, ça ne fonctionne pas pour des grosses valeurs genre 54326452786/7423647326746, ça a l'air de tourner en boucle. J'ai isolé le problème, ça vient de mon crible d'Ératosthène, mais pourquoi ? Un truc avec la taille maxi d'un int ?
J'ai aussi constaté que sur certaines grosses valeur, ça renvoi n'importe quoi (genre 12345678/54325 renvoi 87791488/ 54325 )
Ça existe un programme qui me renverrais toutes les étapes du déroulement du programme au fur et à mesure qu'il s’exécute ? (parce-que mettre des print() partout...)
Marsh Posté le 24-06-2011 à 13:35:48
ReplyMarsh Posté le 24-06-2011 à 16:59:07
Je suis tombé sur mon problème de plus haut en cherchant à comprendre le code d'un type pour résoudre l'énigme d'algèbre de google. Je viens de me repencher dessus et malgré des dessins et des prints partout dans le code, je n'arrive pas à comprendre la permutation.
Code :
|
Ce que j'ai compris :
- Le if ne sert que si on envoi une liste d'un element
- yield est un return avec mémoire. Quand on rappel la fonction, on repart à partir du yield.
- on envoi une liste à all_perms
- dans le premier for, on rappel all_perms (c'est ça la récursivité ?) avec la liste amputée de son premier élément, dans cette appel, on rappel all_perms mais avec une liste d'un élément et donc le if renvoi la liste d'un élément ["c"]
- ce qui fait :
for ["c"] in ["c"]:
for 0 in range(2):
yield ["c"]
for 1 in range(2):
yield [""]
???
Je comprends pas où ça va, les boucles sont imbriquées les unes dans les autres, j'arrive pas à suivre.
Marsh Posté le 01-07-2011 à 16:53:16
Bonjour,
Après avoir arrêté python quelques jours pour m'aérer la tête, je me suis dis que j'allais (essayer de) coder le célèbre jeu "Pong". Alors, j'ai réussi à faire un truc qui fonctionne mais j'ai galéré avec les self et les transmissions de variables entre fonctions/classe.
Il reste des soucis, genre :
- quand on ne peux pas contrôler les deux raquettes en même temps
- parfois il arrive que la balle se "coince" dans la raquette
- la balle a une trajectoire prévisible
- c'est pas très fluide
Et des manques :
- pas de jeux contre l'ordi (je n'ai aucune idée de comment faire une IA)
- manque de contrôles (genre commande start/pause/rejouer) ça je vois comment faire
- le bip/bip agaçant au bout de trois rebonds
Voici mon code (attention les yeux) Si quelqu'un peut me faire une correction ou me donner quelques conseils pour l'améliorer ou pour que je fasse mieux la prochaine fois
Code :
|
Marsh Posté le 15-03-2011 à 16:21:00
Bonjour,
En ce moment, j'apprends Python 3 avec le livre de G. Swinnen, et comme tous les exercices ne sont pas corrigés ou commentés en détail, j'ai des questions.
Je vais commencer par le 8.21. Le but de l'exo est de simuler un passage piéton avec 4 feux dont on inverse les couleurs en cliquant sur un bouton. Mon code fonctionne, mais j'aimerais savoir si j'ai bien fait ou si j'aurais pu faire plus simple, notamment au niveau de la fonction changecoul.
---------------
Des piafs en photo