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