MENÜ

Honlap címe

Előző - #16 Mód | Tartalomjegyzék | Következő - #18 Vásároljon 8-at, kap 1-et ingyen

17. GYAKORLAT: KOCKADOBÁS

kockadobás(1)  →  6

Ez a gyakorlat a Python véletlenszám-generáló függvényeit használja tetszőleges számú hatoldalú kocka dobásának szimulálására és a dobás teljes összegének visszaadására. Ez a gyakorlat a véletlenszám-generálást fedi le a Python véletlenszerű moduljával.

Gyakorlat leírása

Írjunk rollDice()függvényt egy numberOfDice paraméterrel, amely a hatoldalú dobókocka számát reprezentálja. A függvény az összes kockadobás összegét adja vissza. Ehhez a gyakorlathoz importálnia kell a Python randommodult, hogy meghívja a random.randint()gyakorlathoz tartozó függvényét.

Ezek a Python- assertutasítások leállítják a programot, ha feltételük False. Másolja őket a megoldási program aljára. A megoldás akkor helyes, ha a következő assertállítások feltételei mind igazak . Nem tudjuk megjósolni rollDice()a véletlenszerű visszatérési értékét, de ismételten ellenőrizhetjük, hogy a visszatérési érték a várt értékek megfelelő tartományán belül van-e:

assert rollDice(0) == 0

assert dobás kocka(1000) != dobás kocka(1000)

i tartományban (1000):

    állítás 1 <= dobókocka(1) <= 6

    állítás 2 <= dobókocka(2) <= 12

    állítás 3 <= dobókocka(3) <= 18

    assert 100 <= dobás kocka(100) <= 600

Csillagászatilag kicsi az esélye annak, hogy a rollDice(1000) != rollDice(1000) állítás hamis pozitív eredmény esetén megbukik. Ez az állítás azt teszteli, hogy rollDice() nem egyszerűen ugyanazt a „véletlen” számot adja vissza minden alkalommal, szimulálva 1000 kocka kétszeri dobását, és megbizonyosodik arról, hogy a két dobás végösszege eltérő. De természetesen van esély arra, hogy ugyanannyit érjenek el, és AssertionError-t okozzanak . Ebben az esetben csak futtassa újra az állítási teszteket. Végül is mennyi az esélye annak, hogy ez kétszer megtörténik?

Próbáljon megoldást írni a leírásban szereplő információk alapján. Ha továbbra is problémái vannak ennek a gyakorlatnak a megoldásával, további tippekért olvassa el a Megoldástervezés és a Különleges esetek és Gotchák című részt.

Előfeltétel fogalmak: import utasítások, randommodul, randint(), forciklusok, range(), kiterjesztett hozzárendelés operátor

Megoldás tervezése

Először hozzon létre egy változót a kockadobások összességének nyomon követéséhez, és indítsa el az értékkel 0. Ezután készítsen egy for ciklust, hogy ugyanannyiszor ismételje meg a ciklust, mint a numberOfDice paraméter. A cikluson belül hívja meg a random.randint()1 függvényt a és közötti véletlen számok visszaadásához , 6és adja hozzá ezt a számot a futó összeghez. A ciklus befejezése után adja vissza a teljes összeget.

Ha nem tudja, hogyan random.randint() működik a függvény, futtassa import randoma help(random.randint) parancsot az interaktív shellben, hogy megtekinthesse a dokumentációját. Vagy kereshet az interneten a „python randint” kifejezésre, hogy online információkat találjon a funkcióról.

Különleges esetek és Gotchák

Ennek a gyakorlatnak nincsenek különleges esetei, de ne feledje, hogy a Python random.randint()függvénye magában foglalja az argumentumokat. A hívás például range(6)azt idézi elő, hogy egy forciklus felfelé haladva 0 , de nem tartalmazza a ciklust 6. De a random.randint(1, 6) meghívása egy 1 és közötti véletlen számot ad vissza 6, beleértve az 1-et és a 6. Ha három 6 oldalú kockát dob, a tartomány 3 és 18 között van, nem 1 és 18 között.

Több kockadobás nem eredményez egyenletes eloszlást: két 6 oldalú kocka dobása esetén sokkal valószínűbb, hogy 7-et kapunk, mert több olyan kombináció van, amely 7-et ad (1 + 6, 2 + 5, 3 + 4, 4 + 3, 5 + 2 és 6 + 1) a 2. gördüléshez képest (csak 1 és 1). Ezért kell random.randint(1, 6)kétszer hívnia, és össze kell adnia a dobásokat, ahelyett, hogy random.randint(2, 12)egyszer hívna.

A megoldási programnak import random a program tetején kell lennie a random.randint() függvény meghívásához, különben egy NameError: name "random" hibaüzenet jelenik meg.)

Most próbáljon meg egy megoldást írni az előző szakaszok információi alapján. Ha továbbra is problémái vannak a gyakorlat megoldásával, olvassa el a Megoldássablon részt további tippekért.

Megoldás sablon

Próbáljon először megoldást írni a semmiből. De ha nehézségei vannak, akkor a következő részprogramot használhatja kiindulási helynek. Másolja ki a következő kódot a https://invpy.com/rolldice-template.py webhelyről , és illessze be a kódszerkesztőbe. Cserélje ki az aláhúzást kódra, hogy működő programot készítsen:

# Importálja a véletlenszerű modult a randint() függvényéhez.

____ véletlenszerű

 

def dobókockák(kockaszám):

    # Kezdje az összeget 0-val:

    összesen = ____

    # Futtasson egy hurkot minden dobni kívánt kockához:

    i tartományban (____):

        # Adja hozzá egy 6 oldalú kockadobás összegét a végösszeghez:

        összesen += random.randint(____, ____)

    # A kockadobás összegének visszaadása:

    hozam összesen

A gyakorlat teljes megoldását az A függelék és a https://invpy.com/rolldice.py tartalmazza . A program minden lépését megtekintheti, amint az egy hibakereső alatt fut a https://invpy.com/rolldice-debug/ oldalon .

Előző - #16 Mód | Tartalomjegyzék | Következő - #18 Vásároljon 8-at, kap 1-et ingyen

 

Asztali nézet