Avancerad Pythonutvecklingskurs
Kapitel 8
>
NivÄ 6
MÄl
Kör simuleringar och tester för att förbereda för eventuella fel och motgÄngar under jordbruksmarkens konstruktion genom att anvÀnda modulen random.
Ăver annexet finns ett kontor som hanterar vissa administrativa uppgifter, hanterar en del pappersarbete kring frakt, boende och logistik för konstruktionen. Det vore en bra idĂ© att köra nĂ„gra scenarier med den tillgĂ€ngliga datan för att berĂ€kna motgĂ„ngar och utrustningsfel. För att hjĂ€lpa till med detta har vi modulen random, aktiverad genom import random .
Modulen anvÀnds för att generera slumpmÀssiga utfall i olika grad, vilket gör att du kan köra simuleringar eller lÀgga till slumpmÀssiga element i dina berÀkningar/övningar. För vÄra syften kommer vi att anvÀnda följande funktioner:
random.seed(): SÀtter fröet för slumpmÀssig generering, tar ett argument som Àr frönummret du vill anvÀnda. Detta innebÀr att alla slumpmÀssiga funktioner som anvÀnds med ett givet frö kommer att ge samma resultat nÀr de anvÀnds. Detta anvÀnds för att utöva viss kontroll över slumpmÀssig generering och för att kunna Äterskapa vissa resultat.random.random(): Returnerar ett slumpmÀssigt flyttal mellan0och1.random.randint(): Tar tvÄ(2) argument, genererar ett tal mellan de tvÄ argumenten, inklusive talen sjÀlva. Resultatet returneras som heltal.random.uniform(): Samma som den föregÄende funktionen men returnerar ett slumpmÀssigt flyttal istÀllet för ett heltal.random.triangular(): Samma som den föregÄende funktionen men har ett extra argument som modifierare kallad mode. Mode mÄste vara ett tal mellan de tvÄ talen i det slumpmÀssiga intervallet. Det slumpmÀssiga tal som genereras kommer att vara statistiskt nÀrmare mode Àn att vara ett rent slumpmÀssigt tal mellan de tvÄ(2) första argumenten.random.choice(): Tar en lista som argument, vÀljer ett (1) objekt frÄn listan slumpmÀssigt.random.choices(): Genererar en slumpmÀssig lista, ett urval frÄn en annan lista, och tar tre(3) argument: en lista du vill vÀlja frÄn, en annan lista dÀr du kan ange hur mycket vikt du vill ge varje objekt i den ursprungliga listan, samt en variabel med namnet k dÀr du anger hur mÄnga urval du vill ta frÄn listan. Antalet urval kan vara större Àn listan sjÀlv eftersom den genererar dubletter baserat pÄ de vikter du angivit.random.shuffle(): Tar en lista som argument och blandar den slumpmÀssigt.random.sample(): Tar tvÄ argument, en lista att ta ett urval frÄn och antalet urval du vill ta. En förenklad version avrandom.choices().
För att börja, gÄ till den ljusa X-markeringen och vÀnd dig mot disken, anvÀnd funktionen read() för att lÀsa memot och identifiera de datapunkter som behövs för att köra en simulering med en viss slumpmÀssig variation. Vi ska köra en simulering av utrustningsfel, memot kommer att informera dig om vilket seed som ska anvÀndas för den slumpmÀssiga genereringen samt listan som den tar sitt urval frÄn. AnvÀnd funktionen random.seed() och ange vÀrdet som angivits i memot.
GÄ till den mörka X-markeringen över den blÄ mattan och vÀnd dig mot disken, vi har en konstant lista vid namn sectors som innehÄller jordbruksomrÄdena som beskrevs i det tidigare memot. Skapa en variabel vid namn selection för att lagra vÀrdet av random.choice(), anvÀnd den konstanta listan sectors för att hÀmta ett urval frÄn listan, pÄ följande sÀtt: selection = random.choice(sectors). Skapa en annan variabel vid namn delay och lagra vÀrdet av random.random() för att simulera felmarginaler orsakade av förseningar.
Skapa ytterligare en variabel vid namn defect och lagra vÀrdet av random.randint() för att generera en procentsats för potentiellt utrustningsfel. LÀgg till argumenten 0 och 15 för att generera en procentsats mellan dessa tvÄ vÀrden. NÀr variablerna: selection, delay och defect har satts upp, anvÀnd den förskrivna funktionen write() med de tre(3) variablerna i den ordningen, för att notera de datapunkter som kan anvÀndas för att testa potentiella problem i konstruktionen.
GÄ till den gyllene X-markeringen och anvÀnd funktionen read() för att fortsÀtta köra projektioner, datan i memot kommer att innehÄlla material, kvantiteter och urvalsdata. Vi ska köra en större simulering med datan i memot, inklusive en konstant lista vid namn materials som lagrar de materialtyper som beskrivs i memot.
GÄ till den mörka X-markeringen över den röda mattan och vÀnd dig mot disken. Skapa en lista vid namn weights och lagra de fyra(4) siffervÀrden som anges i memot, motsvarande materialen i den ordning de presenteras. Till exempel: weights = [400, 600 , -insert value-, -insert value-]
Skapa en variabel vid namn simulation och lagra vÀrdet av random.choices(), lÀgg till den konstanta listan materials, listan weights du skapade och en lista med namnet k innehÄllande de urvalsenheter som anges i memot, pÄ följande sÀtt: simulation = random.choices(materials, weights , k = insert sampling units ). AnvÀnd variabeln simulation med den förskrivna funktionen write() för att skriva ned datan.
GÄ till den mörka X-markeringen över den gröna mattan och vÀnd dig mot disken, anvÀnd funktionen random.shuffle() med listan simulation du skapade för att blanda den, pÄ följande sÀtt: random.shuffle(simulation). Detta kommer att blanda listan, ingen anledning att lagra vÀrdet eftersom den Àndrar listan direkt. Skapa en lista vid namn sample för att lagra vÀrdet av random.sample(), lÀgg till listan simulation som första argument och för det andra argumentet, ta ett urval av 3 för att vÀlja tre(3) slumpmÀssiga objekt som ett sample, pÄ följande sÀtt: sample = random.sample(simulation, k=3). AnvÀnd simulation och sample med den förskrivna funktionen write() för att skriva ned de nya urvalen.
Avslutningsvis, gÄ till den mörka X-markeringen över den lila mattan och vÀnd dig mot disken, skapa en variabel vid namn defect och lagra resultatet av random.uniform(), lÀgg till argumenten 3 och 10. Dessa Àr urvalsparametrar för den ursprungliga simuleringen och det urval vi tog, och vi kommer att anvÀnda detta för att generera potentiella felmarginaler för utrustningen baserat pÄ det urval vi tog.
Skapa en variabel vid namn losses och lagra vÀrdet av random.triangular(), lÀgg till vÀrdena 200, 600 och 400. Dessa Àr materialvÀrdena som anges i det tidigare memot, specifikt det lÀgsta, högsta och det vÀrde som ligger nÀrmast mitten. Detta gör att vi kan fÄ ett triangulÀrt slumpmÀssigt vÀrde baserat pÄ antalet material som simuleringen anvÀnde. AnvÀnd vÀrdena defect och losses med den förskrivna funktionen write() för att fÄ resultat och slutföra nivÄn.