Aller au contenu

Feuille d'exercices sur Python (spé mathématiques)

Un interpréteur Python est fourni ci-dessous et en bas de page pour pouvoir tester les programmes, si nécessaire.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

En cas de doute n'hésitez pas à ajouter des print(nom_de_la_variable) pour mieux comprendre ce qui se passe...

Des exercices pour comprendre

Exercice 1

On considère la fonction suivante, où \(n\) est un entier naturel:

1
2
3
4
def prog(n):
    while n>10:
        n=n-10
    return n
  1. Quelle est la valeur retournée par cet algorithme pour \(n = 11\) ?

  2. Quelle est la valeur retournée par cet algorithme pour \(n = 35\) ?

  3. Quelle est la valeur retournée par cet algorithme pour \(n = 40\) ?

Corrigé
  1. La valeur retournée est 1
  2. La valeur retournée est 5
  3. La valeur retournée est 10

Exercice 2

On considère le programme suivant, où S est un nombre décimal :

1
2
3
4
5
6
def annee(S):
    n=0
    while S<8000:
        S=S*1.05
        n=n+1
    print(n,S)
  1. Appliquer ce programme pour \(S = 6500\).

    On place 6500€ à intérêts composés au taux semestriel de 5%.

  2. Au bout de combien de semestres le capital acquis sera-t-il de plus de 8000€ ?

  3. Que faut-il modifier dans le programme pour déterminer au bout de combien de semestres le capital acquis dépassera 10000€ ?

Corrigé
  1. Il retourne \(n=5\) et \(S \approx 8295.83\)

  2. Au bout de 5 semestres le capital acquis dépassera 8000€

  3. On remplace la troisième ligne par while S<10000.

Exercice 3

On considère le programme suivant:

1
2
3
4
5
6
7
8
9
a=0
b=1
k=1
while k<=5:
    u=a+b
    a=b
    b=u
    k=k+1
print(u)
  1. Que fait ce programme ? L'exécuter et préciser le résultat final affiché (on mettra le détail des étapes et les résultats intermédiaires en les présentant dans un tableau par exemple).

  2. Proposer une relation de récurrence permettant d'expliquer ce que ce programme permet de calculer.

Corrigé
  1. Au départ \(a=0\), \(b=1\) et \(k=0\).

    Le tableau donne les valeurs des variables à la fin de chaque exécution de la boucle while.

    Au départ \(a=0\), \(b=1\) et \(k=0\).

    \(u\) \(a\) \(b\) \(k\)
    1 1 1 2
    2 1 2 3
    3 2 3 4
    5 3 5 5
    8 5 8 6
  2. On reconnaît la suite de Fibonacci. \(u_{n+2}=u_{n+1}+u_{n}\).

Exercice 4

La suite \((u_n)\) est définie pour tout entier naturel \(n\) non nul.

La fonction ci-dessous permet de calculer son terme d'indice \(n\).

1
2
3
4
5
6
def terme(n):
    u=n
    for i in range(1,n+1):
        u=u+i(i-1)
    u=u*(1/n)
    return u
  1. Faire tourner la fonction pour \(n = 3\). Remplir un tableau décrivant l'évolution de \(u\). Que vaut \(u_3\) ?

  2. Même chose pour \(n = 4\).

  3. Exprimer le terme général de \(u_n\) en fonction de \(n\) sous forme d'une somme.

  4. a. Un tableur fournit les 9 premiers termes de la suite \((u_n)\).

    \(n\) \(1\) \(2\) \(3\) \(4\) \(5\) \(6\) \(7\) \(8\) \(9\)
    \(u_n\) 0 1 2.67 5 8 11.67 16 21 26.67
    \(3u_n\) 0 3 8 15 24 35 48 63 80

    À l'aide de la troisième ligne, donnant les 9 premières valeurs de \(3u_n\), conjecturer l'expression de \(u_n\) en fonction de \(n\).

    b. Montrer que pour tout \(n \in \mathbb{N}\), \(u_{n+1}=\dfrac{1}{n+1} \times (nu_n+n(n+1))=\dfrac{nu_n}{n+1}+n\).

    c. Démontrer par récurrence la conjecture du a.

Corrigé
  1. Avant la boucle for, i n'est pas affecté et u vaut 3.

    u i
    3 1
    5 2
    11 3

    À la fin du programme, on retourne \(u_3=\dfrac{11}{3}\).

  2. Avant la boucle for, i n'est pas affecté et u vaut 4.

    u i
    4 1

Exercice 5

  1. Soit \(f\) la fonction définie par \(f(x)=x^3-3x^2+2\).

    a. Étudiez le sens de variation de \(f\).

    b. Calculer \(f(-20)\) et \(f(30)\).

    c. Déterminer le nombre de solutions de l'équation \(f(x)=0\) (Justifier).

  2. Programme

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    a=float(input("Entrez la borne gauche"))
    b=float(input("Entrez la borne droite"))
    
    if f(b)*f(a)<=0:
        while b-a>10**(-5):
            if f((a+b)/2)*f(a)<=0:
                b=(a+b)/2
            else:
                a=(a+b)/2
    print(a,b)
    

    a. Qu'implique la condition f(b)*f(a)<=0 sur \(f(b)\) et \(f(a)\) ?

    b. Que représente \(\dfrac{a+b}{2}\) par rapport à \(a\) et \(b\) ?

    c. Que fait ce programme ?

    d. Copier/coller le programme dans l'interpréteur Python ci-dessous.

    e. Que se passe-t-il si l'utilisateur entre les valeurs \(a=-20\), \(b=30\) ? \(a=-20\) et \(b=3\) ? \(a=0\) et \(b=3\) ?

Exercice 6

Soit le programme:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
h=0.1
x=0
maxi=0
while x<1:
    x=x+h
    y=x*sqrt(1-x**2)
    if y>maxi:
        maxi=y
        c=x
print(c,maxi)
  1. À quelle ligne peut-on lire la fonction utilisée ?

  2. Que fait ce programme ? À quoi correspondent c et maxi?

  3. Sans exécuter ce programme, indiquer le couple de valeurs obtenu.

  4. Quelle ligne du programme doit-on modifier pour étudier la fonction définie par \(f(x)=x\ln{x}-x\) ?

  5. Soit la fonction définie sur \([-1;1]\) par \(f(x)=x\sqrt{1-x^2}\). Étudier le sens de variation de cette fonction.

    Le résultat obtenu par le programme est-il cohérent avec les résultats théoriques ?

Corrigé
  1. à la ligne 6

  2. Ce programme retourne le maximum de la fonction \(f(x)=x\sqrt{1-x^2}\) sur l'intervalle \([0;1]\), ainsi que son abscisse.

  3. Le programme retourne \(0.7\) et \(f(0.7) \approx 0.499899\).

  4. On doit remplacer y=x*sqrt(1-x**2) par y=x*ln(x)-x.

  5. Des maths faciles !

Exercice 7

Soit la fonction \(f\) définie sur \(\mathbb{R}\) par \(f(x)=4e^{0.5x}-5\).

On considère le programme en Python suivant:

1
2
3
4
5
6
7
def test(p):
    x=0
    y=-1
    while y<0:
        x=x+p
        y=f(x)
    return (x-p,x)

a. On entre une valeur de \(p\) égale à \(0.1\). Quelles sont les valeurs renvoyées ?

b. On a fait fonctionner le programme avec une certaine valeur de \(p\) et on a obtenu en sortie les nombres \(0.44\) et \(0.45\). Quelle valeur de \(p\) avait-on choisie en entrée ?

c. On entre une valeur de \(p\) égale à \(0.001\). Quelles sont les valeurs retournées ?

Exercice 8

On suppose que l'on dispose d"une fonction \(f\) continue sur \(\mathbb{R}\), de deux valeurs \(a\) et \(b\) réelles telles que \(a<b\) et d'un nombre réel \(p\).

On considère alors le programme en Python suivant:

1
2
3
4
5
s=a
while s<b:
    if f(s)*f(s+p)<0:
        print(s)
    s=s+p
  1. Prévoir ce que ce programme va afficher pour \(f(x)=3x-1\), \(a=0\), \(b=1\) et \(p=0.1\).

  2. On suppose dans cette question que l'on a \(f(x)=3x-1\), \(a=0\), \(b=1\) et \(p=0.1\).

    a. Pourquoi ce programme s'arrête-t-il toujours ? Peut-on prévoir le nombre maximal d'étape qu'il aura à accomplir ?

    b. Expliquer pourquoi il n'y a qu'une seule valeur affichée par ce programme. Pour quelle(s) valeur(s) de \(p\) affiche-t-il \(0.2\) ? Peut-il afficher \(0.1\) ?

  3. Expliquer ce que permet d'afficher ce programme en général. (\(f\),\(a\) et \(b\) étant quelconques).

Exercice 9

