Avansert Pythonutviklingskurs
Kapittel
>
Nivå
Matematikkmoduler
Tilfeldig modul
Mål
Kjør simuleringer og tester for å forberede deg på eventuelle feil og tilbakeslag under gårdsbyggingen ved å bruke random-modulen.
Ved å krysse annexet finner du et kontor som håndterer noen administrative oppgaver og papirarbeid knyttet til frakt, bolig og logistikk for byggingen. Det ville være en god idé å kjøre noen scenarier ved hjelp av tilgjengelige data for å beregne tilbakeslag og utstyrsfeil. For å hjelpe med dette har vi random-modulen, aktivert med import random.
Modulen brukes til å generere tilfeldige utdata i ulike grader, noe som lar deg kjøre simuleringer eller legge til tilfeldige elementer i dine beregninger/øvelser. For våre formål vil vi bruke følgende funksjoner:
random.seed(): Setter frøet for tilfeldig generering, tar ett argument som er frønummeret du ønsker å bruke. Dette betyr at enhver tilfeldig funksjon brukt med et gitt frø vil gi de samme resultatene hver gang. Dette brukes for å utøve noe kontroll over tilfeldig generering og for å kunne gjenskape visse resultater.random.random(): Returnerer et tilfeldig flyttall mellom0og1.random.randint(): Tar to argumenter, og genererer et tall mellom de to argumentene, inkludert tallene selv. Resultatet returneres som et heltall.random.uniform(): Samme som den forrige funksjonen, men returnerer et tilfeldig flyttall i stedet for et heltall.random.triangular(): Samme som den forrige funksjonen, men har et ekstra argument som en modifikator kalt mode. Mode må være et tall mellom de to tallene i det tilfeldige intervallet. Det tilfeldige tallet som genereres vil statistisk sett være nærmere mode enn et rent tilfeldig tall mellom de to første argumentene.random.choice(): Tar en liste som argument, og velger et element fra listen tilfeldig.random.choices(): Genererer en tilfeldig liste samplet fra en annen liste, og tar tre argumenter: en liste du ønsker å sample fra, en annen liste som angir hvor mye vekt du ønsker å gi hvert element i listen du sampler fra, og til slutt en variabel kalt k der du angir hvor mange samples du ønsker å ta fra listen. Antallet samples kan være større enn selve listen, ettersom den vil generere duplikater basert på de angitte vektene.random.shuffle(): Tar en liste som argument og stokker den tilfeldig.random.sample(): Tar to argumenter, en liste å sample fra og antallet samples du ønsker å ta. En forenklet versjon avrandom.choices().
For å starte, gå til det lyse X-merket og vend deg mot pulten. Bruk funksjonen read() for å lese notatet og identifisere datapunktene som trengs for å kjøre en simulering med noe tilfeldig variasjon. Vi skal kjøre en simulering av utstyrsfeil, og notatet vil informere deg om hvilket seed som skal brukes for den tilfeldige genereringen, samt listen den skal sample fra. Bruk funksjonen random.seed() og sett inn verdien som er oppgitt i notatet.
Gå til det mørke X-merket over den blå teppet og vend deg mot pulten. Vi har en konstant liste kalt sectors som inneholder områdene på gården, som skissert i det forrige notatet. Lag en variabel kalt selection for å lagre verdien fra random.choice(). Bruk sectors-konstanten for å hente et sample fra listen, slik: selection = random.choice(sectors). Lag en annen variabel kalt delay og lagre verdien fra random.random() for å simulere feilmarginer forårsaket av forsinkelser.
Lag enda en variabel kalt defect og lagre verdien fra random.randint() for å generere en prosentandel for potensiell utstyrsfeil. Legg til argumentene 0 og 15 for å generere en prosentandel mellom disse to tallene. Når variablene selection, delay og defect er satt opp, bruk den forhåndsskrevne funksjonen write() med de tre variablene i denne rekkefølgen for å loggføre datapunkter som kan brukes for å teste potensielle problemer i byggingen.
Gå til det gylne X-merket og bruk funksjonen read() for å fortsette med projeksjonene. Dataene i notatet vil inneholde materialer, mengder og sampledata. Vi skal kjøre en større simulering ved å bruke dataene fra notatet, inkludert en konstant liste kalt materials som lagrer materialtypene skissert i notatet.
Gå til det mørke X-merket over det røde teppet og vend deg mot pulten. Lag en liste kalt weights og lagre de fire tallverdiene som finnes i notatet, tilsvarende materialene i den rekkefølgen de presenteres. For eksempel: weights = [400, 600 , -insert value-, -insert value-]
Lag en variabel kalt simulation og lagre verdien fra random.choices(). Legg til materials-konstanten, weights-listen du opprettet, og en variabel k som angir antall sampleenheter skissert i notatet, slik: simulation = random.choices(materials, weights , k = insert sampling units ). Bruk variabelen simulation med den forhåndsskrevne funksjonen write() for å loggføre dataene.
Gå til det mørke X-merket over det grønne teppet og vend deg mot pulten. Bruk funksjonen random.shuffle() med listen simulation du opprettet for å stokke den, slik: random.shuffle(simulation). Dette vil stokke listen, og det er ikke nødvendig å lagre verdien siden den endrer listen direkte. Lag en liste kalt sample for å lagre verdien fra random.sample(). Legg til simulation-listen som det første argumentet, og for det andre argumentet, ta et sample på 3 for å hente tre tilfeldige elementer, slik: sample = random.sample(simulation, k=3). Bruk simulation og sample med den forhåndsskrevne funksjonen write() for å loggføre de nye sampledataene.
Til slutt, gå til det mørke X-merket over det lilla teppet og vend deg mot pulten. Lag en variabel kalt defect og lagre resultatet fra random.uniform(), med argumentene 3 og 10. Dette er sampleverdiene for den opprinnelige simuleringen og samplet tatt fra den. Vi skal bruke dette til å generere potensielle feilmarginer for utstyrsdefekter basert på samplet vi tok.
Lag en variabel kalt losses og lagre verdien fra random.triangular(), med verdiene 200, 600 og 400. Dette er materialtallene skissert i det forrige notatet, spesifikt det laveste, høyeste og den verdien som ligger nærmest midten. Dette lar oss få en trekantet tilfeldig verdi basert på antall materialer simuleringen benyttet. Bruk verdiene defect og losses med den forhåndsskrevne funksjonen write() for å få resultater og fullføre nivået.