-=(the3fold)=-

New Generation

Python par l'exemple

Le principe de ce cours est de permettre de découvrir python par une suite d'exemple de complexité croissante. Si vous débutez en python, je vous conseille de recopier les exemples un a un puis de les exécuter et enfin, d'essayer de comprendre comment ils fonctionnent. Surtout, ne faites pas un simple copier-coller, vous rateriez des choses importantes. Il vaut mieux recopier les exemples afin de bien comprendre chaque ligne.
La page étant un peu longue, voici ce que vous trouverez, avec des raccourcis pour faciliter la navigation :

Les prérequis pour bien commencer

Afin de pouvoir recopier et exécuter les exemples qui suivent, il faut savoir comment faire l'un et l'autre. Pour recopier les exercices, il vous faudra utiliser un éditeur de texte. Attention, pas un traitement de texte, qui est un logiciel permettant d'éditer mais aussi de formater du texte (c'est à dire de changer la police, le style, l'alignement, etc ...) mais un éditeur de texte. Il en existe plusieurs sous linux qui sont très bons. Sous KDE, vous pouvez utiliser kwrite ou kate. Sous gnome, il existe gedit. En ligne de commande, vous pouvez utiliser nano. Si vous voulez des éditeurs très efficaces mais qui nécessitent un (long) apprentissage avant de réussir à bien les utiliser, vous pouvez vous tourner vers vim (tapez vimtutor dans une console pour être guidé dans vos premiers pas) ou emacs. Dans l'un de ces éditeurs, tapez le texte suivant :

print("Salut à tous !")

puis sauvegardez le résultat dans un fichier nommé ex0.py (vous pouvez vous placer dans un répertoire que vous dédierez à votre apprentissage du python). Lancez alors une ligne de commande (ou console) et allez dans le répertoire dans lequel vous avez sauvegardé votre fichier. Par exemple, si vous avez sauvegardé votre fichier dans un répertoire nommé python dans votre répertoire personnel /home/toto, executez dans votre console :

cd /home/toto/python
python ex0.py

Bien sûr, pour que cela fonctionne, il faut que python soit installé. Si vous avez un message d'erreur vous disant que la commande python n'existe pas, c'est que ce n'est pas le cas. Utilisez alors le gestionnaire de paquet de votre distribution pour l'installer.

Une fois que vous avez réussi à faire afficher "Salut à tous !" à votre programme, vous pouvez passer à la suite.

Les premiers pas

Exemple 1 : Ecrire

print("Salut à tous !")
print("Comment allez vous ?")
print('Les chaînes de caractères peuvent être entourées avec le caractère "')
print("Ou avec le caractère '")
print("On peut quand même y inclure des ' et des \"")
print('Oui, on peut y inclure des \' et des "')
print("Et on peut écrire des \\ aussi")
print(""" On peut faire des textes
sur plusieurs lignes
contenant des ' et des ".""")
print("La fonction print ", "peut afficher plusieurs ", "chaînes de caractère ", "à la suite")

Vous avez déjà vu dans les prérequis que la fonction print permet d'écrire du texte. On voit ici quelques subtilités des chaînes de caractère : elle peuvent être entourées de guillemets simples ou doubles. Il faut bien sûr utiliser le même type de guillemet à la fin qu'au début. On peut placer des guillemets doubles dans une chaîne de caractère entourée de guillemets simples et inversement. Si l'on désire utiliser des guillemets simples (resp. doubles) dans une chaîne entourée de guillemets simples (resp. doubles) il faut les échapper, c'est à dire les faire précéder du symbole \. Pour afficher un \, il faut lui aussi le précéder d'un \. Enfin, on peut créer des chaînes de caractères de plusieurs lignes en utilisant 3 guillemets (simples ou doubles).

La fonction print peut prendre un nombre arbitraire de paramètres. Les paramètres sont séparés par des virgules. La fonction print affiche tous ses paramètres les uns à la suite des autres.

Exemple 2 : Commenter

# Ce programme affiche une simple phrase
print("Salut à tous !") # Voici la ligne qui affiche la phrase en question

Il est souvent utile d'expliquer ce que le code fait pour que les autres personnes qui vont devoir le lire comprennent plus facilement ce qu'il fait, ou pour soi-même quand on relit son code quelques temps après l'avoir écrire. Cela permet aussi de se souvenir pourquoi on a choisi une solution et pas une autre. Celà se fait grace aux commentaires. En python, un commentaire commence par le symbole # et se termine à la fin de la ligne. Le commentaire n'a aucun effet sur le programme.

Exemple 3 : Lire

prenom = input("Bonjour, comment t'appelles tu ? ")
print("Enchanté ", prenom, " je suis content de faire ta connaissance.")

La fonction input permet à la fois d'afficher un texte et de demander à l'utilisateur du programme d'en entrer un. Si aucune chaîne n'est passée en paramètre, la fonction input se contentera d'attendre que l'utilisateur entre quelque chose. Ici, ce que l'utilisateur rentre (normalement son prénom) est stocké dans une variable nommée prenom et est réutilisé dans la fonction print pour être affiché.

