Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bibliothèque [niveau débutant]

16 réponses
Avatar
lionmarron
Je ne suis pas sûr d'être forcément sur les bons forums : ma
problématique (ma question autrement dit) pourrait être toutefois
relative au langages de programmations en général, plus précisément aux
langages de programmations actuels, et par conséquent aux langages
orientés objet.

Pour éviter de parler d'une façon abstraite, je précise que, dans le
contexte, le langage que je tente d'utiliser est python (version 2.7).

Ce que fait mon programme n'a en revanche pas d'importance : il s'agit
avant tout de faire des essais et par conséquent c'est quelque chose de
facile à faire. Lorsque je découvre un nouveau langage de programmation
je programme toujours un jeu d'échecs, ce qui est donc le cas ici,
toutefois il s'agira seulement de savoir si un déplacement est légal ou
non, pas de juger de la valeur d'un coup. Il y a qq décennies je pouvais
faire ça (et d'autres pouvaient faire plus) avec 32 K de ram.

Étant donné qu'il faut malgré tout une certaine longueur de listing pour
savoir si un coup est légal ou non, je voudrais mettre ce qui fait ça
dans une partie externe du programme, et c'est là que se trouve le fond
du problème, ou en tout cas ce qui constitue le sujet de ce message.

Peut-on faire une bibliothèque normale (quelque chose de normalement
compréhensible pour un cerveau normal et pour un simple mortel), ou bien
faut-il nécessairement faire une classe ?

Ma principale référence est le livre de Swinnen <Apprendre à programmer
avec Python> , édition 2005 (O'Reilly). D'après ce livre on pourrait
penser qu'il n'y a pas d'autre moyens que de créer un classe, toutefois
ce n'est pas dit explicitement, alors autant être sûr.

Je précise que la question que je pose (ou que je cherche à soulever)
n'est pas de savoir si les langages orienté objet sont mieux ou moins
bien que ce qu'on faisait avant. On aura peut-être compris que, de mon
point de vue, ce qui relève de ce mode de programmation n'est pas <
furieusement très clair >. Cela étant je me doute bien que si c'est plus
compliqué c'est parce que cela permet sans doute de faire mieux dans
certains cas, même si ce sont des cas que je n'imagine peut-être pas, ou
que j'ai rencontrer sans en percevoir la véritable nature.

Si certains acceptent de me promettre qu'ils ne le répéteront pas, je
veux bien leur concéder que je n'y crois pas réellement, autrement dit
je pense que c'est de la blague. Mais ça je l'ai pas dit, je l'ai
seulement pensé. (Autrement dit si certains ont pu lire ce qui précède
cela signifie qu'ils se trompent : ils ont cru le lire.)

A vos claviers. Et que ça saute. Ça manque d'agitation ici (c'est pas
possible).

Suivi sur fr.comp.algorithmes

--
lionmarron

6 réponses

1 2
Avatar
Francois Lafont
Le 24/11/2011 08:54, Laurent Claessens a écrit :

Sans être le moins du monde expert aux échecs, à mon avis les échecs
sont plus complexes que ça. Par exemple il faut vérifier si le coup ne
provoque pas un échec au roi. De plus en cas de roque (ça fait deux
coups très spéciaux à traiter), il faut vérifier si le roi ne passe pas
sous l'échec.



Il faut aussi que le roi ne soit pas en échec au moment du roque (juste
avant) et que le roi et la tour concernée n'aient jamais bougé.

Les pions ne peuvent avancer qu'en ligne droite, mais prendre une pièce
adverse qu'en biais, ...



Et il y a la promotion du pion aussi : en une dame, un cavalier, un fou,
une tour. Et la prise en passant aussi. seulement valable lorsque le
pion d'à côté vient juste d'avancer de deux cases.

Au premier mouvement, les pions peuvent faire deux cases (et il faut
vérifier encore qu'il n'y a pas échec ou roi dans la position
intermédiaire, je crois)



Après le coup du pion (ou de n'importe quelle pièce) des blancs (resp
des noirs) le roi blanc (resp noir) ne doit pas être en situation d'échec.

Puis y'a des règles spéciales concernant le fait de rejouer un coup qui
a déjà été joué.



Pas sûr, mais je crois que si on a 3 trois fois de suite la même
position, la partie est nulle.

J'en oublie surement. M'est avis que tout bien faire ne tient pas en 50
lignes ...



Clairement.

--
François Lafont
Avatar
lionmarron
Le 24/11/2011 08:39, Yliur a écrit :
Le Wed, 23 Nov 2011 10:13:26 +0100
lionmarron a écrit :

Le 23/11/2011 05:10, Yliur a écrit :

Étant donné qu'il faut malgré tout une certaine longueur de listing
pour savoir si un coup est légal ou non,



Là je ne saisis pas bien... A vue de nez, 50-100 lignes ne
suffisent pas pour vérifier qu'un coup est valide ?


Non, pas pour avoir une ou deux listes des coups autorisés tout au
moins (en partant soit de la case de départ, soit de la case
d'arrivée).



Par curiosité : que contient cette liste ?


Prenons la liste qui commence avec les cases de départ. Le langage
Python étant tout ce qu'on veut sauf clair, je vais faire comme si nous
étions dans un langage normal éventuellement pas structuré, et parler de
tableau à 2 dimensions. Disons qu'on met le tableau sur une feuille de
papier et la feuille de papier sur un panneau vertical.

Dans une dimension, disons la hauteur, et à gauche de chaque rangée (il
s'agit donc d'une colonne), je mets le numéro des cases de départ, par
exemple de 22 à 99 (il y a d'autres choix possibles), puis un numéro qui
servira de fin de liste (donc un numéro non autorisé pour une case). Il
y a au maximum 16 figures, donc pour cette dimension il faut 17 places.

Dans l'autre dimension, disons la largeur, et de gauche à droite en
partant de la case de départ, je mets le numéro des cases d'arrivée
autorisées, puis un numéro de fin de liste. Il y a au maximum 27 cases
d'arrivées pour une case de départ, donc pour cette dimension il faut 29
places (la case de départ, les cases d'arrivées puis le numéro <fin de
liste>).

Là, naïvement, si je devais
le faire, je vois 6 types de pièces avec une pincée de mouvements
chacun, dans des boucles pour ceux qui peuvent les prolonger en
vérifiant qu'il n'y a pas d'obstacle.


Comme permettent d'en juger les messages de Laurent et François c'est
peut-être ce qu'on appelle de l'humour involontaire.

Pour les modules en Python, sauf si j'ai manqué quelque chose, ça peut
être quelque chose d'aussi simple qu'écrire un fichier coups.py dans
le même répertoire (tant qu'il n'y a pas beaucoup de modules ça ira) et
l'importer dans un autre en écrivant "import coups" ou "import * from
coups" (ce qui permet d'éviter d'écrire coups.fonction1, coups.f2 et
juste le nom de la fonction apparemment, mais à vérifier).


Je suis pas sûr d'avoir compris : le fait est que je ne sais pas ce
qu'est un module.

<http://python.developpez.com/faq> a l'air intéressant.


J'ai programmé en Python en 2009 je crois, puis un peu au début 2011,
mais pas entre temps, donc mes souvenirs ne sont pas forcément très
précis, toutefois je me souviens d'avoir imprimé cette FAQ et d'y avoir
remarqué des choses intéressantes. (Mais je ne crois pas qu'elle parle
de module par exemple.)

Là où tu as choisi les différents groupes, tu ajoutes une troisième
ligne contenant le nom du groupe dans lequel tu positionnes le suivi.
Et devant le nom du groupe, tu sélectionnes l'en-tête que tu veux
choisir : je ne me souviens pas des noms dans Thunderbird, mais ça doit
être une liste déroulante dans laquelle tu choisis quelque chose comme
"Suivi sur" plutôt que "Groupe de discussion" (l'en-tête qui apparaît
devant les deux autres lignes).


Cette fois j'aurai essayé.


L'annoncer dans le texte c'est en plus, parce que les humains ne font
pas toujours attention aux en-têtes.




--
lionmarron
Avatar
Julien
Sans être un expert en génie logiciel, je pense qu'il ne faut pas
faire qu'une analyse technique ou de conception. La programmation-
objet permet de spécifier les métiers, bâtir des méthodes, il perme t
une forme de standardisation et d'industrialisation du logiciel et
donc permet le changement des hommes de manière flexible, réduire les
coûts, optimiser les flux, permettre des indicateurs de performance
bref tout ce qui est cher à notre économie en pleine santé :). Les
informaticiens qui ont exercé dans la sidérurgie ou l'automobile
peuvent constater des similarités entre le secteur de la production et
le développement logiciel. Cela permet enfin de changer un développeur
à 1200 euros par un autre à 600 euros en Inde sans angoisse que celui-
ci ne parte avec le savoir-faire.

J.H
Avatar
JKB
[En-tête "Followup-To:" positionné à fr.comp.algorithmes.]
Le Thu, 24 Nov 2011 15:26:19 -0800 (PST),
Julien écrivait :
Sans être un expert en génie logiciel, je pense qu'il ne faut pas
faire qu'une analyse technique ou de conception. La programmation-
objet permet de spécifier les métiers, bâtir des méthodes, il permet
une forme de standardisation et d'industrialisation du logiciel et
donc permet le changement des hommes de manière flexible, réduire les
coûts, optimiser les flux, permettre des indicateurs de performance
bref tout ce qui est cher à notre économie en pleine santé :). Les
informaticiens qui ont exercé dans la sidérurgie ou l'automobile
peuvent constater des similarités entre le secteur de la production et
le développement logiciel. Cela permet enfin de changer un développeur
à 1200 euros par un autre à 600 euros en Inde sans angoisse que celui-
ci ne parte avec le savoir-faire.



Ça, je l'encadre. Personnellement, je fais des piges à droite et à
gauche dans des langages aussi tordu que Fortran, C, C++ et d'autres
comme Cobol. Il est très simple de modifier un programme impératif
ou procédural. Lorsqu'on n'a pas conçu soi-même un truc objet, il
est extrèmement compliqué d'en saisir toutes les subtilités. Par
subtilités, je n'entends pas ce qui se passe au niveau d'une classe,
mais au niveau du programme tout entier. La plupart du temps, dès
qu'on a des modifications un peu sévères à faire dans un code C++,
on repart à zéro car on perd moins de temps.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
yves
Le Sat, 26 Nov 2011 22:12:09 +0100, lionmarron a écrit:

Bonjour,

Je ne l'ai pas repris mais ce que j'ai essayé n'est pas plus compliqué,
et ça n'a pas l'air de marcher non, pas même en mode direct.



Je ne comprends pas bien ce que tu appelles "mode direct".


En fait j'ai maintenant un programme qui dessine les pièces d'échecs et
qui permet de les déplacer avec la souris. Il ne reste plus qu'à faire
un module qui calcule ce qui est légal ou non.

Donc je voudrais commencer par un module qui déclare que toutes les
cases de départs sont légales ou illégales selon qu'on lui envoie 0 ou
1, ce qui devrait ne demande donc pas d'autre savoir faire que celui de
faire un module.

Voyant que ça ne marche pas j'essaie encore plus simple : je voudrais
afficher (sur l'interpréteur pas sur la fenêtre graphique) le nombre
passé en paramètre. Donc, après avoir sauvé <coupsLegaux.py> dans le
répertoire courant, voilà le résultat :

En mode direct je peux appeler la fonction, par exemple <coupLegau(3)>,
mais en mode direct ou non, si je fais <import coupsLegaux.py> j'obtiens
le message :



Si tu as "coupsLegaux.py" dans le répertoire courant,
il ne faut pas écrire "import coupsLegaux.py" mais "import coupsLegaux".

Relis attentivement mon exemple.

@+
--
Yves
Avatar
yves
Le Sun, 27 Nov 2011 17:25:30 +0100, lionmarron a écrit:

>>> couLegau(4) :
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'couLegau' is not defined




Qu'est-ce que c'est que couLegau ?

Est-ce une fonction de nom couLegau définie dans le fichier
coupsLegaux.py ?

Dans ce cas, la bonne syntaxe après un "import coupsLegaux" réussi est

coupsLegaux.couLegau(4)


@+
--
Yves
1 2