Tutoriel Python en ligne


Télécharger Tutoriel Python en ligne

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Manuel de formation avancé pour apprendre Python

...

2.2          L’interpréteur et son environnement

2.2.1      Gestion des erreurs

Quand une erreur survient, l’interpréteur imprime un message d’erreur et une trace de l’état de la pile. En mode interactif, il retourne alors au prompt principal ; lorsque l’entrée se fait depuis un fichier, il termine l’exécution avec un code de sortie différent de zéro après avoir imprimé la trace de pile. (Les exceptions gérées par une clause except dans une instruction try ne sont pas des erreurs dans ce contexte ; voir 8.2.) Certaines erreurs sont fatales dans tous les cas et causent une sortie avec un code différent de zéro ; cela se produit pour les aberrations internes et certains cas de saturation mémoire. Tous les messages d’erreur sont écrits sur la sortie d’erreur standard ; l’affichage normal des commandes exécutées est effectué sur la sortie standard.

Taper le caractère d’interruption (habituellement Control-C ou DEL) au prompt principal ou secondaire annule la saisie et revient au prompt principal.1 Taper le caractère d’interruption pendant l’exécution d’une commande déclenche l’exception KeyboardInterrupt, qui peut être gérée par une instruction try.

2.2.2      Scripts Python exécutables

Sur les systèmes UNIX à la BSD, les scripts Python peuvent être rendus directement exécutables, comme les scripts shell, en plaçant la ligne

#! /usr/bin/env python

(en supposant que l’interpréteur est dans le PATH de l’utilisateur au lancement du script) et rendant le fichier exécutable. Le ‘# !’ doit correspondre aux deux premiers caractères du fichier.

2.2.3      Encodage du fichier source

Dans les fichiers sources Python il est possible d’utiliser des encodages différents de l’ASCII. La meilleure façon de le faire consiste à mettre une ligne de commentaire spéciale après la ligne #! pour définir l’encodage du fichier source :

# -*- coding: encoding -*-

Avec cette déclaration, tous les caractères dans le fichier source seront traités comme ayant l’encodage encoding, et il sera possibe d’écrire directement des chaînes littérales Unicode dans l’encodage choisi. La liste des encodages possibles peut être trouvée dans Python Library Reference, dans la section sur les codecs.

Par exemple, pour écrire des chaînes littérales Unicode incluant le symbole monétaire Euro, l’encodage ISO-8859-15 peut être utilisé, le symbole de Euro ayant le valeur ordinale 164. Le script suivant imprime la valeur 8364 (le code Unicode correspondant au symbole Euro) puis termine :

# -*- coding: iso-8859-15 -*-

currency = u"C="

print ord(currency)

Si votre éditeur est capable d’enregistrer des fichiers en UTF-8 avec une marque UTF-8 byte order mark (ou BOM), vous pouvez utiliser cela au lieu d’une déclaration d’encodage. IDLE accepte cette possibilité si la case Options/General/Default Source Encoding/UTF-8 est cochée. Notez que cette signature n’est pas comprise dans les anciennes livraisons de Python (2.2 et plus anciennes), et n’est pas non plus comprise par le système d’exploitation pour les fichiers script avec des lignes #! (utilisées uniquement sur des systèmes UNIX).

En utilisant UTF-8 (soit à travers cette signature, soit au moyen d’une déclaration d’encodage), les caractères de la plupart des langues du monde peuvent figurer simultanément dans les chaînes littérales et les commentaires. L’emploi de caractères non ASCII dans les identificateurs n’est pas autorisé. Pour afficher tous ces caractères correctement votre éditeur doit reconnaître que le fichier est UTF-8 et il doit utiliser une police de caractères qui supporte tous les caractères dans le fichier.

2.2.4      Le fichier de démarrage interactifQuand vous utilisez Python de façon interactive, il est souvent pratique que certaines commandes standard soient exécutées à chaque fois que l’interpréteur est lancé. Vous pouvez faire cela en donnant à la variable d’environ-nement PYTHONSTARTUP la valeur du nom d’un fichier contenant vos commandes de démarrage. Cela est analogue à l’utilisation du ‘.profile’ pour les shells UNIX.