Dans un lycée, un code d'accès à la photocopieuse est attribué à chaque professeur. Ce code à quatre chiffres choisis dans la liste [0,1,2,3,4,5,6,7,8,9], chaque chiffre pouvant être répété à l'intérieur d'un même code. Exemples: \(0027\) et \(4879\).

  1. Combien de codes sont possibles ?

  2. Ce code permet aussi de définir un identifiant pour l'accès au réseau informatique. L'identifiant est constitué du code précédent (noté \(n\)) et d'une clé calculée avec le programme ci-dessous:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
p=n
s=0
k=1
while k<=4:
    u=p%10
    k=k+1
    s=s+k*u
    p=(p-u)//10
r=s%7
c=7-r
print(c)

Quel est l'identifiant associé au code 2282 ?

Exercice 10

Déterminer le nombre affiché en sortie du programme ci-dessous, si on le fait fonctionner pour \(n=3\).

1
2
3
4
5
6
7
8
i=0
a=0
b=0
while i<n:
    i=i+1
    a=46+a
    b=a+b
print(b)

Exercice 11

On considère la fonction suivante:

1
2
3
4
5
6
7
8
9
u=1
S=1
i=0
while i<n:
    u=2u+1-i
    S=S+u
    i=i+1
print(u)
print(S)
  1. Justifier que, pour \(n=3\), l'affichage obtenu est \(11\) pour \(u\) et \(21\) pour S.

  2. Reproduire et compléter le tableau suivant :

Valeur de \(n\) \(0\) \(1\) \(2\) \(3\) \(4\) \(5\)
Affichage pour \(u\) \(11\)
Affichage pour \(S\) \(21\)

Exercice 12

Voici un programme qui permet de réaliser une simulation:

1
2
3
4
5
6
7
8
9
import random

L=[0,0,0,0,0,0]

for i in range(n):
    d=random.randint(1,6)
    L[d-1]=L[d-1]+1

print(L)

Décrire l'expérience que permet de simuler ce programme.

Corrigé

Ce programme permet de simuler n fois le lancer d'un dé et retourne une liste qui contient le nombre de fois que le 1 est obtenu, le nombre de fois que le 2 est obtenu, le nombre de fois que le 3 est obtenu,...

RAPPELS

  • L.append(u) ajoute l'élément u à la liste L, en dernière position.
  • len(L) renvoie le nombre d'éléments dans la liste.
  • L[3] renvoie le 4ème élément de la liste (décalage car L[0] est le premier).
  • L[3]=6 remplace le 4ème élément par 6.
  • L=[3*n for n in range(4)] affecte à L la liste [0,3,6,9].

Exercice 13

Soit le programme suivant:

1
2
3
4
5
6
L=[-12,-3,5,18,-15,0,17,-23]
R=[]
for i in range(len(L)):
    if L[i]>=0:
        R.append(L[i])
print(R)

Expliquer le fonctionnement de ce programme et donner ce qu'il affiche.

Corrigé

Ce programme teste si chaque élément de la liste L est positif et stocke cet élément dans la liste R si c'est le cas.

Des exercices du type baccalauréat

Exercice 14

Soit \(\left(u_n\right)\) la suite définie par \(u_0=-8\) et pour tout \(n\in \mathbb{N}\) : \(u_{n+1}=5-4u_n\).

Compléter les deux algorithmes afin qu'ils renvoient la valeur de \(u_{10}\) .

    u=...
    for i in range(...):
        u=...
    return ...
    u=...
    n=...
    while ... :
        u=...
        n=...
    return ...

Exercice 15

Soit \(\left(u_n\right)\) la suite définie par \(u_0=-8\) et pour tout \(n\in \mathbb{N}\) : \(u_{n+1}=5-4u_n\).

Compléter les deux algorithmes afin qu'ils renvoient la liste de tous les termes jusqu'à \(u_{10}\).

    u=...
    L=[u]
    for i in range(...):
        u=...
        L.append(u)
    return ...
    u=...
    n=...
    L=[u]
    while ... :
        u=...
        n=...
        L.append(u)
    return ...

