Avancer

Section 1.4 Exercices

Devinez ce qui est affiché par chacun des blocs de codes suivants.

  1. if 5 > 10:
        print('Gare')
    elif 8 != 9:
        print('aux')
    else:
        print('conditionnelles!')
    
  2. if 5 > 10:
        print('Gare')
    elif 8 == 9:
        print('aux')
    else:
        print('conditionnelles!')
    
  3. if 5 > 10:
        print('Gare')
    elif 8 == 9:
        print('aux')
    
  4. x = 10
    y = 20
    z = 30
    print('Gare')
    if x == 10:
        print('aux')
        if y == 20:
            print('conditionnelles!')
        else:
            print('gorilles!')
    elif y == 20:
        print('Danger!')
    else:
        print('Vive les')
        if z == 30:
            print('fraises!')
        else:
            print('bleuets!')
    print('Bye!')
    
Indication

Si vous ne parvenez pas à suivre pas à pas l'évaluation de ce code à la main, utilisez l'application Python Tutor.

  1. Cliquez sur Start visualizing your code now.
  2. Assurez-vous que le langage Python est sélectionné; la version est peu importante.
  3. Copiez le code et collez-le dans la fenêtre.
  4. Cliquez sur Visualize Execution.
  5. Cliquez sur Next autant de fois que nécessaire.
Réponse
  1. aux
    
  2. conditionnelles!
    
  3. \begin{equation*} \end{equation*}
  4. Gare
    aux
    conditionnelles!
    Bye!
    
  1. Évaluez le code suivant à la main pour déterminer ce qu'il affiche.

    from math import sqrt  # importe la fonction racine carrée
    a = 1.0
    b = -6.0
    c = 9.0
    delta = b ** 2 - 4 * a * c
    if delta > 0:
        x1 = (- b - sqrt(delta)) / (2 * a)
        x2 = (- b + sqrt(delta)) / (2 * a)
        print(x1, x2)
    elif delta == 0:
        x0  = - b / (2 * a)
        print(x0)
    else:
        print('pas de racines')
    

  2. Même question avec c = 2.0 à la place de c = 9.0.

Indication

Si vous ne parvenez pas à suivre pas à pas l'évaluation de ce code à la main, utilisez l'application Python Tutor.

Réponse
  1. 3.0
    
  2. (0.3542486889354093, 5.645751311064591)
    

Évaluez le code suivant à la main pour déterminer ce qu'il affiche.

capital = 2500
taux = 0.07
n = 3
for k in range(1, n+1):
    capital = capital * (1 + taux)
print(capital)

Indication

Cliquez sur Next autant de fois que nécessaire dans l'application Python Tutor.

Réponse
3062.6075

Évaluez le code suivant à la main pour déterminer ce qu'il affiche.

a = 0.0
b = 1.0
n = 4
deltaX = (b - a) / n
xi = a
while xi < b:
    print(xi)
    xi = xi + deltaX

Indication

Cliquez sur Next autant de fois que nécessaire dans l'application Python Tutor.

Réponse
0.0
0.25
0.5
0.75

Calculez la somme des entiers de 1 à 99 inclus

  1. à l'aide d'une boucle for;

  2. à l'aide d'une boucle while.

Solution

La réponse est

\begin{equation*} \sum_{k=1}^{99}k=4950. \end{equation*}

On peut l'obtenir grâce à l'un ou l'autre des blocs de code qui suivent.

  1. somme = 1
    for k in range(2, 99+1):
        somme = somme + k
    print(somme)
    
  2. somme = 1
    k = 2
    while k <= 99:
        somme = somme + k
        k = k + 1
    print(somme)
    

Affichez tous les nombres impairs compris entre 30 et 55 inclus

  1. à l'aide d'une boucle for;

  2. à l'aide d'une boucle while.

Avez-vous une préférence?

Solution

Il s'agit de la liste

\begin{equation*} 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55. \end{equation*}

On peut l'afficher grâce à l'un ou l'autre des blocs de code qui suivent.

  1. for k in range(15, 27+1):
        print(2 * k + 1)
    
  2. k = 31
    while k < 56:
        print(k)
        k = k + 2
    

Je préfère la boucle while, car elle évite d'avoir à déterminer les bornes 15 et 27 au préalable.

Complétez le code suivant pour qu'il affiche tous les multiples de 4 compris strictement entre 57 et 89.

k = 60
while
    print(k)
    k =

Solution
k = 60
while k < 89:
    print(k)
    k = k + 4

On considère la suite \(\{x_n\}\) définie par récurrence de la façon suivante :

\begin{equation*} x_3=7\quad\text{et}\quad x_{n+1}=x_n\cdot\frac{n}{5n+2}\quad\text{pour tout}\;n\geq 3. \end{equation*}

