-
-
Save codecademydev/4d605cacb00c2833a6c7f5c6752aa30b to your computer and use it in GitHub Desktop.
Codecademy export
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
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) | |
num_optimal_moves = (2**num_disks) -1 | |
print("\nThe fastest you can solve this game is in {} moves".format(num_optimal_moves)) | |
#Get User Input | |
def get_input(): | |
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("Press {0} for {1}".format(letter, name)) | |
user_input = input("") | |
if user_input in choices: | |
for i in range(len(stacks)): | |
return stacks[i] | |
#Play the Game | |
num_user_movements = 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_movements += 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_movements, num_optimal_moves)) | |
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
from node import Node | |
class Stack: | |
def __init__(self, name): | |
self.size = 0 | |
self.top_item = None | |
self.limit = 1000 | |
self.name = name | |
def push(self, value): | |
if self.has_space(): | |
item = Node(value) | |
item.set_next_node(self.top_item) | |
self.top_item = item | |
self.size += 1 | |
else: | |
print("No more room!") | |
def pop(self): | |
if self.size > 0: | |
item_to_remove = self.top_item | |
self.top_item = item_to_remove.get_next_node() | |
self.size -= 1 | |
return item_to_remove.get_value() | |
print("This stack is totally empty.") | |
def peek(self): | |
if self.size > 0: | |
return self.top_item.get_value() | |
print("Nothing to see here!") | |
def has_space(self): | |
return self.limit > self.size | |
def is_empty(self): | |
return self.size == 0 | |
def get_size(self): | |
return self.size | |
def get_name(self): | |
return self.name | |
def print_items(self): | |
pointer = self.top_item | |
print_list = [] | |
while(pointer): | |
print_list.append(pointer.get_value()) | |
pointer = pointer.get_next_node() | |
print_list.reverse() | |
print("{0} Stack: {1}".format(self.get_name(), print_list)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment