Introduction au language Python

Voir le sujet précédent Voir le sujet suivant Aller en bas

Introduction au language Python

Message  V@-Michel le Mar 12 Juin - 23:21

Dans cette section, j'aimerais vous parler des bases du langage Python. Pourquoi ?
C'est grâce à ce langage que vous pourrez manipuler les fichiers programmes du jeu ainsi que réaliser de petits (ou grands) programmes et laisser libre cours à votre imagination.

Ceux qui connaissent ce langage peuvent passer cet exposé car il s'adresse à celles et ceux qui ne l'ont jamais utilisé.

Si vous regardez les répertoires du jeu, vous verrez un répertoire Python comprenant des fichiers avec l'extension .py.
Ce sont des fichiers écrits en langage Python et qui sont utilisés par le programme pour exécuter les commandes du jeu.
Ces commandes, ou plutôt les fonctions que chaque fichier contient sont regroupés en modules dont l'extension est .py et le nom de chaque module est important car c'est ce nom qui sera utilisé pour appeler les fonctions qu'il contient.

Les modules Python peuvent être lus et édités avec un simple éditeur de texte mais, il est préférable d'utiliser Plasmashop qui, non seulement va appeler l'éditeur python, mais également d'autres programmes pour visualiser le contenu d'autres fichiers que nous aurons besoin dans la programmation.
Cela paraît compliqué mais, rassurez-vous, nous apprendrons petit-à-petit à utiliser tout cela par des exemples concrets. Very Happy

Pour ma part, et bien qu'il s'agisse d'une version Beta, j'utilise la version 3 de Plasmashop qui, jusqu'à présent, ne ma pas posé de problèmes.

Idea Première parenthèse.

PlClient contient une console Python qui vous permet d'appeler directement, pendant que vous jouez, des fonctions contenues dans les modules du répertoire Python du jeu.
Pour appeler cette console, ouvrez la console Plasma en appuyant sur la touche % (près de la grosse touche de votre clavier) puis sur la touche <\>.
Vous saurez que vous êtes dans la console Python par les signes >>> en début de ligne à la place du ] de la console Plasma. Pour revenir à la console Plasma, il suffit d'appuyer à nouveau sur <\> ou sur .

Fermons la parenthèse.

Maintenant, nous allons apprendre les bases du langage Python afin que vous soyez en mesure de lire un module et les fonctions qu'il contient et, par la suite, écrire vos propres modules.

Nous allons supposez que vous débutez dans le langage Python et que donc, vous n'y connaissez rien.

Comme tout langage de programmation, Python a sa syntaxe. Ce sera le contenu de mon exposé d'aujourd'hui.

1. La syntaxe du langage Python

Prenons un exemple concret.
Je voudrais écrire un programme qui me fasse changer de sphère à Ahnonay sans repasser par le livre de liaison ni par Cathedrale.
Voilà une bonne idée me direz-vous. Cela va me permettre d'aller dans n'importe quelle sphère quand je le désire.
Cet exemple va nous permettre d'apprendre la syntaxe de base.

Voici le programme qui va réaliser cela. J'expliquerai ensuite chaque ligne de programmation.


Code:
1.........from Plasma import *
2........sphere = 0
3.
4........def Sphere(val=1) :
5.............#changer de sphere
6.............Nomage = PtGetAgeName()
7.............if Nomage != "Ahnonay" :
8...................PtConsole('Net.linkWithOwnedBook Ahnonay')
9...................print "Vous n'étiez pas à Ahnonay : Relancez votre commande"
10...........else :
11..................ageSDL=PtGetAgeSDL()
12.................ageSDL["ahnyCurrentSphere"]=(sphere,)
14.................PtConsole('Net.linkwithOwnedBook Ahnonay')
15.

Tout d'abord, les chiffres suivis de points en début de chaque ligne ne font pas partie du programme. Il s'agit d'une numérotation qui va me permettre de donner les explications ligne par ligne.

