Uppgiftt i python
Hej.
Tänkte kolla om någon vänlig själ här kan hjälpa mig med en uppgift jag har i programering.
Denna laboration syftar till att öva användning av dictionaries och objekt (även om detta inte är ett krav), i synnerhet vad gäller hantering av alias. Dessutom kommer programmet som ska skrivas att vara interaktivt. Viss rudimentär felhantering kommer också att behövas, men om detta ska implementeras med hjälp av Python's exceptions är en designfråga där beslutet är ert eget.
Laborationsuppgiften är att skriva ett interaktivt program som hanterar en dynamisk telefonbok via en uppsättning enkla kommandon (dynamisk betyder att det går att ändra i telefonboken). Kommandona ska alla vara en rad långa och kunna updelas i ord med whitespace emellan. Prompten kan vara helt valfri (prompt=det som skrivs ut innan programmet väntar på inmatning från användaren). Följande kommandon ska hanteras (fler får läggas till efter behag):
* add name number – lägger till name med nummret number till telefonboken. Här är det tillåtet att begränsa sig till att namn måste vara unika (två olika personer med olika nummer kan inte heta likadant).
* lookup name – skriver ut numret som finns lagrat för name.
* alias name newname – låter name bli sökbart även under namnet newname.
* change name number – ändrar numret som associeras med det befintliga namnet name till number.
* save filename – sparar innehållet i telefonboken till filen filename.
* load filename – läser in innehållet från filen filename till telefonboken. Telefonboken i minnet kastas bort (efter inläsningen har vi endast telefonboken från filen i minnet).
* quit – avslutar den interaktiva körningen
För kommandot add gäller att en felutskrift ska genereras om name redan finns definierat i telefonboken; för de övriga gäller att felutskrift ska ske om name inte är definierat. Med felutskrift menas att programet ska berätta vad som är fel på ett begripligt sätt och sedan skriva ut prompten igen. Namn som definierats som alias (med alias-kommandot) ska kunna användas i lookup-, change- och andra alias-kommandon på samma sätt som alla namn, så att följande beteende erhålls:
telebok> add peter.forsberg 12345
telebok> lookup peter.forsberg
12345
telebok> alias peter.forsberg foppa
telebok> lookup foppa
12345
telebok> alias foppa MR21
telebok> change MR21 67890
telebok> lookup peter.forsberg
67890
Load och save (filformat) - förenklad version:
Det är tillåtet att ignorera alias när man sparar till och laddar från fil. Då sparar man alltså endast numret åtföljt av ett namn. Om det råkar finnas alias för namnet så sparar man detta på en egen rad, fast med samma telefonnummer. Man behöver då inte ta hänsyn till alias när man sparar, vilket förenklar en hel del. När man laddar in en sådan fil (använder load) får man naturligtvis inte tillbaka aliasen, utan varje namn upptäder då i telefonboken som ett eget namn med eget telefonnummer (som råkar vara samma telefonnummer som någon anna, som tidigare var alias) Exempel (samma telefonbok som ovan):
123;Kalle;
123;Maria;
321;Anna;
321;Olle;
Internt i programmet är det lämpligt att använda ett dictionary som central datastruktur. Det finns dock all anledning att inte låta detta dictionary lagra telefonnummer direkt som värde, utan att blanda in muterbara datastrukturer (t ex objekt) som mellansteg (detta är den enklaste lösningen). Det interaktiva beteendet åstadkoms enklast genom att en loop (lämpligen while) börjar varje varv med att anropa raw_input(), varefter resultatet analyseras och motsvarande kommando utförs (tänk på att detta inte går att göra rekursivt, eftersom vi potentiellt kör gopdtyckligt många varv, vilket skulle fylla upp minnet). Försök separera ut kommandon så att dessa implementeras i separata funktioner.
Det där är i princip uppgiften så om någon skulle kunna va snäll å ge mig lite hjälp så skulle de va väl uppskattat.