tite fractale

Prise en main de Python avec Idle

1. Introduction : Qu’est-ce qu’un algorithme ?

Exemples de problèmes pouvant être résolus à l’aide d’algorithmes :

Les ordinateurs, suivant le langage qu’on utilise, ont besoin d’instructions très détaillées pour atteindre l’objectif qu’on leur donne.

Les algorithmes de tri ne sont pas que des supports d’exercices, ils servent tous les jours dans la vraie vie des milliards et des milliards de fois. Autant qu’ils soient bien conçus.

2. Un premier programme

Attention ! Seuls des élèves très expérimentés arriveront au bout de cette activité en une heure. Il est intéressant quand même d’arriver au moins à l’exercice du « point final ».

Écrivons un programme simple qui utilise un maximum de notions : un lanceur de dés.

2.1. Fenêtres, calcul, affichage

2.1.1. Fenêtre interactive

Les trois chevrons >>> forment ce que l’on appelle le « prompt » ou « invite ». C’est le signe distinctif du mode interactif de Python, très pratique pour tester rapidement un bout de code. S’ils n’apparaissent pas, essayer « Run, Python Shell ». Tapons notre première ligne de code :

>>> 2+2
4
>>> 2+2  # ce qui suit le dièse n’est pas interprété (commentaire)
4

En mode interactif, un résultat est toujours affiché (sauf s’il vaut None).

Vous pouvez utiliser la flèche du haut du curseur pour atteindre une ligne que vous voulez recopier. Une fois arrivé à la ligne qui vous intéresse, un appui sur Entrée recopie la ligne au niveau de l’invite >>>.

2.1.2. Fenêtre script

Si vous n’avez pas de fenêtre de script (sans prompt), ouvrez-en une en faisant « File, New Window ».

Tapez 2+2 dans cette nouvelle fenêtre, enregistrez votre programme sous le nom prise_en_main_python.py (n’oubliez pas l’extension) et faîtes « Run, Run Module » (ou directement F5). Que se passe-t-il ?

RESTART et un nouveau prompt sont affichés dans la partie interactive, mais c’est tout.

Pour obtenir l’affichage du résultat, il faut explicitement le demander (contrairement à la fenêtre interactive), et ceci avec la commande print. C’est toute la différence entre une expression et une instruction.

La commande print sert à afficher différents types de choses : nombres, texte, variables… Remplacez 2+2 par print(2+2) et lancez votre programme (F5). Le résultat devrait s’afficher dans la fenêtre interactive.

2.2. Afficher un message

En informatique, le texte est souvent appelé « chaîne de caractères ». En Python, on les délimite avec des guillemets simples ' ou doubles ".

Remplacez print(2+2) par print("un mot que vous aurez choisi") et testez votre programme.

Options, Configure IDLE…, General, cocher No Prompt.

Expliquez le résultat de print("2+2").

Quand Python rencontre un guillemet, il attend sagement le deuxième et considère ce qu’il y a entre les deux comme du simple texte, sans rien à interpréter.

2.3. Afficher 10 fois un même message

Certains langages nécessitent de déclarer les variables. Pas Python. On ne peut pas dire que ce soit mieux ou moins bien, c’est juste différent. Les boucles POUR ont aussi un aspect un peu spécial avec Python. Vous êtes peut-être habitué à donner une valeur initiale et une valeur finale, ou une valeur initiale, un incrément et une valeur finale. Avec Python, la variable parcourt une liste. Chaque valeur de la liste correspond à un tour de boucle.

Pour ne pas avoir à taper les listes les plus communes, comme les listes d’entiers, on utilise la fonction range().

>>> range(10)        # pour Python 2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(10))  # pour forcer Python 3 à détailler la liste
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Le comportement de range semble étrange, mais il est très cohérent. On peut se demander pour quelles raisons la liste créée est « décalée ».

En informatique, on commence souvent à compter à partir de 0, et la liste créée a bien 10 éléments.

Notre boucle s’écrira :

for i in range(10):  # valable pour Python 2 et 3
    print("un mot que vous aurez choisi")

Notez que pour indiquer à Python le bloc de code qui sera répété, il suffit de le décaler avec un nombre fixe d’espaces (traditionnellement 4). On dira « indenter » le bloc.

Tester dans la fenêtre de script. Pour tester en mode interactif, il faudra taper une fois de plus sur Entrée.

>>> for i in range(10):  # valable pour Python 2 et 3
...     print("un mot que vous aurez choisi")
... # taper encore une fois sur Entrée

2.4. Ajouter le numéro de l’itération au message

La fonction print accepte plusieurs arguments et les affichera les uns à la suite des autres sur une même ligne, même si les arguments sont de nature différente. Notez qu’en Python 2, il faut enlever les parenthèses.

>>> print "deux et deux font", 2+2   # Python 2
deux et deux font 4
>>> print("deux et deux font", 2+2)  # Python 3
deux et deux font 4

Exercice :

À partir de la boucle précédente, obtenir le résultat suivant :

bonjour n° 1 .
bonjour n° 2 .
…
bonjour n° 10 .     (notez le point final sur chaque ligne)
Il peut être intéressant de remarquer quelles parties des lignes sont fixes et quelles parties changent d’une ligne à une autre. Ainsi on sait de combien d’arguments à la commande print on aura besoin.

2.5. Le point final

On veut obtenir :

bonjour n° 1 ,
…
bonjour n° 9 ,
bonjour n° 10 .

2.5.1. Installation de l’aiguillage

On recopie la ligne contenant le print, puis on insère if le_test : avant la première et else : avant la deuxième. N’oubliez pas l’indentation du bloc du if et du bloc du else : en cumulant avec l’indentation du for, il faut décaler les print de huit espaces !

Votre programme devra ressembler à ça (le_test sera précisé dans la prochaine section) :

for i in range(10):
    if le_test :  # attention, il faudra remplacer "le_test" pour que ça fonctionne
        print("bonjour n°", i+1, ",")
    else:
        print("bonjour n°", i+1, ".")

2.5.2. Choix de la condition le_test

Il faut maintenant dire à quelle condition le premier print sera exécuté plutôt que le second, en remplaçant le_test par une comparaison.

Les tests d’égalité ou d’inégalité s’écrivent : ==, !=, <, >, <=, >=.

>>> 0 == 0
True
>>> 0 == 1
False
>>> 0 < 0
False
>>> 0 < 1
True
>>> 0 != 1
True

Trouver la condition le_test et vérifier votre programme.

Parmi les conditions suivantes, une ou plusieurs conviennent :
  • i >= 10
  • i == 10
  • i < 10
  • i != 10
  • i != 9
  • i >= 9
  • i < 9
  • i > 0
  • i == 0

3. Une affaire de style

Ce TP suit parfois celui de prise en main d’Algobox, il essaie d’imiter le travail fait dans le style Algobox. Mais ce style n’est pas « pythonique ». En Python, nous aurions pu faire de deux façons.

La première en une seule ligne (c’est ce que l’on appelle parfois un one-liner, dont les Pythonistes sont friands), rapide à taper mais moins lisible et moins évolutive :

print(',\n'.join(["bonjour n°%d" % (i+1) for i in range(10)]) + '.')

La deuxième en construisant la chaîne de caractère à imprimer au fur et à mesure. C’est moins rapide, mais cela permet de plus facilement faire évoluer le programme (pour l’exercice de la majuscule du TP précédent par exemple).

texte = ""
for i in range(10):
    # Le symbole + utilisé avec les chaînes de caractères
    # opère une concaténation.
    texte = texte + "bonjour n°" + str(i+1)
    # Ajout de la ponctuation.
    if i <= 8:
        texte = texte + ","
    else:
        texte = texte + "."
    # On passe à la ligne.
    texte = texte + '\n'
print(texte)

Ou avec l’utilisation de cond and expr1 or expr2, plus subtil mais plus propre :

texte = ""
for i in range(10):
    texte = texte + "bonjour n°"
    texte = texte + str(i+1)
    texte = texte + (i <= 8 and "," or ".")
    texte = texte + '\n'
print(texte)

Exercice :

À partir de l’exercice du point final (version pythonique ou non), essayer de mettre une majuscule sur la première ligne uniquement, si possible sans toucher à la ligne contenant for.

3.1. Afficher un nombre variable de messages

Les instructions raw_input() (Python 2) et input() (Python 3) bloquent l’exécution du programme et attendent que l’utilisateur tape une chaîne de caractères (avec Idle, il faut la taper dans la fenêtre interactive), suivie de « Entrée ».

À ce moment là, on peut affecter la chaîne à une variable ou faire directement un « calcul » dessus.

>>> "Salut " + input() + " !"  # + permet de concaténer des chaînes
tout le monde
'Salut tout le monde !'

La ligne tout le monde est celle que l’utilisateur tape, la ligne 'Salut tout le monde !' est la chaîne de caractères que Python calcule.

Attention, la valeur récupérée est une chaîne de caractères et doit donc être convertie si vous avez besoin d’un nombre. Pour un entier, il faut utiliser int(input()).

>>> int(input()) + 2
2
4

Exercice :

Toujours en réutilisant le programme du point final, laisser l’utilisateur choisir le nombre de lignes à afficher. Tester. Bien observer la dernière ligne et ajuster le programme si besoin.

3.2. Simuler un dé à 6 faces, puis à n faces

Avec Python (comme avec Algobox), le travail fastidieux (mais intéressant) de la simulation d’un dé à 6 faces peut être court-circuité par une fonction toute faite :

>>> import random
>>> random.randint(1, 6)
4
>>> random.randint(1, 6)
6

Pour plus d’informations, voir la documentation du module random.

Exercice :

Laisser l’utilisateur choisir le nombre de faces du dé, ainsi que le nombre de lancers. Le programme devra afficher ce qu’affiche chaque dé ainsi que leur somme. Travaillez petit à petit !




Christophe Gragnic, le 04/07/2016, 17h46'32".






Page générée le 04/12/2016, 10h08'07" (source).
historique de la page
historique global

 TogetherJS