diff --git a/1ST/Programmation/1-Projets_Python.html b/1ST/Programmation/1-Projets_Python.html new file mode 100644 index 0000000..fde540f --- /dev/null +++ b/1ST/Programmation/1-Projets_Python.html @@ -0,0 +1,14616 @@ + + + + +1-Projets_Python + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+

Projets Python

Ce notebook contient des petits projets pour s'initier à la programmation python. Les premiers sont très simples tandis que les derniers proposent des choses plus compliqués tant niveau programmation que mathématiquement.

+

Il est vivement recommander de ne pas faire que les questions poser mais aussi d'expérimenter par soi même.

+

Table des matières

+
+

Notions de programmation

+ +
+

Ressouces Python

+ + +
+
+
+
+
+
+

Introduction Python

Dans les encadrés, il y a du code python vous pouvez écrire dedans comme dans un éditeur de texte classique. Pour exécuter les lignes de codes contenues dedans, il faut appuyer sur shift et entrer.

+ +
+
+
+
+
+
In [1]:
+
+
+
print("Bonjour")
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Bonjour
+
+
+
+ +
+
+ +
+
+
+
+
    +
  • Modifier la commande précédente pour qu'elle n'affiche plus bonjour mais votre nom puis executer cette commande.
  • +
+

Il est possible d'afficher plusieurs messages:

+ +
+
+
+
+
+
In [2]:
+
+
+
print("bonjour")
+print("monde")
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
bonjour
+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.

+ +
+
+
+
+
+
In [3]:
+
+
+
# la commande suivante affiche Bonjour
+print("bonjour")
+# Quand on veut afficher quelque chose, on utilisera la commande print()
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
bonjour
+
+
+
+ +
+
+ +
+
+
+
+

Les variables

Les variables sont des enveloppes où l'on stockera des nombres, des mots, des phrases ou des choses plus compliqués.

+ +
+
+
+
+
+
In [4]:
+
+
+
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.

+ +
+
+
+
+
+
In [5]:
+
+
+
un_nombre = 10
+print(un_nombre) 
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
10
+
+
+
+ +
+
+ +
+
+
+
+
    +
  • Modifier le programme précédent pour stocker le nombre 2 dans un_nombre puis l'afficher.
  • +
+

Pour stocker des mots ou des phrases, il faut les mettre entre guillemets

+ +
+
+
+
+
+
In [6]:
+
+
+
un_mot = "Coucou"
+une_phrase = "ceci est une phrase"
+
+ +
+
+
+ +
+
+
+
+
    +
  • Modifier le programme précédent pour changer le contenu des variables puis ajouter deux lignes pour afficher ce que contiennent ces variables (avec la commande print).
  • +
+ +
+
+
+
+
+
+

Générateur d'excuses

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:

+ +
+
+
+
+
+
In [7]:
+
+
+
age = 14
+print("J'ai ", age, "ans")
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
J'ai  14 ans
+
+
+
+ +
+
+ +
+
+
+
+
    +
  • Modifier les lignes précédentes pour se présenter Bonjour, je m'appelle BobBob est un nom stocké dans une variable nom.
  • +
+

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 ....)

+ +
+
+
+
+
+
In [8]:
+
+
+
coupable = input("Nom du coupable (masculin)? ")
+print("C'est pas moi! C'est ", coupable)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Nom du coupable (masculin)? Bob
+C'est pas moi! C'est  Bob
+
+
+
+ +
+
+ +
+
+
+
+
    +
  • Modifier les lignes précédentes pour que l'ordinateur demande un verbe d'action puis construit une phrase utilisant ce verbe d'action.
  • +
+

Proposition d'étapes

    +
  • Finir d'écrire le programme qui demande des informations puis qui génére une excuse
  • +
+ +
+
+
+
+
+
+

Magic 8 ball

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.

+ +
+
+
+
+
+
In [9]:
+
+
+
import random
+
+ +
+
+
+ +
+
+
+
+

Nous allons mettre toutes les réponses possibles dans une liste

+ +
+
+
+
+
+
In [10]:
+
+
+
reponses = ["reponse 1", "reponse 2", "reponse 3"]
+
+ +
+
+
+ +
+
+
+
+

Et Python choisira une réponse au hasard

