class Hanoi_Tower: def __init__(self, Disks): self.Disks = Disks self.N = len(Disks) self.D = dict() self.N0 = self.N*'- ' self.Towers = 'ABC' for t in self.Towers: self.D[t] = list() self.D['A'] = [ d for d in Disks ] def move_disk(self, target, goal): t1 = self.D[target] t2 = self.D[goal] disk = t1.pop() t2.append(disk) self.D[target] = t1 self.D[ goal ] = t2 print('Move Disk %c from %c to %c' % (disk, target, goal)) self.show() def show(self): print() for t in self.Towers: tower = ' '.join(self.D[t]) if len(tower) == 1: tower = tower + ' ' tower_H = tower + self.N0[len(tower):] print("Tower %c : %s" % (t, tower_H)) print('='*30) def move(self, target = 'A', goal = 'B', aux = 'C', n = None): if n == 0: return elif n is None: n = self.N self.move(target, aux, goal, n-1) self.move_disk(target, goal) self.move(aux, goal, target, n-1) HT = Hanoi_Tower('Xx*@Oo') HT.show() HT.move()
Standard input is empty
Tower A : X x * @ O o Tower B : - - - - - - Tower C : - - - - - - ============================== Move Disk o from A to C Tower A : X x * @ O - Tower B : - - - - - - Tower C : o - - - - - ============================== Move Disk O from A to B Tower A : X x * @ - - Tower B : O - - - - - Tower C : o - - - - - ============================== Move Disk o from C to B Tower A : X x * @ - - Tower B : O o - - - - Tower C : - - - - - - ============================== Move Disk @ from A to C Tower A : X x * - - - Tower B : O o - - - - Tower C : @ - - - - - ============================== Move Disk o from B to A Tower A : X x * o - - Tower B : O - - - - - Tower C : @ - - - - - ============================== Move Disk O from B to C Tower A : X x * o - - Tower B : - - - - - - Tower C : @ O - - - - ============================== Move Disk o from A to C Tower A : X x * - - - Tower B : - - - - - - Tower C : @ O o - - - ============================== Move Disk * from A to B Tower A : X x - - - - Tower B : * - - - - - Tower C : @ O o - - - ============================== Move Disk o from C to B Tower A : X x - - - - Tower B : * o - - - - Tower C : @ O - - - - ============================== Move Disk O from C to A Tower A : X x O - - - Tower B : * o - - - - Tower C : @ - - - - - ============================== Move Disk o from B to A Tower A : X x O o - - Tower B : * - - - - - Tower C : @ - - - - - ============================== Move Disk @ from C to B Tower A : X x O o - - Tower B : * @ - - - - Tower C : - - - - - - ============================== Move Disk o from A to C Tower A : X x O - - - Tower B : * @ - - - - Tower C : o - - - - - ============================== Move Disk O from A to B Tower A : X x - - - - Tower B : * @ O - - - Tower C : o - - - - - ============================== Move Disk o from C to B Tower A : X x - - - - Tower B : * @ O o - - Tower C : - - - - - - ============================== Move Disk x from A to C Tower A : X - - - - - Tower B : * @ O o - - Tower C : x - - - - - ============================== Move Disk o from B to A Tower A : X o - - - - Tower B : * @ O - - - Tower C : x - - - - - ============================== Move Disk O from B to C Tower A : X o - - - - Tower B : * @ - - - - Tower C : x O - - - - ============================== Move Disk o from A to C Tower A : X - - - - - Tower B : * @ - - - - Tower C : x O o - - - ============================== Move Disk @ from B to A Tower A : X @ - - - - Tower B : * - - - - - Tower C : x O o - - - ============================== Move Disk o from C to B Tower A : X @ - - - - Tower B : * o - - - - Tower C : x O - - - - ============================== Move Disk O from C to A Tower A : X @ O - - - Tower B : * o - - - - Tower C : x - - - - - ============================== Move Disk o from B to A Tower A : X @ O o - - Tower B : * - - - - - Tower C : x - - - - - ============================== Move Disk * from B to C Tower A : X @ O o - - Tower B : - - - - - - Tower C : x * - - - - ============================== Move Disk o from A to C Tower A : X @ O - - - Tower B : - - - - - - Tower C : x * o - - - ============================== Move Disk O from A to B Tower A : X @ - - - - Tower B : O - - - - - Tower C : x * o - - - ============================== Move Disk o from C to B Tower A : X @ - - - - Tower B : O o - - - - Tower C : x * - - - - ============================== Move Disk @ from A to C Tower A : X - - - - - Tower B : O o - - - - Tower C : x * @ - - - ============================== Move Disk o from B to A Tower A : X o - - - - Tower B : O - - - - - Tower C : x * @ - - - ============================== Move Disk O from B to C Tower A : X o - - - - Tower B : - - - - - - Tower C : x * @ O - - ============================== Move Disk o from A to C Tower A : X - - - - - Tower B : - - - - - - Tower C : x * @ O o - ============================== Move Disk X from A to B Tower A : - - - - - - Tower B : X - - - - - Tower C : x * @ O o - ============================== Move Disk o from C to B Tower A : - - - - - - Tower B : X o - - - - Tower C : x * @ O - - ============================== Move Disk O from C to A Tower A : O - - - - - Tower B : X o - - - - Tower C : x * @ - - - ============================== Move Disk o from B to A Tower A : O o - - - - Tower B : X - - - - - Tower C : x * @ - - - ============================== Move Disk @ from C to B Tower A : O o - - - - Tower B : X @ - - - - Tower C : x * - - - - ============================== Move Disk o from A to C Tower A : O - - - - - Tower B : X @ - - - - Tower C : x * o - - - ============================== Move Disk O from A to B Tower A : - - - - - - Tower B : X @ O - - - Tower C : x * o - - - ============================== Move Disk o from C to B Tower A : - - - - - - Tower B : X @ O o - - Tower C : x * - - - - ============================== Move Disk * from C to A Tower A : * - - - - - Tower B : X @ O o - - Tower C : x - - - - - ============================== Move Disk o from B to A Tower A : * o - - - - Tower B : X @ O - - - Tower C : x - - - - - ============================== Move Disk O from B to C Tower A : * o - - - - Tower B : X @ - - - - Tower C : x O - - - - ============================== Move Disk o from A to C Tower A : * - - - - - Tower B : X @ - - - - Tower C : x O o - - - ============================== Move Disk @ from B to A Tower A : * @ - - - - Tower B : X - - - - - Tower C : x O o - - - ============================== Move Disk o from C to B Tower A : * @ - - - - Tower B : X o - - - - Tower C : x O - - - - ============================== Move Disk O from C to A Tower A : * @ O - - - Tower B : X o - - - - Tower C : x - - - - - ============================== Move Disk o from B to A Tower A : * @ O o - - Tower B : X - - - - - Tower C : x - - - - - ============================== Move Disk x from C to B Tower A : * @ O o - - Tower B : X x - - - - Tower C : - - - - - - ============================== Move Disk o from A to C Tower A : * @ O - - - Tower B : X x - - - - Tower C : o - - - - - ============================== Move Disk O from A to B Tower A : * @ - - - - Tower B : X x O - - - Tower C : o - - - - - ============================== Move Disk o from C to B Tower A : * @ - - - - Tower B : X x O o - - Tower C : - - - - - - ============================== Move Disk @ from A to C Tower A : * - - - - - Tower B : X x O o - - Tower C : @ - - - - - ============================== Move Disk o from B to A Tower A : * o - - - - Tower B : X x O - - - Tower C : @ - - - - - ============================== Move Disk O from B to C Tower A : * o - - - - Tower B : X x - - - - Tower C : @ O - - - - ============================== Move Disk o from A to C Tower A : * - - - - - Tower B : X x - - - - Tower C : @ O o - - - ============================== Move Disk * from A to B Tower A : - - - - - - Tower B : X x * - - - Tower C : @ O o - - - ============================== Move Disk o from C to B Tower A : - - - - - - Tower B : X x * o - - Tower C : @ O - - - - ============================== Move Disk O from C to A Tower A : O - - - - - Tower B : X x * o - - Tower C : @ - - - - - ============================== Move Disk o from B to A Tower A : O o - - - - Tower B : X x * - - - Tower C : @ - - - - - ============================== Move Disk @ from C to B Tower A : O o - - - - Tower B : X x * @ - - Tower C : - - - - - - ============================== Move Disk o from A to C Tower A : O - - - - - Tower B : X x * @ - - Tower C : o - - - - - ============================== Move Disk O from A to B Tower A : - - - - - - Tower B : X x * @ O - Tower C : o - - - - - ============================== Move Disk o from C to B Tower A : - - - - - - Tower B : X x * @ O o Tower C : - - - - - - ==============================