Centralt innehåll
- Grundläggande kontrollstrukturer, konstruktioner och datatyper.
- Grundläggande programmering i ett textbaserat programspråk.
- Programmeringens möjligheter och begränsningar utifrån datorns funktionssätt.
- Strukturerat arbetssätt för problemlösning och programmering.
- Arbetsmetoder för förebyggande av programmeringsfel, testning, felsökning och rättning av kod.
- Gränssnitt för interaktion mellan program och användare.
Fakta
1. Slumptal
I Python finns färdig kod, moduler.
Man kan säga att det är färdiga "bra-att-ha" funktioner som redan är skrivna åt oss.
Modulerna måste importeras före funktionerna i dem kan användas.
Om man vill generera slumptal använder man funktioner som ligger i modulen random.
För att generera slumpade heltal används funktionen randint()
.
Innan det går att använda funktionen randint()
måste den importeras från modulen random.
Det finns några olika sätt att importera funktioner.
Att importera funktionen randint
från modulen random kan man göra så här:
from random import randint
Det finns några olika funktioner för att slumpa fram heltal eller flyttal.
# Exempel 1.1 - slumpa fram ett heltal n så att a ≤ n ≤ b används funktionen randint(a, b)
from random import randint
# slumpa fram ett heltal mellan 1 - 6
n = randint(1, 6)
print(n)
# Exempel 1.2 - slumpa fram ett flyttal x så att 0 ≤ x < 1 används funktionen random()
from random import random
x = random()
print(x)
# Exempel 1.3 - slumpa fram ett flyttal x så att a ≤ x ≤ b används funktionen uniform(a, b)
from random import uniform
x = uniform(2, 5)
print(x)
# Exempel 1.4 - skapar slumptal. Testkör denna kod upprepade gånger.
from random import randint, random, uniform
a = randint(1, 10)
b = random()
c = uniform(2, 5)
print(f'a = {a}')
print(f'b = {b}')
print(f'c = {c}')
Moduler kan också importeras utan att ange vilka funktioner som ska anropas, men då får varje anrop av funktioner ha prefixet (börja) med modulnamnet och punkttecknet.
# Exempel 1.5 - skapar slumptal
import random
a = random.randint(1, 10)
b = random.random()
c = random.uniform(2, 5)
print(f'a = {a}')
print(f'b = {b}')
print(f'c = {c}')
1.1 Tärningskast
Med funktionen randint(1, 6) slumpar man fram ett av heltalen 1, 2, 3, 4, 5, 6. Det kan simulera ett tärningskast.
# Exempel 1.6 - simulerar ett tärningskast
import random
tärning = random.randint(1, 6)
print(f'Tärningen visar en {tärning}:a')
Skapa en tom lista och spara 5 tärningskast i listan.
# Exempel 1.7 - spara 5 tärningskast i en lista
from random import randint
tärnings_lista = [] # Skapa en tom lista
# 5 tärningskast som sparas i en lista
for i in range(5):
tärningskast = randint(1, 6)
tärnings_lista.append(tärningskast)
print(tärnings_lista)
kan ge utskriften
[3, 6, 5, 5, 1]
Använd en while-loop för kasta tärningen tills en 6:a kastas.
# Exempel 1.8 - Kasta tärning tills en 6:a kastas
from random import randint
sexa_kastad = False
# Loopa tills en 6:a kastas
while sexa_kastad == False:
tärningskast = randint(1, 6)
print(tärningskast, end=' ')
if tärningskast == 6:
# Om tärningskastet var en 6:a
sexa_kastad = True
print('Sexa kastad!')
kan ge utskriften
2 3 5 1 6 Sexa kastad!
Räkna antal kast före en 6:a kastas.
# Exempel 1.9 - Räkna antal kast före en 6:a kastas
from random import randint
antal_kast = 0
sexa_kastad = False
# Loopa tills en 6:a kastas
while sexa_kastad == False:
tärningskast = randint(1, 6)
print(tärningskast)
if tärningskast == 6:
# Om tärningskastet var en 6:a
sexa_kastad = True
else:
# Om tärningskastet inte var en 6:a
antal_kast = antal_kast + 1
print(f'\n{antal_kast} kast före 6:an kastades!')
kan ge utskriften
3 1 2 5 2 2 4 2 2 2 4 2 5 1 5 6
15 kast före 6:an kastades!
Räkna summan och antal kast före en 6:a kastas.
# Exempel 1.10 - Räkna summa och antal kast före en 6:a kastas
from random import randint
antal_kast = 0
summa = 0
sexa_kastad = False
# Loopa tills en 6:a kastas
while sexa_kastad == False:
tärningskast = randint(1, 6)
print(tärningskast, end=' ')
if tärningskast == 6:
# Om tärningskastet var en 6:a
sexa_kastad = True
else:
# Om tärningskastet inte var en 6:a
antal_kast = antal_kast + 1
summa = summa + tärningskast
print(f'\nSumman {summa} och {antal_kast} kast före 6:an kastades!')
kan ge utskriften
2 5 3 1 3 6
Summan 14 och 5 kast före 6:an kastades!
1.2 Fler funktioner
Några exempel med funktionerna choice
, shuffle
och
sample
.
# Exempel 1.11 - ett kort ur en kortlek slumpas fram, m.h.a listor och funktionen choice()
from random import choice
färg = ['Hjärter', 'Spader', 'Ruter', 'Klöver']
valör = ['Ess', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Knekt', 'Dam', 'Kung']
slumpad_färg = choice(färg)
slumpad_valör = choice(valör)
print(f'Det slumpade kortet är: {slumpad_färg} {slumpad_valör}')
kan ge utskriften
Det slumpade kortet är: Spader Kung
# Exempel 1.12 - Med funktion shuffle() kan elementens ordning i en lista slumpas
from random import shuffle
lst = [1, 2, 3, 4, 5, 6]
print(lst)
shuffle(lst)
print(lst)
kan ge utskriften, där den sista raden i utskriften visar en slumpvis ordning som kan variera varje gång programmet körs
[1, 2, 3, 4, 5, 6]
[4, 6, 2, 3, 1, 5]
# Exempel 1.13 - Med funktion sample() kan elementens ordning i en lista slumpas
from random import sample, shuffle # Importerar 2 funktioner från modulen random
mängd = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
lst = sample(mängd, 3) # Slumpar 3 värden från mängd
print(lst)
mängd = range(1, 11) # Skapar en mängd med värdena 1 - 10
lst = sample(mängd, 3)
print(lst)
shuffle(lst) # Blanda ordningen i lst
print(lst)
kan ge utskriften
[5, 1, 9]
[7, 2, 9]
[2, 9, 7]
1.3 Funktioner i modulen random
Funktion | Beskrivning |
---|---|
randint(a, b) | Slumpa fram ett heltal n så att a ≤ n ≤ b |
random() | Slumpa fram ett decimaltal x så att 0 ≤ x < 1 |
uniform(a, b) | Slumpa fram ett flyttal x så att a ≤ x ≤ b |
| |
choice(lst) | Slumpar fram ett värde från en lista lst |
shuffle(lst) | Blandar ordningen på elementen i en lista lst |
sample(lst, n) | Skapar en ny lista med n element från listan lst |
Det finns flera funktioner i modulen random. Se mer på Python: Generate pseudo-random numbers.
Begrepp
Modul: Färdig kod med "bra-att-ha" funktioner.
Lista: En samling av element (värden).
Index: Position i t.ex. en lista.
Element: Ett värde i en lista.
F-sträng: Ett sätt att formatera strängar för utskrifter.
Länkar
Film
Fördjupning
Övningar
Du kan inte att lära dig att programmera genom att läsa en bok eller titta på videos. Du måste öva på att skriva kod själv och ju mer du övar desto bättre blir du.- Skriv ett program som skapar en lista med fyra namn och slumpar fram ett av dem.
- Skriv ett program som skapar en lista med elementet krona och klave och simulerar en slantsingling, dvs slumpar fram ett av elementen.
- Skriv ett program där användaren skriver in hur många gånger en slant ska singlas. Sedan skrivs krona eller klave ut för varje kast och till sist skrivs antalet krona och klave ut.
- Skriv ett program där användaren skriver in hur många gånger en tärning ska kastas. Summera antal gånger 1 – 6 visas. Presentera resultatet i en tabell.
- *Skriv ett program som slumpar fram två tal (faktorer) som ska multipliceras och låt användaren ge ett svar.
T.ex. kan programmet fråga om t.ex. 7 * 8 = där användaren ska ge svaret.
Kontrollera sedan om svaret är rätt eller fel.
Utöka sedan programmet så att användaren får tio frågor, efter varje fråga visas om svaret var rätt eller fel och efter alla frågor besvarats visas totala antalet rätt. - *Skriv ett program som undersöker vilken tärningssumma som är vanligast vid kast med två tärningar. Gör samma sak med tre tärningar.
Inlämningsuppgift
Uppgift - Spökhuset
Skriv ett program där användaren väljer mellan 3 dörrar. Bakom en av dörrarna
finns ett spöke. Vilken dörr slumpas fram före användaren väljer en av dörrarna.
Om användaren väljer en dörr utan spöke, slumpas spöket bakom en ny dörr och
användaren väljer igen bland 3 dörrar.
Användaren fortsätter att välja dörr tills dörren med spöket öppnas.
Målet är att öppna så många dörrar som möjligt.
ExempelkörningVälkommen till spökhuset. Välj dörr och undvik spökena.
Du har 3 dörrar att välja mellan. Bakom en finns ett spöke.
Vilken dörr väljer du (1/2/3)? 2
Spöket var bakom dörr 3
Bra, du har klarat 1 dörrar
Du har 3 dörrar att välja mellan. Bakom en finns ett spöke.
Vilken dörr väljer du (1/2/3)? 2
Spöket var bakom dörr 1
Bra, du har klarat 2 dörrar
Du har 3 dörrar att välja mellan. Bakom en finns ett spöke.
Vilken dörr väljer du (1/2/3)? 3
Spöket var bakom dörr 2
Bra, du har klarat 3 dörrar
Du har 3 dörrar att välja mellan. Bakom en finns ett spöke.
Vilken dörr väljer du (1/2/3)? 2
Spöket var bakom dörr 1
Bra, du har klarat 4 dörrar
Du har 3 dörrar att välja mellan. Bakom en finns ett spöke.
Vilken dörr väljer du (1/2/3)? 1
Buuuh, spöket tog dig!! Du klarade 4 dörrar.
Tips: Använd funktionen randint
för att slumpa vilken dörr spöket finns bakom.
Krav: Inga break
eller continue
satser.
Använd f-strängar vid utskrifterna.
Kom ihåg: Använd beskrivande variabelnamn och kommentera koden.
Lite tips på hur du kan/ska tänka när du löser uppgiften.
Så länge som inget spöke hittats
Slumpa fram en dörr som spöket är bakom.
Berätta för användaren att 'Du har 3 dörrar att välja mellan...'
Låt användaren välja dörr.
Om vald dörr är lika med dörren spöket är bakom
Skriv 'Buuuh, spöket tog dig!!'
annars
Öka värdet för antal dörrar utan spöken med 1
Skriv ut bakom vilken dörr spöket gömde sig
Skriv ut hur många dörrar som användaren klarat hittills
Frivillig utmaning
När spelet är klart ska användaren få frågan om att spela igen.
Ska naturligtvis lösas utan break
och continue
satser.
Tips: Använd nästlade loopar.
ExempelkörningVälkommen till spökhuset. Välj dörr och undvik spökena.
Du har 3 dörrar att välja mellan. Bakom en finns ett spöke.
Vilken dörr väljer du (1/2/3)? 2
Spöket var bakom dörr 3
Bra, du har klarat 1 dörrar
Du har 3 dörrar att välja mellan. Bakom en finns ett spöke.
Vilken dörr väljer du (1/2/3)? 3
Buuuh, spöket tog dig!! Du klarade 1 dörrar.
Vill du spela igen (j/n)?
Frivillig extra utmaning
Efter användaren spelat klart, dvs svarar nej på frågan om man vill spela igen, ska det bästa resultatet (highscore) från de spelade omgångarna skrivas ut.
Exempelkörning.
.
.
Vill du spela igen (j/n)? n
Tack för att du spelade. Ditt bästa resultat var 7 dörrar.