Question

I have a problem about making a fibonacci sequence to a list, I'm just new to python someone help me please.

This is my code. I know this is looking wrong or something because it says invalid syntax. I don't know what to do about this really :(

This code works for a normal code without using a list!

myArray1 = [0] 
myArray2 = [1]

while myArray2 < 700:
    myArray1, myArray2 = b[i], myArray1+myArray2[i]
    print(myArray2)
Was it helpful?

Solution

This code puts the first 700 fibonacci numbers in a list. Using meaningful variable names helps improve readability!

fibonacci_numbers = [0, 1]
for i in range(2,700):
    fibonacci_numbers.append(fibonacci_numbers[i-1]+fibonacci_numbers[i-2])

Note: If you're using Python < 3, use xrange instead of range.

OTHER TIPS

You may want this:

In [77]: a = 0
    ...: b = 1
    ...: while b < 700:
    ...:     a, b = b, a+b
    ...:     print a, b
1 1
1 2
2 3
3 5
5 8
8 13
13 21
21 34
34 55
55 89
89 144
144 233
233 377
377 610
610 987

If you wanna store the results in a list, use list.append:

In [81]: a = 0
    ...: b = 1
    ...: fibo=[a, b]
    ...: while b < 70:
    ...:     a, b = b, a+b
    ...:     fibo.append(b)
    ...: print fibo
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

There are two kinds of mistakes you are making; mistakes that are creating errors and mistakes that are affecting readability

Both instances of the phrase [i] should be removed. I believe that you may be thinking it has something to do with iteration or tuples, but that is part of the reason you are getting errors:

myArray1 = [0] 
myArray2 = [1]

while myArray2 < 700:
    myArray1, myArray2 = b, myArray1+myArray2
    print(myArray2)

the other part of the reason you are getting errors is because of the variable b. You don't declare it and it does not belong. This code will iterate correctly if you switch out b with myArray2:

myArray1 = [0] 
myArray2 = [1]

while myArray2 < 700:
    myArray1, myArray2 = myArray2, myArray1+myArray2
    print(myArray2)

then there are some legibility issues. I would change the phrase myArray1 and 2 to a and b respectively. First because it is just too long; second because in python it is called lists, not arrays; third because you are referring to integers, not lists or arrays:

a = [0] 
b = [1]

while b < 700:
    a, b = b, a+b
    print(b)

then, the variables that were myArray1 and 2, but are now a and b; those are integers and they do not need to be expressed as single object lists. so get rid of the brackets around them:

a = 0 
b = 1

while b < 700:
    a, b = b, a+b
    print(b)

Then, the last phrase in this code says print(b). If you have it printing b then the fibonacci sequence you get is missing its first 1. It will read (on separate lines of course) 1,2,3,5,8,13 and so on. It should read 1,1,2,3,5,8,13. You are missing the first 1. So print(b) needs to be changed to print(a):

a = 0 
b = 1

while b < 700:
    a, b = b, a+b
    print(a)

then, if you are expressing more than one variable you can just list all the variables separated by commas equal to all the values separated by commas like this:

a,b,c,d = 1,2,3,4

so for your code that would translate to:

a,b = 0,1

while b < 700:
    a, b = b, a+b
    print(a)

then get rid of that extra space, white space means something in python, though here it doesn't really make a difference:

a,b = 0,1
while b < 700:
    a, b = b, a+b
    print(a)

So all of this so far has just been enough to get you to your original problem: you are getting an iteration (each consecutive value on a seperate line). Below is how you can get a list to any number n:

def fibo(n):
    fibo_list = []
    a,b = 0,1
    while b < n:
        a,b = b,a+b
        fibo_list.append(a)
    print(fibo_list)

hope that helps

def fibonacci(number: int) -> int:
    """
    >>> fibonacci(0)
    0
    >>> fibonacci(1)
    1
    >>> fibonacci(2)
    1
    >>> fibonacci(3)
    2
    >>> fibonacci(4)
    3
    >>> fibonacci(5)
    5
    >>> fibonacci(6)
    8
    >>> fibonacci(7)
    13
    >>> fibonacci(8)
    21
    """
    fibs = [0] * (number + 2)
    fibs[0] = 0
    fibs[1] = 1
    for i in range(2, number + 1):
        fibs[i] = fibs[i - 1] + fibs[i - 2]
    return fibs[number]


if __name__ == "__main__":
    from doctest import testmod

    testmod()
def fibonacci(n, results):
if n == 0:   
    return 0  
elif n == 1:  
    return 1  
else :  
    f = fibonacci(n-1, results) + fibonacci(n-2, results)
    f1 = f[:]
    results.appned(f1)


    return results

You can use below code, your problem can be solve in just one line. what are we doing is appending the

fib_nums

till your given limit i.e.,

700

and then adding the

fib_nums

with the second list which is of zero length which explicitly we doing, because it is containing

None

values, that we don't required.

#defining variable
fib_nums = [0, 1] 

#just one line code
fib_nums = fib_nums + [fib_nums.append(fib_nums[i-1]+fib_nums[i-2]) for i in range(2,700)]*0

#printing the series
print (fib_nums)

It is not fast but it works as well:

def fibonacci(n):
# return a list of fibonacci numbers
if n == 0:
    fibonacci_list = []
elif n == 1:
    fibonacci_list = [0]
elif n == 2:
    fibonacci_list = [0, 1]
elif n > 2:
    fibonacci_list = [0, 1]
    for i in range(n-2):
        fibonacci_list += [0]
        fibonacci_list[-1] = fibonacci_list[-2] + fibonacci_list[-3]
return fibonacci_list
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top