Nybörjarhjälp med Pythonuppgift

Permalänk
Medlem

Nybörjarhjälp med Pythonuppgift

Hej!
Det här är min första programmeringskurs någonsin och har fastnat lite. Ska använda objektorientering för att skriva ett nöjesfält med 3 karuseller, längdkrav och haveringschans. Skrev detta och skickade in.

Fick till svar att jag inte har en generell kod och,
"Om man skulle vilja lägga till en attraktion, t ex ett spökhus eller vad det nu kan vara, så hade man varit tvungen att ändra i klassen för att åstadkomma detta. I stället ska du skriva om din kod, så att du har en mer generell klass "Attraction" (eller något motsvarande klassnamn). Med utgångspunkt i denna klass ska det vara enkelt att i huvudprogrammet skapa nya sorters attraktioner.

Skapa därmed en klass Attraction, och tillhörande generella metoder som t ex run (dvs. en metod som kör attraktionen). Till denna klass ska du också ha lämpliga attribut. Till exempel ska man kunna skapa ett objekt i huvudprogrammet sådant att man väljer namnet på attraktionen, längdkrav etc."

Förstår inte vad han menar och vad det skulle vara för skillnad på hans 'Attraction' och min 'Park'
aja hoppas ni orkar läsa och hjälpa mig lite å traven Mvh

kod:

import random class Park: def __init__(self, namn, längd): self.namn = namn self.längd = längd def tekopp(self): slump = random.randint(0,10) if slump < 4: print('zzzzprak tekopparna fick kortslutning, vänlig återkom senare\n') else: print('Du är lång nog för att åka tekopparna, ha så kul!\n zzzz\n zzzzzzzzzzz\n zzz\n Åkturen är slut!\n') def berg(self): if längd >= 170: slump = random.randint(0,10) if slump < 4: print('Förra åket spårade ur, reparation pågår! Återkom senare.\n') else: print('Du är lång nog för att åka Berg- och dalbanan, håll i dig!\n WOOOOOOOOOOOOOO\n WOOOOOHOOOOOO\n WOOOOOO\n Åkturen är slut!\n') else: print('Du är tyvärr för kort för att åka Berg- och dalbanan, vänligen återkom om några år.\n') def colorado(self): if längd >= 155: slump = random.randint(0,10) if slump < 4: print('Du ramlade i vattet! Gå och torka dig.\n') else: print('Du är lång nog för att åka colorado, akta vattenkorvarna!\n SWOCHHHHHHHHHH\n SWICHHHHHHHHHHHH\n SWAAAACHHHHHHH\n Åket är slut!\n') else: print('Du är för kort för att åka Colorado! Drunka vill ingen göra :(\n') #visar info on alla karuseller def info(self): print("""Idag kan vi erbjuda tre olika karuseller: Tekopparna: Perfekt för barnfamiljer! Magpirrfaktor: 1, min längd: 0 Berg- och dalbana: Som gjort för den äventytslystne! Magpirrfaktor: 8, min längd: 170 Colorado: Inget för den som vill hålla sig torr! Magpirrfaktor: 5, min längd: 155\n""") #----------Huvudprogramm------------###---------## namn = input('Hej och välkommen till nöjesfältet!\n Vad heter du?: ') längd = int(input( 'Nå ' + str(namn) + ' hur lång är du i cm?: ')) namn1 = Park(namn, längd) namn1.info() val = int(input('Vad vill du åka?\n 1: Tekopparna, 2: Berg- och dalbana, 3: Colorado\n')) parklista = [Park('kopp', längd), Park('berg', längd), Park('colorado', längd)] while val in range(1,4): if val == 1: parklista[val-1].tekopp() elif val == 2: parklista[val-1].berg() else: parklista[val-1].colorado() val = int(input('Vad vill du åka?\n 1: Tekopparna, 2: Berg- och dalbana, 3: Colorado\n')) print('Hejdå ' + str(namn) + '! Kul att du kom.')

Permalänk
Medlem

Skulle gissa att de önskar en uppdelning liknande

[Park]
[Attraktion]
-[Specialiserad attraktion1]
-[Specialiserad attraktion2]
-[Specialiserad attraktion3]

och att [Park] innehåller ett valfritt antal [Attraktion] som få kan lagra alla olika attraktioner som är specialiseringar av [Attraktion] och att dina karuseller och bergodalbanor är specialiseringar av [Attraktion].

Exempel (ej Python, mer generellt):
class Attraktion {
Attribut som alla attraktioner skall ha (kanske namn, plats, pris, öppen/stängd status, kölängd, väntetid och liknande)
Metoder som alla attraktioner skall ha (kanske print, simulate eller liknande)
}
class Karusell ärver av Attraktion {}
class BergodalBana ärver av Attraktion {}
class Spökhus ärver av Attraktion {}
class Park {
Lista av Attraktion attraktioner;
}

Program start
- Skapa Park
- Skapa Karusell och stoppa in den i attraktioner på Park
- Skapa BergodalBana och stoppa in den i attraktioner på Park
- Skapa Spökhus och stoppa in den i attraktioner på Park
- Anropa någon metod på Park som går igenom alla attraktioner och gör något med dem.

Specialiseringar av [Attraktion] kan implementera generella metoder, ge värden till attribut och lägga till nya metoder/attribut.

Visa signatur

Game 9800X3D|9070XT Workstation 5950X|7900XTX Vardagsrum 3900X|6900XT
VR Crystal Light|Quest 3|Pico 4|PSVR2|Reverb G2|Oculus Quest|Samsung Odyssey+

Permalänk
Medlem

Med din park-klass skapar du just nu en helt ny identisk park varje gång med en tepkopp-attraktion, en Bergodalbana-attraktion och en colorado-attraktion.

Han vill du skapar en generell attraktions-klass som är knuten till parken du skapat så du kan skapa vad som helst utan att ändra någon kod. Du ska alltså kunna skriva något i stil med:

//namn, längd, haveri,
rushkana=Attraction("Vattenrushis", 180, 5);
Park.addAttraction(rushkana);
hangguna=Attraction("Hänggunga", 150, 2);
Park.addAttraction(hangguna);

och sedan kunna köra Park.run(hangunga, langd)

Går och göra på flera sätt, var det där som dök upp i huvudet

Visa signatur

Neon
Citera mig om du vill ha svar!

Permalänk
Medlem
Skrivet av eMannen:

Skulle gissa att de önskar en uppdelning liknande

[Park]
[Attraktion]
-[Specialiserad attraktion1]
-[Specialiserad attraktion2]
-[Specialiserad attraktion3]

och att [Park] innehåller ett valfritt antal [Attraktion] som få kan lagra alla olika attraktioner som är specialiseringar av [Attraktion] och att dina karuseller och bergodalbanor är specialiseringar av [Attraktion].

Exempel (ej Python, mer generellt):
class Attraktion {
Attribut som alla attraktioner skall ha (kanske namn, plats, pris, öppen/stängd status, kölängd, väntetid och liknande)
Metoder som alla attraktioner skall ha (kanske print, simulate eller liknande)
}
class Karusell ärver av Attraktion {}
class BergodalBana ärver av Attraktion {}
class Spökhus ärver av Attraktion {}
class Park {
Lista av Attraktion attraktioner;
}

Program start
- Skapa Park
- Skapa Karusell och stoppa in den i attraktioner på Park
- Skapa BergodalBana och stoppa in den i attraktioner på Park
- Skapa Spökhus och stoppa in den i attraktioner på Park
- Anropa någon metod på Park som går igenom alla attraktioner och gör något med dem.

Specialiseringar av [Attraktion] kan implementera generella metoder, ge värden till attribut och lägga till nya metoder/attribut.

Tack för att du svarade!
Men gör man som du skriver så måste man väl ändra koden för att lägga till fler karuseller?

'- Anropa någon metod på Park som går igenom alla attraktioner och gör något med dem.'
nån vag idé om hur jag skulle bygga upp den metoden ? :/

Permalänk
Medlem
Skrivet av Neonxz:

Med din park-klass skapar du just nu en helt ny identisk park varje gång med en tepkopp-attraktion, en Bergodalbana-attraktion och en colorado-attraktion.

Han vill du skapar en generell attraktions-klass som är knuten till parken du skapat så du kan skapa vad som helst utan att ändra någon kod. Du ska alltså kunna skriva något i stil med:

