TILDA, ÖVNING 1 (Lindas grupp 5 sept 2007) Enkla pythonuppgifter, abstrakta datatyper, listor med pekare ______________________________________________________________________ ********************************************************************** 1 TIDMÄTNING Skriv ett program som tickar fram en stjärna i sekunden och så småningom talar om hur länge det är sen UNIX startade. ______________________________________________________________________ "Tickar fram stjärnor, beräknar tid sedan UNIX-starten 1 jan 1970" from time import sleep,time for i in range(10): sleep(1) print "*", print s=int(time()) m=s/60 s=s%60 h=m/60 m=m%60 d=h/24 h=h%24 print "UNIX har nu gått i",d,"dagar,",h,"h,",m,"min,",s," s" _________________________________________________________________ ********************************************************************** 2 INLÄSNING OCH UTSKRIFT Skriv ett program som läser in en rad tal och skriver ut dom med ett tal per rad. ______________________________________________________________ raden = raw_input("Ge en rad tal: ") raden_i_delar = rad.split() for tal in raden_i_delar: print tal ______________________________________________________________________ ********************************************************************** 3 ABSTRAKT DATATYP FÖR TEMPERATUR * Temperatur kan anges i olika skalor. En abstrakt datatyp minskar risken för missförstånd. Definiera klassen temp med metoderna setK, setC, setF och getK, getC, getF. * Använd sedan klassen i ett program gaslag.py som beräknar trycket för en gasvolym med anropet tryck(V,T,n), där T har din abstrakta datatyp. Körexempel: Antal mol (0 avslutar):1 Gasvolym (m3):1 Temp (18 C, 291 K eller 64.4 F, obs blanksteget):373.15 K K: 373.15 C: 100.0 F: 212.01000012 Tryck (Pa): 3102.555675 Antal mol (0 avslutar):0 ______________________________________________________________________ Filen temp.py: "Abstrakt datatyp för temperatur" nollC=273.15 nollF=255.3666666 #F-nollan i Kelvin class temp: K=0 #Temperatur i Kelvin def setK(self,K): self.K=K def setC(self,C): self.K=nollC+C def setF(self,F): self.K=nollF+5*F/9 def getK(self): return self.K def getC(self): return self.K-nollC def getF(self): return (self.K-nollF)*9/5 ______________________________________________________________________ Filen gaslag.py: "Allmänna gaslagen" from temp import temp from sys import exit def tryck(V,T,n): R=8.3145 #gaskonstanten J/mol*K K=T.getK() #Kelvin return n*R*K/V #trycket enligt gaslagen T=temp() while 1: n=input("Antal mol (0 avslutar):") if n==0: exit() V=input("Gasvolym (m3):") rad=raw_input("Temp (18 C, 291 K eller 64.4 F, obs blanksteget):").split() grader=float(rad[0]) skalan=rad[1] if skalan=="K": T.setK(grader) if skalan=="C": T.setC(grader) if skalan=="F": T.setF(grader) print "K:",T.getK() print "C:",T.getC() print "F:",T.getF() print "Tryck (Pa):",tryck(V,T,n) print ______________________________________________________________________ ********************************************************************** 4 NÄST ÖVERSTA NODEN BORT * Du har en stor stack under pekaren top. Skriv en sats som tar bort näst översta posten! ______________________________________________________________________ Filen stack.py (känd från föreläsning, så när som på två nya metoder): class stack: top=None def push(self,x): ny=node() ny.value=x ny.next=self.top self.top=ny def pop(self): x=self.top.value self.top=self.top.next return x def isempty(self): if self.top==None: return 1 else: return 0 def nastoverstabort(self): p=self.top p.next=p.next.next def varannanbort(self): p=self.top while p!=None: p.next=p.next.next p=p.next class node: value=None next=None ______________________________________________________________________ ********************************************************************** 5 VARANNAN POST BORT * Ta bort varannan post ur en stack genom att pekmeka! ______________________________________________________________________ Filen stacktest.py: from stack import stack s=stack() # Näst översta bort med pekmek i stack-klassen for i in range(10): s.push(i) s.nastoverstabort() while not s.isempty(): print s.pop() print "---------------------------" ______________________________________________________________________