Vinnaren i pepparkakshustävlingen!
2009-07-16, 21:16
  #1
Medlem
Hej,
jag är Python-nybörjare och skulle behöva hjälp med att få ett litet program att fungera. Det ska kunna sortera produkter efter olika parametrar (t.ex. pris). Jag har en fil 'text.txt' som jag läser in data från (tillverkare, modell, pris, butik, lagerstatus, stad), filen ser ut så här:

% Format: tillverkare / modell / pris / butik / lagerstatus / stad
Nokia
E71
3600
Elgiganten
15
Göteborg
SonyEricsson
W995
4200
Siba
40
Stockholm
osv.....

Dessa lägger jag in i en lista som innehåller alla dessa önskade attribut t.ex. ['% Format: tillverkare, modell, pris, butik, lagerstatus, stad', 'Nokia', 'E71'....] men har fastnat här. Jag har skapat en klass och vill nu skriva en kod som hela tiden skapar lika många objekt som det finns produkter i filen (dvs. 2 st i exemplet ovan) och även skapa attributen tillverkare, modell, pris, butik, lagerstatus, stad, vilka får motsvarande värden som i filen.

Har försökt med en loop men det blev krångligt och invecklat, hur kan jag lösa detta??

Väldigt tacksam för svar!!
Citera
2009-07-20, 21:41
  #2
Medlem
SSHs avatar
Bäst vore om du istället skapade ett objekt för varje produkt. Följande är en enkelt klass. Vill du göra det mer komplicerat kan du istället skapa en klass för varje produkt typ.

Kod:
class Product:
    def __init__(self, tillverkare, modell, pris, butik, stad, lagerstatus):
        self.tillverkare = tillverkare
        self.modell = modell
        self.pris = pris
        self.butik = butik
        self.stad = stad
        self.lagerstatus = lagerstatus
	
    def __repr__(self):
        return "Tillverkare: %s\nModell: %s\nPris: %d\nButik: %s\nStad: %s\nLagerstatus: %s\n" % \
            (self.tillverkare, self.modell, self.pris, self.butik, self.stad, self.lagerstatus)

Du läser in din fil och skapar objekt enligt klassen ovan som läggs till i en lista. Listan kan sedan sorteras med en jämförelsefunktion.

Kod:
def product_cmp(a, b):
    return cmp(a.tillverkare, b.tillverkare) or \
        cmp(a.modell, b.modell) or \
        cmp(a.pris, b.pris) or \
        cmp(a.butik, b.butik) or \
        cmp(a.stad, b.stad) or \
        cmp(a.lagerstatus, b.lagerstatus)

Funktionen jämför först tillverkarena. Om de är lika utvärderas cmp(a.tillverkare, b.tillverkare) till 0 och cmp(a.modell, b.modell) utvärderas osv.

Kod:
products = []
products.append(Product("Nokia", "E71", 3600, "Elgiganten", "Göteborg", 15))
products.append(Product("SonyEricsson", "W995", 4200, "Siba", "Stockholm", 20))
products.sort(product_cmp)
print products
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback