Slaptas skaičius
Slapto skaičiaus žaidimas
Prisimink ir eksperimentuok
O jei norėčiau, kad mano programa arba žaidimas įgytų atsitiktinumo elementų? Į pagalbą galima pasitelkti bibliotekos “random” funkcijas.
Pamėgink nusikopijuoti ir įvykdyti šitą kodą:
reikalinga angis
reikalinga random
skaičius = random.randint(1, 10)
rašyk(skaičius)
Kas keičiasi, kai programą paleidi keletą kartų iš naujo?
Funkcija “random.randint” priima du argumentus, kurie nusako kokiame intervale parinkti atsitiktinį skaičių (įskaitant intervalo pradžią ir pabaigą). Pamėgink pakeisti intervalą.
Atsitiktinius skaičius galima panaudoti įvairiai. Tiek parenkant žaidimo veikėjo įgūdžių vertes, tiek paprašant kompiuterio išrinkti tau veiklą:
reikalinga angis
reikalinga random
veiklos = ["Piešti", "YouTube", "Į miestą"]
indeksas = random.randint(0, 2)
veikla = veiklos[indeksas]
rašyk("Išrinkau tau veiklą: ", veiklos[indeksas])
Ar pameni iš 13-tos Angies pamokos apie masyvus kodėl čia atsitiktinį skaičių parinkom nuo nulio iki dviejų, o ne nuo vieno iki trijų?
Pamėgink pridėti daugiau veiklų ir padaryti, kad kompiuteris siūlytų ir jas.
Kartais kyla noras, kad programa baigtųsi tik tuomet, kai jos naudotojas taip nusprendžia. Tam galima panaudoti ciklą “kol”:
reikalinga angis
reikalinga random
veiklos = ["Piešti", "YouTube", "Į miestą"]
pasirinkimai = "1. Duok veiklą.\n2. Iki."
pasirinkimas = 0
kol pasirinkimas != 2:
pasirinkimas = angis.paklauskSkaičiaus(pasirinkimai)
jei pasirinkimas == 1:
indeksas = random.randint(0, 2)
veikla = veiklos[indeksas]
rašyk("Išrinkau tau veiklą: ", veiklos[indeksas])
ojeigu pasirinkimas != 2:
rašyk("Tokio nemoku")
rašyk("Iki!")
Pagalvok kaip veikia šita programa. Kam reikalinga sąlyga “pasirinkimas != 2”? Kaip būtų galima pakeisti programą, kad ji leistų rinktis daugiau dalykų, pavyzdžiui: “Duok aktyvią veiklą”, “Duok pasyvią veiklą”, “Duok dainos pavadinimą paklausymui”? Pamėgink pakeisti programą, pridėti daugiau pasirinkimų. Kartais idėjų kyla bedarant.
Užduotis
Parašyk skaičių spėliojimo žaidimą, kuriame naudotojas turi atspėti slaptą skaičių. Po kiekvieno spėjimo programa pasako naudotojui ar jų spėtas skaičius buvo per didelis, ar per mažas. Pabaigoje programa išspausdina kiek prireikė spėjimų. To paties skaičiaus spėjimai turėtų skaičiuotis tik kaip vienas spėjimas, jei tie spėjimai atliekami vienas po kito.
Patarimai
Naudingos informacijos padėsiančios išspręsti šį lygį gali rasti puslapiuose apie modulį angis, Angies pamokoje apie ciklą kol, Angies pamokoje apie sąlygas.
Taip pat pirmą programos versiją geriausia programuoti supaprastintą - neskaičiuoti spėjimų. Tam, kad būtų lengviau testuoti, pradžiai slaptą skaičių galima nurodyti ne atsitiktinį.
1 Užuomina | |
---|---|
Pirmą programos versiją verta programuoti kuo paprastesnę. Pavyzdžiui, neskaičiuoti spėjimų, nusirodyti spėjamą skaičių (vietoje atsitiktinio). Paprasčiau suprogramuoti mažesnę programą, o tuomet ją praplėsti. |
2 Užuomina | |
---|---|
Atsitiktiniam skaičiui išrinkti, pasinaudok biblioteka “random” ir jos funkcija “randint” (atsitiktinis sveikasis skaičius). Ji išrenka atsitiktinį sveikąjį skaičių priklausantį nurodytam intervalui.
reikalinga random
skaičius = random.randint(1, 10)
|
3 Užuomina | |
---|---|
Panaudok ciklą “kol”, kad programa leistų spėlioti tol, kol neatspėta:
kol (ne atspėta):
spėjimas = angis.paklauskSkaičiaus("Spėk skaičių: ")
|
4 Užuomina | |
---|---|
Susikurk kintamąjį “spėjimų”, kuriame gali saugoti spėjimų skaičių. Tą kintamąjį padidink vienetu po kiekvieno spėjimo:
spėjimų = spėjimų + 1
|
Atsakymas | |
---|---|
reikalinga angis
reikalinga random
# skaičius = 30
skaičius = random.randint(1, 10)
atspėta = False
spėjimų = 0
praeitas_spėjimas = -1
kol (ne atspėta):
spėjimas = angis.paklauskSkaičiaus("Spėk skaičių: ")
jei(skaičius > spėjimas):
rašyk("Daugiau.")
ojeigu(skaičius < spėjimas):
rašyk("Mažiau.")
ojeigu(skaičius == spėjimas):
atspėta = True
jei(spėjimas != praeitas_spėjimas):
spėjimų = spėjimų + 1
praeitas_spėjimas = spėjimas
jei(atspėta):
rašyk("*** Atspėjai! :) ***")
rašyk("Prireikė ", spėjimų, " spėjimų")
|