Index de l'article

Etape 4 – Vers la solution

Le script du dessous est presque logique! Sauf que Python est un langage interprété ligne par ligne (Pour plus d'info voir ici) donc il va mettre 6 dans sac - 0 dans b puis t puis p - prendre la valeur de sac (donc 6) et se demander si cette valeur est supérieure ou égale à bpc et bpc est une variable qu'il ne connaît pas puisqu'elle n'est calculée que tout en bas!!!

Script

# initialisation variables
sac=6
b=0
t=0
p=0
# je cree la boucle
while sac >=bpc:
    p=p+1
    t=t+p
    sac=sac-t
    print(p,t,sac)
    bpc=t+p+1

Console

>>> %Run Triangulaire.py
Traceback (most recent call last):
  File "C:\Users\Pierre\Downloads\Triangulaire.py", line 7, in <module>
    while sac >=bpc:
NameError: name 'bpc' is not defined

Compréhension du script et du problème

  • La dernière ligne:
    bpc (pour billes prochain coup) = t (donc billes utilisées pour le dernier nbre triangulaire) + p+1 (car au nombre triangulaire suivant j’ai besoin de p+1 billes en plus
    Le tant que testera le contenu du sac restant avec le nombre de billes nécessaires
  • Le problème de définition de bpc vient du fait que si vous regardez le while, à cette ligne nous devons connaître la valeur de sac (ce qui est le cas) MAIS AUSSI le valeur de bpc. Or bpc n'est pas connu car il n’est calculée qu’en bas.
    La solution consiste à définir bpc avant. Comme je ne connais pas sa valeur je vais mettre 0, mais 1 marcherai aussi (par contre 100 ça coince, vous comprenez pourquoi?)

Script corrigé et déclaration d'un sac de 21 billes

# initialisation variables
sac=21
b=0
t=0
p=0
bpc=0
# je cree la boucle
while sac >=bpc:
    p=p+1
    t=t+p
    sac=sac-t
    print(p,t,sac)
    bpc=t+p+1

Console

>>> %Run Triangulaire.py
1 1 20
2 3 17
3 6 11
4 10 1

Amélioration du script

  • L'affichage n'est pas clair, alors améliorez le.
  • Comme nous connaissons input, utilisons le.

=> Modifier l'affichage pour qu'il devienne compréhensible en ajouter un peu de texte et en profiter pour permettre à l'utilisateur de saisir la valeur de son sac (car tout le monde ne possède pas 1000 billes ;). 

Pièce(s) jointe(s)
Download this file (Nombre triangulaire.odt)Nombre triangulaire.odt[ ]81 kB