Important. Python fait la différence entre Majuscules et minuscules. Si vous tapez une instruction en plaçant une lettre minuscule à la place d'une majuscule, vous aurez un message d'erreur car Python ne la reconnaîtra pas.
Par exemple la fonction interne qui affiche un message à l'écran est
print
Si vous tapez Print ou PRINT ou autre chose, Python va croire que vous tapez une variable et non la fonction print et vous renverra un message d'erreur de syntaxe : Syntaxerror: invalid syntax. (Erreur de syntaxe: syntaxe invalide) et le signe ^ vous indiquera où se trouve l'erreur, ainsi que la ligne du programme où l'erreur se situe.

Tout de suite, vous remarquez tout une série de mots en anglais qui sont des
fonctions
compréhensibles par l'interpréteur Python. Ces fonctions sont simples et ressemblent beaucoup à celles que l'on utilise dans d'autres langages de programmation (print, if, else...).
Ces fonctions font partie du langage d'origine et sont incluses dans le module __builtins__ (Constructions internes)
Si vous tapez une instruction qui n'existe pas vous aurez un message d'erreur de syntaxe.

Ensuite vous remarquez que certaines lignes du programme sont décallées par rapport aux autres. C'est ce qu'on appelle
l'indentation
et c'est très utile car Python utilise cette indentation pour traiter le code . Si l'indentation n'est pas correcte, un message d'erreur apparaît.

Puis, vous pouvez voir que certaines lignes se terminent par : (lignes 4,7 et 10)
Ce signe est utilisé pour indiquez soit une
déclaration de fonction ou d'objet (ligne 4) soit une structure de contrôle
(ligne 7 et ligne 10).

Enfin, vous trouverez des lignes comportant le signe
# qui indique à Python que tout ce qui suit jusqu'à la fin de la ligne est un commentaire
à ne pas tenir compte dans l'exécution du programme.

Voyons maintenant le programme en détails.

Ligne 1. from Plasma import *

remarquez que les mots réservés à Python from et import sont écrits en minuscules et Plasma
avec la première lettre en majuscule, exactement comme le fichier est nommé sur votre disque dur dans le répertoire Python, sous répertoire plasma de votre installation de jeu.
Cette instruction dit à Python de charger en mémoire toutes les fonctions incluses dans le module Plasma.py.
L'astérisque indique que l'on importe toutes les fonctions de ce module.
Si on ne veut pas tout importer, on écrira tout simplement
import Plasma
Mais dans ce cas, il faudra faire précéder la fonction issue de ce module par le nom du module lui-même suivi d'un point. Ceci peut s'avérer nécessaire si deux modules appelés possèdent des noms identiques de fonctions.

Dans le premier cas il suffit de taper la fonction directement comme en ligne 6 Nomage =
PtGetAgeName()
Si j'avais utilisé la syntaxe import Plasma, j'aurais dû écrire à la ligne 6 Nomage = Plasma.PtGetAgeName()
C'est plus lourd mais d'un autre côté on sait de quel module est extraite la fonction appelée. A vous de décider la méthode qui vous convient le mieux. Very Happy

Remarquez que un module peut en appeler un ou plusieurs autres.

Si vous tapez dans la console Python une instruction issue d'un module, vous devez d'abord charger ces modules en tapant la ligne comme celle du programme ci-dessus:
import nomdumodule ou from nomdumodule import *
nomdumodule est le nom du module qui contient la ou les fonctions que vous aurez besoin par la suite. Attention, l'importation de ces modules ne durent que tant que vous restez dans PlClient.

ligne 2. sphere = 0

On déclare la variable globale sphere comme étant égale au nombre entier 0
Une variable est globale si elle est déclarée en-dehors de toute définition de fonction, à l'inverse d'une variable locale qui est déclarée à l'intérieur d'une fonction. Une variable globale pourra donc être utilisée dans plusieurs fonctions d'un même module. Par contre si elle est locale, elle ne pourra être utilisée que dans la fonction où elle a été déclarée. On peut donc avoir le même nom de variable dans des fonctions différentes d'un même module car Python sait quelle est la portée de chaque variable.