Ce fichier est seulement lu avant les sessions interactives, non pas lorsque Python lit ses commandes dans un script, ni lorsque ‘/dev/tty’ est fourni comme source explicite pour les commandes (ce qui pour le reste se comporte comme une session interactive). Il est exécuté dans le même espace de noms que celui où sont exécutées les commandes interactives, de sorte que les objets qu’il définit ou importe peuvent être utilisés directement dans la session interactive. Vous pouvez aussi changer les invites sys.ps1 et sys.ps2 dans ce fichier.

Si vous voulez lire un fichier de lancement additionnel depuis le répertoire courant, vous pou-vez programmer cela dans le fichier de démarrage global en utilisant du code similaire à ‘if os.path.isfile(’.pythonrc.py’) : execfile(’.pythonrc.py’)’. Si vous voulez utiliser le fichier de démarrage dans un script, vous devez le faire explicitement dans le script :

import os

filename = os.environ.get(’PYTHONSTARTUP’)

if filename and os.path.isfile(filename):

execfile(filename)

Une introduction informelle à Python

Dans les exemples suivants, la saisie et l’affichage seront distingués par la présence ou l’absence d’invites (>>> et ‘... ’) : pour reproduire l’exemple, vous devez taper tout ce qui suit l’invite, quand celle-ci apparaît ; les lignes qui ne commencent pas par une invite correspondent à l’affichage effectué par l’interpréteur. Notez qu’une invite secondaire seule sur une ligne signifie que vous devez taper une ligne vide ; cela marque la fin des commandes sur plusieurs lignes.

De nombreux exemples de ce manuel, même ceux qui sont saisis à l’invite interactive, contiennent des commen-taires. Les commentaires en Python commencent par un caractère dièse, ‘#’, et continuent jusqu’à la fin de la ligne physique. Un commentaire peut se trouver au début d’une ligne derrière un espace ou du code, mais pas à l’intérieur d’une chaîne de caractères litérale. Un caractère dièse à l’intérieur d’une chaîne est juste un caractère dièse.

Quelques exemples :

# voici le premier commentaire

SPAM = 1            # et voici le deuxième commentaire

#             ... et maintenant un troisième!

STRING = "# Ceci n’est pas un commentaire."

3.1          Utiliser Python comme calculatrice

Essayons quelques commandes Python simples. Lancez l’interpréteur et attendez l’apparition du prompt principal, >>>. (Ça ne devrait pas être très long.)

3.1.1      Nombres

L’interpréteur fonctionne comme une simple calculatrice : vous pouvez y taper une expression et il va en afficher la valeur. La syntaxe des expression est naturelle : les opérateurs +, -, * et / marchent exactement comme dans la plupart des langages (par exemple Pascal ou C) ; les parenthèses peuvent être utilisées pour les regrouper. Par exemple :

>>>        2+2

>>>        # Ceci est un commentaire

... 2+2 4

>>>        2+2  # et un commentaire sur la même ligne que le code

>>>        (50-5*6)/4

>>>        # La division des entiers retourne l’entier immédiatement inférieur:

... 7/3 2

>>>        7/-3

Comme en C, le signe égale (‘=’) est utilisé pour affecter une valeur à une variable. La valeur d’une affectation n’est pas affichée :

>>>        largeur = 20

>>>        hauteur = 5*9

>>>        largeur * hauteur

Une valeur peut être affectée à plusieurs variables simultanément :

>>>        x = y = z = 0  # Mettre à zéro x, y et z

>>>        x

>>>        y

>>>        z

Il y a un support complet des nombres à virgule flottante ; les opérateurs en présence de types d’opérandes mélan-gés convertissent les opérandes entiers en virgule flottante :

>>>        3 * 3.75 / 1.5

>>>        7.0 / 2

>>>        1j * 1J (-1+0j)

>>>        1j * complex(0,1) (-1+0j)

>>>        3+1j*3

(3+3j)

>>>        (3+1j)*3

(9+3j)

>>>        (1+2j)/(1+1j) (1.5+0.5j)

Les nombres complexes sont toujours représentés comme deux nombres en virgule flottante, les parties réelle et imaginaire. Pour extraire ces parties d’un nombre complexe z, utilisez z.real et z.imag.

