Façons de calculer les carrés des entiers entre 1 et 5

Sur cette page cliquez les bouts de code pour les exécuter.

  1. La boucle for combinée à la fonction range est l'approche la plus directe :

    for i in range(1, 6):
        print(i**2)
    
  2. C'est aussi possible de combiner une boucle while avec l'incrémentation d'une variable à chaque itération de la boucle :

    i = 1
    while i <= 5:
        print(i**2)
        i = i + 1
    
  3. L'ordre des valeurs peut être inversé en utilisant une décrémentation :

    i = 5
    while i > 0:
        print(i**2)
        i = i - 1
    
  4. La sommation des nombres impairs avec une boucle while permet d'obtenir le même résultat sans utiliser l'opérateur ** :

    i = 1
    n = 1
    while i < 10:
        print(n)
        i = i + 2
        n = n + i
    
  5. Une fonction récursive est une autre approche qui a une certaine ressemblance avec la boucle while :

    def f(i, n):
        if i < 10:
            print(n)
            f(i + 2, n + i + 2)
    
    f(1, 1)
    
  6. Avec l'approche de programmation fonctionnelle une solution en une ligne est possible :

    list(map(lambda i: print((i+1)**2), range(5)))
    
  7. Les approches précédentes ont le mérite d'une certaine généralité contrairement à la solution suivante :

    print(1)
    print(4)
    print(9)
    print(16)
    print(25)
    
  8. Les résultats des calculs pourraient aussi être stockés dans un fichier CSV puis affichés dans un tableur et un graphique à barres :

    # Creer un fichier CSV contenant les carres.
    
    with open('carres.csv', 'w') as f:
        f.write('N,N**2\n')
        for i in range(1, 6):
            f.write(str(i) + ',' + str(i**2) + '\n')
    
    # L'afficher sous forme de tableur.
    
    show_file('carres.csv')
    
    # L'afficher sous forme de graphique a barres.
    
    chart(read_file('carres.csv'), mark='bar')
    
  9. Les résultats des calculs pourraient aussi se faire dessiner en utilisant la métaphore de la tortue :

    # Ce programme utilise la tortue pour dessiner
    # les nombres avec 7 segments.
    
    from turtle import hop, lt, rt, fd, pensize
    
    dist = 20  # longueur de chaque segment
    
    segments = {  # les 7 segments de chaque symbole
        ' ':0,
        '0':63, '1':12,  '2':118, '3':94,  '4':77,
        '5':91, '6':123, '7':14,  '8':127, '9':95
    }
    
    def print_char(c):  # dessiner un symbole
        lt(90)
        hop(); fd(dist)
        bits = segments[c]  # chaque bit = 1 segment
        for i in range(7):
            if (bits & 1) == 0: hop()
            fd(dist)
            bits >>= 1
            if i != 2: rt(90)
        hop(); fd(dist)
        lt(90)
        hop(); fd(dist/2)
    
    def print(n):  # imprimer un nombre
        for c in str(n):
            print_char(c)
        print_char(' ')
    
    hop(); fd(-175); pensize(5)
    
    for i in range(1, 6):  # calcul des carres
        print(i**2)
    

Code HTML pour la page ci-dessus

