====== Suite de Fibonacci : un premier programme ======
Voici un embryon non fonctionnel de programme. Il y manque alors des éléments (à la place des "???")
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
Calculs des premiers éléments de la suite de Fibonacci.
Référence : http://fr.wikipedia.org/wiki/Suite_de_Fibonacci
"""
# élément d'indice 0
i = 0
a = 0
print(i,a)
# élément d'indice 1
i = 1
b = 1
print(i,b)
# structure de répétition pour appliquer la règle de récurrence
max = 100 # indice du dernier terme (ou presque)
while ??? < max:
# il faut calculer les indices et éléments suivants de la suite
# et poursuivre avec les mêmes instructions
???
print(i,c) #quelque chose de ce genre
Un peu de réflexion pour se rendre compte qu'il faut comparer i à max, mais surtout qu'il faudra actualiser i, calculer le nouvel élément de la suite par la relation de récurrence et surtout remettre dans les variables a et b des éléments actualisés (nouveaux, ou décalés dans la file d'une position).
On propose alors ceci :
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
Calculs des premiers éléments de la suite de Fibonacci.
Référence : http://fr.wikipedia.org/wiki/Suite_de_Fibonacci
"""
# élément d'indice 0
i = 0
a = 0
print(i,a)
# élément d'indice 1
i = 1
b = 1
print(i,b)
# structure de répétition pour appliquer la règle de récurrence
max = 100 # indice du dernier terme (ou presque)
while i < max:
# il faut calculer les indices et éléments suivants de la suite
# et poursuivre avec les mêmes instructions
c = a + b
i = i + 1
print(i,c)
a = b
b = c
Mais avons-nous terminé ? Ce programme a-t-il toutes les caractéristiques d'un code Python utile ?
Non, car il ne fait que la sortie d'une série d'élément !
Il faudrait créer des fonctions utiles, dans la perspective de pouvoir les insérer dans des programmes plus vastes. Par exemple :
* une fonction fibonacci-element(i) qui donne l'élément i de la suite
* une fonction fibonacci-liste(n) qui donne tous les éléments de la suite jusqu'à l'élément n
* une fonction fibonacci-indice(nombre) qui donne l'indice de l'élément de valeur nombre, ou les deux indices dont les éléments sont les plus proches qui encadrent ce nombre.
* ...
En guise de préambule, on peut aussi regarder comment rendre un code python plus compact en groupant les commentaires avec les instructions, et en utilisant les affectations multiples (un signe "=" pour des affectations à plusieurs variables séparées par des virgules). Voilà ce que cela donne ((Pour décider de ce qui est mieux, c'est simplement une question de préférence personnelle))
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
Calculs des premiers éléments de la suite de Fibonacci.
Référence : http://fr.wikipedia.org/wiki/Suite_de_Fibonacci
"""
i, a = 0, 0 # élément d'indice 0
print(i,a)
i, b = 1, 1 # élément d'indice 1
print(i,b)
max = 100 # indice du dernier terme (ou presque)
while i < max: # structure de répétition pour appliquer la règle de récurrence
# indices et éléments suivants de la suite
i, c = i+1, a+b
print(i,c)
a, b = b, c
[[http://fr.wikipedia.org/wiki/Suite_de_Fibonacci#Applications|{{http://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Fibonacci_spiral_34.svg/200px-Fibonacci_spiral_34.svg.png }}]]On peut utiliser le module [[https://docs.python.org/3.6/library/turtle.html|turtle]] pour représenter un début de la spirale de Fibonacci. Il suffit d'ajouter quelque lignes au programme :
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
Calculs des premiers éléments de la suite de Fibonacci.
Référence : http://fr.wikipedia.org/wiki/Suite_de_Fibonacci
Représentation en spirale utilisant turtle
"""
from turtle import *
reset()
up()
forward(50)
down()
scale = 2
i, a = 0, 0 # élément d'indice 0
print(i,a)
i, b = 1, 1 # élément d'indice 1
print(i,b)
max = 12 # indice du dernier terme (ou presque)
while i < max: # structure de répétition pour appliquer la règle de récurrence
# indices et éléments suivants de la suite
i, c = i+1, a+b
print(i,c)
a, b = b, c
# xturtle moves :
circle(c*scale,90)
input('Tapez sur une touche pour arrêter !')
[[suite_de_fibonacci-3|Pour l'écriture de fonctions, allez à la page suivante !]]