Python: La Suite De Fibonacci
Je suis juste essayer d'améliorer mes compétences en programmation et en faisant quelques fonctions de base.
Je veux remplir une liste avec fibonacci valeurs, mais je pense que mon code donne la somme de tous les nombres mis en place et des impressions à la place..
numberlist = []
i = 0
for i in range(20):
numberlist.append(i)
print numberlist
fibonaccinumbers = []
for n in numberlist:
def fib(n):
a, b = 0, 1
for i in range(n):
a, b = b, a + b
return a
a = fib(n)
fibonaccinumbers.append(a)
print a
Où ai-je mal tourné?
+1 de Toute question qui commence par "j'ai essayé d'améliorer mes compétences" mérite un upvote et une attention immédiate
Mais ses vrai, j'ai juste écris ceci pour être plus compétents dans la programmation..
et une fois que vous vous habituez à elle, vous vous demanderez pourquoi d'autres langues ne peut pas gérer quelque chose d'aussi propre que plusieurs valeurs de retour
J'ai été parfaitement honnête! L'amélioration est la plus noble objectif d'un programmeur
Mais ses vrai, j'ai juste écris ceci pour être plus compétents dans la programmation..
a, b = b, a + b
est parfaitement bien en Python.et une fois que vous vous habituez à elle, vous vous demanderez pourquoi d'autres langues ne peut pas gérer quelque chose d'aussi propre que plusieurs valeurs de retour
J'ai été parfaitement honnête! L'amélioration est la plus noble objectif d'un programmeur
OriginalL'auteur Da Bx | 2013-03-08
Vous devez vous connecter pour publier un commentaire.
Bien, l'impression de la valeur finale.
Aussi certains plus de commentaires sur ton code:
Vous n'avez pas besoin d'initialiser
i
là, la boucle for fait pour vous. Aussi, vous pouvez simplifier l'ensemble du bloc il suffit de faire ceci:Et étant donné que vous n'avez pas vraiment besoin de cette liste, vous n'avez pas besoin de construire que dans l'ensemble mais il vous suffit d'exécuter
for n in range(20)
plus tard.Alors vous êtes redefinining votre
fib
fonction à l'intérieur de la boucle, encore et encore. Vous devez définir à l'extérieur et il suffit de le réutiliser.Aussi, quand vous savez que vous voulez créer une liste de plusieurs nombres de fibonacci, il aide à enregistrer tous les numéros de vous calculer entre les deux. De cette façon, vous n'avez pas à faire les mêmes choses encore et encore. Vous pouvez également utiliser un générateur de fonction pour faire que tous les plus facile:
Au lieu d'itération sur une plage et en appelant
next
sur le générateur manuellement, vous pouvez aussi utiliser le-recette de itertools de le faire comme cela:
Sur les générateurs
Un générateur est une fonction Python qui génère une séquence de valeurs de retour. Les valeurs sont générées paresseusement, cela signifie que lorsque vous demande. Vous créez un générateur en utilisant simplement
yield
au lieu dereturn
. Unyield
sera “retour” d'une valeur et d' pause le générateur. La prochaine fois que vous demandez une valeur, le générateur va continuer là où il l'avait laissé.À l'aide d'un générateur vous permet de créer une interminable séquence. Comme vous le voyez dans la définition de
fibGenerator
ci-dessus, il est sans fin, tandis que la boucle qui a unyield
à l'intérieur. Comme le générateur s'arrête, il ne raccrochez pas en dépit de cette boucle.Voici un rapide auto-explanationary exemple:
La
next
fonction est la fonction intégrée qui demande de la prochaine valeur de la itérable. Un objet iterable est quelque chose que vous pouvez effectuer une itération (par exemplefor x in iterable: ...
); et un générateur est aussi un objet iterable.Hah, d'abord! 😛 ^^
La meilleure explication de l'instruction rendement que j'ai vu. Il fit tout à fait dans mes expériences sur les nombres de Fibonacci. Merci!!!!
OriginalL'auteur poke
Désolé, je suis un idiot. J'ai l'impression de " a " qui est la dernière itération de calcul de fibonacci..
J'aurais eu l'impression de ma liste à la place.
Merde...
for n in range(20)
au lieu defor n in numberlist
et fait tout le travail dans le début. 3) je vous recommande de regarder dans des interprétations de la liste, la deuxième boucle pourrait ressembler à quelque chose comme:fibonaccinumbers = [fib(n) for n in range(20)]
OriginalL'auteur Da Bx
Le problème est sur la dernière ligne. Une distraction, j'en suis sûr: vous devez être l'impression de la liste, pas
a
.Quelques autres conseils:
1: Ce bloc entier est juste recréer la liste renvoyée par
range
:Attribution
i = 0
est également discutable. Au lieu de cela, essayez:En python 3, appel
list(range(20))
, depuisrange
ne crée pas un à part entière de la liste.2: la redéfinition de la
fib
fonction à chaque passage de la boucle ne crée pas de problèmes, mais n'est sûrement pas nécessaire. Déplacer la définition à l'extérieur 🙂OriginalL'auteur slezica
Dans l'esprit de l'amélioration des compétences en programmation: vous pouvez utiliser un générateur et itertools.islice() pour obtenir la liste de la première
n
nombres de fibonacci:De sortie
OriginalL'auteur jfs
Pensé que je voudrais partager quelques pyLove:
de sortie est:
ou:
de sortie est:
OriginalL'auteur elmiguel
J'ai condensé et a pris à bord sur le fait que "plage" ou au moins list(range()) crée sa propre liste:
Il semble fonctionner, l'impression à chaque valeur de fibonacci jusqu'à la 20ème version. Comment est-ce que je peux appeler 'fib(n)' à l'extérieur de la def sans étrangeté, tels que:
Qui a été le style que j'ai utilisé avant. Dans tous les cas, le programme semble bonne pour l'instant?
fib
une fois.)Gotcha, je vais voir si je peux le faire.
Vous pouvez consulter toutes les réponses... Aussi veuillez ne pas répondre à votre propre question juste pour ajouter d'autres questions, mais de modifier une question à la place. Voir aussi la FAQ.
Ok désolé, je vous remercie pour votre aide. Pas encore trop sûr de ce que le générateur n'est toutefois. J'ai lu l'astuce (stackoverflow.com/questions/102535/...)
Voir ma réponse mis à jour.
OriginalL'auteur Da Bx
nième terme de la suite de fibonacci est:
où
et
À l'aide de la ci-dessus identité, la série peut être généré à l'aide de la liste de compréhension:
OriginalL'auteur HumptyDumptyEIZ
Depuis tous les nombres de fibonacci est générée à partir de toutes les précédentes, il n'est pas judicieux de calculer, pour chaque un à partir de zéro. Il est préférable d'utiliser la liste de récolte des nombres de Fibonacci à calculer, pour chaque point suivant:
Si vous voulez vraiment être chic, vous pouvez créer un générateur de fonction qui calcule une valeur de Fibonacci, et l'utiliser pour construire votre liste:
Dans un générateur de fonction, le "rendement" mot renvoie à chaque valeur de la liste. La ligne où
fiblist
utilise ce qu'on appelle une "compréhension de liste" pour construire une liste à l'aide d'un générateur. Vous pouvez également utiliser votre générateur dans une boucle for:OriginalL'auteur Steven Burnap
J'ai simplement utilisé la formule et branché valeurs:
OriginalL'auteur Hello World
Les deux dernières valeurs de la liste, s'ajoute à chaque fois que la boucle s'exécute.
Une nouvelle position dans la liste est créée avec le chaque nouveau fibonacci valeur lors de l'itération de la longueur de l'entrée.
OriginalL'auteur IniOluwa Fageyinbo
Pourquoi ne pas utiliser une liste de compréhension? Voici comment je pourrais résoudre le problème. Je voudrais définir une fonction pour calculer la n th ter om de la suite de fibonacci comme suit.
Alors je voudrais utiliser compréhension de liste pour obtenir la séquence que je veux.
OriginalL'auteur Nde Samuel Mbah