+ +
+
+
+
+
+
In [11]:
+
+
+
random.choice(reponses)
+
+ +
+
+
+ +
+
+ + +
+ +
Out[11]:
+ + + + +
+
'reponse 2'
+
+ +
+ +
+
+ +
+
+
+
+

Proposition d'étapes

    +
  • L'ordinateur demande une question existentielle.
  • +
  • L'ordinateur apporte une réponse aléatoire choisie parmis plusieurs réponses
  • +
+ +
+
+
+
+
+
+

Deviner un nombre

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)

+ +
+
+
+
+
+
In [12]:
+
+
+
nbr_aleatoire = random.randint(1,20)
+print(nbr_aleatoire)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
15
+
+
+
+ +
+
+ +
+
+
+
+

Faites executer plusieurs fois cette commande pour remarquer qu'elle ne retourne pas toujours le même résultat.

+

Propositions d'étapes

    +
  • 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.

    +
  • +
+ +
+
+
+
+
+
+

Generateur de simleys

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.

+ +
+
+
+
+
+
In [13]:
+
+
+
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)
    +  <( : )  
    +   (" ") 
    +
  • +
+

Propositions d'étapes

    +
  • Recopier les listes de parties
  • +
  • Choisir aléatoirement un chapeau
  • +
  • Construire aléatoirement une tête '(oeil nez oeil)'
  • +
  • Construire aléatoirement les autres parties du corps
  • +
  • Construire tout le smiley
  • +
+ +
+
+
+
+
+
+

Pierre Feuille Ciseau

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.

+

Choix du joueur et choix de l'ordinateur

    +
  • Écrire un programme qui demande le choix de l'utilisateur
  • +
  • Completer ce programme pour que l'ordinateur choisisse parmi les 3 choix
  • +
+

Comparaison des résultats

    +
  • En utilisant les conditions if comparer les deux choix pour determiner qui est le vaincueur.
  • +
+ +
+
+
+
+
+
+

Chiffrement de Cesar

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...

+
    +
  • Avec un crayon et du papier chiffrer 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

+ +
+
+
+
+
+
In [14]:
+
+
+
codage_a = ord("a")
+print(codage_a)
+codage_b = ord("b")
+print(codage_b)
+codage_A = ord("A")
+print(codage_A)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
97
+98
+65
+
+
+
+ +
+
+ +
+
+
+
+

Pour faire la transformation inverse, on utilisera la fonction chr

+ +
+
+
+
+
+
In [15]:
+
+
+
lettre_100 = chr(100)
+print(lettre_100)
+lettre_43 = chr(43)
+print(lettre_43)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
d
++
+
+
+
+ +
+
+ +
+
+
+
+

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:

+ +
+
+
+
+
+
In [16]:
+
+
+
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)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
la lettre  B est transformée en le nombre 66
+la lettre  o est transformée en le nombre 111
+la lettre  n est transformée en le nombre 110
+la lettre  j est transformée en le nombre 106
+la lettre  o est transformée en le nombre 111
+la lettre  u est transformée en le nombre 117
+la lettre  r est transformée en le nombre 114
+[66, 111, 110, 106, 111, 117, 114]
+
+
+
+ +
+
+ +
+
+
+
+

Il faut maintenant décaler tous ces nombres

+ +
+
+
+
+
+
In [17]:
+
+
+
message_decale = []
+decalage = 6
+for n in message_code:
+    message_decale.append((n + decalage)%256)
+print(message_decale)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
[72, 117, 116, 112, 117, 123, 120]
+
+
+
+ +
+
+ +
+
+
+
+

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

+ +
+
+
+
+
+
In [18]:
+
+
+
message_chiffre = []
+for n in message_decale:
+    message_chiffre.append(chr(n))
+print(message_chiffre)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
['H', 'u', 't', 'p', 'u', '{', 'x']
+
+
+
+ +
+
+ +
+
+
+
+

Ensuite on lie toutes les lettres pour en faire un seul mot

+ +
+
+
+
+
+
In [19]:
+
+
+
message_chiffre = ''.join(message_chiffre) # join en anglais signifie joindre
+print(message_chiffre)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Hutpu{x
+
+
+
+ +
+
+ +
+
+
+
+

Voila votre programme sais chiffrer des messages.

+
    +
  • Écrire un programme qui sais déchiffrer les messages.
  • +
  • Pour améliorer votre programme, on peut utiliser des fonctions.
  • +
+ +
+
+
+
+
+
+
+

input

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

+ +
+
+
+
+
+
In [20]:
+
+
+
print("Comment t'appelles tu?")
+nom = input()
+print("Ah! Tu t'appelles", nom)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Comment t'appelles tu?
+Ivan
+Ah! Tu t'appelles Ivan
+
+
+
+ +
+
+ +
+
+
+
+

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.

+ +
+
+
+
+
+
+

Condition if

Pour différencier plusieurs cas, on utilisera la commande if (si), elif (sinon si) et else (sinon).

+ +
+
+
+
+
+
In [21]:
+
+
+
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")
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
a est plus petit que b
+
+
+
+ +
+
+ +
+
+
+
+

Boucles for

Les boucles for permettent de répéter un certain nombre de fois la même action.

+
    +
  • Ajouter 5 fois 100 d'affilé
  • +
+ +
+
+
+
+
+
In [22]:
+
+
+
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)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Au debut a vaut 2
+a vaut maintenant 102
+a vaut maintenant 202
+a vaut maintenant 302
+a vaut maintenant 402
+a vaut maintenant 502
+Finalement a vaut 502
+
+
+
+ +
+
+ +
+
+
+
+
    +
  • On peut aussi parcourir les lettres d'un mot ou d'une phrase
  • +
+ +
+
+
+
+
+
In [23]:
+
+
+
phrase = "boujour toi"
+print("On enumere >>> ", phrase)
+for l in phrase:
+    print(l)
+print("Toutes les lettres ont été énumérées")
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
On enumere >>>  boujour toi
+b
+o
+u
+j
+o
+u
+r
+ 
+t
+o
+i
+Toutes les lettres ont été énumérées
+
+
+
+ +
+
+ +
+
+
+
+
    +
  • Ou encore tous les éléments d'une liste
  • +
+ +
+
+
+
+
+
In [24]:
+
+
+
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é")
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
On enumère >>> ['premier element', 2, 'coucou', 1, 'aie', 0]
+premier element
+2
+coucou
+1
+aie
+0
+Tout a été énuméré
+
+
+
+ +
+
+ +
+
+
+
+

Boucles while

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:

+ +
+
+
+
+
+
In [25]:
+
+
+
u = 2
+while u < 19:
+    u = u + 3
+    print("u vaut ", u)
+print("u a depassé 50 et vaut", u)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
u vaut  5
+u vaut  8
+u vaut  11
+u vaut  14
+u vaut  17
+u vaut  20
+u a depassé 50 et vaut 20
+
+
+
+ +
+
+ +
+
+
+
+

Poser toujours la même question quand que l'utilisateur n'a pas bien répondu:

+ +
+
+
+
+
+
In [26]:
+
+
+
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!")
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Quelle est la couleur du cheval blanc d'Henri 4?
+bleu
+Non! Recommence!
+Quelle est la couleur du cheval blanc d'Henri 4?
+vert
+Non! Recommence!
+Quelle est la couleur du cheval blanc d'Henri 4?
+jaune
+Non! Recommence!
+Quelle est la couleur du cheval blanc d'Henri 4?
+blanc
+Bravo!
+Voila tu as réussi!
+
+
+
+ +
+
+ +
+
+
+
+

Fonctions

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 utilisations de fonctions.

+ +
+
+
+
+
+
+

Fonctions numériques

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:

+ +
+
+
+
+
+
In [27]:
+
+
+
def f(x):
+    return 3*x+2
+
+ +
+
+
+ +
+
+
+
+

On vient de coder cette fonction, on peut ensuite l'utiliser

+ +
+
+
+
+
+
In [28]:
+
+
+
print(f(4))
+print("L'image de 2.5 par la fonction f est ", f(2.5))
+print("f(-2) = ", f(-2))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
14
+L'image de 2.5 par la fonction f est  9.5
+f(-2) =  -4
+
+
+
+ +
+
+ +
+
+
+
+

Au collège, on a vu les "programmes de calculs". Ils peuvent eux aussi être codé avec des fonctions.

+
    +
  • Choisir un nombre
  • +
  • Ajouter 5
  • +
  • Diviser par 10
  • +
+

Se code de la façon suivante:

