langages de script – Python

Cours 1 – premiers pas

M1 Ingénierie Multilingue – INaLCO

clement.plancq@ens.fr

Avant de commencer

  • Nous travaillerons avec Python3 (3.6 minimum)
  • Pour le travail avec la console vous utiliserez python3 ou ipython
    Tapez ``python3`` ou ``ipython`` dans un terminal pour accéder à la console
  • Choisissez l'éditeur de texte que vous préférez (emacs, vi, atom, visual studio, sublime text, …)
  • Vos scripts devront être encodés en utf-8, indiquez-le dans vos scripts avec le commentaire suivant en première ligne :
    # -*- coding: utf-8 -*- ou # coding=utf-8

Avant de commencer (2)

Pour exécuter vos scripts, deux options :

> python3 mon_script.py

ou (mais pourquoi faire compliqué ?)

> chmod u+x
> ./mon_script.py en ajoutant ce shebang en première ligne :
#!/usr/bin/env python3

Opérateurs mathématiques

+ addition

In [3]:
2 + 5 
Out[3]:
7

- soustraction

In [2]:
3 - 2
Out[2]:
1

* multiplication

In [4]:
2 * 3
Out[4]:
6

/ division

In [5]:
36 / 6
Out[5]:
6.0

% modulo (reste de la division)

In [6]:
36 % 8
Out[6]:
4

** puissance

In [7]:
10 ** 2 * 4
Out[7]:
400
  • L'ordre des opérations est l'ordre classique en mathématiques (puissance passe avant les opérations).
  • vous pouvez utiliser des parenthèses pour définir des priorités.
In [8]:
36 / (2*3)
Out[8]:
6.0

Les chaînes de caractères

  • + est aussi l'opérateur de concaténation de chaînes de caractères
In [13]:
"Hello" + "world"
Out[13]:
'Helloworld'
In [14]:
"Hello" + " " + "world"
Out[14]:
'Hello world'
  • Les chaînes de caractères sont entourées soit de quotes simples ', soit de guillemets "
  • Si votre mot contient une apostrophe, entourez-le de guillemets "
In [15]:
'Ça donne une erreur t'as vu'
  File "<ipython-input-15-0c3a6c06d900>", line 1
    'Ça donne une erreur t'as vu'
                            ^
SyntaxError: invalid syntax
In [12]:
"Ça donne une erreur t'as vu"
Out[12]:
"Ça donne une erreur t'as vu"

Les variables

  • L'affectation des variables se fait à l'aide du symbole =
  • Si la variable est placée à droite du symbole =, sa valeur est affectée à la variable placée à gauche.
In [17]:
var = 3 + 2
print(var)

another_var = var
print(another_var)
5
5
In [18]:
yet_another_var_2 = var + 1
yet_another_var_2
Out[18]:
6
  • Les noms de variable sont composés de car. alphabétiques (min ou maj), des chiffres et de l'underscore. C'est tout.

  • Les noms de variable sont choisis par le programmeur, ils doivent être le plus clair possible.
    En réalité il est conseillé de suivre la PEP 8.

In [21]:
je-ne-suis-pas-une-variable = 2
  File "<ipython-input-21-d198b24009a3>", line 1
    je-ne-suis-pas-une-variable = 2
                                   ^
SyntaxError: can't assign to operator
In [22]:
3_moi_non_plus = 2 + 3
  File "<ipython-input-22-fa265dc8484a>", line 1
    3_moi_non_plus = 2 + 3
     ^
SyntaxError: invalid token
  • Seuls les mots réservés sont interdits.
In [20]:
import keyword
print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

Help !

PEP, quesaco ?

PEP : Python Enhancement Proposals