//namn, längd, haveri,
rushkana=Attraction("Vattenrushis", 180, 5);
Park.addAttraction(rushkana);
hangguna=Attraction("Hänggunga", 150, 2);
Park.addAttraction(hangguna);

och sedan kunna köra Park.run(hangunga, langd)

Går och göra på flera sätt, var det där som dök upp i huvudet

Gör man på det här viset går det väl inte att få olika åkljud för olika karuseller? Fattar även inte hur man ska kunna få in villkoren för för vad som ska printas när de kommer till längd och havreringschansen.
Nå tips på det ?

Permalänk
Medlem
Skrivet av supahh:

Gör man på det här viset går det väl inte att få olika åkljud för olika karuseller? Fattar även inte hur man ska kunna få in villkoren för för vad som ska printas när de kommer till längd och havreringschansen.
Nå tips på det ?

Vill du ha separata åkljud får detta vara en parameter i din attraktions-klass. Dvs, du anropar variabler precis som i en vanlig funktion, som Neonxz skrev. Tar hans exempel igen och förtydligar:

rushkana = Attraction("Vattenrushis", 180, 5);

här skapar vi alltså attraktionen vars referens blir "rushkana", och som kommer displatas som Vattenrushis. För att få åka Vattenrushis krävs att man är 180cm lång, och sannolikheten för haveri är 5/10 (femman anger jämförelsevärdet till slump. Så här blir det slump<5 => haveri). Vill du sedan ha specifika åkljud får du helt enkelt lägga till det och skicka in det i samband med att du skapar en ny attraktion (jag skulle även rekommendera ett default-värde här).

När du sedan vill fråga användaren vad de vill åka kallar du helt enkelt på en metod som skapar en lista över de attraktioner som finns i park.

Det din lärare/handledare menar att det är för skillnad mellan din park och hans attraction är att du i ditt fall skapar en ny park varje gång du skapar ett nytt objekt. Jag skulle rekommendera, om du fortfarande vill ha park-objektet, att denna klass då skapar ett park-objekt med en variabel som input. Denna variabel får då vara en array med de olika attraktionerna som ska tillhöra parken. Notera dock att så länge du bara har en park, så behövs ingen park-klass, utan det räcker med attraktion

Visa signatur

Citera för svar!|Fraktfritt hos INET|Min hemsida
Fractal Design Define R3|Corsair AX 850W|Gigabyte Nvidia GeForce GTX 570|Corsair Vengeance 1600MHz 2x4GB|ASRock P67 Extreme4|Intel Core i5 2500K|2x Samsung Spinpoint F3 1TB|Samsung Blu-Ray läsare
Nikon D7000|Nikon 60mm macro|Nikon 18-70|Nikon 55-300|Nikon 10.5 Fisheye

Permalänk
Medlem
Skrivet av supahh:

Tack för att du svarade!
Men gör man som du skriver så måste man väl ändra koden för att lägga till fler karuseller?

'- Anropa någon metod på Park som går igenom alla attraktioner och gör något med dem.'
nån vag idé om hur jag skulle bygga upp den metoden ? :/

Gjorde ett litet exempel i Java - http://pastebin.com/JY7BBh5m

Klassen Person används inte ännu då programmet blev lite längre än jag tänkt om jag lade till simulering av personer som köar till attraktioner, att attraktionerna betar av köer varje run() och att utskrigfterna vid run() på attraktioner berättade mer om vem som åker just nu. Bättre att hålla det kort.
Dock skulle jag om jag gjorde detta på riktigt i Java ha klasserna Person, Attraktion, Karusell och Bergodalbana i egna filer så man kan skapa dem på ett bra sätt även utanför en Park-instans. I nuläget ligger initieringen av parken i konstruktorn för Park pga detta istället för i main().

Visa signatur

Game 9800X3D|9070XT Workstation 5950X|7900XTX Vardagsrum 3900X|6900XT
VR Crystal Light|Quest 3|Pico 4|PSVR2|Reverb G2|Oculus Quest|Samsung Odyssey+

Permalänk
Medlem

Tack alla för hjälpen, hade inte klarat det utan era svar! hoppas det blir godkänt bara