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

Tell us what’s happening:

Здравствуйте, уже какие сутки пытаюсь решить эту задачу, но все не получается.
// running tests 1. You should move the code nested inside the first

if

statement (except the first

print()

call) to your new function. // tests completed // console output {‘A’: [3, 2, 1], ‘B’: , ‘C’: } Move 1 allowed between A and C Moving disk 1 from A to C {‘A’: [3, 2], ‘B’: , ‘C’: [1]} Move 2 allowed between A and B Move 3 allowed between B and C Move 4 allowed between A and C Moving disk 1 from C to A {‘A’: [3, 2, 1], ‘B’: , ‘C’: } Move 5 allowed between A and B Move 6 allowed between B and C Move 7 allowed between A and C Moving disk 1 from A to C {‘A’: [3, 2], ‘B’: , ‘C’: [1]}

Не могу понять в чем проблема, буду благодарна за любую помощь

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())

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

# 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/138.0.0.0 Safari/537.36

Challenge Information:

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

Tell us what’s happening:

Здраствуйте, помогите пожалуйста, буду благодарна за любую помощь уже несколько дней пытаюсь решить и пробовала разные способы.
Вот что пишет. // running tests

  1. Your code raised an error before any tests could run. Please fix it and try again.
    // tests completed

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(source, 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())
        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/138.0.0.0 Safari/537.36

Challenge Information:

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

Розкажіть нам, що сталося:

В чем ошибка подскажите пожалуйста
Уже пробовала по разному

Ваш код

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())

    print(rods)

def move(n, source, auxiliary, target):
    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)

# 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')

Інформація про ваш браузер:

Агент користувача: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36

Інформація про завдання:

Вивчіть рекурсію, розгадавши головоломку Ханойської вежі - Крок 31

Welcome to the forum @savvcenkoks

Here is a comparison of the original code and your code.

The code in blue is the original code, the code in red is your code.
The code in magenta is the overlap.

You are getting ahead of yourself.
You are asked to only cut and paste the code.

Please reset the step to restore the code and try again.

Happy coding

I went ahead and combined your posts for you. In the future, just reply to the original thread to add further updates.

Thanks.

1 Like

Thank you, Teller, for the quick reply! But I’m having a problem:

File “main.py”, line 23
elif remainder == 2:
IndentationError: unexpected indent
When running tests I also see:

Your code has an indentation error. You may need to add pass on a new line to form a valid block of code.

Could you help me, please?

You did not include line 23 in your screenshot so it’s impossible to comment on it.

Please copy and paste the text of your code here.

def make_allowed_move(rod1, rod2):
    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())
    
    print(rods)

I’ve edited your post to improve the readability of the code. When you enter a code block into a forum post, please precede it with a separate line of three backticks and follow it with a separate line of three backticks to make it easier to read.

You can also use the “preformatted text” tool in the editor (</>) to add backticks around text.

See this post to find the backtick on your keyboard.
Note: Backticks (`) are not single quotes (').

1 Like

Are you still getting this error? Or you removed this line?

This looks good assuming you’ve removed the code from the other function.

You did change it, for some reason there is a comment missing. That would cause it to fail the test.

This line keeps showing up as an error. I’ve already tried rewriting it in different ways, but it still doesn’t work :frowning: The code in the screenshot is the same one I showed earlier. I tried removing and adding the comment, but what do you think the issue might be?

you will need to share the whole code so that we can see the line that error comes from

The error is very specific that’s an indentation error. You probably only need to adjust the indentation.

In any case, you will need to share your full code so we can see that line.

1 Like