Python est sous licence libre. Le langage a été créé par Guido Van Rossum mais depuis 2001 le développement de Python est géré par la Python Software Foundation (dont Guido était le "benevolent dictator for life" jusqu'en juillet 2018).

Les évolutions du langage sont détaillées dans ces PEP (proposées, examinées, corrigées, acceptées puis implémentées).

Les PEP les plus célèbres sont

  • PEP 20 "Zen of Python"1 (tapez import this dans une console)
  • PEP 8 "Style Guide for Python Code"

1 "There should be one-- and preferably only one --obvious way to do it." Tacle par derrière sur Perl, c'est pas joli-joli.

Les types

  • Python est un langage à typage dynamique fort : le type d'une variable est déterminé par l'interpréteur.
  • Python est un langage à typage dynamique fort : pas de conversion implicite, certaines actions sont interdites.
In [23]:
"Hello" + 1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-23-465e48023fdd> in <module>()
----> 1 "Hello" + 1

TypeError: must be str, not int
  • La fonction type() retourne le type de la variable donnée en argument.
In [31]:
type("Hello")
Out[31]:
str
  • str(), int(), float() convertit l'argument dans le type désiré.
  • bool() retourne True si l'argument est vrai, False sinon.
In [26]:
int(3.14159265359)
Out[26]:
3
In [27]:
"Hello" + str(1)
Out[27]:
'Hello1'

Help !

Nous venons d'utiliser 4 fonctions.

Avant d'utiliser une fonction il est indispensable de savoir : ce que fait la fonction, quels sont les paramètres attendus, quelle est la valeur de retour.

Pour accéder à la documentation d'une fonction :

Les structures conditionnelles

if condition:
    #begin of block
    instruction1
    instruction2
    #end of block

Opérateurs de comparaison

< inférieur / <= inférieur ou égal
> supérieur / >= supérieur ou égal
== égal / != non égal
is identité (pour les objets surtout) / is not non identité

In [33]:
x = 4
if x > 3:
    print("x a grandi")
x a grandi
In [34]:
if x > 3:
    print("x a grandi")	   
else:
    print("x n'a pas grandi")
x a grandi

Opérateurs booléens

not négation
and conjonction (True si les deux opérandes sont vraies, False sinon)
or disjonction (True si une des deux opérandes est vraie)

In [35]:
if x > 3 and x <= 5:
    print("x a grandi, un peu")	   
elif x > 5:
    print("x a grandi")
else:
    print("x n'a pas grandi")
x a grandi, un peu

Les listes

Vite fait, on y reviendra

  • Une liste une structure de données ordonnée
  • Une liste peut contenir plusieurs valeurs, variables, listes, objets, ... le tout de types différents
  • On accède à un élément de la liste par son indice (de 0 à n-1, n étant le nombre d'éléments)
In [45]:
voyelles = []
voyelles = ['a', 'e', 'i', 'o', 'u']    
voyelles[0]    
Out[45]:
'a'

Les dictionnaires

Vite fait, on y reviendra

  • Un dictionnaire est une structure de données associative de type 'clé' => 'valeur'
  • Les données ne sont pas ordonnées comme dans les listes
  • On accède à une valeur par sa clé
  • Les clés sont uniques, on ne peut pas associer deux valeurs à une même clé
  • keys() renvoie la liste des clés, values() la liste des valeurs
In [41]:
couleurs = {'a':'noir', 'e':'blanc', 'i':'rouge', 'u':'vert', 'o':'bleu'}
couleurs['i'] = "pourpre"
couleurs
Out[41]:
{'a': 'noir', 'e': 'blanc', 'i': 'pourpre', 'o': 'bleu', 'u': 'vert'}
In [50]:
couleurs.keys()
Out[50]:
dict_keys(['a', 'e', 'i', 'u', 'o'])

Les boucles

Vite fait, on y reviendra

  • Les boucles while nécessitent que la valeur utilisée dans la condition d'arrêt soit modifiée dans le corps de la boucle.
  • Les boucles for s'appliquent aux objets de type "iterables" (liste, chaîne de car., dict.items())
In [51]:
i = 1
while i < 5:
    print(i)
    i = i + 1
1
2
3
4
In [52]:
for item in voyelles:
    print(item)
a
e
i
o
u
In [53]:
for item in couleurs.keys():
    print(item)
a
e
i
u
o
In [56]:
for key, value in couleurs.items():
    print(key, value)
a noir
e blanc
i pourpre
u vert
o bleu

Les fonctions

Vite fait, on y reviendra

def ma_fonction(arg1, arg2):
    """ description de la fonction """
    instruction1
    instruction2
    return(resultat)
  • L'ordre des arguments est déterminant
  • Il est possible d'outrepasser l'ordre en nommant les arguments lors de l'appel de fonction
In [61]:
def soustraction(arg1, arg2):
    res = arg1 - arg2
    return res
In [62]:
diff = soustraction(5, 3)    
diff
Out[62]:
2
In [63]:
diff = soustraction(3, 5)    
diff
Out[63]:
-2
In [65]:
diff = soustraction(arg2=5, arg1=3)    
diff
Out[65]:
-2

Exos

Vous rendrez des scripts Python3. Avec des commentaires c'est mieux.

  1. Finir le chifoumi
  2. Faire un jeu un peu sur le modèle du chifoumi où l'utilisateur doit deviner un chiffre entre 1 et 10 (10 inclus). 5 essais possibles. Le jeu doit donner des indications (trop grand, trop petit) à chaque essai.
  3. Résoudre Power of Thor - Episode 1 sur CodinGame