(voir https://github.com/codeboot-org/presentations/tree/main/html/direct/fr)
<!DOCTYPE html>
<html lang="fr">

<head>
  <meta charset="utf-8">
  <link rel="stylesheet" href="https://codeboot.org/4.0.0/codeboot.bundle.css">
  <script src="https://codeboot.org/4.0.0/codeboot.bundle.js"></script>
  <title>Calcul des carrés des entiers entre 1 et 5</title>
</head>

<body>


<h3>Façons de calculer les carrés des entiers entre 1 et 5</h3>


<p>Sur cette page <b>cliquez les bouts de code pour les exécuter.</b></p>

<ol>


<li>
<p>La boucle <samp>for</samp> combinée à la fonction <samp>range</samp>
est l'approche la plus directe :</p>

<!-- Animation automatique grâce au data-cb="a" -->
<pre style="width:32em; height:3.8em" data-cb="a">
for i in range(1, 6):
    print(i**2)
</pre>

<li>
<p>C'est aussi possible de combiner une boucle <samp>while</samp> avec
l'incrémentation d'une variable à chaque itération de la boucle :</p>

<!-- Animation rapide automatique grâce au data-cb="~animationSpeed=fast.a" -->
<pre style="width:32em; height:6.5em" data-cb="~animationSpeed=fast.a">
i = 1
while i &lt;= 5:
    print(i**2)
    i = i + 1
</pre>


<li>
<p>L'ordre des valeurs peut être inversé en utilisant une décrémentation :</p>

<!-- Animation automatique avec grosse police grâce au data-cb="~largeFont=true.a" -->
<pre style="width:32em; height:6.5em" data-cb="~largeFont=true.a">
i = 5
while i &gt; 0:
    print(i**2)
    i = i - 1
</pre>


<li>
<p>La sommation des nombres impairs avec une boucle <samp>while</samp> permet
d'obtenir le même résultat sans utiliser l'opérateur <samp>**</samp> :

<!-- Exécution automatique avec pause après 45 pas grâce au data-cb="e45" -->
<pre style="width:32em; height:9.3em" data-cb="e45">
i = 1
n = 1
while i &lt; 10:
    print(n)
    i = i + 2
    n = n + i
</pre>


<li>
<p>Une fonction récursive est une autre approche qui
a une certaine ressemblance avec la boucle <samp>while</samp> </p>

<!-- Exécution automatique avec pause après 34 pas grâce au data-cb="e34" -->
<pre style="width:32em; height:9.3em" data-cb="e34">
def f(i, n):
    if i &lt; 10:
        print(n)
        f(i + 2, n + i + 2)

f(1, 1)
</pre>


<li>
<p>Avec l'approche de programmation fonctionnelle une solution en une ligne
est possible :</p>

<!-- Exécution complète automatique grâce au data-cb="e" -->
<pre style="width:32em; height:2.6em" data-cb="e">
list(map(lambda i: print((i+1)**2), range(5)))
</pre>


<li>
<p>Les approches précédentes ont le mérite d'une certaine généralité
contrairement à la solution suivante :</p>

<!-- L'utilisateur doit démarrer l'exécution manuellement -->
<pre style="width:32em; height:7.9em" data-cb="">
print(1)
print(4)
print(9)
print(16)
print(25)
</pre>

<li>
<p>Les résultats des calculs pourraient aussi être stockés
dans un fichier CSV puis affichés dans un tableur et un
graphique à barres :</p>

<!-- Exécution complète automatique grâce au data-cb="e" -->
<pre style="width:32em; height:20.5em" data-cb="e">
# Creer un fichier CSV contenant les carres.

with open('carres.csv', 'w') as f:
    f.write('N,N**2\n')
    for i in range(1, 6):
        f.write(str(i) + ',' + str(i**2) + '\n')

# L'afficher sous forme de tableur.

show_file('carres.csv')

# L'afficher sous forme de graphique a barres.

chart(read_file('carres.csv'), mark='bar')
</pre>


<li>
<p>Les résultats des calculs pourraient aussi se faire dessiner
en utilisant la métaphore de la tortue :</p>

<!-- Exécution automatique avec pause après 1252 pas grâce au data-cb="e1252" -->
<pre style="width:32em; height:49.5em" data-cb="e1252">
# Ce programme utilise la tortue pour dessiner
# les nombres avec 7 segments.

from turtle import hop, lt, rt, fd, pensize

dist = 20  # longueur de chaque segment

segments = {  # les 7 segments de chaque symbole
    ' ':0,
    '0':63, '1':12,  '2':118, '3':94,  '4':77,
    '5':91, '6':123, '7':14,  '8':127, '9':95
}

def print_char(c):  # dessiner un symbole
    lt(90)
    hop(); fd(dist)
    bits = segments[c]  # chaque bit = 1 segment
    for i in range(7):
        if (bits &amp; 1) == 0: hop()
        fd(dist)
        bits &gt;&gt;= 1
        if i != 2: rt(90)
    hop(); fd(dist)
    lt(90)
    hop(); fd(dist/2)

def print(n):  # imprimer un nombre
    for c in str(n):
        print_char(c)
    print_char(' ')

hop(); fd(-175); pensize(5)

for i in range(1, 6):  # calcul des carres
    print(i**2)
</pre>


</ol>


</body>
</html>