On admet qu'elle converge vers \(0\) en décroissant.

  1. Complétez le code suivant afin qu'il affiche les cinq premières valeurs de la suite.

    n = 3
    x = 7.0
    while n <
        print(x)
        x =
        n = n + 1
    

    Quelles sont ces valeurs?

  2. Complétez le code suivant afin qu'il affiche la plus petite valeur de \(n\) pour laquelle on ait \(x_n\leq 10^{-9}\text{.}\)

    n =
    x = 7.0
    while
        x = x * n / (5 * n + 2)
        n =
    print(n)
    

    Quelle est cette valeur?

Solution
  1. Il s'agit des 5 nombres qui suivent.

    7.0
    1.23529411765
    0.224598930481
    0.0415923945336
    0.00779857397504
    

    On peut les afficher à l'aide du bloc de code suivant.

    n = 3
    x = 7.0
    while n < 8:
        print(x)
        x = x * n / (5 * n + 2)
        n = n + 1
    

  2. Il s'agit de

    \begin{equation*} n=17 \end{equation*}

    et on peut l'afficher à l'aide du bloc de code suivant.

    n = 3
    x = 7.0
    while x > 10 ** (-9):
        x = x * n / (5 * n + 2)
        n = n + 1
    print(n)
    

On considère la suite \(\{a_n\}\) définie par récurrence de la façon suivante :

\begin{equation*} a_0=1\quad\text{et}\quad a_{n+1}=\sin(a_n)\quad\text{pour tout}\;n\geq 0. \end{equation*}

On admet qu'elle converge vers \(0\) en décroissant.

Complétez le code suivant afin qu'il affiche la plus petite valeur de \(n\) pour laquelle on ait \(a_n\leq 0{,}01\text{.}\)

from math import sin  # importe la fonction sinus
n = 0
a =
while
    n =
    a = sin(a)
print(n)

Quelle est cette valeur?

Solution

Il s'agit de

\begin{equation*} n=29\,992 \end{equation*}

et on peut l'afficher à l'aide du bloc de code suivant.

from math import sin  # importe la fonction sinus
n = 0
a = 1.0
while a > 0.01:
    n = n + 1
    a = sin(a)
print(n)

On s'intéresse à la suite \(\{s_n\}\) définie par récurrence de la façon suivante :

\begin{equation*} s_0=14\quad\text{et}\quad s_{n+1} = \begin{cases} s_n/2&\text{si}\;s_n\;\text{est pair,}\\ 3s_n+1&\text{sinon,} \end{cases} \quad\text{pour tout}\;n\geq 0. \end{equation*}

Calculez les \(21\) premiers termes de cette suite à l'aide d'une boucle for.

Solution

En partant de \(14\text{,}\) les 21 premiers termes de cette suite sont

\begin{equation*} 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1. \end{equation*}

On peut les afficher à l'aide du bloc de code suivant.

s = 14
for n in range(1, 21+1):
    print(s)
    if s % 2 == 0:
        s = s / 2
    else:
        s = 3 * s + 1

Cliquez sur Next autant de fois que nécessaire dans l'application Python Tutor si vous voulez suivre pas à pas l'évaluation du code qui précède.

L'assignation simultanée est très pratique pour échanger le contenu de deux variables \(\text{x}\) et \(\text{y}\) : la ligne de code x, y = y, x suffit. Voir la remarque 1.1.1.

Et si le langage utilisé ne permet pas les assignations simultanées?

Complétez le code suivant avec des \(\text{x}\) et des \(\text{y}\) seulement, afin qu'il échange le contenu de \(\text{x}\) et de \(\text{y}\text{.}\)

# avant l'échange
x = 5
y = 3
print(x, y)

# échange
variableTemporaire =
x =
  = variableTemporaire

# après l'échange
print(x, y)

Solution
# avant l'échange :
x = 5
y = 3
print(x, y)

# échange :
variableTemporaire = x
x = y
y = variableTemporaire

# après l'échange :
print(x, y)

Cliquez sur Next autant de fois que nécessaire dans l'application Python Tutor si vous voulez suivre pas à pas l'évaluation du code qui précède.

La suite de Fibonacci est définie par récurrence de la façon suivante :

\begin{equation*} F_1=F_2=1\quad\text{et}\quad F_n=F_{n-1}+F_{n-2}\quad\text{pour tout}\;n\geq 3. \end{equation*}

Calculez \(F_{100}\) à l'aide d'une boucle for.

Solution

Le centième terme de cette suite est

\begin{equation*} 354\,224\,848\,179\,261\,915\,075. \end{equation*}

On peut l'afficher à l'aide du bloc de code suivant

a = 1
b = 1
for n in range(3, 100+1):
    a, b = b, a + b
print(b)

Cliquez sur Next autant de fois que nécessaire dans l'application Python Tutor si vous voulez suivre pas à pas l'évaluation du code qui précède.