Help with code

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

Help with code

Postby arnasbo » Wed Apr 10, 2013 6:08 pm

Hello!
I am a beginner with Python and I have a problem det I dont understand, 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)


    def __eq__(self,andra):
        # Jämför sträng med attribut
        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,other):
        # 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-other.Insläppta_mål:
                return True
            elif self.Gjorda_mål-self.Insläppta_mål < other.Gjorda_mål-other.Insläppta_mål:
                return False
            elif self.Gjorda_mål-self.Insläppta_mål == other.Gjorda_mål-other.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)
        print(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")
    print(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","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"]
    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 slutade matchen?")
        if int(match[0]) > int(match[2]):
            hemmalag.Spelade_matcher()
            bortalag.Spelade_matcher()
            hemmalag.Vinster()
            bortalag.Förluster()
            hemmalag.Gjorda_mål(match[0])
            bortalag.Gjorda_mål(match[2])
            hemmalag.Insläppta_mål(match[2])
            bortalag.Insläppta_mål(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_mål(match[0])
            bortalag.Gjorda_mål(match[2])
            hemmalag.Insläppta_mål(match[2])
            bortalag.Insläppta_mål(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_mål(match[0])
            bortalag.Gjorda_mål(match[2])
            hemmalag.Insläppta_mål(match[2])
            bortalag.Insläppta_mål(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)
         
def läs_in_lag(infil):
   
    #try:     
    listaA = infil.readlines()
    listaB = []
    for rad in listaA:
        varde=rad.split("/")
        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

# 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----------------------------
def main():
   
    infil = open("Premier_League.txt", "r")
    ListaC = läs_in_lag(infil)
    ListaC.sort()
    meny(ListaC)

main()



And when I run in 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:

Arsenal SM0V0O0F0GM0I0P0
Aston Villa SM0V0O0F0GM0I0P0
Chelsea SM0V0O0F0GM0I0P0
Everton SM0V0O0F0GM0I0P0
Fullham SM0V0O0F0GM0I0P0
LiverpoolSM0V0O0F0GM0I0P0
Manchester C SM0V0O0F0GM0I0P0
Manchester U SM0V0O0F0GM0I0P0
Newcastle SM0V0O0F0GM0I0P0
Norwich SM0V0O0F0GM0I0P0
QPR SM0V0O0F0GM0I0P0
Reading SM0V0O0F0GM0I0P0
Southampton SM0V0O0F0GM0I0P0
Stoke SM0V0O0F0GM0I0P0
Sunderland SM0V0O0F0GM0I0P0
Swansea SM0V0O0F0GM0I0P0
Tottenham SM0V0O0F0GM0I0P0
WBA SM0V0O0F0GM0I0P0
West Ham SM0V0O0F0GM0I0P0
None


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?4
hemmalag = Arsenal SM0V0O0F0GM0I0P0
bortalag = Everton SM0V0O0F0GM0I0P0
Hur slutade matchen?3-1
Traceback (most recent call last):
  File "/Users/arnasbo/Documents/Åk 1/P-uppgift/Fotbollsserie2.vahid.py", line 216, in <module>
    main()
  File "/Users/arnasbo/Documents/Åk 1/P-uppgift/Fotbollsserie2.vahid.py", line 214, in main
    meny(ListaC)
  File "/Users/arnasbo/Documents/Åk 1/P-uppgift/Fotbollsserie2.vahid.py", line 97, in meny
    mata_in_resultat(ListaC)
  File "/Users/arnasbo/Documents/Åk 1/P-uppgift/Fotbollsserie2.vahid.py", line 135, in mata_in_resultat
    hemmalag.Spelade_matcher()
TypeError: 'int' object is not callable
>>>


What does it mean that int object is not callable?
Thank you very much for helping :)
arnasbo
 
Posts: 6
Joined: Sat Mar 23, 2013 2:23 pm

Re: Help with code

Postby Yoriz » Wed Apr 10, 2013 6:20 pm

You have set Spelade_matcher as a int ie a number which is not callable it has no __call__ method
New Users, Read This
Join the #python-forum IRC channel on irc.freenode.net!
Spam topic disapproval technician
Windows7, Python 2.7.4., WxPython 2.9.5.0., some Python 3.3
User avatar
Yoriz
 
Posts: 840
Joined: Fri Feb 08, 2013 1:35 am
Location: UK

Re: Help with code

Postby arnasbo » Wed Apr 10, 2013 6:31 pm

I'm not sure I understand, What should I have instead? Should I have it as a string? x)
I'm sorry, i'm a beginner and i like to program but i think it is very hard!
Thank you so much for helping!
arnasbo
 
Posts: 6
Joined: Sat Mar 23, 2013 2:23 pm

Re: Help with code

Postby Yoriz » Wed Apr 10, 2013 6:44 pm

I don't know what is it that you need the variable to do, is it supposed to be a method and you assigned a value to it by mistake? If you just want the variables value remove the ().
New Users, Read This
Join the #python-forum IRC channel on irc.freenode.net!
Spam topic disapproval technician
Windows7, Python 2.7.4., WxPython 2.9.5.0., some Python 3.3
User avatar
Yoriz
 
Posts: 840
Joined: Fri Feb 08, 2013 1:35 am
Location: UK

Re: Help with code

Postby arnasbo » Wed Apr 10, 2013 7:02 pm

Thank you very much for your help! I found my own misstake, Had the namn Spelade_matcher instead of spelad_match ;)
arnasbo
 
Posts: 6
Joined: Sat Mar 23, 2013 2:23 pm

Re: Help with code

Postby arnasbo » Wed Apr 10, 2013 7:25 pm

This is one function in my code, I think it is very long. Is it anyone who has an idea how i can do it shorter and more goodlooking? :)
Code: Select all
# 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")
    print(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","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"]
    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 slutade matchen?")
        if int(match[0]) > int(match[2]):
            hemmalag.Spelade_matcher()
            bortalag.Spelade_matcher()
            hemmalag.Vinster()
            bortalag.Förluster()
            hemmalag.Gjorda_mål(match[0])
            bortalag.Gjorda_mål(match[2])
            hemmalag.Insläppta_mål(match[2])
            bortalag.Insläppta_mål(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_mål(match[0])
            bortalag.Gjorda_mål(match[2])
            hemmalag.Insläppta_mål(match[2])
            bortalag.Insläppta_mål(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_mål(match[0])
            bortalag.Gjorda_mål(match[2])
            hemmalag.Insläppta_mål(match[2])
            bortalag.Insläppta_mål(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)
arnasbo
 
Posts: 6
Joined: Sat Mar 23, 2013 2:23 pm


Return to General Coding Help

Who is online

Users browsing this forum: Google [Bot], micseydel and 3 guests