# -*- coding: Latin-1 -*- # Visar sortering av listor med objekt import copy class Video(object): """Representerar en YouTube-video""" def __init__(self, namn, kategori, minuter): """Konstruktorn""" self.namn = namn # Videofilmens namn (sträng) self.kategori = kategori # Kategori: komedi, nyheter, osv (sträng) self.minuter = minuter # Videons längd i minuter (flyttal) self.visningar = 0 # Totalt antal visningar (heltal) self.betyg = [] # Betyg (lista) def __str__(self): """För kontrollutskrift""" return self.namn + "/" + self.kategori + "/" + str(self.minuter) def skrivInfo(self): """För informtiv utskrift""" print "________________________________________________________________________" print "Filnamn: ", self.namn print "Kategori: ", self.kategori print "Längd ", self.minuter print "Filmen har visats ", self.visningar, "gånger. Medelbetyg:", self.medelBetyg() print "________________________________________________________________________" @staticmethod def tabellRubrik(): """Skriver ut tabellrubrik (använder inga attribut)""" print "%-55s %5s %10s" % ("Film", "Betyg", "Visningar") def tabellRad(self): """Skriver ut en tabellrad formatterat""" print "%-55s %5.1f %10d" % (self.namn, self.medelBetyg(), self.visningar) def namnet(self): """Returnerar filmens namn""" return self.namn def seVisningar(self): """Returnerar antal visningar av filmen""" return self.visningar def ny_visning(self): """Ökar antal visningar""" self.visningar += 1 def nyttBetyg(self, b): """Lägger in nytt betyg i betygslistan""" self.betyg.append(b) def medelBetyg(self): """Beräknar medelbetyg (som flyttal)""" antal = len(self.betyg) if antal > 0: return sum(self.betyg)/float(antal) else: return 0 ############## Här slutar klassen Video ########### def lasFilen(filnamn): """Läser in filmerna från filen, skapar Video-objekt och lagrar i en lista, som returneras""" filen = open(filnamn,"r") listan = [] namn = filen.readline().strip() while namn: kategori = filen.readline().strip() minuter = float(filen.readline().strip()) film = Video(namn, kategori, minuter) tomrad = filen.readline() listan.append(film) namn = filen.readline().strip() return listan def showList(listan): """Visar en numrerad lista med filmer""" print "\n Följande filmer kan du välja bland:" nr = 0 for film in listan: nr += 1 print " " + str(nr) + ". " + film.namn def titta(listan): """Titta på information om, och betygssätta filmer""" klar = False while not klar: showList(listan) svar = raw_input("Vilken film vill du se (ange nr)?") if svar: index = int(svar) - 1 film = listan[index] film.skrivInfo() film.ny_visning() b = input('Vilket betyg vill du ge "' + film.namnet() + '"? ') film.nyttBetyg(b) else: klar = True def meny(listan): """Hanterar menyval""" print "Välkommen till YouTube Beta!" klar = False while not klar: print " 1. Betygssätta filmer" print " 2. Sortera efter antal visningar" print " 3. Sortera efter medelbetyg" svar = raw_input("Vad vill du göra?") if svar == "1": titta(listan) elif svar == "2": kopia = copy.deepcopy(listan) kopia.sort(key=Video.seVisningar,reverse=True) Video.tabellRubrik() print "________________________________________________________________________" for film in kopia: film.tabellRad() print "________________________________________________________________________" elif svar == "3": kopia = copy.deepcopy(listan) kopia.sort(key=Video.medelBetyg,reverse=True) Video.tabellRubrik() print "________________________________________________________________________" for film in kopia: film.tabellRad() print "________________________________________________________________________" else: klar = True def main(): listan = lasFilen("YouTube.txt") meny(listan) ################ Huvudprogram ######################## main()