Esempio n. 1
0
class Queue():
    '''
    Invarient :
    Front will always contain elements if the back contains elements and peeking at front is always O(1)
    '''
    def __init__(self):
        self.front = Stack()
        self.back = Stack()

    def size(self):
        return self.front.size() + self.back.size()

    def add(self, item):
        self.back.push(item)
        if (self.front.empty()):
            self.transfer()

    def top(self):
        return self.front.top()

    def empty(self):
        return self.front.empty()

    def remove(self):
        if (self.empty()):
            return Exception
        self.front.pop()
        if (self.front.empty()):
            self.transfer()

    def transfer(self):
        while not self.back.empty():
            self.front.push(self.back.top())
            self.back.pop()
Esempio n. 2
0
class StackWithMin:
    def __init__(self):
        self.stack = Stack()
        self.minstack = Stack()
    
    def push(self, value):
        self.stack.push(value)
        if value < self.min():
            self.minstack.push(value)
        
    def pop(self):
        if self.stack.peek() ==  self.minstack.peek():
            self.minstack.pop()
        return self.stack.pop()
    
    def peek(self):
        return self.stack.peek()
    
    def empty(self):
        return self.stack.empty()
    
    def min(self):
        if self.minstack.empty():
            return sentinal
        else:
            return self.minstack.peek()
 def test_clear(self):
     '''
     Test peek
     :return:
     '''
     s = Stack()
     s.push("One")
     s.push("Two")
     self.assertEquals(False,s.empty())
     s.clear()
     self.assertEquals(True,s.empty())
    def test_push_pop(self):
        '''
        Test Push Pop
        :return:
        '''
        s = Stack()
        s.push("One")

        self.assertEquals(False,s.empty())

        s.pop()

        self.assertEquals(True,s.empty())
Esempio n. 5
0
def PreOrderWalk_NoRecursion(root):
    s = Stack()
    s.push(root)
    while not s.empty() :
        node = s.pop()
        print(node.value)
        if node.right != None:
            s.push(node.right)
        if node.left != None:
            s.push(node.left)
Esempio n. 6
0
class MyQueue:
    def __init__(self):
        self.stack1 = Stack()
        self.stack2 = Stack()
        
    def enqueue(self, value):
        self.stack1.push(value)
        
    def dequeue(self):
        if not self.stack2.empty():
            return self.stack2.pop()
        
        while not self.stack1.empty():
            self.stack2.push(self.stack1.pop())
                       
        return self.stack2.pop()
    
    def empty(self):
        return self.stack1.empty()
Esempio n. 7
0
 def printContents(self):
     s = Stack()
     print("Contents of Stack " + str(self.index))
     while not self.stack.empty():
         disk = self.stack.pop()
         print(disk)
         s.push(disk)
         
     while not s.empty():
         self.stack.push(s.pop())
Esempio n. 8
0
def SortStack(s):
    temp = Stack()    
    while not s.empty():
        x = s.pop()
        
        while not temp.empty() and x > temp.peek():
            s.push(temp.pop())           
        temp.push(x)

    return temp
Esempio n. 9
0
def InOrderWalk_NoRecursion(root):
    s = Stack()
    s.push(root)
    while not s.empty():
        node = s.peek()
        if node.left != None:
            s.push(node.left)
            continue

        node = s.pop()
        while node != None:
            print(node.value)
            if node.right == None:
                if not s.empty():
                    node = s.pop()
                else:
                    break
            else:
                s.push(node.right)
                break
Esempio n. 10
0
    def has_cycle(self):
        stack = Stack()

        for node in self.nodes:
            self.set_all_nodes_inactive()
            stack.empty()
            stack.push(node)

            while not stack.is_empty():
                current_node = stack.pop()

                if current_node.is_active():
                    return True

                current_node.set_active(True)

                for adjacent_node in current_node.get_adjacent_nodes():
                    stack.push(adjacent_node)

        return False
Esempio n. 11
0
	def inorder(rootNode):
		s = Stack()
		p = rootNode
		while(p or (not s.empty())):
			if p:
				s.push()
				p = p.leftChild
			else:
				p = s.pop()
				BinaryTree._visit(p)
				p = p.leftChild
Esempio n. 12
0
def PostOrderWalk_NoRecursion(root):
    s = Stack()
    s.push(root)
    while not s.empty() :
        node = s.peek()
        if node.right != None:
            s.push(node.right)
            continue
        if node.left != None:
            s.push(node.left)
            continue
        
        if root.left != None:
            s.push(root.left)
            root = root.left
        else:
            break
       
    
    while not s.empty():
        print(s.pop().value) 
Esempio n. 13
0
	def preorder(rootNode):
		s = Stack()
		p = rootNode

		while(p or (not s.empty())):
			if p:
				BinaryTree._visit(p)
				if p.rightChild:
					s.push(p.rightChild)
				p = p.leftChild
			else:
				p = s.pop()
Esempio n. 14
0
class Tower:
    def __init__(self,index):
        self.stack = Stack()
        self.index = index
        
    def addDisk(self, disk):
        if self.stack.empty() or self.stack.peek() > disk:
            self.stack.push(disk)
        else:
            print("Error in adding disk " + str(disk) + " to tower "+ str(self.index))
        
    def removeDisk(self):
        if not self.stack.empty():
            return self.stack.pop()
        else:
            return -1    
        
    def printContents(self):
        s = Stack()
        print("Contents of Stack " + str(self.index))
        while not self.stack.empty():
            disk = self.stack.pop()
            print(disk)
            s.push(disk)
            
        while not s.empty():
            self.stack.push(s.pop())
        
    def moveOneDisk(self, tower):
        disk = self.removeDisk()
        if disk != -1:
            tower.addDisk(disk)
            print("Moved disk "+ str(disk) + " from tower " + str(self.index) + " to tower " + str(tower.index))
    
    # This is the important one    
    def moveDisks(self, destTower, bufferTower, n):
        if n > 0:
            self.moveDisks(bufferTower, destTower, n-1)
            self.moveOneDisk(destTower)
            bufferTower.moveDisks(destTower, self, n-1)
def divideBy2(decNumber):
    remstack = Stack()

    while decNumber > 0:
        rem = decNumber % 2
        remstack.push(rem)
        decNumber = decNumber // 2

    binString = ""
    while not remstack.empty():
        binString = binString + str(remstack.pop())

    return binString
Esempio n. 16
0
    def depth_first_search(self, source, target):
        stack = Stack()
        found = None

        self.set_all_nodes_unvisited()
        stack.empty()
        stack.push(source)

        while not stack.is_empty():
            current_node = stack.pop()

            if current_node.is_visited():
                continue

            if current_node.data == target:
                return target

            current_node.set_visited(True)

            for adjacent_node in current_node.get_adjacent_nodes():
                if not adjacent_node.is_visited():
                    stack.push(adjacent_node)

        return found
Esempio n. 17
0
 def dfs(self,vertex):
     seen = set()
     s = Stack()
     s.push(self.startVertex)
     while not s.empty():
         v = s.pop()
         if vertex == v:
             print("Vertex Found")
             return
         seen.add(v)
         adjList = self.graph[v]
         for w in adjList:
             if w not in seen and not s.contains(w):
                 s.push(w)
     print("Vertex not found")
     return
Esempio n. 18
0
def iter_qsort(arr, p, q):
    if p > q:
        return None

    task = Stack()
    # pamietac zeby sciagac zadania w odwrotnej kolejnosci!
    task.push(q)
    task.push(p)

    while not task.empty():
        l = task.pop()
        r = task.pop()
        if l < r:
            s = partition(arr, l, r)
            task.push(s - 1)
            task.push(l)
            task.push(r)
            task.push(s + 1)
Esempio n. 19
0
	def postorder(rootNode):
		s = Stack()
		p = rootNode
		lastVisit = None
		s.push()
		while(not s.empty()):
			p = s.top()
			#case1: the right child is visited, so left child must be visited
			#case2: left and right child are all null
			#case3: the left child is visited and the right child is null
			if(p.rightChild == lastVisit)or(p.rightChild == None and p.leftChild == None)or(p.rightChild == None and p.leftChild == lastVisit):
				BinaryTree._visit(p)
				lastVisit = p
				s.pop()
			else:
				if(p.rightChild):
					s.push(p.rightChild)
				if(p.leftChild):
					s.push(p.leftChild)