Exercice 16

  1. Soit \(\left(u_n\right)\) la suite définie par \(u_0=6\) et pour tout \(n\in \mathbb{N}\) : \(u_{n+1}=1,5u_n+2\).

    On admet que \(\left(u_n\right)\) diverge vers \(+\infty\).

    Compléter l'algorithme afin qu'il renvoie le premier rang à partir duquel \(u_n>148\).

        u=...
        n=...
        while ... :
            u=...
            n=...
        return ...
    
  2. Soit \(\left(u_n\right)\) la suite définie par \(u_1=-5\) et pour tout \(n\in \mathbb{N}\) : \(u_{n+1}=\sqrt{u_n+6}\).

    On admet que \(\left(u_n\right)\) converge vers \(3\).

    Compléter l'algorithme afin qu'il renvoie le premier rang \(n\) à partir duquel \(3-u_n<10^{-3}\).

        u=...
        n=...
        while ... :
            u=...
            n=...
        return ...
    

Exercice 17

Soit \(\left(u_n\right)\) la suite définie par \(u_0=3\) et pour tout \(n\in \mathbb{N}\) : \(u_{n+1}=u_n+4\).

Compléter les algorithmes suivants afin qu'ils renvoient la valeur de la somme \(S=u_0+u_1+u_2+...+u_{14}\).

    u=...
    S=...
    for i in range(...):
        u=...
        S=...
    return ...
    u=...
    n=...
    S=...
    while ... :
        u=...
        n=...
        S=...
    return ...

Exercice 18

Dans chaque cas, expliquer ce que renvoie la fonction décrite dans l'algorithme, en explicitant la suite concernée.

def Algo1(n):
    u=5
    for i in range(n):
        u=-3*u+4
    return u
def Algo2(n) :
    u=-5
    for i in range(n):
        u=u-6*i
    return u
def Algo3(A):
    u=1
    n=0
    while u<=A:
        u=1.4*u+1
        n=n+1
    return n
def Algo4(A) :
    u=1354
    n=1
    while u>A:
        u=0.5*u
        n=n+1
    return n
def Algo5(n):
    u=1
    S=u
    for i in range(n):
        u=u+5
        S=S+u
    return S
def Algo6(A) :
    u=1354
    n=0
    S=u
    while S<A:
        u=2*u+2
        n=n+1
        S=S+u
    return n

Exercice 19

On admet que la fonction \(f\) définie pour tout \(x\in\left[-2;1\right]\) par \(f(x)=x^3+x+1\) est strictement croissante sur \(x\in\left[-2;1\right]\) et s'annule en un réel \(\alpha\in\left[-2;1\right]\).

  1. Que retourne l'algorithme suivant ? interpréter le résultat.

        a=-2
        p=0.01
        while a**3+a+1<0 :
            a=a+p
        return a-p,a
    
  2. Que permet de renvoyer l'algorithme suivant ?

    def Balay(k):
        a=-2
        p=10**(-k)
        while a**3+a+1<0 :
            a=a+p
        return a-p,a
    
  3. Enfin, que permet de renvoyer l'algorithme suivant ?

        def fonct(x):
            y=x**3+x+1
            return y
    
        def Balay(k):
            a=-2
            p=10**(-k)
            while fonct(a)<0 :
                a=a+p
            return a-p,a
    

Exercice 20

Fonction croissante

On admet que la fonction \(f\) définie pour tout \(x\in\left[-2;1\right]\) par \(f(x)=x^3+x+1\) est strictement croissante sur \(x\in\left[-2;1\right]\) et s'annule en un réel \(\alpha\in\left[-2;1\right]\).

  1. À quoi sert l'algorithme suivant ?

        a=-2
        b=1
        while b-a>0.01:
            c=(a+b)/2
            if c**3+c+1<0:
                a=c
            else:
                b=c
        return a,b
    

    Autres versions possibles :

        def Dicho(p):
            a=-2
            b=1
            while b-a>10**(-p):
                c=(a+b)/2
                if c**3+c+1<0:
                    a=c
                else:
                    b=c
        return a,b
    
        def fonct(x):
            y=x**3+x+1
            return y
    
        def Dicho(p):
            a=-2
            b=1
            while b-a>10**(-p):
                c=(a+b)/2
                if fonct(c)<0:
                    a=c
                else:
                    b=c
        return a,b
    

Fonction monotone

Adaptation à une fonction monotone dont on ne sait pas si elle est croissante ou décroissante :

    def Dicho(p):
        a=-2
        b=1
        while b-a>10**(-p):
            c=(a+b)/2
            if (a**3+a+1)*(c**3+c+1)>0:
                a=c
            else:
                b=c
    return a,b
    def fonct(x):
        y=x**3+x+1
        return y

    def Dicho(p):
        a=-2
        b=1
        while b-a>10**(-p):
            c=(a+b)/2
            if fonct(a)*fonct(c)>0:
                a=c
            else:
                b=c
    return a,b
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier