Implement the Tower of Hanoi Algorithm - Implement the Tower of Hanoi Algorithm

Tell us what’s happening:

I’ve just completed the Towers of Hanoi Project and I’d really appreciate some tips on improving my methods or code. I’ve had some formatting/scope issues and am wondering if there is a simpler way to find “opposite_tower.” This has taught me a lot about recursion and helped me significantly with my coding thought process and abstract concepts. Thanks!!

Your code so far

def hanoi_solver(num_disks: int) -> str:
    """solves tower of hanoi puzzle through recursion"""

    tower_1 = [] #creating empty towers#
    tower_2 = []
    tower_3 = [""]
    for i in range(num_disks):
        tower_1.append(num_disks - i)
    total_msg = f"{tower_1} {tower_2} {tower_3[1:]}"

    def move(beginning: list, end: list) -> None:
        """moves smallest number from beginning list to end list""" 
        end.append(beginning.pop(-1))
        nonlocal total_msg
        total_msg += f"\n{tower_1} {tower_2} {tower_3[1:]}" #printing towers after each movement#

    def recursive_movement(starting_tower, target_tower, num_disks):
        """recursively calls move function to solve towers"""
        
        if starting_tower == tower_1 and target_tower == tower_2:
            opposite_tower = tower_3
        if starting_tower == tower_1 and target_tower == tower_3:
            opposite_tower = tower_2
        if starting_tower == tower_2 and target_tower == tower_1:
            opposite_tower = tower_3
        if starting_tower == tower_2 and target_tower == tower_3:
            opposite_tower = tower_1
        if starting_tower == tower_3 and target_tower == tower_1:
            opposite_tower = tower_2
        if starting_tower == tower_3 and target_tower == tower_2:
            opposite_tower = tower_1

        if num_disks == 1:
            move(starting_tower, target_tower)
        elif num_disks > 1:
            recursive_movement(starting_tower, opposite_tower, num_disks - 1)
            move(starting_tower, target_tower)
            recursive_movement(opposite_tower, target_tower, num_disks - 1)
        return total_msg
    return recursive_movement(tower_1, tower_3, num_disks)

if __name__ == "__main__":
    print(hanoi_solver(10))

Your browser information:

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

Challenge Information:

Implement the Tower of Hanoi Algorithm - Implement the Tower of Hanoi Algorithm

GitHub Link: freeCodeCamp/curriculum/challenges/english/blocks/lab-tower-of-hanoi/68773ee26f332a80bc0295db.md at main · freeCodeCamp/freeCodeCamp · GitHub