Retour à la page d'accueilMathématiques · Seconde · Changer de matière
Commencer gratuitement
Seconde · Mathématiques
Logique, arithmétique et algorithmique en seconde · Arithmétique et algorithmique

Algorithmique et Python

Lucas place 1 000 € sur un livret. Chaque année, son capital augmente de 3 %. Au bout de combien d'années aura-t-il atteint 1 200 € ? Calculer à la main année après année est long : il est bien plus efficace de demander à un ordinateur de répéter le calcul. C'est le rôle d'un algorithme, que nous écrirons en Python. À la fin de la page, nous répondrons à la question de Lucas.

Variables et affectation

Une variable est un nom qui désigne une valeur gardée en mémoire. L'instruction a = 5 est une affectation : elle range la valeur 5 dans la variable a. Ce n'est pas une égalité mathématique : à droite du signe =, on calcule d'abord, puis on range le résultat dans la variable de gauche.

Une variable peut contenir un entier (int), un flottant (float, un nombre décimal comme 1.03), un booléen (True ou False) ou une chaîne de caractères ("bonjour"). En Python, la virgule décimale s'écrit avec un point : 1.03 et non 1,03.

Un programme s'exécute ligne par ligne, dans l'ordre : c'est une séquence d'instructions.

Entraîne-toi★☆☆Pas commencé
On considère le programme Python suivant : Donner les valeurs de $a$ et de $b$ à la fin de l'exécution.

On considère le programme Python suivant :

a = 5

b = 3

a = a + b

b = a - 2 * b

Donner les valeurs de $a$ et de $b$ à la fin de l'exécution.

Résoudre

Fonctions et conditionnelles

Une fonction Python regroupe des instructions sous un nom. Elle reçoit des arguments (les entrées) et renvoie un résultat avec return.

def f(x):

    return 2 * x + 1

Alors f(3) renvoie $7$. Attention : l'indentation (le décalage de 4 espaces) fait partie de la syntaxe.

Une instruction conditionnelle exécute un bloc seulement si une condition est vraie :

def valeur_absolue(x):

    if x < 0:

        return -x

    else:

        return x

Les tests utilisent <, >, <=, >=, == (égal à), != (différent de). On combine des conditions avec and (« et ») et or (« ou »). Le reste de la division euclidienne de a par b s'obtient avec a % b : 17 % 5 vaut 2, et a % b == 0 signifie que $b$ divise $a$.

Entraîne-toi★☆☆Pas commencé
On considère la fonction : Calculer f(-3), f(4) et f(0).

On considère la fonction :

def f(x):

    if x < 0:

        return -x

    else:

        return x * x

Calculer f(-3), f(4) et f(0).

Résoudre
Entraîne-toi★★☆Pas commencé
Écrire en Python une fonction taux(v0, v1) qui renvoie le taux d'évolution, en pourcentage, d'une valeur initiale v0 à une valeur finale v1. Donner ensuite le résultat…

Écrire en Python une fonction taux(v0, v1) qui renvoie le taux d'évolution, en pourcentage, d'une valeur initiale v0 à une valeur finale v1. Donner ensuite le résultat de taux(80, 92) et de taux(50, 40).

Résoudre

La boucle for

Quand on sait combien de fois répéter, on utilise for. L'instruction for i in range(a, b): fait prendre à i les valeurs entières de a à b - 1 : la borne b est exclue.

s = 0

for i in range(1, 4):

    s = s + i

Ici i prend les valeurs 1, 2, 3 et s vaut $0+1+2+3 = 6$ à la fin.

tour i s après le tour
1 1 1
2 2 3
3 3 6
Entraîne-toi★☆☆Pas commencé
On considère le programme : a) Donner les valeurs prises par i. b) Quelle est la valeur de s à la fin ?

On considère le programme :

s = 0

for i in range(1, 5):

    s = s + i
  1. a) Donner les valeurs prises par i.
  2. b) Quelle est la valeur de s à la fin ?
Résoudre
Entraîne-toi★★☆Pas commencé
On considère la fonction : a) Calculer mystere(12) et mystere(7). b) Que calcule cette fonction ? c) Pour quelles valeurs de n supérieures à 1 la fonction renvoie-t-elle…

On considère la fonction :

def mystere(n):

    c = 0

    for k in range(1, n + 1):

        if n % k == 0:

            c = c + 1

    return c
  1. a) Calculer mystere(12) et mystere(7).
  2. b) Que calcule cette fonction ?
  3. c) Pour quelles valeurs de n supérieures à 1 la fonction renvoie-t-elle 2 ?
Résoudre
Entraîne-toi★★★Pas commencé
Écrire une fonction Python somme_diviseurs(n) qui renvoie la somme des diviseurs positifs de l'entier $n$ distincts de $n$. Un entier $n$ est dit parfait s'il est égal à…

Écrire une fonction Python somme_diviseurs(n) qui renvoie la somme des diviseurs positifs de l'entier $n$ distincts de $n$. Un entier $n$ est dit parfait s'il est égal à cette somme.

  1. a) Calculer somme_diviseurs(6) et somme_diviseurs(12).
  2. b) Écrire une fonction est_parfait(n) qui renvoie True si $n$ est parfait.
  3. c) Vérifier que 28 est parfait.
Résoudre

La boucle while

Quand on ne sait pas à l'avance combien de répétitions seront nécessaires, on utilise while : le bloc est répété tant que la condition est vraie. On s'arrête dès qu'elle devient fausse.

Retour à Lucas : son capital de départ est 1 000 € et il augmente de 3 % par an, donc il est multiplié par le coefficient multiplicateur $1 + 0{,}03 = 1{,}03$.

capital = 1000

n = 0

while capital < 1200:

    capital = capital * 1.03

    n = n + 1

À la fin, n est le nombre d'années nécessaires pour atteindre au moins 1 200 €.

n capital (arrondi)
0 1 000
1 1 030
2 1 060,90
3 1 092,73
4 1 125,51
5 1 159,27
6 1 194,05
7 1 229,87

Au tour 6, le capital est encore inférieur à 1 200 ; au tour 7, il le dépasse : la boucle s'arrête avec $n = 7$. Retour au début : Lucas atteindra 1 200 € au bout de 7 ans.

Entraîne-toi★★☆Pas commencé
Une association place 1 000 € à un taux annuel de 3 %. On considère : a) Que représente n à la fin de l'exécution ? b) Déterminer la valeur de n.

Une association place 1 000 € à un taux annuel de 3 %. On considère :

capital = 1000

n = 0

while capital < 1200:

    capital = capital * 1.03

    n = n + 1
  1. a) Que représente n à la fin de l'exécution ?
  2. b) Déterminer la valeur de n.
Résoudre

Balayage et simulation

Encadrer √2 par balayage

Pour approcher $\sqrt{2}$, on part de 1 et on avance par pas de $0{,}01$ tant que le carré reste inférieur à 2.

x = 1

while x * x < 2:

    x = x + 0.01

À la sortie, on a $x^2 \geqslant 2$ alors que la valeur précédente, $x - 0{,}01$, vérifie $(x-0{,}01)^2 < 2$. Donc

$$x - 0{,}01 < \sqrt{2} \leqslant x,$$

ce qui est un encadrement de $\sqrt{2}$ d'amplitude $0{,}01$. Pour une amplitude de $10^{-n}$, on prend un pas de $10^{-n}$.

Simuler une expérience aléatoire

La fonction randint(a, b) du module random renvoie un entier au hasard entre a et b inclus, chaque valeur étant équiprobable. randint(1, 6) simule un dé équilibré.

from random import randint

def jeu():

    n = 0

    while randint(1, 6) != 6:

        n = n + 1

    return n

jeu() compte le nombre de lancers avant d'obtenir un 6. Il vaut 0 si le premier lancer donne 6 (probabilité $\frac{1}{6}$) ; il vaut 1 si le premier n'est pas un 6 et le second est un 6 (probabilité $\frac{5}{6} \times \frac{1}{6}$).

Pour estimer la valeur moyenne, on répète l'expérience $N$ fois :

def moyenne(N):

    total = 0

    for i in range(N):

        total = total + jeu()

    return total / N

D'après la loi des grands nombres, quand $N$ est grand, la moyenne observée est en général proche de la valeur théorique.

Entraîne-toi★★★Pas commencé
On cherche une valeur approchée de $\sqrt{2}$ par balayage. On considère : a) Quelle propriété vérifie la valeur finale de x par rapport à $\sqrt{2}$ ? b) Donner la…

On cherche une valeur approchée de $\sqrt{2}$ par balayage. On considère :

x = 1

while x * x < 2:

    x = x + 0.01
  1. a) Quelle propriété vérifie la valeur finale de x par rapport à $\sqrt{2}$ ?
  2. b) Donner la valeur finale de x, au centième.
  3. c) Modifier le programme pour obtenir un encadrement de $\sqrt{2}$ d'amplitude $0,001$.
Résoudre
Entraîne-toi★★★Pas commencé
On lance un dé équilibré à six faces. On considère : a) Que représente la valeur renvoyée par jeu() ? b) Quelle est la probabilité que jeu() renvoie 0 ? Que…

On lance un dé équilibré à six faces. On considère :

from random import randint

def jeu():

    n = 0

    while randint(1, 6) != 6:

        n = n + 1

    return n
  1. a) Que représente la valeur renvoyée par jeu() ?
  2. b) Quelle est la probabilité que jeu() renvoie 0 ? Que renvoie-t-elle 1 ?
  3. c) Écrire une fonction moyenne(N) qui simule N parties et renvoie la moyenne des résultats de jeu().
Résoudre

L'essentiel

  • Une affectation x = expression calcule d'abord le membre de droite, puis range le résultat dans x ; un programme s'exécute ligne par ligne.

  • Une fonction def f(x): reçoit des arguments et renvoie un résultat avec return.

  • if … else choisit un bloc selon une condition ; a % b == 0 teste si $b$ divise $a$.

  • for i in range(a, b) répète un nombre connu de fois, avec b exclu ; while condition répète tant que la condition est vraie.

  • Pour suivre un programme, on dresse un tableau des valeurs des variables.

  • Un balayage de pas $10^{-n}$ donne un encadrement de $\sqrt{2}$ d'amplitude $10^{-n}$ ; randint permet de simuler des expériences aléatoires.

Voir tous les exercices de cette partie