# Granskningsexempel - kollas mot granskningsprotokollet på övn efter påsk

class Schlager(object):
    """Representerar en schlagerlåt"""

    def __init__(self, land, titel, artist, text, musik, nummer):
        """Konstruktorn"""
        self.l = land       # Land
        self.t = titel      # Låtens titel
        self.a = artist     # Artist eller grupp
        self.tx = text      # Textförfattare
        self.m = musik      # Låtens kompositör
        self.n = nummer     # Ordningsnummer
        self.p = 0          # Poäng i omröstningen

    def __str__(self):
        """För utskrift"""
        return str(self.n) + ". " + self.t

    def Skriv1(self):
        print("Låt nummer", self.n)
        print("Land: ", self.l)
        print("Titel: ", self.t)
        print("Artist: ", self.a)
        print("Texten skriven av ", self.tx)
        print("Musiken komponerad av ", self.m)
        print("__________________________________________________________________________")

    def skriv2(self):
        print("%-4s %-25s %10d" % (str(self.n) + ".", self.t, self.p))

    def write3(self):
        stjarnor = '*'*50
        print(stjarnor)
        print((self.l +"s "+ self.a.upper()).center(50))
        print("med låten".center(50))
        print((self.t.upper()).center(50))
        print(stjarnor)
        
    def Titeln(self):
        return self.t

    def poangen(self):
        return self.p

    def Numret(self):
        return self.n

    def addera(self, p):
        self.p += p

    def las_filen(self,filnamn):
        try:
            filen = open(filnamn,"r")
        except(IOError):
            print("Kunde inte öppna filen", filnamn, "\nAvslutar programmet!")
            import sys
            sys.exit()

        lista = []
        nummer = 1
        land = filen.readline().strip()
        while land:
            titel = filen.readline().strip()
            artist = filen.readline().strip()
            text = filen.readline().strip()
            musik = filen.readline().strip()
            filen.readline()
            sang = Schlager(land,titel, artist, text, musik, nummer)
            lista.append(sang)
            nummer += 1
            land = filen.readline().strip()

        print("\n         EUROVISION SONG CONTEST")
        print("                2017    \n")
        for sang in lista:
            sang.Skriv1()
            input()
        import copy
        ursprungslista = copy.deepcopy(lista)

        # Läser in tittarnas röster
        print ("Nu vill vi ha tittarrösterna från Storbrittannien")
        for p in (1,2,4,8,12):
            nr = lasTal("Vilken låt får "+ str(p) + " poäng? ",1,len(lista)+1)
            index = sok_index(nr,lista)
            print("Låt nummer", lista[index], "får alltså", p, "poäng av tittarna i", land)
            lista[index].addera(p)
            lista.sort(key=Schlager.poangen,reverse=True)
            VisaStallning(lista)

        print ("Nu vill vi ha tittarrösterna från Tyskland")
        for p in (1,2,4,8,12):
            nr = lasTal("Vilken låt får "+ str(p) + " poäng? ",1,len(lista)+1)
            index = sok_index(nr,lista)
            print("Låt nummer", lista[index], "får alltså", p, "poäng av tittarna i", land)
            lista[index].addera(p)
            lista.sort(key=Schlager.poangen,reverse=True)
            VisaStallning(lista)

        print ("Nu vill vi ha tittarrösterna från Frankrike")
        for p in (1,2,4,8,12):
            nr = lasTal("Vilken låt får "+ str(p) + " poäng? ",1,len(lista)+1)
            index = sok_index(nr,lista)
            print("Låt nummer", lista[index], "får alltså", p, "poäng av tittarna i", land)
            lista[index].addera(p)
            lista.sort(key=Schlager.poangen,reverse=True)
            VisaStallning(lista)

        print ("Nu vill vi ha tittarrösterna från Spanien")
        for p in (1,2,4,8,12):
            nr = lasTal("Vilken låt får "+ str(p) + " poäng? ",1,len(lista)+1)
            index = sok_index(nr,lista)
            print("Låt nummer", lista[index], "får alltså", p, "poäng av tittarna i", land)
            lista[index].addera(p)
            lista.sort(key=Schlager.poangen,reverse=True)
            VisaStallning(lista)

        print ("Nu vill vi ha tittarrösterna från Italien")
        for p in (1,2,4,8,12):
            nr = lasTal("Vilken låt får "+ str(p) + " poäng? ",1,len(lista)+1)
            index = sok_index(nr,lista)
            print("Låt nummer", lista[index], "får alltså", p, "poäng av tittarna i", land)
            lista[index].addera(p)
            lista.sort(key=Schlager.poangen,reverse=True)
            VisaStallning(lista)


        # Läser in juryns röster    
        for land in ("Storbrittannien","Tyskland","Frankrike","Spanien","Italien"):
            print("Och nu vill vi ha rösterna från juryn i", land)
            for p in (1,2,4,8,12):
                nr = lasTal("Vilken låt får "+ str(p) + " poäng? ",1,len(lista)+1)
                index = sok_index(nr,lista)
                print("Låt nummer", lista[index], "får alltså", p, "poäng av juryn i", land)
                lista[index].addera(p)
                lista.sort(key=Schlager.poangen,reverse=True)
                VisaStallning(lista)

        return lista


##############  Här slutar klassen Schlager ###########

def sok_index(nr, lista):                    #Funktion med två parmetrar: nr och lista
    for i in range(len(lista)):              #Slinga som går igenom lista
        if lista[i].n == nr:                 #Om lista[i].n är lika med nr
            return i                         #så returneras i

def sok_kompositor(namn, lista):             #Inte klar
    pass

def VisaStallning(lista):
    print("--------------------------------------------------------\n")             #Skriver ut en rad med-------------
    print("\n                    AKTUELL STÄLLNING \n ")                            #Skriver ut "AKTUELL STÄLLNING"
    print("%-4s %-25s %10s\n" % ("Nr", "Låt", "Poäng"))                             #Skriver ut "Nr", "Låt" och "Poäng"
    for sang in lista:                                                              #Går igenom lista
        sang.skriv2()                                                               #Anropar skriv2
    print("--------------------------------------------------------\n")             #Skriver ut en rad med-------------

def visa_listan():                            #Funktion utan parametrar
    for sang in lista:                        #Slinga som går igenom lista
        print(sang)                           #Skriver ut varje element i listan

def lasTal(fraga, undre, ovre):              #Tre parametrar: fraga, undre, ovre
    svar = None                               #svar sätts till None
    while svar not in list(range(undre,ovre)): #Slingan upprepas så länge villkoret är True
        try:                                  #Försök...
            svar = int(input(fraga))          #läsa in svaret och göra om det till heltal
        except(ValueError):                   #utom om det blir ValueError
            svar = None                       #Då sätts svar till None
    return svar                               #Returnera svaret



# Läser in låtarna från fil

låt = Schlager(0,0,0,0,0,0)
lista = låt.las_filen("Eurovision2017.txt")


# Skriver ut ursprungslistan och vinnaren
print("Följande låtar deltog i Eurovision Song Contest 2017")
visa_listan()
input("\n\n... och vinnaren är ...")
input("...")
input("...")
input("...\n\n")
lista[0].write3()

from datetime import *

idag = date.today()
finaldatum = date(2017,5,13)
delta = finaldatum - idag
dagar_kvar = delta.days

print("\n\n\n PS Det är bara", dagar_kvar, "dagar kvar till finalen...\n\n")

