Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d2e0410
commit bfe981d
Showing
1 changed file
with
75 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
from stack import Stack | ||
|
||
print("\nLet's play Towers of Hanoi!!") | ||
|
||
#Create the Stacks | ||
stacks = [] | ||
left_stack = Stack("Left") | ||
middle_stack = Stack("Middle") | ||
right_stack = Stack("Right") | ||
stacks += [left_stack, middle_stack, right_stack] | ||
|
||
#Set up the Game | ||
num_disks = int(input("\nHow many disks do you want to play with?\n")) | ||
|
||
while num_disks < 3: | ||
num_disks = int(input("Enter a number greater than or equal to 3\n")) | ||
|
||
for disk in range(num_disks, 0, -1): | ||
left_stack.push(disk) | ||
#left_stack.print_items() | ||
|
||
num_optimal_moves = (2 ** num_disks) - 1 | ||
print("\nThe fastest you can solve this game is in {0} moves".format(num_optimal_moves)) | ||
#Get User Input | ||
|
||
def get_input(): | ||
# choices = ["""letter""" for stack in stacks] | ||
|
||
choices = [stack.get_name()[0] for stack in stacks] | ||
|
||
while True: | ||
|
||
for i in range(len(stacks)): | ||
name = stacks[i].get_name() | ||
letter = choices[i] | ||
print("Enter {0} for {1}".format(letter, name)) | ||
|
||
user_input = input("") | ||
|
||
if user_input in choices: | ||
for i in range(len(stacks)): | ||
return stacks | ||
|
||
#Play the Game | ||
num_user_moves = 0 | ||
|
||
while right_stack.get_size() != num_disks: | ||
|
||
print("\n\n\n...Current Stacks...") | ||
for stack in stacks: | ||
stack.print_items() | ||
|
||
while True: | ||
|
||
print("\nWhich stack do you want to move from\n") | ||
from_stack = get_input() | ||
print("\nWhich stack do you want to move to?\n") | ||
to_stack = get_input() | ||
|
||
if from_stack.get_size() == 0: | ||
print("\n\nInvalid Move. Try Again") | ||
elif to_stack.get_size() == 0 or from_stack.peek() < to_stack.peek(): | ||
disk = from_stack.pop() | ||
to_stack.push(disk) | ||
num_user_moves += 1 | ||
break | ||
else: | ||
print("\n\nInvalid Move. Try Again") | ||
|
||
print("\n\nYou completed the game in {0} moves, and the optimal number of moves is {1}".format(num_user_moves, num_optimal_moves)) | ||
|
||
Traceback (most recent call last): | ||
File "script.py", line 59, in <module> | ||
if from_stack.get_size() == 0: | ||
AttributeError: 'list' object has no attribute 'get_size' |