Problem with a list

This is the place for queries that don't fit in any of the other categories.

Problem with a list

Postby arnasbo » Sat Mar 23, 2013 2:34 pm

Hey!
I have a problem that i dont understand why it wont work. This is my code:

Code: Select all
#---------------------------Klasser----------------------------------
# Lag
class lag():   

    def __init__(self, Namn, Spelade_matcher, Vinster, Oavgjorda, Förluster, Gjorda_mål, Insläppta_mål, Poäng):
        # Skapar objekt med lag.
        self.Namn = Namn
        self.Spelade_matcher = int(Spelade_matcher)
        self.Vinster = int(Vinster)
        self.Oavgjorda = int(Oavgjorda)
        self.Förluster = int(Förluster)
        self.Gjorda_mål = int(Gjorda_mål)
        self.Insläppta_mål = int(Insläppta_mål)     
        self.Poäng = int(Poäng)

   
    def __str__(self):
        # Returnerar en sträng med attributen
        return self.namn + "SM" + str(self.Spelade_matcher) + "V" + str(self.Vinster) + "O" + str(self.Oavgjorda) + "F" + str(self.Förluster) + "GM" + str(self.Gjorda_mål) + "I" + str(self.Insläppta_mål) + "P" + str(self.Poäng)

# Jämför sträng med attribut
    def __eq__(self,andra):
        if self.namn==other:
            return True
        return False


    def spelad_match(self):
        # Lägger till spelad match.
        self.Spelade_matcher +=1
   
   
    def vinst(self):
        # Lägger till en vunnen match.
        self.Vinster +=1


    def oavgjord(self):
        # Lägger till en oavgjord match
        self.Oavgjorda +=1

    def förlust(self):
        # Lägger till en förlorad match.
        self.Förluster +=1


    def gjorda_mål(self,antal):
        # Lägger till antalet gjorda mål
        self.Gjorda_mål += int(antal)


    def insläppta_mål(self,antal):
        # Lägger till antalet insläppta mål
        self.Insläppta_mål += int(antal)


    def poäng(self,points):
        # Lägger till poäng
        self.Poäng += int(points)


    def __lt__ (self,andra):
        # Sorterar tabbelen på först poäng sedan målskillnad, gjorda mål och sist namnet.
        if self.__Poäng > other.__Poäng:
            return True
        elif self.__Poäng < other.__Poäng:
            return False
        elif self.__Poäng == other.__Poäng:
            if self.__Gjorda_mål-self.__Insläppta_mål > other.__Gjorda_mål-andra.__Insläppta_mål:
                return True
            elif self.__gjorda-self.__Insläppta_mål < other.__Gjorda_mål-andra.__Insläppta_mål:
                return False
            elif self.__Gjorda_mål-self.__Insläppta_mål == other.__Gjorda_mål-andra.__Insläppta_mål:
                if self.__Gjorda_mål > other.__Gjorda_mål:
                    return True
                elif self.__Gjorda_mål < other.__Gjorda_mål:
                    return False
                elif self.__Gjorda_mål == other.__Gjorda_mål:
                    if self.__Namn < other.__Namn:
                        return True
                    elif self.__Namn > other.__Namn:
                        return False


#--------------------------Funktioner-------------------------------

def meny(ListaC):
    # Skriver ut menyn och här får användaren välja vad han vill göra
    print("VÄLKOMMEN TILL PREMIER LEAGUE")
    svar = input("Tryck (1) + Enter -> Mata in resultat\nTryck (2) + Enter -> Visa tabellen\nTryck (3) + Enter -> Avsluta\n")   
    menyval = ["1","2","3"]
    while svar not in menyval:
        print("Ej korrekt svar")
        svar = input("Tryck (1) + Enter -> Mata in resultat\nTryck (2) + Enter -> Visa tabellen\nTryck (3) + Enter -> Avsluta\n")
    if svar == "1":
        mata_in_resultat(ListaC)
    elif svar == "2":
        visa_serietabell(ListaC)
        meny(ListaC)
    elif svar == "3":
        spara_resultat(ListaC)
        avsluta()
   

# Låter användaren mata in lag samt matchresultat
def mata_in_resultat(listaC):
    print("Välkommen till resultatinmataren för Premier League")
    print("Här ser du den aktuella tabellen:\n")
    visa_serietabell(ListaC)
    print("\n")
    print("Ange lag genom att mata in den siffran laget är placerat på (1=högst upp osv)\n")
    hemmalag = input("Vilket lag är hemmalag?")
    laglista = ["1","2","3","4"]
    while hemmalag not in laglista:
        print("Laget du angivit ingår inte i serien, var god försök igen.")
        hemmalag = input("Vilket lag är hemmalag?")
    bortalag = input("Vilet lag är bortalag?")
    while bortalag not in laglista:
        print("Laget du angivit ingår inte i serien, var god försök igen.")
        bortalag = input("Vilet lag är bortalag?")
    while bortalag == hemmalag:
        print("Hemmalag och bortalag tillåts ej va samma.")
        bortalag = input("Vilet lag är bortalag?")
    hemmalag = int(hemmalag)-1
    hemmalag = listaC[hemmalag]
    bortalag = int(bortalag)-1
    bortalag = listaC[bortalag]
    print("hemmalag =", hemmalag)
    print("bortalag =", bortalag)
    while True:
        match = input("Hur sluta matchen?")
        if int(match[0]) > int(match[2]):
            hemmalag.spelade_matcher()
            bortalag.spelade_matcher()
            hemmalag.vinster()
            bortalag.förluster()
            hemmalag.gjorda(match[0])
            bortalag.gjorda(match[2])
            hemmalag.insläppta(match[2])
            bortalag.insläppta(match[0])
            hemmalag.poäng(3)
        elif int(match[0]) < int(match[2]):
            hemmalag.spelade_matcher()
            bortalag.spelade_matcher()
            hemmalag.förluster()
            bortalag.vinster()
            hemmalag.gjorda(match[0])
            bortalag.gjorda(match[2])
            hemmalag.insläppta(match[2])
            bortalag.insläppta(match[0])
            bortalag.poäng(3)
        elif int(match[0]) == int(match[2]):
            hemmalag.spelade_matcher()
            bortalag.spelade_matcher()
            hemmalag.oavgjorda()
            bortalag.oavgjorda()
            hemmalag.gjorda(match[0])
            bortalag.gjorda(match[2])
            hemmalag.insläppta(match[2])
            bortalag.insläppta(match[0])
            hemmalag.poäng(1)
            bortalag.poäng(1)
        else:
            print("Du har angett resultatet på felaktigt sätt.\n Ange målen för respektive lag enligt formatet X-Y, där x och y är siffror")
            mata_in_resultat()
        print("\n")
        visa_serietabell(ListaC)

# Visar serietabellen för användaren
def visa_serietabell(ListaC):
    print("Nuvarande tabell:\n")
    for rad in ListaC:
        print(rad)
         
# Läser in filen och sparar datan i en lista
def läs_in_lag():
    #try:
    fil = open("Premier_League.txt", "r")
    listaA = []
    listaB = []
    lines = fil.readlines()
    for rad in fil:
        laget = rad.split("/")
        listaA.append(laget)
    for varde in listaA:
        Namn = varde[0]
        Spelade_matcher = varde[1]
        Vinster = varde[2]
        Oavgjorda = varde[3]
        Förluster = varde[4]
        Gjorda_mål = varde[5]
        Insläppta_mål = varde[6]
        Poäng = varde[7]
        listaB.append(lag(Namn, Spelade_matcher, Vinster, Oavgjorda, Förluster, Gjorda_mål, Insläppta_mål, Poäng))
    return listaB
    #except error...


# Sparar ner aktuella resultat till tabellfilen
def spara_resultat(ListaC):
    pass
    #with open("Premier_League.txt", "w") as file:
        #for item in ListaC:
            #Serietabell.txt.write("{}\n".format(item))

# Avslutar programmet
def avsluta():
    from sys import exit
    exit()

#------------------------Huvudprogrammet----------------------------

ListaC = läs_in_lag()
meny(ListaC)



An when i drive it it goes like this:

Code: Select all
VÄLKOMMEN TILL PREMIER LEAGUE
Tryck (1) + Enter -> Mata in resultat
Tryck (2) + Enter -> Visa tabellen
Tryck (3) + Enter -> Avsluta
1
Välkommen till resultatinmataren för Premier League
Här ser du den aktuella tabellen:

Nuvarande tabell:



Ange lag genom att mata in den siffran laget är placerat på (1=högst upp osv)

Vilket lag är hemmalag?1
Vilet lag är bortalag?1
Hemmalag och bortalag tillåts ej va samma.
Vilet lag är bortalag?2
Traceback (most recent call last):
  File "/Users/arnasbo/Documents/Fotbollsserie.py", line 214, in <module>
    meny(ListaC)
  File "/Users/arnasbo/Documents/Fotbollsserie.py", line 96, in meny
    mata_in_resultat(ListaC)
  File "/Users/arnasbo/Documents/Fotbollsserie.py", line 125, in mata_in_resultat
    hemmalag = listaC[hemmalag]
IndexError: list index out of range

--------------------------------------------
And the file looks like this:
Arsenal /0/0/0/0/0/0/0
Aston Villa /0/0/0/0/0/0/0
Chelsea /0/0/0/0/0/0/0
...
...
Wigan /0/0/0/0/0/0/0
---------------------------------------------

First, why dosent it show the sheet when i am choosing number 2?

Is ListaC now a list with the teams?

Thank you for helping :)
Last edited by arnasbo on Sat Mar 23, 2013 2:45 pm, edited 2 times in total.
arnasbo
 
Posts: 6
Joined: Sat Mar 23, 2013 2:23 pm

Re: Problem with a list

Postby metulburr » Sat Mar 23, 2013 2:36 pm

Please read this. It will show you how to use code tags and post the traceback error.
New Users, Read This
OS Ubuntu 14.04, Arch Linux, Gentoo, Windows 7/8
https://github.com/metulburr
steam
User avatar
metulburr
 
Posts: 1381
Joined: Thu Feb 07, 2013 4:47 pm
Location: Elmira, NY

Re: Problem with a list

Postby metulburr » Sat Mar 23, 2013 3:28 pm

It is always harder for me to read code when it is in another language, but...

Code: Select all
listaC[hemmalag]

hemmalag is out of range for the list index. So work backwards form there.

If you add a print statement in there printing what the list is or the lengh of the list, it will give what is really there and then you can make your corrections from that point on.
New Users, Read This
OS Ubuntu 14.04, Arch Linux, Gentoo, Windows 7/8
https://github.com/metulburr
steam
User avatar
metulburr
 
Posts: 1381
Joined: Thu Feb 07, 2013 4:47 pm
Location: Elmira, NY


Return to General Coding Help

Who is online

Users browsing this forum: No registered users and 2 guests