Permalänk
Medlem

Programmering i Python. Vilse!

Hej!
Jag ska skapa ett program som ger användaren möjlighet att se den aktuella Premier League serien (dock bara 4 lag). Laget samt värden som spelade matcher, förlorade resp. vunna matcher och poäng m.m. ligger på en separat .txt fil. Du ska även ha möjlighet att skriva in nytt matchresultat. Då anger du hemmalag resp. bortalag och skriver in resultat. Resultatet ska sen när man väljer att avsluta programmet sparas ner till .txt filen och det ska även sorteras i rätt ordning, högst poäng först.
Jag har en funktion "def öppna_fil():" som jag kör direkt och som skapar en lista med lag objekt.

TypeError: 'int' object is not callable

Har verkligen kört fast och därför uppskattas all hjälp. Kan skicka programmet samt .txt filen om det är någon som orkar ta en närmare titt på det.

Så här ser det ut i alla fall:

#---------------------------Klasser---------------------------------- # Lag class lag(): def __init__(self, namn, spelade_matcher, vinster, oavgjort, förluster, gjorda, insläppta, poäng): self.namn = namn self.spelade_matcher = int(spelade_matcher) self.vinster = int(vinster) self.oavgjort = int(oavgjort) self.förluster = int(förluster) self.gjorda = int(gjorda) self.insläppta = int(insläppta) self.poäng = int(poäng) # Tabellen med lagen och deras statistik def __str__(self): return self.namn + "S" + str(self.spelade_matcher) + "V" + str(self.vinster) + "O" + str(self.oavgjort) + "F" + str(self.förluster) + "G" + str(self.gjorda) + "I" + str(self.insläppta) + "P" + str(self.poäng) # Jämför sträng med attribut def __eq__(self,andra): if self.namn==other: return True return False # Lägger till en spelad match def spelade_matcher(self): self.spelade_matcher +=1 # Lägger till en vinst def vinster(self): self.vinster +=1 # Lägger till en oavgjord def oavgjorda(self): self.oavgjorda +=1 # Lägger till en förlust def förluster(self): self.förluster +=1 # Lägger till gjorda mål def gjorda(self,antal): self.gjorda += int(antal) # Lägger till insläppta mål def insläppta(self,antal): self.insläppta += int(antal) # Lägger till tre poäng def poäng(self,pinnar): self.poäng += int(pinnar) # Sorterar tabellen enligt poäng, målskillnad, lagnamn def __lt__ (self,andra): if self.__poäng > andra.__poäng: return True elif self.__poäng < andra.__poäng: return False elif self.__poäng == andra.__poäng: if self.__gjorda-self.__insläppta > andra.__gjorda-andra.__insläppta: return True elif self.__gjorda-self.__insläppta < andra.__gjorda-andra.__insläppta: return False elif self.__gjorda-self.__insläppta == andra.__gjorda-andra.__insläppta: if self.__gjorda > andra.__gjorda: return True elif self.__gjorda < andra.__gjorda: return False elif self.__gjorda == andra.__gjorda: if self.__namn < andra.__namn: return True elif self.__namn > andra.__namn: return False #--------------------------Funktioner------------------------------- # Skriver ut menyn och användaren får möjlighet att välja vad man vill göra def meny(ListaC): 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() 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() 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 öppna_fil(): #try: fil = open("Serietabell.txt", "r") listaA = [] listaB = [] for rad in fil: laget = rad.strip().split("/") listaA.append(laget) for varde in listaA: namn = varde[0] spelade_matcher = varde[1] vinster = varde[2] oavgjort = varde[3] förluster = varde[4] gjorda = varde[5] insläppta = varde[6] poäng = varde[7] listaB.append(lag(namn, spelade_matcher, vinster, oavgjort, förluster, gjorda, insläppta, poäng)) return listaB #except error... # Sparar ner aktuella resultat till tabellfilen def spara_resultat(ListaC): pass #with open("Serietabell.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 = öppna_fil() meny(ListaC)

EDIT: Listan ser ut som följer:
Arsenal/0/0/0/0/0/0/0/0/0/
Manchester United/0/0/0/0/0/0/0/0/0/
Liverpool/0/0/0/0/0/0/0/0/0/
Manchester City/0/0/0/0/0/0/0/0/0/

EDIT2: Uppdaterat programmet och fått ett annat felmeddelande. (redigerade mitt inlägg)

Permalänk
Medlem

Använd gärna CODE taggarna eller tjänster som Pastebin för källkod. Det blir betydligt lättare att läsa då.

Permalänk
Medlem

Om felet är "TypeError: 'int' object is not callable" så är det nog för att vinster är ett fält med en int i, men du försöker calla vinster som en funktion. Du har definierat vinster som en funktion också, men det är inte så bra att göra så. Samma sak med några andra fält.

Permalänk
Medlem

låter som att någon har en uppgift till programmering på KTH

Visa signatur

| Corsair Crystal 460X | Z390-F | 9700K | ROG Ryujn 360mm | RTX 3080Ti | ROG Thor 850W | Vengeance Pro 3200mhz 16cl 16GB (2x8) | 970 Pro 2TB + 2xWD Black 4TB | ROG SWIFT PG279Q | Arctis 7 Pro Wireless | ROG Scope Deluxe red silent | ROG Chakram |

Permalänk
Medlem
Skrivet av Mithras:

låter som att någon har en uppgift till programmering på KTH

Haha! Ja det stämmer bra!

Problemet var att jag har ett gäng metoder som heter samma sak som mina instansvariabler i klassen och då blir python tydligen förvirrat.
Men det är åtgärdat nu så återkommer om jag stöter på några fler problem.

Permalänk
Medlem
Skrivet av misr:

Haha! Ja det stämmer bra!

Problemet var att jag har ett gäng metoder som heter samma sak som mina instansvariabler i klassen och då blir python tydligen förvirrat.
Men det är åtgärdat nu så återkommer om jag stöter på några fler problem.

Fattar du varför?

Permalänk
Medlem
Skrivet av misr:

Haha! Ja det stämmer bra!

Problemet var att jag har ett gäng metoder som heter samma sak som mina instansvariabler i klassen och då blir python tydligen förvirrat.
Men det är åtgärdat nu så återkommer om jag stöter på några fler problem.

gör du så
Den uppgiften var nog den enklaste att få B och A på, så grattis till att du fick den

Visa signatur

| Corsair Crystal 460X | Z390-F | 9700K | ROG Ryujn 360mm | RTX 3080Ti | ROG Thor 850W | Vengeance Pro 3200mhz 16cl 16GB (2x8) | 970 Pro 2TB + 2xWD Black 4TB | ROG SWIFT PG279Q | Arctis 7 Pro Wireless | ROG Scope Deluxe red silent | ROG Chakram |

Permalänk
Medlem

Då var det bara en sak kvar och det är att spara till filen igen.
Jag lyckas mata in nytt resultat samt sortera enligt poäng. Nu vill jag spara min nya tabell med lagen och alla ändrade värden tillbaka till .txt filen (skriva över den).

försökte med:

def spara_resultat(ListaC): f = open("Serietabell.txt", "w") f.writelines(ListaC) f.close()

men det funkar ej. Någon som vet hur man ska skriva för att få den att spara/skriva över min gamla .txt fil?

Tack på förhand!

Permalänk
Medlem
Skrivet av Mithras:

låter som att någon har en uppgift till programmering på KTH

Är du allvarlig? Vet inte om jag kan tro det, då detta är gymnasienivå som högst (om ens det).

Visa signatur

Osocial, instängd och förbannad.

Permalänk
Medlem
Skrivet av Mithras:

låter som att någon har en uppgift till programmering på KTH

Skrivet av misr:

Haha! Ja det stämmer bra!

Problemet var att jag har ett gäng metoder som heter samma sak som mina instansvariabler i klassen och då blir python tydligen förvirrat.
Men det är åtgärdat nu så återkommer om jag stöter på några fler problem.

Skrivet av Debug:

Är du allvarlig? Vet inte om jag kan tro det, då detta är gymnasienivå som högst (om ens det).

Bryr mig inte riktigt om du kan tro det eller inte, men nybörjarprogrammering finns på universitet och högskola också, och på KTH är de med i alla civilingenjörsutbildningar som grundkurs

Visa signatur

| Corsair Crystal 460X | Z390-F | 9700K | ROG Ryujn 360mm | RTX 3080Ti | ROG Thor 850W | Vengeance Pro 3200mhz 16cl 16GB (2x8) | 970 Pro 2TB + 2xWD Black 4TB | ROG SWIFT PG279Q | Arctis 7 Pro Wireless | ROG Scope Deluxe red silent | ROG Chakram |