Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Python: Pino

janijohannes [04.02.2010 21:07:42]

#

Itsellä tuli projektin kanssa pieni ongelma kun Pythonissa ei ole pinoja. Noh, eipä muuta kuin uusi luokka kehiin. En ole varma, että onko Pythonissa jo valmiina pino-ominaisuudet.

# -*- coding: latin1 -*-
## -*- coding: cp850 -*-

class Stack:
    sta = [0]
    def __init__(self):
        self.sta[0]=0

    def __call__(self,d=1):
        ret=self.Pop()
        if d: self.Clear()
        return ret

    def Put(self,num):
        self.sta[0]=self.sta[0]+1
        self.sta.append(num)

    #It's not needed to use these.
    def Pop(self):
        return self.sta[self.sta[0]]

    def Move(self,m):
        self.sta[0]=self.sta[0]+m

    def Clear(self):
        self.sta[self.sta[0]]=0
        self.sta.remove(0)
        self.sta[0]=self.sta[0]-1

    #Mathematic functions
    def Copy(self):
        self.sta.append(self.sta[self.sta[0]])
        self.Move(1)

    def Plus(self):
        self.sta[self.sta[0]-1]=self.sta[self.sta[0]-1]+self.sta[self.sta[0]]
        self.Clear()

    def Minus(self):
        self.sta[self.sta[0]-1]=self.sta[self.sta[0]-1]-self.sta[self.sta[0]]
        self.Clear()

    def Multiplication(self):
        self.sta[self.sta[0]-1]=self.sta[self.sta[0]-1]*self.sta[self.sta[0]]
        self.Clear()

    #Other
    def Swap(self):
        a=self.sta[self.sta[0]]
        self.sta[self.sta[0]]=self.sta[self.sta[0]-1]
        self.sta[self.sta[0]-1]=a

    def Over(self):
        a=self.Pop()
        self.sta[self.sta[0]]=self.sta[self.sta[0]-2]
        self.sta[self.sta[0]-2]=a

# Kommentit näyttävät pinon sisällön.

s=Stack()

s.Put(3) # 3
s.Copy() # 3 3
s.Copy() # 3 3 3
s.Multiplication() # 3 9
s.Swap() # 9 3

s.Put(2) # 9 3 2
s.Put(1) # 9 3 2 1

print s() # 9 3 2
print s() # 9 3
print s() # 9
print s() #

raw_input("Lopeta painamalla entteriä.")

Metabolix [19.07.2012 21:03:19]

#

Koodi ei ole kovin mallikelpoista, ainakin Pop ja Clear toimivat väärin, ja sitä paitsi Pythonin lista toimii hyvin myös pinona:

s = []
s.append(3)
s.append(s[-1])
s.append(s[-1])
s.append(s.pop() * s.pop())
s[-1], s[-2] = s[-2], s[-1]

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta