Défi python, j ene trouves pas mon erreur

Résolu/Fermé
Captainbleu Messages postés 6 Date d'inscription dimanche 12 juin 2022 Statut Membre Dernière intervention 15 juin 2022 - Modifié le 14 juin 2022 à 12:14
Captainbleu Messages postés 6 Date d'inscription dimanche 12 juin 2022 Statut Membre Dernière intervention 15 juin 2022 - 15 juin 2022 à 08:31
Bonjour, j'apprends par la pratique de python notamment à l'aide de défi, mais là je sais grâce à des manipulations que mon erreur est au while mais je ne vois pas en quoi :


Si Nicolas Flamel est célèbre pour sa pierre philosophale, Léonard de Pise, de 200 ans son aîné, a aussi laissé sa trace chez les sorciers, en créant le vif d'or. Bien que les mouvements du vif d'or semblent erratiques, celui-ci a en fait pour fonction de joindre des points de l'espace dans un ordre préétabli.

Précisément, la position du vif d'or est définie par trois coordonnées : abscisse, ordonnée et hauteur. À partir de sa position (x, y, z), le vif va alors se déplacer en ligne droite vers sa position suivante donnée par : (y, z, (x + y + z) % n). Pour rappel, l'opération % donne le reste de la division entière, et n est ici une valeur positive, supérieure à 1, fixée à l'avance.

Le vif d'or entame toujours sa course en (0, 0, 1). Supposons que n soit égal à 85, alors le vif d'or joindra successivement les positions suivantes :

1.  (0, 0, 1)
2. (0, 1, 1)
3. (1, 1, 2)
4. (1, 2, 4)
5. (2, 4, 7)
6. (4, 7, 13)
7. (7, 13, 24)
8. (13, 24, 44)
9. (24, 44, 81)
10. (44, 81, 64) car (24 + 44 + 81) % 85 donne 64
11. (81, 64, 19) car (44 + 81 + 64) % 85 donne 19
...

Au bout d'un certain temps, le vif d'or reviendra à sa position d'origine et suivra donc à nouveau exactement le même parcours. Dans l'exemple précédent, cela se produit à la position 2977 :
...
2974. (0, 84, 1)
2975. (84, 1, 0)
2976. (1, 0, 0)
2977. (0, 0, 1)
2978. (0, 1, 1)
2979. (1, 1, 2)
...

En choisissant la valeur de n, on fait donc varier la trajectoire du vif d'or, ainsi que le temps qu'il met avant de revenir à sa position d'origine.

Léonard de Pise a calculé les 10 meilleures valeurs de n et les a entrées dans tous les vifs d'or. Il s'agit des valeurs de n inférieures ou égales à 200, qui donnent les parcours les plus longs (c'est-à-dire pour lesquels le vif d'or effectue le plus de mouvements avant de repasser par sa position initiale).

Afin d'essayer de prévoir les déplacements du vif d'or lors du prochain match de Quidditch, vous avez en tête de découvrir ces 10 valeurs.

Voici donc le programme que j'ai rédigé pour y répondre (je comptais faire la fonction qui prend les 10 plus grands, mais vu que cette partie ne fonctionne pas, j'ai préféré essayer de trouver une solution avant) :


nb=[0]
for n in range (1, 201):
  nb.append(1)
  x=0
  y=0
  z=1
  while not (x,y,z)==(0,0,1) or nb[n]==0:
    (x, y, z) = (y, z, (x + y + z) % n)
    nb[n]=nb[n]+1
    print (x,y,z)
print (nb)


Le print (x,y,z) était pour voir si les modifications étaient faites ou non et je voyais que du (0,0,0) en boucle, je ne vois pas pourquoi, pourriez-vous m'aider s'il vous plait ?
cordialement

3 réponses

yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
14 juin 2022 à 13:26
bonjour,
je ne vois pas que du (0,0,0) en boucle.
es-tu certain d'avoir partagé le bon programme?
0
Captainbleu Messages postés 6 Date d'inscription dimanche 12 juin 2022 Statut Membre Dernière intervention 15 juin 2022
Modifié le 14 juin 2022 à 20:13
Alors effectivement j'ai mal copié collé ici, ligne 7 c'est nb[n]==1.

Par contre ça ne change rien au fait que je me sois trompé quelque part mais je ne sais pas où
0
Captainbleu Messages postés 6 Date d'inscription dimanche 12 juin 2022 Statut Membre Dernière intervention 15 juin 2022
14 juin 2022 à 20:12
Au fait je ne peux plus modifier mon message mais j'ai fait une erreur dans mon copié collé, ligne 7 c'est nb[n]==1.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
14 juin 2022 à 21:52
Tu as en réalité trompé presque partout:
- tu écris "n est ici une valeur positive, supérieure à 1". as-tu affiché la valeur de n?
- as-tu vérifié que tu rentrais dans ta boucle while?
0
Captainbleu Messages postés 6 Date d'inscription dimanche 12 juin 2022 Statut Membre Dernière intervention 15 juin 2022
15 juin 2022 à 08:31
J'ai résolu seul le problème, c'est bon
0