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

Tell us what’s happening:

I’m on Step 31 of the Tower of Hanoi challenge.
My code is correct and fully indented with spaces only.
I reset the challenge, restarted the browser, and pasted a clean version.
I still get: “Your code has an indentation error.”
I’m using Edge and prefer not to switch browsers.
Any idea why FCC thinks my indentation is invalid?

Your code so far

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):
    forward = False
    if not rods[rod2]:
        forward = True
    elif rods[rod1] and rods[rod1][-1] < rods[rod2][-1]:
        forward = True
    if forward:
        print(f'Moving disk {rods[rod1][-1]} from {rod1} to {rod2}')
        rods[rod2].append(rods[rod1].pop())
    else:
        print(f'Moving disk {rods[rod2][-1]} from {rod2} to {rod1}')
        rods[rod1].append(rods[rod2].pop())

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}')
            make_allowed_move(source, target)
            # 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')

Your browser information:

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

Challenge Information:

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

I’m not getting the error you mention if I copy/paste your code, however:

Move the code nested inside the first if statement (except the first print() call) to your new function.

This means only the first print call should remain in that if statement.

if remainder == 1:
            print(f'Move {i + 1} allowed between {source} and {target}')
            make_allowed_move(source, target)
            # display our progress
            print(rods)

Thanks! I did move all the logic from the first if block into make_allowed_move, leaving only the first print, the function call, and the final print(rods).

The console shows no errors, but the FCC editor still gives me:

  • “Your code has an indentation error”

  • “You may need to add pass on a new line to form a valid block of code”

Even after resetting and pasting clean code. Any idea why FCC still thinks the indentation is wrong?

Why did you leave the function call and print?

Thanks for the explanation earlier. It helped me understand what the step was actually asking for, and I was able to get it working. I appreciate you taking the time to point me in the right direction.

Special Thanks :slight_smile:

1 Like