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

### Tell us what’s happening:

Isn’t that how I should check if `rods[target]` is empty or not?

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

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 */

if remainder == 1:
print(f'Move {i + 1} allowed between {source} and {target}')
forward = False

if rods[target] == []:
# When target is empty, the disk should be moved necessarily from source to target
forward = True

/* 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/120.0.0.0 Safari/537.36`

### Challenge Information:

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

Here you should not compare `rods[target]` with anything. Consider the code below:

``````if my_list:
print('Hi')
``````

When `my_list` is not empty, the condition of the `if` statement evaluates to `True` and `Hi` is printed. If you want to execute the `if` when the list is empty you need the condition evaluates to `False`. There’s an operator that does exactly this job.

1 Like

I tried using `not`, but it doesn’t work.

1 Like

Hello snigdho,

I would have to see your code with this change, but keep in mind if you use `not` you don’t need the `==` operator anymore.

``````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]:
# When target is empty, the disk should be moved necessarily from source to target
forward = True
elif remainder == 2:
print(f'Move {i + 1} allowed between {source} and {auxiliary}')
``````

Here’s the code. BTW, please use “snigdho” if you are mentioning.

This should pass once you remove the comment.
If not you can reset the step and do it again to make sure you didn’t accidently touch anything else or have any magic spaces flying around.

4 Likes

You are right. Magic space. Thanks for the help.

3 Likes

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.