Bonjour,
Pour ta deuxième version le bug provient de ceci:
result = ((n(n+1)(2*n+1))/(6)) + result
En effet python ne comprend pas la notation n(n+1), il faut que tu laisse apparaitre les opérations:
result = ((n*(n+1)*(2*n+1))/(6)) + result
Mais j'ai du mal à comprendre l'origine de cette fonction.
Pour moi ton premier code par contre ne fonctionne pas, même avec 20 en entré. La raison est simple, je m'explique: tu essaye de savoir le nombre d'étage de pierre on peut faire avec 20 pierres disposés en pyramide. Tu fais donc:
1 2 3 4 5 6 7 8 9 10
| result = 0
i = 1
maxPierres = int(input())
while result < maxPierres:
result = (i*i) + result
i = i + 1
print i
print result |
Le truc c'est que ton "while" va fonctionner jusqu'à ce que result soit supérieur à maxPierre. Or result représente le nombre de pierres que tu as placé donc lorsque tu aura result > maxPierre la boucle s'arrêtera mais tu aura dépassé le nombre max de pierre autorisés!
Mais bon...tu as moyen de te débrouiller =), une foi la boucle terminé il te suffit de revenir une étape avant!
Partager