Krovert Skrevet 11. mai 2015 Del Skrevet 11. mai 2015 Skal jeg legge denne menyen for seg selv, eller skal jeg integrere denne innunder klassen produktregister? Del av oppgaven jeg sliter med: Lag et program som er menystyrt hvor en har mulighet til å legge til nye produkter, endre på produkter som allerede er lagt inn, skrive ut alle produkter, skrive ut bestemt på produkttype,lese inn produktregisteret fra fil, lagre produktregisteret til fil (med endringer som er blitt gjort). Kode:class Produkt: def __init__(self, produktid): self.__produktid=produktid def setProduktid(self, produktid): self.__produktid=produktdid def getProduktid(self): return self.__produktid def __str__(self): info="Produktid`en er: "+str(self.__produktid) return info class Bok(Produkt): def __init__(self, produktid, navnet, forfatteren, prisen): super().__init__(produktid) self.__navn=navnet self.__forfatter=forfatteren self.__pris=prisen def setNavn(self, navnet): self.__navn=navnet def getNavn(self): return self.__navn def setForfatter(self, forfatteren): self.__forfatter=forfatteren def getForfatter(self): return self.__forfatter def setPris(self,prisen): self.__pris=prisen def getPris(self): return self.__pris def __str__(self): '''Metode for å skrive ut informasjon om bok''' info=super().__str__()+" Boka heter: "+\ self.__navn+" Forfatterens navn: "+self.__forfatter+" Prisen er: "+str(self.__pris) return infoclass Musikk(Produkt): def __init__(self, produktid, artisten, gruppen, prisen): super().__init__(produktid) self.__artist=artisten self.__gruppe=gruppen self.__pris=prisen def setArtist(self, artisten): self.__artist=artisten def getArtist(self): return self.__artist def setGruppe(self, gruppen): self.__gruppe=gruppen def getGruppe(self): return self.__gruppe def setPris(self, prisen): self.__pris=prisen def getPris(self): return self.__pris def MVAPris(self): mvapris=self.getpris()*1.25 return pris def __str__(self): info=super().__str__()+" Artistens navn: "+self.__artist+" Gruppen: "+self.__gruppe+\ " Nettopris er: "+str(self.__pris)+" Bruttopris er: "+str(self.mvapris()) return info class Spill(Produkt): def __init__(self, produktid, aldergrensen, sjangeren, prisen): super().__init__(produktid) self.__aldergrense=aldergrensen self.__sjanger=sjangeren self.__pris=prisen def setAldergrense(self, aldergrensen): self.__aldergrense=aldergrensen def getAldergrense(self): return self.__aldergrense def setSjanger(self, sjangeren): self.__sjanger=sjangeren def getSjanger(self): return self.__sjanger def setPris(self, prisen): self.__pris=prisen def getPris(self): return self.__pris def MVAPris(self): mvapris=self.getpris()*1.30 return pris def __str__(self): info=super().__str__()+" Aldersgrensen er: "+str(self.__aldergrense)+\ " Sjangeren er: "+self.__sjanger+" Nettoprisen er: "+str(self.__pris)+\ " Bruttoprisen er: "+str(self.mvapris()) return info class Produktregister: def __init__(self): self.__produktliste=[] def getProduktliste(self): return self.__produktliste def leggeInnprodukt(self,produkt): self.__produktliste.append(produkt) def finneProdukt(self, produktid): for produkt in self.__produktliste: if produkt.getProduktid()==produktid: print("Vare: ", produkt) def skrivUtAlle(self): for produkt in self.__produktliste: print(produkt) def skrivUtBestemtProdukttype(self, produktnavn): for produkt in self.__produktliste: if isinstance(produkt, produktnavn): print(produkt) #Mulig ImportError from Produkt import Produkt import pickle def skrivTilFilMedPickle(produkt, produktliste): produktliste = None try: utfil = open(produkt,"wb") pickle.dump(produktliste,produkt) return True except pickle.Pickleerror as feil: print(feil) return False finally: if utfil is not None: utfil.close() def lesFraFulMedPicle(produkt): '''returnerer et objekt fra fil''' innfil = None try: innfil = open(produkt,"wb") pickle.dump(produkt,utfil) return True except pickle.UnpicklingError as feil: print (feil) return False finally: if innfil is not None: innfil.close() return produktliste #Test med Produktet Spill spillReg = [] spillReg.append(Spill(7,"Action",399)) spillReg.append(Spill(3,"Eventyr",349)) spillReg.append(Spill(7,"Sport",499)) funga=skrivTilFilMedPickle("pickletest.psr",spillReg) if funga==True: print("Spillregisteret ble skrevet til fil") elif funga==True: print("Spillregisteret ble ike skrevet til fil") else: print("Noe merkelig har skjedd") #Hente ut daten igjen nyttReg=lesFraFilMed Pickle if nyttReg!=False: #Da har vi fått et objekt tilbake for spillet in nyttReg: print(spillet) Lenke til kommentar
blured Skrevet 11. mai 2015 Del Skrevet 11. mai 2015 Kan ikke skrive Python, så kan ikke hjelpe deg med akkurat det. Men koden blir lettere å lese for andre om du bruker en tjeneste som hastebin (http://hastebin.com/alelagocet.py), eller bruker kodefunksjonen på diskusjon.no [code][/code] 1 Lenke til kommentar
Lock-Aze Skrevet 12. mai 2015 Del Skrevet 12. mai 2015 Har du ikke en main klasse som kaller opp disse underklassene som du kan legge menyen i, eventuelt legg menyen i en helt egen klasse og kall denne klassen fra main klassen din. Vanskelig å fortelle hvor du burde legge menyen når man ikke ser resten av koden din. For min del, så hadde jeg bare laget en egen klasse som jeg hadde kalt meny eller noe lignende og satt inn menyen der. Lenke til kommentar
snippsat Skrevet 13. mai 2015 Del Skrevet 13. mai 2015 (endret) Det var da veldig mye kode for dette Har du lært dette selv? eller har du lærere som kommer fra en Java bakgrunn, og som ønsker overfører Java sin stil/metode og skrive på rett til Python. For og være litt mer spesifikk,stor bruk av getter/setters og ønsker og gjøre ting privat med __, og følger ikke PEP-8. Python is Not Java tar opp dette,er en 11 år gammel post,men er minst like aktuell i dag. And do not take that to mean that you should write getters and setters, and then wrap them in 'property'. That means that until you prove that you need anything more than a simple attribute access, don't write getters and setters. They are a waste of CPU time, but more important, they are a waste of programmer time. Not just for the people writing the code and tests, but for the people who have to read and understand them as well. Jeg kan gi et eksempel med de 2 første klassene dine, jeg halvere koden med og slette alle getter/setters. Jeg fjerne også alle +str() ikke pent,og bruker string foramtting. class Produkt: def __init__(self, produktid): self.produktid = produktid def __str__(self): return 'Produktid er: {}'.format(self.produktid) class Bok(Produkt): def __init__(self, produktid, navn, forfatteren, pris): super().__init__(produktid) self.navn = navn self.forfatter = forfatteren self.pris = pris def __str__(self): '''Metode for å skrive ut informasjon om bok''' info = '{}\nBoka heter: {}\nForfatterens navn: {}\nPrisen er: {}'\ .format(super().__str__(), self.navn, self.forfatter, self.pris) return info Da tester jeg klassen,og legge merke til at get/set fortsatt vil fungere fint. >>> bok = Bok(9999, 'Killer', 'Dopy', '500') >>> print(bok) Produktid er: 9999 Boka heter: Killer Forfatterens navn: Dopy Prisen er: 500 >>> bok.forfatter = 'new_name' #set >>> bok.forfatter #get 'new_name' >>> print(bok) Produktid er: 9999 Boka heter: Killer Forfatterens navn: new_name Prisen er: 500 Jeg svarer egentlig på problemet ditt, ble bare litt frustrert over menge av av kode i forholde til problem som skal løses Endret 17. mai 2015 av snippsat Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå