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.
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.
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 >>>
.
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 ?
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.
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.
Expliquez le résultat de print("2+2")
.
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 ».
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
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)
print
on aura besoin.
On veut obtenir :
bonjour n° 1 ,
…
bonjour n° 9 ,
bonjour n° 10 .
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, ".")
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.
i >= 10
i == 10
i < 10
i != 10
i != 9
i >= 9
i < 9
i > 0
i == 0
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
.
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.
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 !