En indiquant que la variable sphere est égale à 0, Python sait que cette variable est de type
nombre entier.
Si j'avais écrit sphere = 1.0 Python aurait attribué le type nombre décimal à la variable sphere.
On peut également déclarer de la même manière une variable avec le type chaîne de caractères de la manière suivante : sphere = "quatre"

Il existe d'autres façons d'attribuer à une variable leur type. Je vous conseille de visiter ces deux pages qui vous donneront un bon aperçu des types de données ICI ainsi qu'un excellent résumé des différents types de variables ICI
A suivre...

_________________
Sur la table d'émeraude il est écrit : "Ce qui est en haut est comme ce qui est en bas"

V@-Michel KI: 05476751 V@-Scarabée KI: 07402031 Michel-Sav KI: 06408431 Michel KI: 01255010 Les voltigeurs KI: 05460894 MAJETEG KI: 04302460 sur Moul:a
Michel et Scarabée sur Deep Island Les voltigeurs (avec son quartier) sur TOC
avatar
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 62
Localisation : Belgique

Revenir en haut Aller en bas

Re: Introduction au language Python

Message  V@-Michel le Jeu 14 Juin - 18:52

Reprenons le programme :

Code:
1.........from Plasma import *
2........sphere = 0
3.
4........def Sphere(val=1) :
5.............#changer de sphere
6.............Nomage = PtGetAgeName()
7.............if Nomage != "Ahnonay" :
8...................PtConsole('Net.linkWithOwnedBook Ahnonay')
9...................print "Vous n'étiez pas à Ahnonay : Relancez votre commande"
10...........else :
11.................ageSDL=PtGetAgeSDL()
12.................ageSDL["ahnyCurrentSphere"]=(sphere,)
13.................PtConsole('Net.linkwithOwnedBook Ahnonay')
14.

Ligne 3. il s'agit d'une ligne vide qui sera inexistante pour Python. On peut placer des lignes vides et espaces pour aérer le programme. Cela n'a aucune incidence dans son exécution.

Ligne 4. def Sphere (val = 1) :
def
est l' instruction qui crée la fonction dont le nom ici est Sphere et qui possède un paramètre appelé ici val, dont la valeur par défaut est l'entier 1. la définition se termine par deux points :

Tout ce qui suit ces deux points, jusqu'au prochain def est le contenu de la fonction Sphere.
Dans notre cas, lorsque nous appellerons la fonction Sphere, nous pourrons donner une valeur au paramètre val. Si nous ne le faisons pas, le paramètre val aura d'office la valeur 1. En fait, il s'agit de dire dans quelle sphère nous voulons aller. Donc, si nous désirons aller dans la sphère 3 de Ahnonay, nous appellerons la fonction de cette manière :

>>>Sphere (3)

A ce moment, la variable val prendra la valeur 3.

Ligne 5. #changer de sphere
Le caractère # indique à Python que ce qui suit sur la ligne est un commentaire et de ne pas en tenir compte.
Cela sert au programmeur à donner des indications à celui qui lit le programme.
Si vous souhaitez joindre un commentaire sur plusieurs lignes, afin d'éviter de devoir mettre le signe # au début de chacune d'elles, vous pouvez encadrer votre texte par 3 guillements avant le commentaire et 3 guillements après le commentaire comme suit :

""" votre texte........
......suite du texte......
.....fin du texte """

Ligne 6. Nomage = PtGetAgeName()

PtGetAgeName() est une fonction du module Plasma.py qui retourne le nom de l'âge dans lequel l'avatar se trouve.
La variable Nomage va prendre cette valeur.
Par exemple, si vous êtes à Er'cana et que vous tapez dans la console Python :

>>>from Plasma import * # pour accéder aux fonctions contenues dans le module Plasma
>>>Nomage = PtGetAgeName() # mettre le nom de l'âge où se trouve l'avatar dans la variable Nomage
>>>print "L'avatar se trouve actuellement dans " Nomage

