Problem med index
Mitt program läser in en fil med olika rader som olika element i en lista. Jag vill att det första elementet (dvs. första raden i filen) i min lista ska ha index 0. Sedan vill jag skapa en funktion som "bläddrar" till nästa element i listan (alltså till rad två i min fil) och printar den. Jag vet inte hur jag ska utforma min funktion eller hur mitt index kan ändras till 1, när jag "bläddrat", så att programmet printar index 2 (rad 3) nästa gång jag bläddrar. Någon som kan hjälpa mig eller vet någon bra tutorial för detta?
Någonstans så bör du ju ha en variabel som håller reda på vilket index du visar. Så när du bläddrar så är det bara att öka på den med ett och sedan skriva ut den aktuella raden.
Jag har skapat en metod fram(self) nedan, men när jag kör programmet och väljer bläddra i min meny står att "fram" inte är definierad och jag vet inte vad felet är. Min kod nedan:
class Sida:
def __init__(self, datum, notering):
self.datum = datum
self.notering = notering
def __str__(self):
info = self.datum + ": " + self.notering
return info
class Kalender:
def __init__(self, filnamn):
self.index=0
self.sidor = list()
fil = open(filnamn, "r")
for line in fil:
parts = line.strip().split("/")
#print(parts)
if (len(parts) >= 2):
sida = Sida(parts[0], parts[1])
self.sidor.append(sida)
fil.close()
def spara(self, filnamn):
fil = open(filnamn, "w")
for sida in self.sidor:
fil.write(sida.datum + "/" + sida.notering)
fil.write("\n")
fil.close()
def fram(self):
#self.sidor = sorted(self.sidor, key=lambda x:x.datum)
if self.index < len(self.sidor):
aktuell_sida=self.sidor[self.index]
self.index += 1
return aktuell_sida
else: print("Det här är din sista sida.")
def meny():
print("1) Bläddra framåt")
def välj():
alternativ = input("Välj ett alternativ: ")
return alternativ[0].upper()
def huvudprogram():
print("Välj ett alternativ nedan.)")
FILNAMN = "kalender.txt"
kalender = Kalender(FILNAMN)
meny()
alternativ = välj();
while alternativ != "6":
if alternativ == "1":
fram(self)
print("Vad vill du göra?")
meny()
alternativ = välj()
kalender.spara(FILNAMN)
huvudprogram()
Det är ju lite svårt att se exakt hur koden är eftersom PA förstör indenteringen (och den är en del av syntaxen), men hursomhelst så när du anropar fram så måste du göra det på ett objekt. Så om du ändrar
fram(self)
till
kalender.fram()
så bör du åtminstone inte få att den klagar på att fram inte är definierad. Men det känns inte som det kommer vara hela lösningen på problemet.
Tack för hjälpen, det funkar nu!