Losowość¶
Czasem chcesz pozostawić rzeczy szczęściu, lub odrobinę je pomieszać. Słowem: chcesz, by urządzenie działało losowo.
MicroPython zawiera moduł random
, wprowadzający element losowy oraz odrobinę
chaosu do Twojego kodu. Oto przykładowy kod przewijający na wyświetlaczu losowe imię:
from microbit import *
import random
names = ["Mary", "Yolanda", "Damien", "Alia", "Kushal", "Mei Xiu", "Zoltan" ]
display.scroll(random.choice(names))
Lista (names
) zawiera siedem imion zdefiniowanych jako łańcuchy znaków.
Ostatnia linia jest zagnieżdżona (efekt „cebuli” zaprezentowany wcześniej):
metoda random.choice
przyjmuje jako argument listę names
oraz zwraca
jej losowy element. Element ten (losowo wybrane imię) jest argumentem dla
display.scroll
.
Czy możesz zmodyfikować listę tak, by zawierała wybrane przez Ciebie imiona?
Losowe Liczby¶
Losowe liczby są bardzo użyteczne. Często używane są w grach. Po cóż innego mamy kostki?
MicroPython zawiera wiele użytecznych metod powiązanych z losowymi liczbami. Oto przykład prostej kości do gry:
from microbit import *
import random
display.show(str(random.randint(1, 6)))
Po każdym restarcie urządzenia, wyświetla ono numer z zakresu 1-6. Zaczynasz
zapoznawać się z zagnieżdżaniem, warto więc zauważyć, że random.randint
zwraca liczbę całkowitą z podanego przedziału włącznie
(liczba całkowita nazywana jest integer, stąd nazwa metody). Zauważ, że skoro
display.show
oczekuje znaku alfabetycznego, używamy funkcji str
do zamiany
numeru na znak (na przykład: 6
na "6"
).
W wypadku, gdy zawsze potrzebujesz liczny z przedziału pomiędzy 0
a N
,
używaj metody random.randrange
. Gdy podasz jej pojedynczy argument, zwróci
losową liczbę całkowitą z przedziału od 0
do N
włącznie (w
przeciwieństwie do funkcji random.randint
).
Czasami potrzebujesz liczby z miejscem po przecinku. Nazywamy je liczbami
zmiennoprzecinkowymi i można je uzyskać używając metody random.random
.
Zwraca ona wartość z przedziału domkniętego od 0.0
do 1.0
. Jeżeli
potrzebujesz dużej liczby zmiennoprzecinkowej dodaj random.randrange
do
random.random
, jak poniżej:
from microbit import *
import random
answer = random.randrange(100) + random.random()
display.scroll(str(answer))
Ziarno Chaosu¶
Losowe liczby generowane przez komputery nie są naprawdę losowe. Zwracają jedynie pseudolosowe rezultaty zaczynając od ziarna. Wartość ziarna generowana jest na podstawie pseudolosowej wartości, takiej jak obecna godzina i/lub odczyty z sensorów sprzętowych.
Czasem chcesz osiągnąć powtarzalne, pseudolosowe zachowanie: odtwarzalne ziarno. To jakby oczekiwać tych samych, losowych wyników pięciu kolejnych rzutów kością.
Można to łatwo osiągnąć ustalając odgórnie wartość ziarna. Dla danego ziarna
generator liczb losowych będzie tworzył tę samą pulę liczb losowych.
Ziarno jest ustawiane poprzez random.seed
jako dowolna liczba całkowita.
Poniższa wersja programu do rzutu kością poda zawsze ten sam rezultat:
from microbit import *
import random
random.seed(1337)
while True:
if button_a.was_pressed():
display.show(str(random.randint(1, 6)))
Czy dostrzegasz, czemu powyższy program oczekuje wciśnięcia klawisza A, w przeciwieństwie do restartu urządzenia z poprzedniego przykładu?