Permalänk
Medlem

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.

Permalänk
Medlem

Objektorientering är din vän!

Första frågan, är du helt hemma på vad objektorientering och objekt är för något?

Visst behövs det inte egentligen, men kan bli mer intuitivt och så lär du dig bättre

Permalänk
Medlem

vi kan väl säga sådär är väl inte helt 100 men lite koll har jag väl

Permalänk
Medlem

jag har lyckats få de att läsa allt osv de enda problemet nu är att få den att spara till en fil och sen öppna filen när man kör programmet igen så att inte telefonboken försvinner så fort man "öppnar" programmet igen.

Permalänk
Medlem

lol, är det sista uppgiften för introduktion till programmering på LTU?
Gjorde exakt samma uppgift förra året iaf, fast vi skulle även hantera personer med samma namn.

Hur som, använd "code" funktionen här och posta det du luskat ut hittills så vi kan ta en titt.

Visa signatur

Your COMMODORE 64 computer is equipped with one of the most sophisticated electronic music synthesizers available on any computer.
This chapter is an introduction to using your computer's sound chip, the SID chip.

Permalänk
Medlem

crap han kom på mig

import string import pickle class Telefonbok: def __init__(self): self.bok={} def add(self, name, number): if name in self.bok.keys(): print 'The name alredy exists in the telefonbok.' else: self.bok[name]=number print self.bok def lookup(self, name): if name in self.bok.keys(): print'Name:', name print 'Number:',self.bok[name] #return self.bok[name] else: return "Name does'nt exist" def alias(self, name, nick): if name not in self.bok.keys(): print "Name does'nt exist" else: self.bok[(nick)]=self.bok[(name)] def change(self, name, number): if name not in self.bok.keys(): print "Name does'nt exist" else: self.bok[name]=number def stop (self): print 'funkis' o=open('ost','w') o pickle.dump(self.bok , 'ost') o.close() telefonbok = Telefonbok() while True: try: myInput=raw_input("Telebok: ") if myInput=="": pass elif myInput.split()[0]=="add": telefonbok.add(myInput.split()[1], myInput.split()[2]) elif myInput.split()[0]=="lookup": telefonbok.lookup(myInput.split()[1]) elif myInput.split()[0]=="alias": telefonbok.alias(myInput.split()[1], myInput.split()[2]) elif myInput.split()[0]=="change": telefonbok.change(myInput.split()[1], myInput.split()[2]) elif myInput.split()[0]=="help": print "add [name number]\nlookup [name]\nalias [name alias]\nchange [name number]\nhelp\nquit" elif myInput.split()[0]=="exit" or myInput.split()[0]=="quit": print "Bye!" telefonbok.stop() break except IndexError: print 'You need to type in a Name and a Number for the add funktion like add [Name] [Number] without the [].' pass

så ser de ut atm exiten funkar ju inte som alla här kanske vet

Permalänk
Medlem

ingen som vill svara

Permalänk
Medlem

Alltså jag går också den där kursen i skellefteå så du borde klara av det tänk på att du kan lägga in en klass som ett värde i en dictionary hjälpte mig mycket

Visa signatur

Amd 1055T @ 3.5ghz | Corsair 16382mb 1600 MHz 9-9-9-24 | MSI GeForce 680| Asus M5a88-M | Intel 330 120GBx2 + WD 500GB Green + WD 1000GB Black + WD 2000GB Green x2 | AX 850 | Windows 7PRO x64 | Define R3 White