+ +
+
+
+
+
+
In [29]:
+
+
+
def programme(nombre):
+    reponse = nombre + 5
+    reponse = reponse / 10
+    return reponse
+
+ +
+
+
+ +
+
+
+
In [30]:
+
+
+
print(programme(60))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
6.5
+
+
+
+ +
+
+ +
+
+
+
+

D'autres fonctions

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 #.

+ +
+
+
+
+
+
In [31]:
+
+
+
def entoure(titre):
+    return '##### ' + titre + ' #####'
+
+ +
+
+
+ +
+
+
+
In [32]:
+
+
+
print(entoure('Mon titre'))
+print(entoure("L'histoire du petit chaperon rouge"))
+print(entoure('Fin'))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
##### Mon titre #####
+##### L'histoire du petit chaperon rouge #####
+##### Fin #####
+
+
+
+ +
+
+ +
+
+
+
+

On peut même mettre un autre argument (en plus de titre) pour entourer avec autre chose que #.

+ +
+
+
+
+
+
In [33]:
+
+
+
def entoure(texte, symbole):
+    return symbole*4 + ' ' + texte + ' ' + symbole*4
+
+ +
+
+
+ +
+
+
+
In [34]:
+
+
+
print(entoure('La belle au bois dormant', '-'))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
---- La belle au bois dormant ----
+
+
+
+ +
+
+ +
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+ + + + + + diff --git a/1ST/Programmation/2-Fonctions.html b/1ST/Programmation/2-Fonctions.html new file mode 100644 index 0000000..60ae487 --- /dev/null +++ b/1ST/Programmation/2-Fonctions.html @@ -0,0 +1,13613 @@ + + + + +2-Fonctions + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+

Python et fonctions

Le but de ce TP est de découvrir les fonctions en programmation.

+ + +
+
+
+
+
+
+