vous verrez apparaître : L'avatar se trouve actuellment dans Ercana.
Vous pouvez voir le nom exact des âges utilisés dans le jeu dans ce tableau.

Ligne 7. if Nomage != "Ahnonay" :

if est une opération qui regarde si ce qui suit jusqu'au deux points : est vrai ou faux (True ou False). Si c'est vrai alors Python réalise les instructions qui suivent, sinon il passe les instructions de même indentation jusqu'à l'opération else en ligne 10 et réalise les instructions de même indentation.
!= est un comparateur logique qui veut dire n'est pas égal à

Donc, cette ligne dit :
Si la variable Nomage n'est pas égale à "Ahnonay" alors faire ce qui suit :

....Ligne 8. PtConsole('Net.linkWithOwnedBook Ahnonay')
Cette fonction PtConsole permet de lancer une commande comme si on se trouvait dans la console Plasma. Ceci est pratique pour ne pas devoir passer de l'une à l'autre. Le paramètre entre quote ' ' est la commande Plasma proprement dite.
Ici, on se relie à notre instance d'Ahnonay, puisqu'on n'y était pas.

....Ligne 9. print "Vous n'étiez pas à Ahnonay : Relancez votre commande"

La fonction interne à Python print affiche à l'écran, dans la console Python, le message Vous n'étiez pas à Ahnonay : Relancez votre commande.

Sinon passer directement à la ligne 10 else :
et faire ce qui suit dans la même indentation

....Ligne 11. ageSDL=PtGetAgeSDL()

La fonction du module Plasma.py PtGetAgeSDL() retourne dans la variable ageSDL l'adresse de la structure SDL de l'âge dans lequel l'avatar se trouve. Cette structure est en fait une liste d'éléments et l'un de ceux-ci est l'élément ["ahnyCurrentSphere"] constitué lui-même de 2 éléments, dont le premier est le numéro de la sphère courante (le second est sans importance)
Donc, il suffit de donner la valeur de la sphère désirée à cet élément de la manière suivante :
....Ligne 12. ageSDL["ahnyCurrentSphere"]=(sphere,)
Remarquez la virgule après sphere pour indiquer qu'on ne met rien dans le second élément de ahnyCurrentSphere.

Puis on relance la commande Net.LinkwithOwnedBook pour aller dans la sphère voulue.
....Ligne 13. PtConsole('Net.linkwithOwnedBook Ahnonay')


Voilà. Avec cette fonction nous avons appris les bases de la syntaxe du langage Python. Nous sommes maintenant prêts à réaliser nos envies les plus folles. Le tout est de savoir à quoi correspondent chaque commandes incluses dans les différents modules et comment les utiliser. Certes, cette fonction n'est pas parfaite car ici on n'a pas prévu le cas où l'utilisateur se tromperait de numéro de sphère en entrant 5 comme paramètre par exemple, ni le fait de ne pas changer de sphère si on se trouve déjà dans celle où l'on désire aller. Mon but était juste de vous donner les bases de la syntaxe du langage Python.

Pratiquement comment écrire et sauvegarder nos modules ?

Chacun est libre d'utiliser l'éditeur qui lui convient mais, pour être efficace, je vous conseille d'utiliser Plasmashop version 3.0.
Bien qu'il s'agisse d'une version beta, je n'ai, à ce jour eu aucun problème d'utilisation.

Comment procéder ?
Je suppose que vous avez installé et configuré Plasmashop. Sinon reportez-vous à la rubrique consacrée à l'installation de PlClient en cliquant ICI.
Lancez Plasmashop. Dans la colonne de gauche, déroulez le répertoire Python dans lequel vous devez avoir toute une série de fichiers avec l'extension .py. Ce sont tous les modules comprenant les fonctions et classes (nous en reparlerons plus tard) utilisées par le jeu.
Vous voyez également deux sous répertoires Plasma et System.
Déroulez le répertoire Plasma et double-cliquez sur Plasma.py.
C'est de ce très gros module que seront généralement issues les fonctions que nous aurons besoin. C'est pourquoi, souvent, vous trouverez dans un module from Plasma import *.
Malheureusement, les fonctions dans ce module sont sont juste définies mais leur contenu n'est pas développé. Cela nous rend la tâche plus difficile et il faut parfois étudier des heures pour savoir comment utiliser telle ou telle fonction.
Un autre module intéressant est le module xCheat qui se trouve dans le répertoire Python. En le parcourant, si vous avez bien suivi mon exposé sur la syntaxe ci-dessus, vous devriez commencer à comprendre un peu certaines fonctions Very Happy

