Sannolikhet

VECKANS ÖVNING – SANNOLIKHET

  1. Först behöver vi en representation av en kortlek som vi kan använda vid våra simuleringar. Då kan vi skapa en lista, som vi kan kalla ‘deck’, där vill vi ha 52 ‘kort’, dvs 4 representationer av siffran för varje kort i en kortlek. 9, 10, 11(för knekt) osv. Skriv gärna ut kortleken för att se att det funkar med print(deck)
  2. I vårt program kommer vi att behöva någon slags slumpgenerator för att blanda korten. Så därför behöver vi importera ett bibliotek för det, nämligen random.Random har en egen funktion för att blanda om exempelvis listor, det görs med random.shuffle(listnamn). Använd detta för att blanda listan och skriv ut deck igen för att se skillnaden.
  3. Efter att kortleken är blandad vill vi ta de 5 första korten och lägga i en variabel vi kallar ‘hand’, detta är den hand vi vill kolla för stege senare. Skriv ut hand och se vilka olika händer du får för varje körning.
  4. Nästa steg, nu när vi har fått en hand med 5 kort, behöver något sätt för att kolla om vi fått stege. En stege är ju om man har alla kort i storleksordning utan glapp. Därför kan det vara bra att sortera vår hand. Det kan vi göra med funktionen sorted(listnamn).Sortera hand och spara på nytt i hand, dvs tilldela variabeln ‘hand’ ett nytt värde med de 5 korten sorterade. Skriv ut hand efter även efter detta för att bekräfta att korten nu är sorterade.
  5. Bra så långt!
    Vi har ett specialcase med Essen. Den kan ju vara både 1 och 14! Vi skulle behöva kolla om vi har Ess på första plats i vår sorterade hand och 13(kung) är sista kortet. I så fall har vi chans på en hög stege! I de fallen vill vi spara om essets värde och sätta till 14 istället. Det kan vi göra med en if-sats som jämför hand[0] (som är första kortet i den sorterade handen) med 1, och samtidigt kollar om sista kortet hand[4] är 13. Då vill vi ändra värdet på hand[0].Sortera hand igen efteråt. För att testa att if-satsen fungerar kan ni sätta hand till [1,2,3,4,13]. Då skall ni med en korrekt if-sats få ut [2,3,4,13,14] med print(hand).
  6. Nu vill vi kolla om vår hand är en stege! Vi vill göra ett test för det. För att göra det behöver vi loopa igenom vår hand. Vi tänker att man vill loopa 4 ggr, och i loopen vill man testa om nästan kort i handen minus kortet vi kollar på är skilt från 1. Det betyder att det är mer än 1 mellan dessa, och kan därför inte vara en stege.Här kan du skriva ut print(“ingen stege”) om du vill och testa med en temporär hand, sätt handen till en stege och en utan stege för att se om din loop och if-sats fungerar. Om det är en stege skall inget hända, hittills.
  7. Om man fick en steg då? Vi måste göra något där. Programmet skulle ju gå ut på att beräkna sannolikheten för en stege på första handen. Med datorn kan vi göra tusentals försök på kort tid, så det kanske går att göra någon enkel division på slutet. Därför behöver vi en räknare som håller koll på hur många stegar vi får under våra tusentals försök vi kommer att göra så småningom.Skapa en variabel stege och sätt den till True (innan stege checken vi skapade tidigare).  I steg-kollen lägger vi, istället för vår tillfälliga print(“ingen stege”) istället stege = False. Detta för att om vi når in dit så vet vi att handen inte var en stege, så vi vill sätta stege till False.Under detta, utanför for-loopen , skapar vi nu en if-sats för att kolla om stege fortfarande är True, dvs om den klarade loopen utan att gå in i if-satsen och sätta stege till False. Det betyder att vår hand är en stege! Då vill vi öka en räknare för antal stegar med 1.

    Skapa en variabel för detta högst upp i programmet, under deck-listan. Sätt den till 0. I vår if-sats ökar vi nu vår variabel för antal stegar med 1.

  8. Som vårt program är nu genererar vi bara en hand per körning och testar för stege. Inte så kul! Vi behöver loopa vårt test flera gånger. Detta gör vi med en For-loop. Lägg all kod efter antal stegar variabeln i en for loop med en range på antal test( en variabel som vi skapar högst upp, sätt den till 100).
    Nu kan vi köra vårt program, som testar 100 slumpade händer för stege!
  9. Vi har kommit långt i vårt program! Nu vill vi bara skriva ut sannolikheten för stege. Vi har allt vi behöver, antal stegar vi fått ligger i vår variabel och antal test vet vi också. Skriv ut kvoten av dessa så har vi sannolikheten för en stege!Tips, se hur sannolikheten ändras (har bättre precision) ju fler test man gör. Vad är ett rimligt antal iterationer för ett tillräckligt tillförlitligt?
  10. ***Extra*** skriv ut de händer som blev stegar också.

 

SEE ALL Add a note
YOU
Add your Comment