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

Tell us what’s happening:

I did what it is telling me. I took the first if statement and moved it into my new function, I also took out the first print call in the if statement. What am I missing here??

``````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
print(rods)

def move(n, source, auxiliary, target):
# display starting configuration
print(rods)
for i in range(number_of_moves):
remainder = (i + 1) % 3
if remainder == 1:
print(f'Move {i + 1} allowed between {source} and {target}')
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
print(rods)

# 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 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2.1 Safari/605.1.15`

Challenge Information:

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

1 Like

This should not be there.

1 Like

If I look at the original lesson, it is asking you to take what is INSIDE the if statement to the new function (except the first print statement).
Your code shows the whole if statement moved.
That means, the variable ‘remainder’ does not have a value in your ‘make_allowed_move’ function.
Remember what you learned about scope of variables.

If it will not sort itself out, then perhaps you should reset this lesson (step 31) and start again.
This time, leave the actual line containing the if statement where it is, and move the lines below the if statement (up till the end of that if statement).

Remember the indentation - that is what defines the beginning and end of each segment (if / for / elif / else . . .).

If you are still unclear, ask specifically what you don’t understand . . . we will try our best to explain.
You can do this . . . you are so close!