Esempio n. 20
0
def spider(url):
    try:
        st = Stack()
        st.push(url)  # 第一个进栈
        while st.empty() != True:
            url_recive = st.pop()
            html = urllib.request.urlopen(url_recive)
            data = html.read()
            data = data.decode()
            soup = BeautifulSoup(data, 'lxml')
            soup.prettify()
            print(soup.find('h3').text)
            links = soup.select('a')
            # start,end,step
            for i in range(len(links) - 1, -1, -1):
                href = links[i]['href']
                linksUrl = url + '/' + href
                st.push(linksUrl)
    except Exception as err:
        print(err)
Esempio n. 21
0
def spider(url):
    global urls
    stack = Stack()
    stack.push(url)
    while not stack.empty():
        url = stack.pop()  # 出栈
        if url not in urls:
            urls.append(url)  # 如果url不在urls里,追加u到urls
            try:
                data = urllib.request.urlopen(url)
                data = data.read()
                data = data.decode()
                soup = BeautifulSoup(data, 'lxml')
                print(soup.find('h3').text)
                links = soup.select('a')
                for i in range(len(links) - 1, -1, -1):
                    link = start_url + '/' + links[i]['href']
                    stack.push(link)
            except Exception as err:
                print(err)
Esempio n. 22
0
def sort_stack(s):

    # r is the temporary stack
    r = Stack()

    while not s.empty():

        # Get the top element
        tmp = s.pop()

        if r.empty():
            r.push(tmp)
        else:
            if tmp >= r.peek():
                r.push(tmp)
            else:
                flush(r, s)
                r.push(tmp)

    flush(r, s)

    return s
Esempio n. 23
0
class Screen:

    def __init__(self):

        self.config = ConfigParser()
        self.config.read('config.ini')

        self.size = int(self.load_var("size"))
        self.theme = self.load_var("theme")
        self.lang = self.load_var("lang")
        self.size_of_stack = int(self.load_var("size_of_stack"))
        self.screen_width = int(self.load_var("screen_width"))
        self.screen_height = round(self.screen_width * 1.065)

        self.langs = []
        self.nof = 0
        for num, img in enumerate(listdir("images\\flags")):
            self.langs.append(img[:5])
            self.nof = num
        Square.add_theme(self.theme)

        self.settings()

        pygame.init()
        self.icon = pygame.image.load("images\\icon.png")
        pygame.display.set_icon(self.icon)
        self.screen = pygame.display.set_mode((self.screen_width, self.screen_height))

        self.fps = int(self.load_var("fps"))
        self.flags_img = []
        for num, img in enumerate(listdir("images\\flags")):
            self.flags_img.append(pygame.image.load("images\\flags\\" + img).convert())
            self.flags_img[num] = pygame.transform.scale(self.flags_img[num], (16, 10))

        pygame.display.set_caption("2048 Game!")
        self.background_color_play = (189, 173, 161)
        self.background = pygame.image.load('images\\background.jpg').convert()
        self.background = pygame.transform.scale(self.background, 
                                                (self.screen_width, 
                                                 self.screen_height))
        self.clock = pygame.time.Clock()
        self.game = False
        self.langb = []
        for i in range(len(self.langs)+1):
            self.langb.append(Button(x=self.screen_width-55, y=11+16*i, width=100, height=17,
                                     color=(0, 0, 0), text="", change=0))

        self.main_menu()

        self.up_key = pygame.K_UP
        self.left_key = pygame.K_LEFT
        self.right_key = pygame.K_RIGHT
        self.down_key = pygame.K_DOWN
        self.backspace_key = pygame.K_BACKSPACE
        self.width = (self.screen_width-40-10*(2*self.size-1))/self.size
        self.tiles = []
        self.score = 0
        self.best = 0
        self.pause_menu = False

        for i in range(self.size):
            for j in range(self.size):
                x1 = j*20+20
                y1 = i*20+20
                self.tiles.append(Square(x1=x1+j*self.width, y1=y1+i*self.width+self.screen_height-self.screen_width,
                                         x2=self.width, y2=self.width))
        if self.size_of_stack:
            self.stack = Stack(self.size_of_stack * self.size * self.size)
            self.score_stack = Stack(self.size_of_stack)
            self.best_score_stack = Stack(self.size_of_stack)

        self.play()

    def event_catcher(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    if not self.game:
                        Screen.quit()
                    elif self.pause_menu:
                        self.pause_menu = False
                    elif self.game:
                        self.pause_menu = True
                        self.pause()

                elif self.game:
                    if event.key == self.up_key:
                        return "up"
                    elif event.key == self.left_key:
                        return "left"
                    elif event.key == self.right_key:
                        return "right"
                    elif event.key == self.down_key:
                        return "down"
                    elif event.key == self.backspace_key:
                        return "back"

    def message_display(self, text, x, y, font_size, color=(0, 0, 0), font="Verdana", pos="center"):
        font = "fonts\\{}.ttf".format(font)
        font = pygame.font.Font(font, font_size)
        text_surf, text_rect = Screen.text_objects(text, font, color)
        text_rect.center = (x, y)
        if pos == "left":
            text_rect.left = x
        elif pos == "right":
            text_rect.right = x
        self.screen.blit(text_surf, text_rect)

    def check_lose(self):
        points = 0
        for k in range(self.size*self.size):
            if self.tiles[k].value == 0:
                points += 1
                break
        if not points:
            Screen.quit()

    def move(self, direction):
        if direction != "back" and self.size_of_stack:
            for tile in self.tiles:
                self.stack.push(tile.value)
            self.score_stack.push(self.score)
            self.best_score_stack.push(self.best)

        if direction == "up":
            for k in range(self.size*self.size):
                for l in range(1, k // self.size+1):
                    if self.tiles[k-self.size*l].value == 0 or \
                       self.tiles[k-self.size*l].value == self.tiles[k-self.size*(l-1)].value:
                        if self.tiles[k-self.size*l].value != 0 and self.tiles[k-self.size*(l-1)].value != 0:
                            self.score += self.tiles[k-self.size*l].value + self.tiles[k-self.size*(l-1)].value
                        self.tiles[k-self.size*l].value += self.tiles[k-self.size*(l-1)].value
                        self.tiles[k-self.size*(l-1)].value = 0

        elif direction == "left":
            for k in range(self.size*self.size):
                for l in range(1, k % self.size+1):
                    if self.tiles[k-l].value == 0 or \
                       self.tiles[k-l].value == self.tiles[k-(l-1)].value:
                        if self.tiles[k-l].value != 0 and self.tiles[k-l].value != 0:
                            self.score += self.tiles[k-l].value + self.tiles[k-(l-1)].value
                        self.tiles[k-l].value += self.tiles[k-(l-1)].value
                        self.tiles[k-(l-1)].value = 0

        elif direction == "right":
            for k in range(self.size*self.size-1, -1, -1):
                for l in range(1, self.size - k % self.size):
                    if self.tiles[k+l-1].value == self.tiles[k+l].value or \
                       self.tiles[k+l].value == 0:
                        if self.tiles[k+l-1].value != 0 and self.tiles[k+l].value != 0:
                            self.score += self.tiles[k+l].value + self.tiles[k+l-1].value
                        self.tiles[k+l].value += self.tiles[k+l-1].value
                        self.tiles[k+l-1].value = 0

        elif direction == "down":
            for k in range(self.size*self.size-1, -1, -1):
                for l in range(1, self.size-k//self.size):
                    if self.tiles[k+(l-1)*self.size].value == self.tiles[k+l*self.size].value or \
                       self.tiles[k+l*self.size].value == 0:
                        if self.tiles[k+(l-1)*self.size].value != 0 and self.tiles[k+l*self.size].value != 0:
                            self.score += self.tiles[k+l*self.size].value + self.tiles[k+(l-1)*self.size].value
                        self.tiles[k+l*self.size].value += self.tiles[k+(l-1)*self.size].value
                        self.tiles[k+(l-1)*self.size].value = 0

        elif direction == "back" and self.size_of_stack:
            if not self.stack.empty():
                for i in range(self.size * self.size, 0, -1):
                    self.tiles[i-1].value = self.stack.top()
                    self.stack.pop()
                self.score = self.score_stack.top()
                self.score_stack.pop()
                self.best = self.best_score_stack.top()
                self.best_score_stack.pop()

    def random_field(self):
        self.check_lose()
        field = randint(0, self.size*self.size-1)
        while True:
            if not self.tiles[field].value:
                x = randint(0, 10)
                if not x:
                    self.tiles[field].value = 4
                else:
                    self.tiles[field].value = 2
                break
            else:
                field = randint(0, self.size*self.size-1)

    def main_menu(self):
        # PLAY BUTTON
        play = Button(x=0.5*self.screen_width, y=0.5 * self.screen_height,
                      width=0.5*self.screen_width, height=0.1*self.screen_height,
                      color=(20, 163, 39), text="play")

        # EXIT BUTTON
        exitb = Button(x=0.5*self.screen_width, y=0.5 * self.screen_height+play.height+10,
                       width=0.5*self.screen_width, height=0.1*self.screen_height,
                       color=(204, 13, 0), text="exit")

        while not self.game:
            self.screen.blit(self.background, (0, 0))
            self.event_catcher()

            # LOGO
            self.message_display("2048", 0.5 * self.screen_width, 0.2 * self.screen_height,
                                 200, (242, 82, 31), "Clear Sans Bold")

            # PLAY BUTTON
            pygame.draw.rect(self.screen, play.color, [play.x, play.y, play.width, play.height])
            self.message_display(Screen.req_word(play.text, self.lang), play.x+0.5*play.width,
                                 play.y+0.475*play.height, 50, (0, 0, 0), "DejaVu Sans Mono")

            if play.check(pygame.mouse.get_pos()):
                self.game = True
            # EXIT BUTTON
            pygame.draw.rect(self.screen, exitb.color, [exitb.x, exitb.y, exitb.width, exitb.height])
            self.message_display(Screen.req_word(exitb.text, self.lang), exitb.x+0.5*play.width,
                                 exitb.y+0.475*exitb.height, 50, (0, 0, 0), "DejaVu Sans Mono")
            if exitb.check(pygame.mouse.get_pos()):
                Screen.quit()
            self.show_languages()

            self.clock.tick(self.fps)
            pygame.display.update()

    def play(self):
        self.reset()
        self.random_field()

        while self.game:
            self.screen.fill(self.background_color_play)
            direction = self.event_catcher()
            if direction:
                self.move(direction)
                if direction != "back":
                    self.random_field()
                    if self.score > self.best:
                        self.best = self.score

            for i in range(self.size*self.size):
                self.tiles[i].update_color()
                pygame.draw.rect(self.screen, self.tiles[i].color, [self.tiles[i].x1, self.tiles[i].y1,
                                                                    self.tiles[i].x2, self.tiles[i].y2])
                if self.tiles[i].value:
                    self.message_display(text=str(self.tiles[i].value), x=(2*self.tiles[i].x1+self.tiles[i].x2)/2,
                                         y=(2*self.tiles[i].y1+self.tiles[i].y2)/2, font_size=100,
                                         color=self.tiles[i].font_color, font="Clear Sans Bold")

            # UNDO
            if self.size_of_stack:
                self.message_display(text=Screen.req_word("undo", self.lang)+": {}".format(self.stack.size()//len(self.tiles)),
                                     x=20, y=(self.screen_height-self.screen_width+10)/2, font="DejaVu Sans Mono", font_size=30,
                                     color=(69, 69, 69), pos="left")
            else:
                self.message_display(text=Screen.req_word("undo", self.lang)+": 0",
                                     x=20, y=(self.screen_height-self.screen_width+10)/2, font="DejaVu Sans Mono", font_size=30,
                                     color=(69, 69, 69), pos="left")

            # SCORE
            self.message_display(text=Screen.req_word("score", self.lang)+": {}".format(self.score),
                                 x=self.screen_width*0.5, y=(self.screen_height-self.screen_width+10)/2,
                                 font="DejaVu Sans Mono", font_size=30, color=(69, 69, 69))

            # BEST SCORE
            self.message_display(text=Screen.req_word("best", self.lang)+": {}".format(self.best),
                                 x=self.screen_width-20, y=(self.screen_height-self.screen_width+10)/2,
                                 font="DejaVu Sans Mono", font_size=30, color=(69, 69, 69), pos="right")

            self.clock.tick(self.fps)
            pygame.display.update()

        self.main_menu()

    def pause(self):
        # Resume button
        resumeb = Button(x=0.5*self.screen_width, y=0.5 * self.screen_height,
                         width=0.5*self.screen_width, height=0.1*self.screen_height,
                         color=(20, 163, 39), text="resume")

        # Back to menu button
        endb = Button(x=0.5*self.screen_width, y=0.5 * self.screen_height+resumeb.height+10,
                      width=0.5*self.screen_width, height=0.1*self.screen_height,
                      color=(204, 13, 0), text="end")

        while self.pause_menu:
            self.screen.blit(self.background, (0, 0))
            self.event_catcher()

            # Pause logo
            self.message_display(Screen.req_word("pause", self.lang), 0.5 * self.screen_width,
                                 0.07 * self.screen_height, 100, (242, 82, 31), "Clear Sans Bold")

            # Resume Button
            pygame.draw.rect(self.screen, resumeb.color, [resumeb.x, resumeb.y, resumeb.width, resumeb.height])
            self.message_display(Screen.req_word(resumeb.text, self.lang), resumeb.x+0.5*resumeb.width,
                                 resumeb.y+0.475*resumeb.height, 50, (0, 0, 0), "DejaVu Sans Mono")
            if resumeb.check(pygame.mouse.get_pos()):
                self.pause_menu = False

            # Back to menu Button
            pygame.draw.rect(self.screen, endb.color, [endb.x, endb.y, endb.width, endb.height])
            self.message_display(Screen.req_word(endb.text, self.lang), endb.x+0.5*endb.width,
                                 endb.y+0.475*endb.height, 50, (0, 0, 0), "DejaVu Sans Mono")
            if endb.check(pygame.mouse.get_pos()):
                self.pause_menu = False
                self.game = False
                sleep(0.1)

            self.show_languages(bg=None)

            self.clock.tick(self.fps)
            pygame.display.update()

    def settings(self):
        changed = False
        while True:
            Screen.cls()
            print("\n{}:\n".format(Screen.req_word("current_settings", self.lang)))
            print("1) {}: {}".format(Screen.req_word("size", self.lang), self.size))
            print("2) {}: {}".format(Screen.req_word("theme", self.lang), self.theme))
            print("3) {}: {}".format(Screen.req_word("language", self.lang), self.lang))
            print("4) {}: {}".format(Screen.req_word("undo_moves", self.lang), self.size_of_stack))
            print("5) {}".format(Screen.req_word("advanced_options", self.lang)))
            print("\n6) {}".format(Screen.req_word("save_settings", self.lang)))
            print("\n{}".format(Screen.req_word("instrucion", self.lang)))

            print("\n{}:  ".format(Screen.req_word("input", self.lang)), end='')
            choice = input()
            if not choice:
                if changed:
                    for i in range(10):
                        Screen.cls()
                        print("\n{}".format(Screen.req_word("req_change", self.lang)))
                        print("\n1) {}".format(Screen.req_word("yes", self.lang)))
                        print("2) {}".format(Screen.req_word("no", self.lang)))
                        print("\n{}:  ".format(Screen.req_word("input", self.lang)), end='')
                        choice = input()
                        if choice is "1":
                            sett_list = {"size": self.size, "theme": self.theme, 
                                         "lang": self.lang, "size_of_stack": self.size_of_stack}
                            self.save(sett_list)
                        elif choice is "2":
                            pass
                        else:
                            continue
                        break
                    else:
                        print("{}".format(Screen.req_word("critical", self.lang)))
                        Screen.quit()
                break
            elif choice is "1":
                self.set_size()
            elif choice is "2":
                self.select_theme()
            elif choice is "3":
                self.set_lang()
            elif choice is "4":
                self.set_stack()
            elif choice is "5":
                self.advanced_settings()
            elif choice is "6":
                if changed:
                    changed = False
                sett_list = {"size": self.size, "theme": self.theme, 
                             "lang": self.lang, "size_of_stack": self.size_of_stack}
                self.save(sett_list)
                continue
            if not changed:
                changed = True

    def advanced_settings(self):
        while True:
            Screen.cls()
            print("\n{}:\n".format(Screen.req_word("current_settings", self.lang)))
            print("1) {}: {}".format(Screen.req_word("width", self.lang), self.screen_width))
            print("2) {}".format(Screen.req_word("load_default", self.lang)))
            print("\n{}".format(Screen.req_word("instrucion", self.lang)))

            print("\n{}:  ".format(Screen.req_word("input", self.lang)), end='')
            choice = input()

            if not choice:
                break
            elif choice is "1":
                self.set_width()
            elif choice is "2":
                self.load_default()

    def save(self, sett_list):
        try:
            self.config.add_section('settings')
        except:
            pass

        for key, value in sett_list.items():
            self.config.set('settings', key, str(value))

        with open('config.ini', 'w') as f:
            self.config.write(f)
            f.close()

    def load_default(self):
        self.size = int(self.config.get('default_settings', "size"))
        self.theme = self.config.get('default_settings', "theme")
        self.lang = self.config.get('default_settings', "lang")
        self.size_of_stack = int(self.config.get('default_settings', "size_of_stack"))
        self.screen_width = int(self.config.get('default_settings', "screen_width"))

    def set_size(self):
        Screen.cls()
        print("{}?".format(Screen.req_word("req_size", self.lang)))
        for i in range(10):
            try:
                print("\n{}:  ".format(Screen.req_word("input", self.lang)), end='')
                self.size = int(input())
            except ValueError:
                print("{} 4 {} 16".format(Screen.req_word("inv_option1", self.lang), 
                                                          Screen.req_word("inv_option2", self.lang)))
                continue
            if self.size > 16 or self.size < 4:
                print("{} 4 {} 16".format(Screen.req_word("inv_option1", self.lang), 
                                                          Screen.req_word("inv_option2", self.lang)))
                continue
            break
        else:
            print("{}".format(Screen.req_word("critical", self.lang)))
            Screen.quit()

    def select_theme(self):
        Screen.cls()
        print("{}?".format(Screen.req_word("req_theme", self.lang)))
        for theme in listdir("Themes\\"):
            if theme[:-4] != "Example":
                print(theme[:-4])
        
        for i in range(10):
            print("\n{}:  ".format(Screen.req_word("input", self.lang)), end='')
            self.theme = input()
            if not isfile("Themes\\{}.txt".format(self.theme)):
                print("{}".format(Screen.req_word("wrong_option", self.lang)))
                continue
            if self.theme == "Example":
                print("{}".format(Screen.req_word("wrong_option", self.lang)))
                continue
            Square.add_theme(self.theme)
            break
        else:
            print("{}".format(Screen.req_word("critical", self.lang)))
            Screen.quit()

    def set_lang(self):
        Screen.cls()
        print("{}?".format(Screen.req_word("req_lang", self.lang)))
        for index, item in enumerate(self.langs):
            print(f"{index}.", item)

        for i in range(10):
            try:
                print("\n{}:  ".format(Screen.req_word("input", self.lang)), end='')
                self.lang = int(input())
            except ValueError:
                print("{} 0 {} {}".format(Screen.req_word("inv_option1", self.lang), 
                                                          Screen.req_word("inv_option2", self.lang),
                                                          self.nof))
                continue

            if self.lang > self.nof or self.lang < 0:
                print("{} 0 {} {}".format(Screen.req_word("inv_option1", self.lang), 
                                                          Screen.req_word("inv_option2", self.lang),
                                                          self.nof))
                continue
            break

        else:
            print("{}".format(Screen.req_word("critical", self.lang)))
            Screen.quit()

        self.lang = self.langs[self.lang]

    def set_stack(self):
        Screen.cls()
        print("{}?".format(Screen.req_word("req_stack", self.lang)))
        for i in range(10):
            print("\n{}:  ".format(Screen.req_word("input", self.lang)), end='')
            try:
                self.size_of_stack = int(input())
            except ValueError:
                print("{} 0 {} 99".format(Screen.req_word("inv_option1", self.lang), 
                                                          Screen.req_word("inv_option2", self.lang)))
                continue
            if self.size_of_stack > 99 or self.size_of_stack < 0:
                print("{} 0 {} 99".format(Screen.req_word("inv_option1", self.lang), 
                                                          Screen.req_word("inv_option2", self.lang)))
                continue
            break
        else:
            print("{}".format(Screen.req_word("critical", self.lang)))
            Screen.quit()

    def set_width(self):
        Screen.cls()
        print("{}?".format(Screen.req_word("req_width", self.lang)))
        for i in range(10):
            try:
                print("\n{}:  ".format(Screen.req_word("input", self.lang)), end='')
                self.screen_width = int(input())
                self.screen_height = int(self.screen_width*1.065)
            except ValueError:
                print("{} 600 {} 950".format(Screen.req_word("inv_option1", self.lang), 
                                                          Screen.req_word("inv_option2", self.lang)))
                continue
            if self.screen_width > 950 or self.screen_width < 600:
                print("{} 600 {} 950".format(Screen.req_word("inv_option1", self.lang), 
                                                          Screen.req_word("inv_option2", self.lang)))
                continue
            break
        else:
            print("{}".format(Screen.req_word("critical", self.lang)))
            Screen.quit()

    def show_languages(self, bg=False):
        # LANG BUTTON
        for i in range(len(self.langs)+1):
            if bg:
                pygame.draw.rect(self.screen, self.langb[i].color, [self.langb[i].x, self.langb[i].y, self.langb[i].width, self.langb[i].height])
            if self.langb[i].check(pygame.mouse.get_pos()) and i and self.langs[i-1] != self.lang:
                self.lang = Screen.req_word("short_name", self.langs[i-1])
                self.config.set('settings', "lang", str(self.langs[i-1]))
                with open('config.ini', 'w') as f:
                    self.config.write(f)
                    f.close()

        # Names of languages
        s = 0
        self.message_display(text=Screen.req_word("selected", self.lang) + ": " +
                             Screen.req_word("full_name", self.lang),
                             font_size=15, x=self.screen_width-25, y=10, pos="right")
        self.screen.blit(self.flags_img[self.find()], (self.screen_width-20, 5))
        for item in self.langs:
            self.message_display(text=Screen.req_word("full_name", item),
                                 font_size=15, x=self.screen_width-25, y=26+(16*s), pos="right")
            self.screen.blit(self.flags_img[s], (self.screen_width-20, 21+(16*s)))
            s += 1

    def reset(self):
        for i in range(self.size*self.size):
            self.tiles[i].value = 0
        self.score = 0
        if self.size_of_stack:
            while not self.stack.empty():
                self.stack.pop()

    def find(self):
        i = 0
        for element in self.langs:
            if element == self.lang:
                return i
            else:
                i += 1

    def load_var(self, option):
        try:
            return self.config.get("settings", option)
        except:
            try:
                return self.config.get("default_settings", option)
            except:
                raise ValueError("No option {} in section \'default_settings\'".format(option))

    @classmethod
    def text_objects(cls, text, font, color):
        text_surface = 0
        try:
            text_surface = font.render(text, True, color)
        except AttributeError:
            font = pygame.font.SysFont("Arial", 50)
            text_surface = font.render(text, True, color)
        finally:
            return text_surface, text_surface.get_rect()

    @classmethod
    def req_word(cls, requested_word, language):
        full_path = path.abspath(path.join("lang", "{}.xml".format(language)))
        for word in ElementTree.parse(full_path).findall(language):
            return word.find(requested_word).text

    @classmethod
    def quit(cls):
        pygame.quit()
        sys.exit()

    @classmethod
    def cls(cls):
        system('cls' if name=='nt' else 'clear')
Esempio n. 24
0
 def test_empty(self):
     s = Stack()
     self.assertTrue(s.empty())
     s = Stack(1, 2, 3, "Hello", "World")
     self.assertFalse(s.empty())
Esempio n. 25
0
stack.push(1)
stack.push(2)
stack.push('oi')
stack.push('1.2')
stack.push(True)
stack.push('a')

#Print elements
print(stack)

#Erase two elements
stack.pop()
stack.pop()

#Print stack again
print(stack)

#Show queue size
print(stack.__len__())

#Check if stack is empty
print(stack.empty())

#Erase remaining elements
stack.pop()
stack.pop()
stack.pop()
stack.pop()

#Check again if stack is empty
print(stack.empty())
Esempio n. 26
0
import random
from Stack import Stack
def SortStack(s):
    temp = Stack()    
    while not s.empty():
        x = s.pop()
        
        while not temp.empty() and x > temp.peek():
            s.push(temp.pop())           
        temp.push(x)

    return temp

#######################################
q = Stack()
n = 20
for _ in range(n):
    q.push(random.randint(1, n))

q = SortStack(q)
while not q.empty():
    print(q.pop())