Gå til innhold

Noen som kan hjelpe meg ang. en fornuftig meny i en pythonoppgave?


Anbefalte innlegg

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 info

class 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
Videoannonse
Annonse

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

Det var da veldig mye kode for dette :hrm:

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 av snippsat
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...