Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
projets:ecole:python:1 [Le 20/10/2007, 09:59] gloubiboulga |
projets:ecole:python:1 [Le 11/09/2022, 13:17] (Version actuelle) moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ===== Sessions Python - 1 ===== | + | {{tag>programmation éduction python}} |
+ | |||
+ | ---- | ||
+ | |||
+ | ====== Cours sur Python ====== | ||
+ | |||
+ | |||
+ | ===== Session 1 ===== | ||
==== Introduction ==== | ==== Introduction ==== | ||
- | Python est né au début des années 1980, son père est Guido van Rossum. Sa version actuelle est la 2.5.1. | ||
- | Python est présent partout, vous l'utilisez tous les jours avec Ubuntu, red hat en use et abuse, de même que google (van Rossum est employé par Google). Vous avez aussi très certainement vu python en action avec Launchpad. | + | Python est né au début des années 1990, son père est Guido van Rossum. Les deux versions actuelles sont la 2.7.2 et la 3.2.2. |
+ | |||
+ | Python est présent partout, vous l'utilisez tous les jours avec Ubuntu, Red Hat en use et abuse, de même que Google (van Rossum est employé par Google). Vous avez aussi très certainement vu Python en action avec Launchpad. | ||
+ | |||
+ | Ce cours est une introduction au langage, en abordant certaines notions de base de la programmation. Le but est d'être clair pour les gens qui n'ont jamais programmé, donc certains « pythonismes » seront volontairement mis de côté. On approfondira dans d'autres sessions. | ||
- | Ce cours est une introduction au langage, en abordant certaines notions de base de la programmation. Le but est d'être clair pour les gens qui n'ont jamais programmé, donc certains "pythonismes" seront volontairement mis de côté. On approfondira dans d'autres sessions. | ||
==== L'interpréteur de commandes ==== | ==== L'interpréteur de commandes ==== | ||
- | Python est un langage "interprété", c'est à dire qu'un script ne nécessite pas de compilation pour être exécuté. Il existe un interpréteur qui permet d'interagir avec l'utilisateur. Pour le lancer, démarrez un terminal et lancez : | + | Python est un langage « interprété », c'est-à-dire qu'un script ne nécessite pas de compilation pour être exécuté. Il existe un interpréteur qui permet d'interagir avec l'utilisateur. Pour le lancer, démarrez un terminal et lancez : |
python | python | ||
- | Commençont par une utilisation très simple, en faisant faire du calcul à python : | + | Commençons par une utilisation très simple, en faisant faire du calcul à python : |
3*6 | 3*6 | ||
4-9 | 4-9 | ||
=== Notion de variable === | === Notion de variable === | ||
- | Les variables correspondent à des zones de stockage de valeurs. Elles sont désignées par des mots contenant les lettres minuscules, majuscules, chiffres et underscore "_". Une variable ne peut avoir un nom commençant par un chiffre. | ||
- | A une variable on assigne une valeur grâce à l'instruction "=", par exemple (dans l'interpréteur) : | + | Les variables correspondent à des zones de stockage de valeurs. Elles sont désignées par des mots contenant les lettres minuscules, majuscules, les chiffres et le tiret bas « _ »((En anglais : //underscore//.)). Une variable ne peut avoir un nom commençant par un chiffre. |
+ | |||
+ | A une variable on assigne une valeur grâce à l'instruction « = », par exemple (dans l'interpréteur) : | ||
a = 4 | a = 4 | ||
b = 5 | b = 5 | ||
Ligne 30: | Ligne 40: | ||
c | c | ||
- | La première et la troisème instruction sont identiques, mais le résultat diffère suivant l'initialisation. | + | La première et la troisième instruction sont identiques, mais le résultat diffère suivant l'initialisation. |
- | Une variable peut "dépendre" d'elle même : | + | Une variable peut « dépendre » d'elle même : |
a = 4 | a = 4 | ||
a = a + 1 | a = a + 1 | ||
a | a | ||
- | Attention à la casse ! 'A' est différent de 'a'. | + | Attention à la casse ! « A » est différent de « a ». |
=== Notion de type === | === Notion de type === | ||
- | On n'a utilisé que des entiers pour l'instant. python l'a remarqué : | + | On n'a utilisé que des entiers pour l'instant. Python l'a remarqué : |
a = 5 | a = 5 | ||
a / 2 | a / 2 | ||
- | On obtient 2, et pas 2.5. Pourquoi ? python arrondi tout simplement à l'entier inférieur car on lui a suggéré que a est un entier. Comment faire alors ? Préciser à python que a est un "flottant" : | + | b = -5 |
+ | b / 2 | ||
+ | On obtient 2, et pas 2.5 pour a, et -3 et pas -2.5 pour b. Pourquoi ? python arrondi tout simplement à l'entier inférieur car on lui a suggéré que a est un entier. | ||
+ | <note important>En Python 3, le résultat est bien 2.5 pour a et -2.5 pour b</note> Comment faire alors ? Préciser à python que a est un « flottant » : | ||
a = 5.0 | a = 5.0 | ||
a / 2 | a / 2 | ||
- | Un autre type très courant est la "chaîne de caractère" (string en anglais). Elle est définie en plaçant du texte entre "" ou entre '' : | + | Un autre type très courant est la « chaine de caractère » (//string// en anglais). Elle est définie en plaçant du texte entre « " » ou entre « ' » : |
une_chaine = "Je suis une chaine." | une_chaine = "Je suis une chaine." | ||
une_chaine | une_chaine | ||
- | On peut 'ajouter' des chaînes, on appelle ça la concaténation: | + | On peut « ajouter » des chaines, on appelle ça la concaténation : |
a = "Bonjour " | a = "Bonjour " | ||
b = "Monde !" | b = "Monde !" | ||
Ligne 61: | Ligne 74: | ||
b = "1" | b = "1" | ||
b | b | ||
- | Notez la différence entre les 2 résultats. La première fois python affiche un entier, la seconde une chaîne de caractères (entre ''). | + | Notez la différence entre les 2 résultats. La première fois python affiche un entier, la seconde une chaine de caractères (entre « ' »). |
a+b | a+b | ||
- | Une erreur résulte de ce calcul, puisque a et b sont de type différents. | + | |
+ | Une erreur résulte de ce calcul, puisque //a// et //b// sont de type différents. | ||
Ligne 70: | Ligne 85: | ||
Un des intérêts d'un programme est de pouvoir interagir avec l'utilisateur. On va voir pour ça deux instructions et comment les utiliser : | Un des intérêts d'un programme est de pouvoir interagir avec l'utilisateur. On va voir pour ça deux instructions et comment les utiliser : | ||
- | * raw_input() permet de demander à l'utilisateur de saisir un texte (texte au sens large, on commencera avec des nombres) ; | + | * ''raw_input()'' permet de demander à l'utilisateur de saisir un texte (texte au sens large, on commencera avec des nombres) ; |
- | * print permet d'afficher du texte. | + | * ''print("texte")'' permet d'afficher du texte. |
Ce sont deux fonctions, qui utilisent un ou plusieurs arguments (des données qu'elles traiteront). Nous aborderons les fonctions un peu plus loin. | Ce sont deux fonctions, qui utilisent un ou plusieurs arguments (des données qu'elles traiteront). Nous aborderons les fonctions un peu plus loin. | ||
- | raw_input() s'utilise de cette manière : | + | ''raw_input()'' s'utilise de cette manière : |
resultat = raw_input("Veuillez saisir quelque chose : ") | resultat = raw_input("Veuillez saisir quelque chose : ") | ||
- | La chaîne de caractère sera affichée à l'écran, et le curseur attendra que l'utilisateur saisisse du text puis <entrée>. Ce qui a été saisi sera alors assigné à la variable ''résultat'' (en tant que chaîne de caractère). | + | |
+ | La chaine de caractère sera affichée à l'écran, et le curseur attendra que l'utilisateur saisisse du texte puis « Entrée ». Ce qui a été saisi sera alors assigné à la variable ''résultat'' (en tant que chaine de caractère). | ||
Pour ensuite afficher ce texte on peut utiliser : | Pour ensuite afficher ce texte on peut utiliser : | ||
+ | |||
print "Du texte qui ne change pas et autre chose :", resultat | print "Du texte qui ne change pas et autre chose :", resultat | ||
+ | |||
Les éléments à afficher sont séparés par une virgule, qui apparaitre comme un simple espace lors de l'exécution. | Les éléments à afficher sont séparés par une virgule, qui apparaitre comme un simple espace lors de l'exécution. | ||
- | "Du texte qui ne change pas et autre chose :" et ''resultat'' sont deux arguments de la fonction ''print''. | + | ''"Du texte qui ne change pas et autre chose :"'' et ''resultat'' sont deux arguments de la fonction ''print''. |
Regardons maintenant cet exemple : | Regardons maintenant cet exemple : | ||
- | #!/usr/bin/env python | + | <code python> |
- | # -*- coding: UTF8 -*- | + | #!/usr/bin/env python |
- | + | # -*- coding: UTF8 -*- | |
- | # On demande le nom | + | |
- | nom = raw_input("Quel est votre nom ? ") | + | # On demande le nom |
- | + | nom = raw_input("Quel est votre nom ? ") | |
- | # On demande le prénom | + | |
- | prenom = raw_input("Quel est votre prénom ? ") | + | # On demande le prénom |
- | + | prenom = raw_input("Quel est votre prénom ? ") | |
- | # On affiche le tout | + | |
- | print "bonjour", prenom, nom | + | # On affiche le tout |
+ | print ("bonjour", prenom, nom) | ||
+ | </code> | ||
Quelques petites remarques : | Quelques petites remarques : | ||
- | * les lignes qui commencent par '#' ne sont pas lues par python, ce sont des lignes de commentaires. Elle sont utiles pour détailler certains éléments de votre script ; | + | * les lignes qui commencent par « # » ne sont pas lues par Python, ce sont des lignes de commentaires. Elle sont utiles pour détailler certains éléments de votre script ; |
- | * la première ligne est un 'shebang', qui permet à votre shell que savoir avec quel programme lancer votre script lorsqu'il est exécutable (./exemple1.py) ; | + | * la première ligne est un « shebang », qui permet à votre shell que savoir avec quel programme lancer votre script lorsqu'il est exécutable (**./exemple1.py**) ; |
- | * la seconde définit l'encodage, c'est essentiel pour nous francophones qui utilisont des accents (python n'aime pas vraiment les accents sans encodage précisé). | + | * la seconde définit l'encodage, c'est essentiel pour nous francophones qui utilisont des accents (Python n'aime pas vraiment les accents sans encodage précisé). |
+ | |||
+ | Copiez ce script dans un fichier « exemple.py » et exécutez : | ||
- | Copiez ce script dans un fichier ''exemple.py'' et exécutez : | ||
python exemple.py | python exemple.py | ||
- | En guise d'exercice, ecrivez un script qui demande l'âge de 2 personnes, et qui affiche la différence d'âge. Rappelez vous que raw_input() récupère une chaîne de caractère, qu'il faudrait transformer en entier pour faire le calcul. La fonction ''int'' qui prend en argument une chaine de caratère, et retourne sa conversion en entier. | + | En guise d'exercice, écrivez un script qui demande l'âge de 2 personnes, et qui affiche la différence d'âge. Rappelez vous que //raw_input()// récupère une chaine de caractère, qu'il faudrait transformer en entier pour faire le calcul. La fonction //int// qui prend en argument une chaine de caractère, et retourne sa conversion en entier. |
=== Conditions === | === Conditions === | ||
Pour que le script réagisse suivant ce que l'utilisateur à saisi, on utilise des instructions de contrôle, ''if'' et ''else''. Elle s'utilisent comme ceci : | Pour que le script réagisse suivant ce que l'utilisateur à saisi, on utilise des instructions de contrôle, ''if'' et ''else''. Elle s'utilisent comme ceci : | ||
+ | <code python> | ||
if (une_condition_est_vraie): | if (une_condition_est_vraie): | ||
# on execute | # on execute | ||
# une série | # une série | ||
# d'instructions | # d'instructions | ||
- | else | + | else: |
# sinon | # sinon | ||
# on fait autre chose | # on fait autre chose | ||
+ | </code> | ||
La syntaxe est (je pense) assez claire, mais elle amène quelques nouvelles notions. | La syntaxe est (je pense) assez claire, mais elle amène quelques nouvelles notions. | ||
== Les booléens == | == Les booléens == | ||
- | Une variable booléennes est une variable qui n'accepte que 2 valeurs : vrai ou faux (True ou False en python). On peut étendre ceci aux nombres et dire : si c'est 0 c'est faux, sinon (dans tous les autres cas), c'est vrai. | + | |
+ | Une variable booléennes est une variable qui n'accepte que 2 valeurs : vrai ou faux (''True'' ou ''False'' en Python). On peut étendre ceci aux nombres et dire : si c'est 0 c'est faux, sinon (dans tous les autres cas), c'est vrai. | ||
"une_condition_est_vraie" va donc être une expression qui sera soit vraie (ou non nulle), soit fausse (nulle). Si elle est vraie, on exécute la première partie de la condition (juste après ''if'', sinon la deuxième (ce qui suit ''else''). | "une_condition_est_vraie" va donc être une expression qui sera soit vraie (ou non nulle), soit fausse (nulle). Si elle est vraie, on exécute la première partie de la condition (juste après ''if'', sinon la deuxième (ce qui suit ''else''). | ||
== L'indentation == | == L'indentation == | ||
- | Pour connaître toutes les instructions à exécuter si la condition est vraie, on définit un "bloc". Ce bloc est défini par une indentation (<tab> en général) : | + | Pour connaître toutes les instructions à exécuter si la condition est vraie, on définit un "bloc". Ce bloc est défini par une indentation (<tab> en général) : |
# on execute | # on execute | ||
# une série | # une série | ||
Ligne 135: | Ligne 160: | ||
b = 2 | b = 2 | ||
if (a > b): | if (a > b): | ||
- | print "a>b" | + | print ("a est supérieur à b") |
else: | else: | ||
- | print "b>a" | + | print ("b est supérieur ou égal à a") |
Quel sera le résultat du script ? | Quel sera le résultat du script ? | ||
Ligne 151: | Ligne 176: | ||
Vous pouvez maintenant reprendre l'exercice de tout à l'heure et systématiquement afficher un résultat positif. | Vous pouvez maintenant reprendre l'exercice de tout à l'heure et systématiquement afficher un résultat positif. | ||
+ | |||
+ | |||
+ | ==== Listes ==== | ||
+ | |||
+ | === Définir une liste === | ||
+ | Utiliser une variable par élément à saisir, ça devient très vite ingérable (imaginez ce que ça donnerait pour gérer une liste de 10000 clients). Python possède un autre type de données, les listes. | ||
+ | Il s'agit en fait d'un "tas" de variables groupées en une seule. Par exemple (pour notre liste de choses à faire) on pourrait avoir : | ||
+ | a = "coup de fil à maman" | ||
+ | b = "acheter du café" | ||
+ | c = "upgrader vers gutsy" | ||
+ | A chaque nouvel élément il faudrait ajouter une variable, c'est ingérable. On peut alors utiliser : | ||
+ | todo = ["coup de fil à maman", "acheter du café", "upgrader vers gutsy"] | ||
+ | Notez que si l'on a déjà initialisé a, b et c on peut aussi utiliser : | ||
+ | todo = [a, b, c] | ||
+ | |||
+ | On n'a plus qu'une seule variable, qui contient un ensemble cohérent d'éléments, et qui peut bien entendu être modifiée. | ||
+ | |||
+ | Une liste est ce qu'on appelle un 'objet' (comme n'importe quel élément en python, mais peu importe pour le moment). Et à un objet correspondent des 'méthodes'. Ces méthodes sont des actions que l'on peut appliquer à l'objet. Par exemple, on peut ajouter un élément à notre liste : | ||
+ | todo.append("préparer le cours python sur l'orienté objet") | ||
+ | Dans l'interpréteur, affichez maintenant todo: | ||
+ | todo | ||
+ | Le nouvel élément a bien été ajouté à notre liste. | ||
+ | |||
+ | ''todo'' est l'objet auquel on s'intéresse, append() la méthode. ATTENTION, todo.method != todo.method(). todo.method correspond à la suite d'instruction qui définissent les actions de la méthode, alors que todo.method() correspond au fait d'appliquer ces instructions. | ||
+ | Vous noterez que 'todo' a été modifié sans que l'on ait besoin de lui réassigner une nouvelle valeur ; on n'a pas eu besoin de faire : | ||
+ | todo = todo.methode() | ||
+ | |||
+ | === Accéder aux éléments === | ||
+ | On accède aux éléments d'une liste par leur indice (de 0 à (nombre_d_elements - 1)). Le premier élément est donc accessible par : | ||
+ | todo[0] | ||
+ | Le nombre d'éléments contenus dans une liste est donné par len(liste) : | ||
+ | nb = len(todo) | ||
+ | Donc le dernier élément de la liste est : | ||
+ | todo[nb - 1] | ||
+ | |||
+ | Si l'on veut agir sur tous les éléments d'une liste, on utilise l'instruction ''for'' : | ||
+ | for item in todo: | ||
+ | # on commence un bloc d'instructions | ||
+ | # avec une nouvelle indentation | ||
+ | # 'item' est une variable à laquelle on assigne | ||
+ | # la valeur de l'élément courant du tableau | ||
+ | |||
+ | Pour afficher un élément du tableau par ligne on peut donc utiliser : | ||
+ | for untodo in todo: | ||
+ | print " - %s" % untodo | ||
+ | |||
+ | Notez au passage l'utilisation particulière de ''print''. ''%s'' sera remplacé par la valeur de ''untodo'' lors de l'affichage. Notez aussi que la variable ''untodo'' aurait pu prendre n'importe quel nom (elle s'appelait ''item'' un peu plus haut). | ||
+ | |||
+ | |||
+ | ==== Fonctions - introduction ==== | ||
+ | On a parlé tout à l'heure des méthodes pour un objet. Le terme 'méthode' est lié à la programmation orientée objet, un terme plus générique étant 'fonction'. | ||
+ | |||
+ | L'intérêt d'une fonction est d'éviter des répétitions du même code. Par exemple, votre programme va appliquer la même mise en page à du texte à plusieurs reprises, il est alors intéressant d'utiliser une fonction. | ||
+ | Cette fonction pourrait être définie comme suit : | ||
+ | <code python> | ||
+ | def list_print(texte): | ||
+ | n_texte = " - %s - " % texte | ||
+ | return n_texte | ||
+ | </code> | ||
+ | * ''def'' précise à python que l'on débute la description d'une fonction ; | ||
+ | * ''texte'' est un paramètre ; | ||
+ | * ''return'' permet de mettre fin à la fonction, et de renvoyer le contenu d'une variable. | ||
+ | |||
+ | Notez l'indentation pour la définition de bloc. | ||
+ | |||
+ | Une fonction ne doit pas forcément retourner quelque chose, elle peut par exemple juste ecrire du texte. | ||
+ | |||
+ | Dans un script, cette fonction pourra être appelée comme ceci : | ||
+ | txt1 = "hello" | ||
+ | txt2 = "bye" | ||
+ | ntxt = (list_print(txt1), list_print(txt2)) | ||
+ | print """%s | ||
+ | %s | ||
+ | """ % (ntxt[0], ntxt[1]) | ||
+ | |||
+ | A noter : | ||
+ | * l'utilisation des triples " pour une chaîne de caractères qui s'affichera sur plusieurs lignes ; | ||
+ | * l'utilisation de "%s %s" % (a, b) : si l'on a plus de 2 chaînes à remplacer, on les met entre parenthèses. | ||