Rozdział 23 · Aneks

Generator losowych historii B: Projektu Domowego

Pięć niezależnych losowych wyborów wypełnia wzór – a opcjonalny random.Random sprawia, że wynik jest powtarzalny w testach.

Generator wypełnia szablon zdania losowo wybranymi słowami z kilku listy. Wszystkie rzeczowniki na liście są męskie, więc zgadza się z Przymiotniki nie są naruszane w żadnej kombinacji:

story_generator.py
PRILAGATELNYE = [„odważny”, „ciekawski”, „roztargniony”, „zabawne”, „tajemniczy”]
SUSHESTVITELNYE = [„smok”, „programista”, „kot”, „podróżnik”, „robot”]
MESTA = [„W Mrocznym Lesie”, „Na odległej planecie”, „w starej bibliotece”, „w piwnicy domu”]
GLAGOLY = [„znalezione”, „zgubił", „naprawił”, „wynaleziony”, „ukrył”]
PREDMETY = [„magiczny laptop”, „Starożytny Zwój”, „Zepsuty kompas”, „Słoik dżemu”]

SHABLON = (
    „Dawno, dawno temu {prilagatelnoe} {sushestvitelnoe} {mesto} {glagol} {predmet}. ”
    „Jego życie od tamtej pory nigdy nie było takie samo.”
)

Testowalna losowość

Jeśli sluchajnaya_istoriya() zawsze odnosi się bezpośrednio do Globalny stan modułu random, test może sprawdzić Efekt, tylko poprzez wstępne zasiewanie tego globalnego stanu, jest kruchym sposobem, łatwym łamiący, jeśli gdzieś indziej w programie jest też wywołane random . Zamiast tego funkcja przyjmuje opcjonalny generator liczb losowych:

story_generator.py
def sluchajnaya_istoriya(rng: random.Random | None = None) -> str:
    generator = rng if rng is not None else random
    return SHABLON.format(
        prilagatelnoe=generator.choice(PRILAGATELNYE),
        sushestvitelnoe=generator.choice(SUSHESTVITELNYE),
        mesto=generator.choice(MESTA),
        glagol=generator.choice(GLAGOLY),
        predmet=generator.choice(PREDMETY),
    )
random.Random(seed) jest niezależnym źródłem losowości
random.Random(1) tworzy osobny generator liczb losowych, który nie jest powiązany z globalnym stanem modułu random. Dwie kopie random.Random(7)utworzone niezależnie zawsze generują tę samą sekwencję — na tym opiera się test deterministyczny: sluchajnaya_istoriya(random.Random(7))przywołany dwa razy z nowym generatorem dla tego samego ziarna, za każdym razem zwróci tę samą historię.

Pełny kod: projects/console/story-generator/story_generator.py

Quest

★★ Zadanie samodzielne
Kolejna lista

Dodaj lista PRZYSŁÓWKÓW (np. "nagle", "przypadkowo", "niezauważalnie") i wstaw {narechie} do szablonu, zachowując zgodność płci.

GitHubPraktyka GitHub

Issue „Add random story generator” feat/story-generator, Test deterministyczny z ustalonym testem random.Random , Pull Request.

Praktyka: losowe historie i random.Random()
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →