Slaptas skaičius

Iš wiki.angis.net.
Jump to navigation Jump to search

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.

Spėjimų žaidimas
Spėjimų žaidimas

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ų")