Table des matières

Sujet précédent

Deux modules utiles

Sujet suivant

Un peu plus sur les listes

Exemples

Tableau de valeurs

On peut facilement obtenir le tableau de valeur d’une fonction sur un intervalle borné avec un certain pas.

Considérons la fonction g définie par g(x)=\sqrt{x^4+1}. Si l’on souhaite obtenir les valeurs prises par la fonction sur l’intervalle [2;3] avec un pas de 0,1 , voici ce que l’on peut faire :

from math import sqrt

def g(x):
    return sqrt(x**4 + 1)

x = 2
while x < 3.1:
    print("g(",x,") =",g(x))
    x = x + 0.1

En exécutant ce script, voici ce que l’on obtient

g( 2 ) = 4.12310562562
g( 2.1 ) = 4.52195754071
g( 2.2 ) = 4.94222621902
g( 2.3 ) = 5.38368832679
g( 2.4 ) = 5.8461611336
g( 2.5 ) = 6.32949445059
g( 2.6 ) = 6.83356422374
g( 2.7 ) = 7.35826745912
g( 2.8 ) = 7.90351820394
g( 2.9 ) = 8.46924435826
g( 3.0 ) = 9.05538513814

On peut ne pas trouver très beau les espaces après et avant les parenthèses, puis vouloir que les arrondis à 10^{-2} près. Pour cela, il suffit d’utiliser les possibilités de formatage de la fonction print comme cela.

from math import sqrt

def g(x):
    return sqrt(x**4 + 1)

x = 2
while x < 3.1:
    print("g({:0.1f}) = {:0.2f}".format(x, g(x)))
    x = x + 0.1

Et on obtient :

g(2.0) = 4.12
g(2.1) = 4.52
g(2.2) = 4.94
g(2.3) = 5.38
g(2.4) = 5.85
g(2.5) = 6.33
g(2.6) = 6.83
g(2.7) = 7.36
g(2.8) = 7.90
g(2.9) = 8.47
g(3.0) = 9.06

Evidemment dans les deux cas, le signe = est affiché, mais il s’agit bien entendu d’une approximation. On peut signaler au passage l’existence de la fonction round() qui donne l’arrondi à la précision demandée

>>> round(12.456, 1)   # arrondi de 12.456 au dixième
12.5
>>> a = 8.743159
>>> round(a, 2)        # arrondi de a au centième
8.74
>>> round(a)          # arrondi à l'unité
9

Intervalle de fluctuation

On peut demander d’écrire un programme qui permet de déterminer l’intervalle de fluctuation au seuil de 95% à partir d’une liste de valeurs, connaissant évidemment le centre de l’intervalle. Voici une proposition avec une précision de l’ordre du millième.

# -*- coding:utf-8 -*-

# première entrée : la série en liste
serie = [0.674, 0.679, 0.681, 0.692, 0.705, 0.711, 0.718, 0.718, 0.732, 0.760]

# deuxième entrée : le centre de l'intervalle
centre = 0.7

# le nombre de valeurs
effectif_total = float(len(serie))   # float() inutile à partir de la version 3

# initialisation du rayon de l'intervalle
rayon = 0

# initialisation du taux de valeurs dans l'intervalle
taux = 0

# boucle où on augmente le rayon d'un intervalle centré sur la valeur centre
# jusqu'à atteindre le taux de 95%
while taux < 0.95:
    # initialisation de la variable qui compte
    # le nombre d'éléments dans l'intervalle
    effectif = 0
    for valeur in serie:
        if centre - rayon <= valeur <= centre + rayon:
            effectif += 1
    taux = effectif / effectif_total
    rayon += 0.001      # pour une précision au millième

print("[%0.3f , %0.3f]" %(centre - rayon, centre + rayon))

Un jeu de dé

On lance un dé. Si le numéro est 1, 5 ou 6, alors c’est gagné, sinon c’est perdu. Ecrire un programme simulant ce jeu d’abord sans utiliser de liste puis en utilisant une liste. Voici une première proposition :

# -*- coding:utf-8 -*-

from random import randint

d = randint(1, 6)
print(d)

if d == 1:
    print("gagné")
else:
    if d == 5:
        print("gagné")
    else:
        if d == 6:
            print("gagné")
        else:
            print("perdu")

En utilisant elif, on peut simplifier le script comme ceci :

# -*- coding:utf-8 -*-

from random import randint

d = randint(1, 6)
print(d)

if d == 1:
    print("gagné")
elif d == 5:
    print("gagné")
elif d == 6:
    print("gagné")
else:
    print("perdu")

Et maintenant en utilisant une liste, on peut faire encore plus simple :

# -*- coding:utf-8 -*-

from random import randint

d = randint(1, 6)
print(d)

if d in [1, 5, 6]:
    print("gagné")
else:
    print("perdu")