>>>        a=1.5+0.5j

>>>        a.real

1.5

>>>        a.imag

Les fonctions de conversion en virgule flottante et en entier (float(), int() et long()) ne marchent pas pour les nombres complexes — il n’y a pas une façon correcte et unique de convertir un nombre complexe en un nombre réel. Utilisez abs(z) pour obtenir sa norme (en flottant) ou z.real pour sa partie réelle.

>>>        a=3.0+4.0j

>>>        float(a)

Traceback (most recent call last):

File "", line 1, in ?

TypeError: can’t convert complex to float; use e.g. abs(z)

>>>        a.real

3.0

>>>        a.imag

4.0

>>>        abs(a)  # sqrt(a.real**2 + a.imag**2)

5.0

>>>       

En mode interactif, la dernière expression affichée est affectée à la variable _. Quand vous voulez utiliser Python comme calculatrice, c’est plus pratique pour continuer les calculs, par exemple :

>>>        tva = 12.5 / 100

>>>        prix = 100.50

>>>        prix * tva

12.5625

>>>        prix + _

113.0625

>>>        round(_, 2)

113.06

>>>       

Cette variable doit être utilisée en lecture seule par l’utilisateur. Ne lui affectez pas une valeur de façon explicite

— vous auriez alors créé une variable locale indépendante, avec le même nom, masquant la variable intégrée et son comportement magique.

3.1.2      Chaînes de caractères

En plus des nombres, Python peut aussi manipuler des chaînes, qui peuvent être exprimées de différentes façons.

Elles peuvent être incluses entre simples quotes (apostrophes) ou doubles quotes (guillemets) :

>>>        ’spam eggs’ ’spam eggs’

>>>        ’n\’est-ce pas’ "n’est-ce pas"

>>>        "n’est-ce pas" "n’est-ce pas"

>>>        ’"Oui," dit-il.’ ’"Oui," dit-il.’

>>>        "\"Oui,\" dit-il." ’"Oui," dit-il.’



>>>        ’"N\’est-ce pas," repondit-elle.’ ’"N\’est-ce pas," repondit-elle.’

Notez1 que les chaînes admettent ou non les caractères accentués en mode intéractif suivant votre plate-forme. Si les commandes sont lues depuis un fichier, la situation est légèrement différente : en général vous pourrez, mais les caractères accentués risquent d’être interprétés différemment si vous transférez vos fichiers entre des plate-formes différentes. Pour ces questions de portabilité, les identificateurs en Python sont limités au code ASCII 7 bits. Vous ne pourrez pas (en mode intéractif ou pas) utiliser des lettres accentuées dans les noms de variables, fonctions, modules, classes, etc.

Les textes dans les chaînes peuvent se poursuivre sur plusieurs lignes de plusieurs façons. Des lignes de continua-tion peuvent être utilisées, avec un antislash comme dernier caractère sur la ligne pour indiquer que la prochaine ligne est une continuation logique de la ligne :

salut = "Ceci est une chaîne plutot longue contenant\n\ plusieurs lignes de texte exactement comme on le ferait en C.\n\

Notez que les blancs au début de la ligne sont\ significatifs."

print salut

Notez que les retours chariot nécessiteraient toujours d’être intégrés dans la chaîne en utilisant \n ; le retour chariot qui suit l’antislash de fin est supprimé. Cet exemple s’afficherait de la façon suivante :

Ceci est une chaîne plutot longue contenant

plusieurs lignes de texte excatement comme on le ferait en C.

Notez que les blancs au début de la ligne sont significatifs.

Si nous définissons les caractères de la chaîne comme une chaîne “raw” (brute), par contre, les séquences \n ne sont pas converties en caractères de retour chariot, mais l’antislash de fin de ligne, et le retour chariot du source sont tous les deux inclus dans la chaîne comme données. Ainsi, l’exemple :

salut = r"Ceci est une chaine assez longue contenant\n\

plusieurs lignes de texte comme vous pourriez vraiment le faire en C."

print salut

afficherait :

Ceci est une chaine assez longue contenant\n\

plusieurs lignes de texte comme vous pourriez vraiment le faire en C.

Ou bien, les chaînes peuvent être entourées par un couple de triple-quotes correspondantes : """ ou ’’’. Les fins de lignes n’ont pas besoin d’être préfixées lorsqu’on utilise les triple-quotes, mais elles seront incluses dans la chaîne.

print """

Usage: trucmuche [OPTIONS]

-h           Affiche cette notice d’usage

-H hôte hôte auquel il faut se connecter

"""

produit l’affichage suivant :

1NDT : Ce paragraphe absent de l’édition originale a été ajouté par Daniel Calvelo Aros à l’intention des utilisateurs de Python franco-phones.

Usage: trucmuche [OPTIONS]

-h           Affiche cette notice d’usage

-H hôte hôte auquel il faut se connecter

L’interpréteur affiche le résultat des opérations sur les chaînes de la même façon qu’à la saisie : entre quotes, et avec quotes et autres caractères bizarres préfixés par un antislash, pour afficher leur valeur exacte. La chaîne sera délimitée par des doubles quotes si elle contient une simple quote et aucune double quote, sinon, elle sera délimitée par des simples quotes. (L’instruction print, décrite plus loin, peut être utilisée pour écrire des chaînes sans quotes ni caractères préfixés.)

Les chaînes peuvent être concaténées (accolées) avec l’opérateur +, et répétées avec * :

>>>        word = ’Help’ + ’A’

>>>        word

’HelpA’

>>>        ’<’ + word*5 + ’>’ ’’

Deux chaînes de texte côte à côte sont automatiquement concaténées ; la première ligne ci-dessus aurait pu être écrite ‘mot = ’Help’ ’A’’ ; cela fonctionne seulement avec deux chaînes de texte, pas avec des expressions quelconques de type chaîne.

>>> import string

>>> ’cha’ ’ine’   #            

’chaine’

>>> string.strip(’cha’) + ’ine’     #            

’chaine’

>>> string.strip(’cha’) ’ine’         #            

File "", line 1, in ?

string.strip(’cha’) ’ine’

^

SyntaxError: invalid syntax

Les chaînes peuvent être décomposées (indexées) ; comme en C, le premier caractère d’une chaîne est en position (index) 0. Il n’y a pas de type caractère spécifique ; un caractère est simplement une chaîne de taille un. Comme en Icon, les sous-chaînes peuvent être spécifiées avec la notation de découpage (slice) : deux indices séparés par deux-points.

>>>        mot[4]

’A’

>>>        mot[0:2]

’He’

>>>        mot[2:4]

’lp’

A la différence des chaînes de caractères en C, les chaînes Python ne peuvent être modifiées. Faire une affectation à l’emplacement d’un indice dans la chaîne aboutit à une erreur :

>>> mot[0] = ’x’

Traceback (most recent call last):

File "", line 1, in ?

TypeError: object doesn’t support item assignment >>> mot[:1] = ’Splat’

Traceback (most recent call last):

File "", line 1, in ?

TypeError: object doesn’t support slice assignment

Cependant, il est facile et efficace de créer une nouvelle chaîne avec un contenu combiné :

>>>        ’x’ + mot[1:] ’xelpA’

>>>        ’Splat’ + mot[4] ’SplatA’

Les indices de découpage ont des valeurs par défaut utiles ; un premier index non-défini prend pour valeur par défaut zéro, un second index omis prend pour valeur par défaut la taille de la chaîne qu’on est en train de découper.

>>> mot[:2]       # Les deux premiers caractères

’He’

>>> mot[2:]       # Tout sauf les deux premiers caractères

’lpA’

Voici un invariant utile des opérations de découpage : s[ :i] + s[i :] égale s.

>>>        mot[:2] + mot[2:] ’HelpA’

>>>        mot[:3] + mot[3:] ’HelpA’

Les indices de découpage erronés sont gérés de façon élégante : un index qui est trop grand est remplacé par la taille de la chaîne, un index de fin inférieur à l’indice de début retourne une chaîne vide.

>>>        mot[1:100]

’elpA’

>>>        mot[10:]

’’

>>>        mot[2:1]

Les indices peuvent être des nombres négatifs, pour compter à partir de la droite. Par exemple :

>>>        mot[-1]# Le dernier caractère

’A’

>>>        mot[-2]# L’avant dernier caractère

’p’

>>>        mot[-2:]# Les deux derniers caractères

’pA’

>>>        mot[:-2] # Tout sauf les deux derniers caractères ’Hel’

Mais notez que -0 est vraiment la même chose que 0, donc ça ne compte pas à partir de la droite !

>>>        mot[-0]# (puisque -0 égale 0)

’H’

Les indices de découpage négatifs hors limites sont tronqués, mais n’essayez pas ceci avec des indices d’accès à des éléments uniques (sans découpage) :

>>> mot[-100:]

’HelpA’

>>> mot[-10]    # erreur

Traceback (most recent call last):

File "", line 1, in ?

IndexError: string index out of range

La meilleure façon de se rappeler comment marchent les découpages est de penser aux indices comme pointant entre les caractères, avec le bord gauche du premier caractère numéroté 0. Alors le bord droit du dernier caractère d’une chaîne de n caractères porte l’index n, par exemple :

+---+---+---+---+---+

| H | e | l | p | A |

+             ---+        ---+        ---+        ---+---   +

0             1             2             3             4             5

-5            -4            -3            -2            -1           

La première ligne de nombres donne la position des indices 0...5 dans la chaîne ; la seconde ligne donne les indice négatifs correspondants. Le découpage de i à j consiste en tous les caractères entre les extrémités étiquetées i et j, respectivement.

Pour les indices non négatifs, la longueur d’une tranche est la différence entre ses indices, si les deux sont à l’intérieur des limites. Par exemple, la longueur de mot[1:3] est 2.

La fonction intégrée len() retourne la longueur d’une chaîne :

>>>        s = ’supercalifragilisticexpialidocious’

>>>        len(s)

Voir aussi :

Les chaînes et les chaînes Unicode décrites à la prochaine section sont des exemples de types séquences et supportent les opérations communes supportées par de tels types.

Les chaînes et les chaînes Unicode disposent d’un nombre important de méthodes effectuant des transfor-mations basiques et des recherches.

Les opérations de mise en forme appelées lorsque des chaînes et des chaînes Unicode sont les opérandes gauches de l’opérateur % sont décrites plus en détail dans cette page.

3.1.3      Chaînes Unicode

A partir de Python 2.0, un nouveau type de données destiné à stocker du texte est disponible pour les programmeurs : l’objet Unicode. Il peut être utilisé pour stocker et manipuler des données Unicode (voir http ://www.unicode.org/) et s’intègre bien avec les objets chaînes en fournissant des conversions automatiques là où c’est nécessaire.

Unicode offre l’avantage de fournir un numéro pour chaque caractère de chaque écriture utilisée dans les textes modernes et anciens. Auparavant, il n’y avait que 256 numéros possibles pour les caractères d’écriture et les textes étaient donc typiquement associés à une page de codes qui réalisait l’association entre le numéros et les caractères d’écriture. Cela conduisait à beaucoup de confusion, spécialement en ce qui concerne l’internationalisation (écrite d’habitude comme ‘i18n’ — ‘i’ + caractères 18 + ‘n’) des logiciels. Unicode résout ces problèmes en définissant une page de codes pour toutes les écritures.



Créer des chaînes Unicode en Python est exactement aussi simple que de créer des chaînes normales :

>>>        u’Bonjour !’ u’Bonjour !’

Le ‘u’ minuscule devant les guillemets indique qu’on souhaite créer une chaîne Unicode. Si vous désirez placer des caractères spéciaux dans la chaîne, vous pouvez le faire en utilisant l’encodage Python Echappement-Unicode. L’exemple suivant montre comment faire :

>>>        u’Salut\u0020tout le monde !’ u’Salut tout le monde !’

La séquence d’échappement \u0020 indique qu’il faut insérer le caractère Unicode dont la valeur ordinale est 0x0020 (le caractère espace) à l’endroit indiqué.

Les autres caractères sont interprétés en utilisant leurs valeurs numériques respectives directement comme des nu-méros Unicode. Si vous avez des textes de chaînes en encodage standard Latin-1 qui est utilisé dans de nombreux pays occidentaux, vous trouverez pratique que les 256 premiers caractères de l’Unicode soient les mêmes que les 256 caractères de Latin-1.

Pour les experts, il y a aussi un mode brut exactement comme pour les chaînes normales. Vous devez insérer ’ur’ avant l’ouverture de la chaîne pour que Python utilise l’encodage Raw-Unicode-Escape (Échappement brut-Unicode). Il n’appliquera la conversion \uXXXX ci-dessus que s’il y a un nombre impair d’antislash avant le petit ’u’.

>>>        ur’Salut\u0020tout le monde !’ u’Salut tout le monde !’

>>>        ur’Salut\\u0020tout le monde !’ u’Salut\\\\u0020tout le monde !’

Le mode brut est extrèmement utile lorsqu’il s’agit de saisir de nombreux antislash, comme ça peut être nécessaire dans les expressions rationnelles.

En dehors de ces encodages standards, Python fournit tout un ensemble d’autres moyens de créer des chaînes Unicode sur la base d’un encodage connu.

La fonction unicode() intégrée fournit un accès à tous les codecs (COdeurs et DECodeurs) Unicode enregistrés. Certains des encodages les mieux connus que ces codecs peuvent convertir sont Latin-1, ASCII, UTF-8 et UTF-16. Les deux derniers sont des encodages à longueur variable qui permettent de stocker chaque caractères Unicode sur un ou plusieurs octets. L’encodage par défaut est normalement défini à ASCII, ce qui utilise les caractères de l’intervale 0 à 127 et rejette tout autre caractère avec une erreur. Quand une chaîne Unicode est affichée, écrite dans un fichier, ou convertie avec str(), la conversion survient en utilisant l’encodage par défaut.

>>>        u"abc"

u’abc’

>>>        str(u"abc")

’abc’

>>>        u"äöü"

u’\xe4\xf6\xfc’

>>>        str(u"äöü")

Traceback (most recent call last):

File "", line 1, in ?

UnicodeError: ASCII encoding error: ordinal not in range(128)

Pour convertir une chaîne Unicode vers une chaîne 8-bit en utilisant un encodage spécifique, les objets Unicode fournissent une méthode encode() qui prend un argument, le nom de l’encodage. Les noms en minuscules sont préférés pour les encodages.

>>>        u"äöü".encode(’utf-8’) ’\xc3\xa4\xc3\xb6\xc3\xbc’

Si vous avez des données dans un encodage spécifique et souhaitez produire une chaîne Unicode correspondante, vous pouvez utiliser la fonction unicode() avec le nom de l’encodage comme second argument.

>>>        unicode(’\xc3\xa4\xc3\xb6\xc3\xbc’, ’utf-8’) u’\xe4\xf6\xfc’

3.1.4      Listes

Python connaît un grand nombre de types de données composites, utilisées pour regrouper un ensemble de valeurs. La plus riche en possibilités est la liste, qui peut être écrite comme une liste de valeurs (éléments) entre crochets et séparés par des virgules. Les éléments d’une liste n’ont pas nécessairement le même type.

>>>        a = [’spam’, ’eggs’, 100, 1234]

>>>        a

[’spam’, ’eggs’, 100, 1234]

Comme les indices des chaînes, les indices des listes commencent à 0, et les listes peuvent être découpées, conca-ténées, et ainsi de suite :

>>>        a[0]

’spam’

>>>        a[3]

1234

>>>        a[-2]

100

>>>        a[1:-1] [’eggs’, 100]

>>>        a[:2] + [’bacon’, 2*2] [’spam’, ’eggs’, ’bacon’, 4]

>>>        3*a[:3] + [’Boe!’]

[’spam’, ’eggs’, 100, ’spam’, ’eggs’, 100, ’spam’, ’eggs’, 100, ’Boe!’]

A la différence des chaînes, qui sont non-modifiables, il est possible de changer les éléments individuels d’une liste :

>>> a

[’spam’, ’eggs’, 100, 1234]

>>>        a[2] = a[2] + 23

>>>        a

[’spam’, ’eggs’, 123, 1234]

L’affectation dans des tranches est aussi possible, et cela peut même changer la taille de la liste :

>>>        # Remplacer certains éléments:

... a[0:2] = [1, 12]

>>>        a

[1, 12, 123, 1234]

>>>        # En enlever certains:

... a[0:2] = []

>>>        a

[123, 1234]

>>> # En insérer

... a[1:1] = [’bletch’, ’xyzzy’]

>>> a

 [123, ’bletch’, ’xyzzy’, 1234]

>>>        a[:0] = a# Insère (une copie de) soi-même au début

>>>        a

[123, ’bletch’, ’xyzzy’, 1234, 123, ’bletch’, ’xyzzy’, 1234]

La fonction intégrée len() s’applique aussi aux listes :

>>>        len(a)

Il est possible d’emboîter des listes (créer des listes contenant d’autres listes), par exemple :

>>>        q = [2, 3]

>>>        p = [1, q, 4]

>>>        len(p)

>>>        p[1]

[2, 3]

>>>        p[1][0]

>>> p[1].append(’xtra’)              # See section 5.1

>>> p

[1, [2, 3, ’xtra’], 4]

>>> q

[2, 3, ’xtra’]

Notez que dans l’exemple précédent, p[1] et q se réfèrent réellement au même objet ! Nous reviendrons plus tard sur la sémantique des objets.

3.2          Premiers pas vers la programmation

Bien sûr, nous pouvons utiliser Python pour des tâches plus compliquées que d’ajouter deux et deux. Par exemple, nous pouvons écrire une sous-séquence de la suite de Fibonacci de la façon suivante :

>>> # Suite de Fibonacci

... # La somme de deux éléments définit le suivant

... a, b = 0, 1

>>> while b < 10:

...            print b

...            a, b = b, a+b

...

Cet exemple introduit plusieurs fonctionnalités nouvelles.

  • La première ligne contient une affectation multiple : les variables a et b prennent simultanément les nouvelles valeurs 0 et 1. Sur la dernière ligne l’affectation multiple est utilisée à nouveau, montrant que les expressions en partie droite sont d’abord toutes évaluées avant qu’aucune affectation ne se fasse.
  • La boucle while s’exécute tant que la condition (ici : b < 10) reste vraie. En Python, comme en C, toute valeur entière différente de zéro est vraie ; zéro est faux. La condition pourrait aussi être une chaîne ou une valeur de type liste, en fait n’importe quelle séquence ; n’importe quoi avec une longueur différente de zéro est vrai, les séquences vides correspondent à faux. Le test utilisé dans l’exemple est une simple comparaison. Les opérateurs de comparaison standard sont écrits de la même façon qu’en C : <, >, ==, <=, >= et !=.
  • Le corps de la boucle est indenté : l’indentation est le moyen par lequel Python regroupe les instruc-tions. Python ne fournit pas (encore) une fonction d’édition de ligne intelligente, donc vous devez insérer une tabulation ou un espace pour chaque ligne indentée. En pratique vous préparerez les saisies plus compliquées avec un éditeur de texte ; la plupart des éditeurs de texte ont une fonction d’auto-indentation. Lorsqu’une instruction composée est entrée en mode interactif, elle doit être suivie d’une ligne vide pour indiquer qu’elle est terminée (car l’interpréteur ne peut pas deviner si vous avez tapé la dernière ligne).
  • L’instruction print écrit la valeur de la ou des expressions qui lui sont données. Elle diffère de la simple écriture de l’expression (comme tout-à-l’heure dans les exemples de la calculatrice) dans la mesure où elle accepte plusieurs expressions et chaînes. Les chaînes sont imprimées sans quotes, et un espace est inséré entre les éléments, ce qui vous permet de les afficher dans un format plus sympathique, comme ceci :

>>>        i = 256*256

>>>        print ’La valeur de i est’, i

La valeur de i est 65536

Une virgule finale empêche le retour chariot après l’affichage :

>>>        a, b = 0, 1

>>>        while b < 1000:

...print b,

...a, b = b, a+b

...

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

Notez que l’interpréteur insère un retour chariot avant d’imprimer le prompt suivant si la ligne n’a pas été complétée.



119