Exemple 4 : Compter

print("Une première opération : ", 15 + 30 / 6)
print("Puis une autre : ", 100 / (25 * 3))

print("Est ce que 3 + 2 est plus petit que 7 - 4 ?")
print(3 + 2 < 7 - 4)

print("Plus petit ou égal alors ?")
print(3 + 2 <= 7 - 4)

print("Plus grand donc ?")
print(3 + 2 > 7 - 4)

print("Ah, et du coup plus grand ou égal !")
print(3 + 2 >= 7 - 4)

print("Mais pas égal")
print(3 + 2 == 7 - 4)

print("Donc différent")
print(3 + 2 != 7 - 4)

Nous avons vu que python permettait de manipuler des chaînes de caractères, mais il permet aussi de manipuler des nombres. Les opérations classiques sont disponibles : additions, soustractions, multiplications, divisions. Il est aussi possible d'utiliser des parenthèses pour préciser l'ordre dans lequel les opérations sont effectuées. Enfin, des opérateurs de comparaison sont disponibles. Leur résultat est un booléen, c'est à dire la valeur True (vrai) ou False (faux). Ainsi, 3 < 5 renverra True car 3 est plus petit que 5. Par contre, 3 > 5 renverra False car 3 n'est pas plus grand que 5.

Exemple 5 : Variables

vitesse_autoroute=130
vitesse_route=90
distance_nice_paris=1000

print("Durée de Nice-Paris par route : ", distance_nice_paris / vitesse_route)
print("Durée de Nice-Paris par autoroute : ", distance_nice_paris / vitesse_autoroute)

entier_5=5
chaine_5="5"

print("Est-ce que 5 == \"5\" ? ", entier_5 == chaine_5)
print("Est-ce que 5 == int(\"5\") ? ", entier_5 == int(chaine_5))
print("Est-ce que str(5) == \"5\" ? ", str(entier_5) == chaine_5)

Nous avons déjà utilisé une variable lorsque nous avons rencontré la fonction input. Nous avons en effet stocké son résultat dans une variable que nous avons appelé prénom. Python est un langage faiblement typé. C'est à dire que l'on a pas besoin de préciser si une variable va contenir une chaîne de caractères, un nombre, un booléen ... et que l'on peut change le type de ce qu'elle contient à chaque affectation. Mais elle a quand mêmem un type, c'est pourquoi "5" est différent de 5, car le premier est une chaìne de caractères tandis que le second est un entier. La conversion de l'un à l'autre est cependant possible à l'aide de fonctions dédiées.

Exemple 6 : Fonctions

def sont_freres(nom1, nom2) :
    print(nom1, "et", nom2, " sont frères.")
    print(nom1, "est l'ainé")

def multiply_and_add(a, b, c) :
    return a*b+c

sont_freres("Gregory", "Antoine")
sont_freres("Jeremy", "Mickael")
sont_freres("Benoit", "Luc")
sont_freres("Laurent", "Guy")

print(multiply_and_add(1, 2, 3))
print(multiply_and_add(4, 5, 6))
print(multiply_and_add(7, 8, 9))

Nous avons défini, à l'aide du mot clef def, la fonction sont_freres qui prend deux arguments : nom1 et nom2. L'avantage est que nous pouvons maintenant l'appeler autant de fois que nous voulons. Il y a moins de risque d'erreurs car il n'est pas necessaire de retaper tout le texte pour chaque paire de freres. Les fonctions sont très pratique pour réutiliser le code mais aussi pour l'organiser. Une fonction peut retourner une valeur à l'aide du mot-clef return. C'est le cas de multiply_and_add. C'est aussi le cas de la fonction input que nous avions vu précédemment.

Exemple 7 : Si alors

age = input("Quel age avez vous ?")
if age > 18:
    print("Vous ètes majeur !")
elif age == 18:
    print("Vous ètes tout juste majeur !")
else:
    print("Vous ètes mineur !")
    if age < 10:
        print("Vous ètes très loin d'ètre majeur !")
    print("Vous n'êtes pas autorisé à rentrer.")
if age > 18 and age < 25:
    print("C'est la meilleur période de la vie !")
if age < 0 or age > 120:
    print("Je ne sais pas pourquoi mais j'ai du mal à vous croire !")
print("Au revoir")

Le mot-clef if permet d'effectuer une opération de manière conditionnelle. Si la condition spécifiée après le if est vraie, le bloc de code qui suit est executé. Notez que le bloc qui est executé est celui qui est indenté, c'est à dire celui qui est précé d'espaces. Contrairement à d'autres langages, l'indentation en python ne sert pas seulement à "faire joli" mais fais partie intégrante du code. Les deux derniers if montrent que l'on peut combiner des conditions. Si a et b sont deux conditions, la condition a and b ne sera vraie que si a et b sont vraies toutes les deux. La condition a or b sera vraie si a est vraie ou b est vraie (ou les deux).

Exemple 8 : Boucles

reponse=""
while reponse != "oui":
    reponse = input("Ai-je raison ?")
    if reponse == "je refuse de répondre":
        break

for i in range(0, 5):
    print("J'ai raison ! (au fait, i vaut ", i)

Ce programme énèrvent qui veut absolument avoir raison illustre le principe de boucle. La première boucle est de type while (tant que). Le contenu de la boucle (c'est à dire le bloc de code qui le suit) s'execute tant que la condition spécifiée après le while est vraie. La seconde boucle est de type for ... in (pour ... parmi). Elle s'execute pour chaque élément de la liste qui se trouve après le mot-clef in. La fonction range(x, y) renvoit une liste comprenant les valeurs de x (comprise) à y (non comprise). La variable i va donc prendre successivement les valeurs 0, 1, 2, 3 puis 4. Nous verrons comment fonctionne les listes plus en détail un peu plus loin.

Exemple 9 : Listes

maListe = [ "a", "toto", 3, 4.5 ]
print(maListe[0])
print(maListe[3])
print(maListe[-1])
print(maListe[-4])
print(maListe[1:3])
print(maListe[:3])
print(maListe[1:])
maListe.append("titi")
print(maListe)
maListe.insert(2, "nouveau")
print(maListe)
maListe.extend(["une", "autre", "liste"])
print(maListe)
print("toto" in maListe)
print(maListe.index("toto"))
maListe.remove("toto")
print(maListe)

Cet exemple défini une liste composée de 4 éléments. Les crochets permettent d'accéder aux éléments par leur index. L'index commence à zéro et va donc jusqu'à n-1 pour une liste de taille n (ici 3 pour une liste de taille 4). Les index négatifs de -1 à -n permettent d'accéder aux éléments depuis le dernier au premier. Il est également possible d'accéder à des sous-listes en utilisant deux indexs séparés par :. Un index non donné correspond à l'extrémité de la liste.

La méthode append permet d'ajouter un élément à la liste. Une méthode est une fonction qui doit ètre appelée sur un objet et a un effet dessus. La méthode insert permet d'insérer un élément (le deuxième argument) à l'index donné en premier argument. La méthode extend permet de concatener la liste passée en paramètre à la liste sur laquelle la méthode est appelée. Le mot-clef in renvoit True si l'élément est dans la liste, False sinon. La méthode index renvoit l'index du premier élément ayant la valeur donnée en argument. La méthode remove supprime le premier élément aynat la valeur donnée en argument.

Exemple 10 : Hasard

import random

print("Un nombre au hasard entre 0 et 1 :", random.random())
print("Un nombre au hasard entre 100 et 200 :", random.randint(100, 200))

Pour le dernier exemple de cette partie, nous voyons comment générere des nombres aléatoires. Cette fonctionnalité est disponible grace au module random que l'on déclare vouloir utiliser à l'aide du mot-clef import. Une fois le module importé, on peut utiliser les fonctions qu'il fournit (ici random et randint) en les préfixant du nom du module suivi d'un point.

A vous de jouer !

Vous voilà maintenant armé pour vous attaquer à de vrais programmes. Voici une petite liste pour vous inspirer. Cependant, n'hésitez pas à utiliser votre inspiration pour l'étendre ! Pour ne pas gacher le plaisir, je ne fourni pas les solutions de ces exercices mais si vous bloquez, n'hésitez pas à me demander par le biais du formulaire de contact ou dans le forum !

Devin

Ecrivez un programme qui choisit un nombre au hasard et vous demande de le deviner en un nombre de coups limité. A chaque tentative, le programme vous indique si le nombre proposé est plus grand ou plus petit que celui recherché ou si vous avez gagné. Au bout du nombre de tentatives maximum autorisé, le programme vous indique que vous avez perdu.

Pour aller plus loin :

Pendu

Ecrivez un programme qui choisit un mot parmi une liste qu'il possède et propose de le deviner lettre par lettre. La longueur du mot est donnée, materialisée par un symbole correspondant aux lettres non-identifiées. A chaque essai, l'utilisateur donne une lettre. Si elle est contenu dans le mot, la lettre est affichée aux positions correspondantes. L'utilisateur n'a droit qu'à un nombre prédéfini d'erreurs.

Pour aller plus loin :

Calcul mental

Ecrivez un programme qui permet à l'utilisateur de choisir quelle opération il souhaite travailler (addition, soustraction, multiplication, division). Selon le choix, des opérations luis sont proposées en boucle jusqu'à ce qu'il tape un mot clef pour retourner au menu (par exemple "menu" ou "quitter"). Pour chaque opération, le programme signale à l'utilisateur si la réponse est bonne ou non (dans ce cas il peut aussi afficher la solution). Faire attention à la division qui est un cas un peu plus complexe.

Pour aller plus loin :

Poster un commentaire