Dans ce cours autour de la programmation Python et de l'algorithmie, nous verons beaucoup de petits morceaux de programmes.
Il est vivement recommander de ne pas faire que les questions poser mais aussi d'expérimenter par soi même.
Notions de programmation
Ressouces Python
Se rendre sur le site de repli.it.
L'interface se sépare en 2 parties:
Il est conseillé d'utiliser en priorité la zone script car elle permet d'écrire sur plusieurs lignes et de corriger après l'execution. La zone shell servira à tester des commandes pour voir directement leurs effets.
Pour sauvergarder votre travail, vous cliquerez sur les 3 points à côté de Files puis sur download as zip.
Dans les encadrés, il y a du code python. Il faudra le recopier leur contenu dans la zone script et ne pas hésiter à le modifier.
print("Bonjour")
Il est possible d'afficher plusieurs messages:
print("bonjour")
print("monde")
Modifier le programme précédent pour qu'il affiche:
Bonjour
tous
le
monde
Quand une ligne commence par un #, Python ne la lit pas. On appelle cela des commentaires. Nous les utiliserons pour expliquer ce que l'on fait.
# la commande suivante affiche Bonjour
print("bonjour")
# Quand on veut afficher quelque chose, on utilisera la commande print()
Les variables sont des enveloppes où l'on stockera des nombres, des mots, des phrases ou des choses plus compliqués.
un_nombre = 10
Ainsi dans l'enveloppe appelée un_nombre on y met le nombre 10.
C'est ce que l'on appelle assigner une valeur à une variable ou stocker une valeur dans une variable.
un_nombre = 10
print(un_nombre)
Pour stocker des mots ou des phrases, il faut les mettre entre guillemets
un_mot = "Coucou"
une_phrase = "ceci est une phrase"
print
).Quand Loïc fait des bétises, il se fait souvent prendre et doit trouver une excuse le plus rapidement possible. Aidons le en créant un programme qui créé des excuses sur commande.
Ces excuses auront le modèle suivant
C'est pas moi! C'est (Bob).
Il a (mangé) une (grenouille) (volante). Alors que moi j'étais tranquillement en train de (faire) un (super) (exercice de math).
Je suis innocent (monsieur)!
Les nombres entre parenthèses seront remplacé par des mots choisis par l'utilisateur de ce générateur.
Pour écrire du texte avec une variable, il faut séparer les parties par une virgule:
age = 14
print("J'ai ", age, "ans")
Pour demander quelque chose à l'utilisateur, on utilise la fonction input
.
Dans le programme suivant, l'ordinateur pose une question (Nom du coupable (masculin)?), attend que l'utilisateur donne une réponse puis réutilise cette réponse pour faire une phrase (C'est pas moi! c'est ....)
coupable = input("Nom du coupable (masculin)? ")
print("C'est pas moi! C'est ", coupable)
Pour ceux qui ne connaissent pas un Magic 8 ball est un boule magique qui répond à toutes les questions (vidéo).
Même si je ne voudrai pas gacher votre âme d'enfant, cette boule magique répond au hasard... Pour gérer le hasard en Python, on utilise random. Il faut donc placer la ligne suivante au début du fichier à chaque fois que l'on veut faire quelque chose au hasard.
import random
Nous allons mettre toutes les réponses possibles dans une liste
reponses = ["reponse 1", "reponse 2", "reponse 3"]
Et Python choisira une réponse au hasard
random.choice(reponses)
Nous allons maintenant écrire un programme qui va chercher à faire deviner à l'utilisateur un nombre choisi aléatoirement par Python.
L'ordinateur choisit un nombre aléatoire entre 1 et 20. L'utilisateur propose un nombre. L'ordinateur répond si le nombre proposé est plus grand, plus petit ou égal au nombre choisi.
Pour faire choisir un nombre entier à Python, on utilise la fonction randint(min,max)
(randint
signifie random integer = entier aléatoire)
nbr_aleatoire = random.randint(1,20)
print(nbr_aleatoire)
Faites executer plusieurs fois cette commande pour remarquer qu'elle ne retourne pas toujours le même résultat.
Completer votre programme pour demander une réponse à l'utilisateur (utilisez int(input("question"))
plutôt que input("question")
pour que la réponse soit transformée en entier)
Regarder la section sur Condition if pour adapter l'exemple et savoir lequel du nombre choisi par l'ordinateur ou de l'utilisateur est le plus grand.
Écrire le programme final qui fait choisir un nombre à l'ordinateur, qui demande un nombre à l'utilisateur puis qui dit si le nombre donné par l'utilisateur est plus grand ou plus petit.
Pour améliorer notre programme, il faudrait que l'utilisateur puisse rententer de deviner le nombre. Regardez la section Boucle while pour améliorer votre programme.
On pourra continuer à l'améliorer en comptant et en annonçant le nombre de tentative à la fin.
Pour ce projet, nous allons programmer un générateur de smileys. Nous allons définir quelquels éléments de ce smiley et l'ordinateur choisira aléatoirement parmi ces éléments pour créer le smiley.
Voici les éléments du smiley.
LISTE_CHAPEAU = [u" \n _===_", " ___ \n .....", " _ \n /_\ ", " ___ \n (_*_)"]
LISTE_NEZ = [u",", ".", "_", " "]
LISTE_OEIL = [u".", "o", "O", "-"]
LISTE_GAUCHE_CORPS_HAUT = [u" ", "\\", " ", " "]
LISTE_GAUCHE_CORPS_BAS = [u"<", " ", "/", " "]
LISTE_DROITE_CORPS_HAUT = [u" ", "/", " ", " "]
LISTE_DROITE_CORPS_BAS = [u">", " ", "\\", " "]
LISTE_TORSE = [u" : ", "] [", "> <", " "]
LISTE_BASE = [u" : ", '" "', "___", " "]
Le programme qui séléctionnera aléatoirement des éléments pour construire un smiley de ce type:
_
/_\
(o O)
<( : )
(" ")
Vous devez connaître le jeu Pierre-Feuille-Ciseau. Deux adversaires s'affrontent choissicent en même temps Pierre, Feuille ou Ciseau.
Pierre gagne contre ciseau qui gagne contre feuille qui gagne contre pierre...
Nous allons écrire un jeu qui fera s'affronter l'utilisateur contre l'ordinateur.
On veut écrire un programme qui manipule les polynomes du 2nd degré qui l'on améliorera petit à petit.
Écrire un programme qui demande les valeurs de a
, b
et c
(les coefficients du polynome) et renvoie les racines du polynôme $ax^2 + bx + c$
Valeur de a?
4
Valeur de b?
4
Valeur de c?
1
Delta = 0, il y a une racine:
x = 0.5
On veut maintenant améliorer notre programme pour qu'il donne le tableau de signe du polynôme.
Valeur de a?
4
Valeur de b?
4
Valeur de c?
1
Delta = 0, il y a une racine:
x = 0.5
Comme a = 4 donc le tableau de signe est
-------------------------
x | -inf 0.5 +inf
-----------------------------
P | + 0 +
-----------------------------
Le chiffrement de César, utilisé par Jules César pour transmettre des messages secrets dans l’Antiquité, consiste décaler les lettres dans l'alphabet pour écrire un message.
Voici un exemple avec un décalage de 4
message >>> bonjour
chiffré >>> fsrnsyv
Le b
devient f
, o
devient s
etc...
bonjour
avec un décalage de 6.Python est plus fort pour manipuler les nombres que les lettres. Il faudra donc commencer par transformer les lettres en nombre (on appelle cela encoder). Il existe une fonction faite pour ça: ord
codage_a = ord("a")
print(codage_a)
codage_b = ord("b")
print(codage_b)
codage_A = ord("A")
print(codage_A)
Pour faire la transformation inverse, on utilisera la fonction chr
lettre_100 = chr(100)
print(lettre_100)
lettre_43 = chr(43)
print(lettre_43)
Vous retrouverez tous les caractères et leurs nombres ici. On peut remarquer qu'il y en a 256 (souvenez en vous on s'en servira plus tard)
Il faut donc transformer le message en liste de nombre. Pour cela on utilisera des Boucles for:
message = "Bonjour"
message_code = [] #le message codé est pour le moment une liste vide
for lettre in message:
print("la lettre ", lettre, "est transformée en le nombre", ord(lettre))
message_code.append(ord(lettre)) #append signifie ajouter en anglais
print(message_code)
Il faut maintenant décaler tous ces nombres
message_decale = []
decalage = 6
for n in message_code:
message_decale.append((n + decalage)%256)
print(message_decale)
Le %256
est là pour être sûr qu'aucun nombre ne dépasse 255. Si un nombre dépasse 255, on recommence par 0 (par exemple 259 devient 3 c'est le reste de la division euclidienne de 259 par 256)
Il faut maintenant décodé le message_decale
pour avoir à nouveau des lettres
message_chiffre = []
for n in message_decale:
message_chiffre.append(chr(n))
print(message_chiffre)
Ensuite on lie toutes les lettres pour en faire un seul mot
message_chiffre = ''.join(message_chiffre) # join en anglais signifie joindre
print(message_chiffre)
Voila votre programme sais chiffrer des messages.
Contrairement à ce que l'on a fait hier on ne met plus rien dans les parenthèses d'un input
.
input()
est une commande qui va demander à l'utilisateur une information
print("Comment t'appelles tu?")
nom = input()
print("Ah! Tu t'appelles", nom)
Après avoir afficher la question, l'ordinateur se met en pose et attend que l'utilisateur réponde quelque chose. Une fois que l'utilisateur a répondu (a appuyé sur entrer
) la réponse est stocké, ici, dans la variable nom
.
Pour différencier plusieurs cas, on utilisera la commande if
(si), elif
(sinon si) et else
(sinon).
a = 2
b = 3
if a > b: # Si
print("a plus grand que b")
elif a == b: # Sinon si
print("a est égal à b")
else: # Sinon
print("a est plus petit que b")
Les boucles for permettent de répéter un certain nombre de fois la même action.
a = 2
print("Au debut a vaut", a)
for i in range(5):
a = a + 100
print("a vaut maintenant", a)
print("Finalement a vaut", a)
phrase = "boujour toi"
print("On enumere >>> ", phrase)
for l in phrase:
print(l)
print("Toutes les lettres ont été énumérées")
liste = ["premier element", 2, "coucou", 1, "aie", 0]
print("On enumère >>>", liste)
for i in liste:
print(i)
print("Tout a été énuméré")
En anglais, while
signifie tant que. On l'utilisera quand on veut refaire quelque plusieurs fois tant que quelque chose n'est pas vrais.
Ajouter 3 tant que que u
n'a pas dépassé 19:
u = 2
while u < 19:
u = u + 3
print("u vaut ", u)
print("u a depassé 50 et vaut", u)
Poser toujours la même question quand que l'utilisateur n'a pas bien répondu:
aPasTrouve = True # True signifie vrai en anglais.
while aPasTrouve:
print("Quelle est la couleur du cheval blanc d'Henri 4?")
rep = input()
if rep == "blanc":
print("Bravo!")
aPasTrouve = False # False signifie faux en anglais
else:
print("Non! Recommence!")
print("Voila tu as réussi!")
Une fonction est un morceau de programme qui évitera de coder plusieurs fois la même chose. Quand on programme on dit souvent Si c'est la 3e fois que l'on écrit ces lignes c'est qu'il faut en faire une fonction
.
Voici différentes utilisation de fonctions.
En math, on utilise les fonctions pour décrire les transformations (de nombres le plus souvent).
Par exemple: $$ f:x \mapsto 3x + 2$$ Cette fonction $f$ prend un nombre, le multiplie par 3 puis ajoute 2. On pourra la coder de la façon suivante:
def f(x):
return 3*x+2
On vient de coder cette fonction, on peut ensuite l'utiliser
print(f(4))
print("L'image de 2.5 par la fonction f est ", f(2.5))
print("f(-2) = ", f(-2))
Au collège, on a vu les "programmes de calculs". Ils peuvent eux aussi être codé avec des fonctions.
Se code de la façon suivante:
def programme(nombre):
reponse = nombre + 5
reponse = reponse / 10
return reponse
print(programme(60))
Les fonctions numériques sont très utilisées en math mais en programmation, on manipule beaucoup d'autres types de fonctions.
On pourrait vouloir transformer un texte en un titre entouré de symboles #
.
def entoure(titre):
return '##### ' + titre + ' #####'
print(entoure('Mon titre'))
print(entoure("L'histoire du petit chaperon rouge"))
print(entoure('Fin'))
On peut même mettre un autre argument (en plus de titre
) pour entourer avec autre chose que #
.
def entoure(texte, symbole):
return symbole*4 + ' ' + texte + ' ' + symbole*4
print(entoure('La belle au bois dormant', '-'))