Pour créer votre propre module de fonctions Python, dans Plasmashop, cliquez sur File>New et cliquez sur Python Script puis sur le bouton create. dans la fenêtre de droite, vous voyez un onglet intitulé Unnamed.py correspondant à la fenêtre d'édition de ce module encore vierge auquel vous pouvez donner le nom qui vous convient au moment de la sauvegarde: File>Save As.
Le curseur se place à côté du chiffre 1. qui est la première ligne de votre module et attend que vous tapiez quelque chose.

Sur la première ligne tapez :
# -*- coding: cp1252 -*-

Pourquoi cette première ligne de commentaire ?
Par défaut, Python ne permet pas l'insertion de caractères accentués dans les chaînes de caractères, sauf si on rajoute cette ligne au tout début du module.

Ensuite, vous pouvez tapez vos fonctions. Essayez de taper celle écrite plus haut.
Vous verrez que l'indentation se fait automatiquement lorsque vous appuyez sur la touche Enter après les 2 points en fin de ligne.
Vous remarquerez aussi le changement de couleur des caractères selon les commandes tapées.

Lorsque vous avez tapé votre texte. Sauvegardez votre module sous le nom que vous désirez, par exemple Trucs.py. Celui-ci sera enregistré sur votre disque dur dans le répertoire Python de votre installation de PlClient.

Pour le tester, lancez le jeu avec PlClient. Vous êtes à votre Relto
Ouvrez la console Plasma puis Python et tapez :
>>>from Trucs import * puis sur la touche Enter
puis
>>>Sphere(2) puis sur la touche Enter
Vous allez être transporté à Ahnonay en sphère 1. Vous pouvez lire
Vous n'étiez pas à Ahnonay : Relancez votre commande
Toujours dans la console Python appuyez sur la flèche haut pour rappeler la dernière commande passée. Vous revoyez la même commande. Appuyez sur la touche Enter et cette fois, vous arrivez bien en sphere 3. Essayez avec la sphère 4 puis revenez au relto.
Cliquez sur la photo du livre de liaison d'Ahnonay et vous constaterez que vous revenez bien en sphere 4.

Nous possédons deux consoles au sein de PlClient : la console Python qui est la base de toute la programmation du jeu et la console Plasma qui, en fait, reprend, d'une façon sous-jacente les fonctions incluses dans les modules Python du jeu.
Si on connaît bien les fonctions Python, la console Plasma devient donc inutile. Mais, pour lancer une petite commande elle nous sera toujours utile !

Les choses intéressantes peuvent maintenant commencer. Une rubrique intitulée "Cas pratiques" va être ouverte. C'est là que nous pourrons mettre en commun notre savoir personnel et exposer nos réalisations en matière de programmation dans le jeu. Chacun pourra écrire ce qu'il a trouvé, réalisé et ainsi constituer une bibliothèque de fonctions qu'il sera loisible d'utiliser ou même de modifier.
Cette rubrique aura toujours la même ossature : On expose une idée et on essaye de la mettre en oeuvre.

_________________
Sur la table d'émeraude il est écrit : "Ce qui est en haut est comme ce qui est en bas"

V@-Michel KI: 05476751 V@-Scarabée KI: 07402031 Michel-Sav KI: 06408431 Michel KI: 01255010 Les voltigeurs KI: 05460894 MAJETEG KI: 04302460 sur Moul:a
Michel et Scarabée sur Deep Island Les voltigeurs (avec son quartier) sur TOC
avatar
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 62
Localisation : Belgique

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum