Programmering nivå 2
Kap 4.5 – Miniuppgift: filbaserat program
Bygg ett program som sparar och läser data från en textfil.
Mål med lektionen
När du har arbetat klart med denna uppgift ska du:
- Använda filhantering för att spara och läsa data i ett Pythonprogram.
- Strukturera ett mindre program med funktioner och undantagshantering.
- Skapa användarinteraktion genom menyer och val.
Så här lär du dig bäst
Börja med att skapa ett enkelt menysystem. Använd funktioner för varje delmoment och inkludera
try/except-block där användaren matar in data. Planera innan du kodar: vilken
information ska sparas, var lagras den och hur läser du tillbaka den?
Uppgift: Receptsamling
Skapa ett program som låter användaren:
- Lägga till ett nytt recept med namn och ingredienser.
- Visa alla sparade recept.
- Spara recept i en textfil, till exempel
recept.txt. - Läsa in recept från filen vid programstart eller när användaren vill visa recepten.
Krav
- Använd en fil för lagring i textformat.
- Skapa minst tre funktioner, till exempel
lägga_till_recept,visa_receptochspara_recept. - Använd
try/exceptvid inläsning från fil. - Programmet ska kunna köras flera gånger utan att tidigare data försvinner.
Mallkod att utgå från
def visa_meny():
print("1. Lägg till recept")
print("2. Visa recept")
print("3. Avsluta")
def main():
while True:
visa_meny()
val = input("Välj ett alternativ: ")
if val == "1":
pass # lägga till recept
elif val == "2":
pass # visa recept
elif val == "3":
break
else:
print("Ogiltigt val!")
if __name__ == "__main__":
main()
Tips
- Börja smått, exempelvis med att spara endast namnet på ett recept.
- Lägg till ingredienser som en lista eller som en rad per recept.
- Testa programmet genom att stänga och öppna det igen. Finns recepten kvar?
Sammanfattning
- Du har tränat på filhantering, programstruktur och användarinteraktion.
- Du har använt funktioner och undantag för att skapa ett mer robust program.
- Du har tillämpat dina kunskaper i en konkret och verklighetsnära uppgift.
Lösningsförslag: Receptsamling
RECEPTFIL = "recept.txt"
def lägga_till_recept():
namn = input("Vad heter receptet? ")
ingredienser = input("Ange ingredienser (komma-separerade): ")
meddelande = f"{namn}|{ingredienser}\n"
try:
with open(RECEPTFIL, "a") as fil:
fil.write(meddelande)
print("Recept sparat.")
except Exception as e:
print(f"Något gick fel: {e}")
def visa_recept():
try:
with open(RECEPTFIL, "r") as fil:
rader = fil.readlines()
if not rader:
print("Inga recept hittades.")
return
for rad in rader:
namn, ingredienser = rad.strip().split("|")
print(f"\nRecept: {namn}")
print("Ingredienser:")
for ing in ingredienser.split(","):
print(f"- {ing.strip()}")
except FileNotFoundError:
print("Filen med recept finns inte ännu.")
except Exception as e:
print(f"Fel vid läsning: {e}")
def visa_meny():
print("\nMeny:")
print("1. Lägg till recept")
print("2. Visa recept")
print("3. Avsluta")
def main():
while True:
visa_meny()
val = input("Välj ett alternativ: ")
if val == "1":
lägga_till_recept()
elif val == "2":
visa_recept()
elif val == "3":
print("Programmet avslutas.")
break
else:
print("Ogiltigt val, försök igen.")
if __name__ == "__main__":
main()
Funktioner i lösningen
- lägga_till_recept() - Sparar recept i formatet
Receptnamn|ing1,ing2,.... - visa_recept() - Läser filen, delar upp varje rad och skriver ut innehållet.
- main() - Styr menyval och programflöde.
Lösningen är enkel men visar strukturerad kod, användning av try/except för felhantering
och filhantering med append och readlines().