Que fait ce programme?

    +
  • Avant d'executer le programme suivant. Lisez-le et essayer de comprendre ce qu'il fait.
  • +
  • Commenter au dessus de chaque ligne (avec #...) pour expliquer ce qu'elle fait.
  • +
+ +
+
+
+
+
+
In [ ]:
+
+
+
entree1 = 'Choux' # Crée un variable nommé entree1 et y met le mot 'Choux'
+entree2 = 'Salade'
+plat1 = 'Frites'
+plat2 = 'Haricots vert'
+print("==== Menu du jour ====")
+print("")
+print("Entrées -----")
+print(" * ", entree1)
+print(" * ", entree2)
+print("Plats -------")
+print(" * ", plat1)
+print(" * ", plat2)
+print("")
+print("Faites votre choix")
+
+ +
+
+
+ +
+
+
+
+
    +
  • Ajouter un choix de dessert à ce programme
  • +
+ +
+
+
+
+
+
+

Fonctions mathématiques

On peut aussi tout à fait programmer des fonctions similaires à celles que l'on trouve en mathématiques.

+

Cette fonction polynôme

+$$ f:x \mapsto -x^2 + 6x+ 3$$

se codera en python

+ +
+
+
+
+
+
In [2]:
+
+
+
def f(x):
+    return -x**2+6*x-3
+
+ +
+
+
+ +
+
+
+
+

Quelques éléments de syntaxes sont importants à noter:

+
    +
  • def est le mot clé qui annonce à Python que l'on va définir une fontion.
  • +
  • : à la fin de la ligne
  • +
  • return est le mot clé qui demande à Python de retourner ce qui est après comme résultat.
  • +
+

Maintenant que la fonction est codée, on peut l'utiliser pour calculer des images.

+ +
+
+
+
+
+
In [ ]:
+
+
+
print(f(10))
+print(f(-2))
+
+ +
+
+
+ +
+
+
+
+

Modifier les commandes précédentes pour calculer d'autres images. Vous pouvez aussi entourer le résultat du calcul avec une phrase pour décrire le résultat.

+ +
+
+
+
+
+
+

Pour chacune des fonctions suivantes, testées les pour savoir si elles fonctionnents. Une fois que vous ètes sûr qu'elles font bien ce que vous souhaitez, ne les effacées pas et gardez les pour la suite.

+
    +
  • Programmer la fonction $g$ définie par + $$ g:x \mapsto x(19 - 2x) $$
  • +
+ +
+
+
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+
+

Calculer des images par cette fonction et vérifier que les résultats correspondent bien à que l'on attend.

+ +
+
+
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+
+
    +
  • Programmer la fonction $h$ qui correspond au programme de calcul suivant

    +
      +
    • Choisir un nombre
    • +
    • -> Ajouter 2
    • +
    • -> Elever au carré
    • +
    • -> Soustraire 4
    • +
    +
  • +
+ +
+
+
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+
+

Calculer des images par cette fonction et vérifier que les résultats correspondent bien à que l'on attend.

+ +
+
+
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+
+
    +
  • Programmer une fonction celcius2fahrenheit qui convertit des degrés celcius vers des degrés fahrenheit en utilisant la formule suivante + $$ (°F) = 1,8 * (°C) + 32 $$
  • +
+ +
+
+
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+
+

Convertir en Fahrenheit les températures suivantes +$$ + 0°C \qquad 10°C \qquad 100°C +$$

+ +
+
+
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+
+
    +
  • Programmer la fonction inverse fahrenheit2celcius.
  • +
+ +
+
+
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+
+

Convertir en Celsius les températures suivantes +$$ + 0°F \qquad 100°F \qquad -10°F +$$

+ +
+
+
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+
+

Les 2 prochaines parties peuvent être faite independament. A vous de choisir celle qui tente le plus.

+ +
+
+
+
+
+
+

Faire beaucoup de calculs

Imaginons que je souhaite chercher le maximum de la fonction $f$ programmée précédement. Il va falloir que je fasse calculer à python plusieurs images de cette fonction.

+ +
+
+
+
+
+
In [ ]:
+
+
+
print(f(0))
+print(f(5))
+print(f(20))
+
+ +
+
+
+ +
+
+
+
+

Le faire de la sorte peut prendre beaucoup de temps et se serait se priver de faire travailler l'ordinateur à notre place

+

Pour réaliser plusieurs calculs de façon systématiques, on peut utiliser une boucle for.

+

Ici la boucle va calculer les images par la fonction $f$ de tous les nombres de 0 à 9.

+ +
+
+
+
+
+
In [ ]:
+
+
+
for x in range(10):
+    print("Quand x vaut", x, ", f(x) vaut", f(x))
+
+ +
+
+
+ +
+
+
+
+

On peut donc penser que la fonction a un maximum autour de 3.

+
    +
  • Ecrire toutes les conversions 0 à 100 degré celcius en farhenheit
  • +
+ +
+
+
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+
+
    +
  • Approcher le maximum de la fonction $g$.
  • +
+ +
+
+
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+
+

On peut aussi utiliser une boucle while (tant que).

+

Ici, on va calculer les images par la fonction $f$ des nombres entre 2 et 4 avec un pas de 0,1.

+ +
+
+
+
+
+
In [3]:
+
+
+
x = 2
+pas = 0.1
+while x <= 4:
+    print("Quand x vaut", x, "f(x) vaut ", f(x))
+    x = x + 0.1
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Quand x vaut 2 f(x) vaut  5
+Quand x vaut 2.1 f(x) vaut  5.190000000000001
+Quand x vaut 2.2 f(x) vaut  5.359999999999999
+Quand x vaut 2.3000000000000003 f(x) vaut  5.51
+Quand x vaut 2.4000000000000004 f(x) vaut  5.640000000000001
+Quand x vaut 2.5000000000000004 f(x) vaut  5.75
+Quand x vaut 2.6000000000000005 f(x) vaut  5.84
+Quand x vaut 2.7000000000000006 f(x) vaut  5.91
+Quand x vaut 2.8000000000000007 f(x) vaut  5.960000000000001
+Quand x vaut 2.900000000000001 f(x) vaut  5.99
+Quand x vaut 3.000000000000001 f(x) vaut  6.000000000000002
+Quand x vaut 3.100000000000001 f(x) vaut  5.989999999999998
+Quand x vaut 3.200000000000001 f(x) vaut  5.959999999999999
+Quand x vaut 3.300000000000001 f(x) vaut  5.91
+Quand x vaut 3.4000000000000012 f(x) vaut  5.839999999999998
+Quand x vaut 3.5000000000000013 f(x) vaut  5.749999999999998
+Quand x vaut 3.6000000000000014 f(x) vaut  5.639999999999999
+Quand x vaut 3.7000000000000015 f(x) vaut  5.509999999999998
+Quand x vaut 3.8000000000000016 f(x) vaut  5.359999999999999
+Quand x vaut 3.9000000000000017 f(x) vaut  5.189999999999996
+
+
+
+ +
+
+ +
+
+
+
+

Les nombreux chiffres après la virgules (qui sont faux!) viennent de la façon de stocker les nombres à virgules dans l'ordinateur. Ils sont présents dans la majorité des programmes et il est difficile de les éviter. C'est une des raison pour laquelle on ne peut pas faire aveuglément confiance à un ordinateur.

+
    +
  • Écrire toutes les conversions de -100 à 100 degrés farhenheit vers les degrés celcius avec un pas de 10.
  • +
  • Affiner votre recherche de maximum de la fonction $g$ avec un pas de 0,1 puis de 0,01.
  • +
+ +
+
+
+
+
+
+

Reçut/Recalé/mentions au bac

Au bac, on applique le barème suivant:

+
    +
  • Note strictement inférieure à 10: recalé
  • +
  • Note supérieure à 10: reçut
  • +
+

On peut y voir une fonction qui transforme une note en l'un des deux mots recalé ou reçut.

+
    +
  • Programmer cette fonction (aller voir du coté des if dans le mémo).
  • +
+

Parmi les reçuts, certains peuvent avoir des mentions:

+
    +
  • $10 \leq note < 12 $: pas de mentions
  • +
  • $12 \leq note < 14 $: Assez Bien
  • +
  • $14 \leq note < 16 $: Bien
  • +
  • $16 \leq note $: Très Bien

    +
  • +
  • Programmer cette fonction qui transforme une note en la mention.

    +
  • +
+ +
+
+
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+ + + + + + diff --git a/1ST/Programmation/index.rst b/1ST/Programmation/index.rst index 90bd204..3bdaf9a 100644 --- a/1ST/Programmation/index.rst +++ b/1ST/Programmation/index.rst @@ -2,7 +2,7 @@ Programmation de l'année 2019-2020 avec les premières technologiques #################################################################### :date: 2020-05-05 -:modified: 2020-05-05 +:modified: 2020-05-20 :authors: Bertrand Benjamin :tags: Programmation :category: 1techno @@ -13,7 +13,10 @@ Programmation de l'année 2019-2020 avec les premières technologiques Projets python à réaliser pour découvrir le langage. -`Notebook <./1-Projets_Python.ipynb>`_ + +`Introduction à Python - Notebook <./1-Projets_Python.ipynb>`_ + +`Introduction à Python - Version html <./1-Projets_Python.html>`_ `Ouvrir le notebook avec binder `_ @@ -26,5 +29,7 @@ On y découvre aussi l'utilisation des boucles et des conditions. `Python et fonctions - notebook <./2-Fonctions.ipynb>`_ +`Python et fonctions - version html <./2-Fonctions.html>`_ + `Python et fonctions sur binder `_ diff --git a/1ST/semaines.rst b/1ST/semaines.rst index 3ee597e..4124cb7 100644 --- a/1ST/semaines.rst +++ b/1ST/semaines.rst @@ -2,7 +2,7 @@ Programmes semaine par semaine pendant le confinement avec les 1ST ################################################################## :date: 2020-03-30 -:modified: 2020-05-18 +:modified: 2020-05-20 :authors: Bertrand Benjamin :category: 1techno :tags: Progression @@ -71,6 +71,10 @@ S21 - Programmation (45min) `Python et fonctions sur binder `_ +Pour ceux qui n'arrivent pas à ouvrir le lien précédent voici une version html pour travailler avec repl.it . + +`Python et fonctions Version html <./Programmation/2-Fonctions.html>`_ + Semaine 20: 11/05 -> 15/05 ========================== @@ -141,6 +145,10 @@ Vous irez au moins jusqu'à terminer la partie sur le générateur d'excuses. Soyez patient, l'ouverture est longue car il y a pas mal de choses à mettre en place du côté serveur pour que vous n'ayez rien à installer sur votre ordinateur! +Pour ceux qui n'arrivent pas à ouvrir le lien précédent voici une version html pour travailler avec `repl.it `_ + +`Introduction à Python - Version html <./Programmation/1-Projets_Python.html>`_ + Semaine 19: 4/05 -> 8/05 ========================