4 svar
223 visningar
Amandah94 är nöjd med hjälpen
Amandah94 44 – Fd. Medlem
Postad: 6 okt 2017 21:35

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?

Stokastisk 3597 – Fd. Medlem
Postad: 7 okt 2017 09:58

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.

Amandah94 44 – Fd. Medlem
Postad: 8 okt 2017 14:06 Redigerad: 8 okt 2017 14:30

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()

Stokastisk 3597 – Fd. Medlem
Postad: 8 okt 2017 16:38

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.

Amandah94 44 – Fd. Medlem
Postad: 8 okt 2017 17:57

Tack för hjälpen, det funkar nu!

Svara Avbryt
Close