-
-
Save codecademydev/4b5068b2657b0e4111e7ddadaa7943bb 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 {0} 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("Enter {0} for {1}".format(letter, name)) | |
user_input = input("") | |
###### FIX: DOESN'T ACCEPT LOWERCASE ######## | |
if user_input in choices: | |
for i in range(len(stacks)): | |
return stacks[i] | |
else: | |
print("\nPlease Enter a Valid Name:\n") | |
#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\nEmpty Stack. 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\nCan't move Large Disk on top of a Smaller Disk.") | |
print("\n\nYou completed the game in {0} moves, and the optimal number of moves is {1}".format(num_user_moves, 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