# Resolved: question about problem 2 in the excercise

Hi,

for problem 2, this is the provided answer:

n = 12

a = 0

b = 1

d = dict()

for i in range(1,n+1):

d[i] = a

a,b = b,a+b

print(d)

when I replace a,b = b,a+b by

a=b

b=a+b

the output changes. why is that?

Hello Abdulmalik,

Thank you for your question - that is exactly what is expected from you, to play with the code, to meddle with it and to try and break it. That is a very good form of practice. Now, in the original code you have `a,b = b,a+b`

, so that is a simultaneous assignment. After performing `a,b = b,a+b`

,the variables 'a' and 'b' get changed according to the following pattern:

-> the new value of 'a' is the old value of 'b'

-> the new value of 'b' is the old value of 'a' + the old value of 'b'

--------------------

Let's see what happens when we change the code to`a = b`

and afterwards `b=a+b`

. The first line means that the new value of 'a' is the value of 'b'. The second line is crucial now - the new value of 'b' is the **current** (!) value of 'a' (which is now the old 'b') + the value of 'b'. This means that we just double the value of 'b' on every iteration.

--------------------

Consider a practical example - let initially a = 5 and b = 8. One iteration of the original code `a,b = b, a+b`

means that 'a' becomes 8 and 'b' becomes 5+8, so finally you have a = 8 and b = 13. One iteration of the changed code `a=b`

and `b = a+b`

means that 'a' first becomes 8; then 'b' becomes 8 + 8, **because we have changed the value of 'a' in the previous line**. This is the reason why the code snippet produces a different result.

Hopefully this explains it all!

Best,

A. The 365 Team