Level 2Python: Tilfeldig

Skrevet av: Oversatt fra microbit-micropython.readthedocs.io

Oversatt av: Øistein Søvik

Kurs: Microbit
Tema: Elektronikk, Tekstbasert
Fag: Programmering, Teknologi
Klassetrinn: 8.-10. klasse

Introduksjon

Er du lei av at enheten din gjør det samme hver gang; kanskje du ønsker å gjøre utfallet mer spennende? I denne oppgaven skal vi lære hvordan vi kan få enheten til å oppføre seg tilsynelatende tilfeldig.

MicroPython har en random modul som gjør det enkelt å inkludere tilfeldigheter og litt kaos inn i koden din. For eksempel, her er hvordan en kan scrolle et tilfeldig navn over displayet:

from microbit import *
import random

navn = ["Mari", "Yolanda", "Jakob", "Sofie", "Kushal", "Mei Xiu", "William" ]

display.scroll(random.choice(names))

Listen (navn) inneholder syv navn som er definert som tekststrenger. Den siste linjen består av nøstede (Tenk på lagene på en "løk" som vi nevnte tidligere) funksjoner: metoden random.choice tar inn listen navn som et argument og returnerer et tilfeldig element. Dette elementer er argumentet til display.scroll.

checkPrøv det ut selv

Tilfeldige tall

Tilfeldige tall er veldig nyttige og er vanlige i spill. Vet du om andre plasser vi bruker terninger?

MicroPython kommer utrustet med en rekke nyttige metoder for å lage tilfeldige tall. Her er hvordan en kan lage en enkel terning:

from microbit import *
import random

display.show(str(random.randint(1, 6)))

Hver gang enheten er startet på nytt så viser displayet et tall mellom 1 og 6. Du begynner å bli kjent med grepet nøsting, så det er viktig å huske på at random.randint returnerer et heltall mellom to argumenter, inkludert endepunktene (argumentet heter ranint som er en forkortelse for random integer, siden integer betyr heltall). Merk at siden display.show forventer tekst så må vi bruke str funksjonen til å gjøre om tallverdien til en tekst (vi gjør om for eksempel 6 til "6").

Dersom du vet at du alltid ønsker et tall mellom 0 og N så kan vi bruke random.randrange metoden. Den tar inn ett tall og returner et tilfeldig tall opp til, men ikke inkludert verdien til argumentet N. (dette er forskjellig fra random.randint)

Noen ganger trenger du desimaltall. Programmerere kaller gjerne disse for flyttall og det er mulig å generere slike tall ved å bruke random.random metoden. Dette returnerer en verdi mellom 0.0 og 1.0 inklusive endepunktene. Dersom du trenger større tilfeldige desimaltall kan du legge sammen resultatene fra random.randrange og random.random slik som dette

from microbit import *
import random

answer = random.randrange(100) + random.random()
display.scroll(str(answer))

checkPrøv det ut selv

Hint
from microbit import *
import random

display.show(str(A+random.randrange(B)))

Her må du selv finne ut hvilke tall vi må bytte ut A og B med slik at koden ovenfor fungerer som en terning.

Kaostilstander

Når datamaskinen din lager tilfeldige tall er de ikke helt tilfeldig. De gir bare ut tilsynelatende tilfeldige resultater gitt en starttilstand (Kalles gjerne for seed på engelsk). Tilstanden er ofte laget fra omtrentlig tilfeldige tall, slik som temperaturen i datamaskinen din, musebevegelsene de siste minuttene eller klokkeslettet. Allle disse metodene kan kombineres.

Noen ganger ønsker du å ha tilfeldig oppførsel som gjentar seg, en kilde av tilfeldighet som er reproduserbar. Det er som å si at du trenger de samme fem tilfeldige verdiene hver gang du kaster en terning.

Dette er heldigvis enkelt siden vi kan sette starttilstanden direkte i MicroPython. Gitt en fast starttilstand så vil den generere de samme tilfeldige tallene hver gang. Starttilstanden er satt med random.seed og ett positivt heltall. Denne versjonen av terning programmet produserer alltid de samme resultatene

from microbit import *
import random

random.seed(1337)
while True:
    if button_a.was_pressed():
        display.show(str(random.randint(1, 6)))

checkLitt juks

Python kan kjenne igjen følgende bevegelser up, down, left, right, face up, face down, freefall, 3g, 6g, 8g, shake ved å bruke funksjonen accelerometer.is_gesture("bevegelse").

Hint
from microbit import *
import random

while True:
    if accelerometer.is_gesture("A"):
        display.show(str(6))
        sleep(500)
    elif button_a.is_pressed():
        display.show(str(random.randint(1, 6)))
        sleep(500)```

Her må du selv velge hvilken bevegelse du ønsker å bytte ut `A` med.

</hide>
</toggle>

Forbedre denne siden

Funnet en feil? Kunne noe vært bedre?
Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!