# Learn Recursion by Solving the Tower of Hanoi Puzzle - Step 31

### Tell us what’s happening:

it’s not working, I have shifted the nested loops of the if statement from move to allowed to move function.

``````NUMBER_OF_DISKS = 3
number_of_moves = 2**NUMBER_OF_DISKS - 1
rods = {
'A': list(range(NUMBER_OF_DISKS, 0, -1)),
'B': [],
'C': []
}

# User Editable Region

def make_allowed_move(rod1, rod2):
if remainder == 1:

forward = False
if not rods[target]:
forward = True
elif rods[source] and rods[source][-1] < rods[target][-1]:
forward = True
if forward:
print(f'Moving disk {rods[source][-1]} from {source} to {target}')
rods[target].append(rods[source].pop())
else:
print(f'Moving disk {rods[target][-1]} from {target} to {source}')
rods[source].append(rods[target].pop())

# display our progress

def move(n, source, auxiliary, target):
# display starting configuration
print(rods)
for i in range(number_of_moves):
remainder = (i + 1) % 3

# User Editable Region

elif remainder == 2:
print(f'Move {i + 1} allowed between {source} and {auxiliary}')
elif remainder == 0:
print(f'Move {i + 1} allowed between {auxiliary} and {target}')

# initiate call from source A to target C with auxiliary B
move(NUMBER_OF_DISKS, 'A', 'B', 'C')
``````

User Agent is: `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36`

### Challenge Information:

Learn Recursion by Solving the Tower of Hanoi Puzzle - Step 31

I think you interpreted the request a bit different that what it expected.

The request says:

Move the code nested inside the first `if` statement (except the first `print()` call) to your new function. Pay close attention to the indentation. Don’t forget to remove the `pass` keyword.

It points to you to move the content from the first `if`, but not the `if` itself. In fact, you should leave, also, the first print() behind. In other words start moving from `forward = False` on.
The indentation warning is real. You also have an indentation problem here:

``````        if forward:
print(f'Moving disk {rods[source][-1]} from {source} to {target}')
rods[target].append(rods[source].pop())
``````

I just want to ask a simple question related to this part. Shouldn’t we have -1 inside the pop. To delete the last one from the source?

I mean should not we update it the following way:
rods[target].append(rods[source].pop(-1))

At this point in the exercise step the original code given was:

``````if forward:
print(f'Moving disk {rods[source][-1]} from {source} to {target}')
rods[target].append(rods[source].pop())
``````

And the step does not ask for any modification other that to move that portion as part of the code to another location. Therefore, for the purpose of the exercise, you do not have to spend logic in the actual code.
If you are questioning the logic behind that statement, then you have to start from the assumption that it is correct until now.

1 Like

`pop()` removes the last element by default, so you don’t need to pass `-1`. It would have the same effect.

2 Likes