Stundas uzdevums: Izveidot spēli, kur dators ar binārās meklēšanas stratēģiju uzmin spēlētāja skaitli, pierāda algoritma efektivitāti un pamana pretrunīgas atbildes.
70 min darba sadalījums: 1. uzdevums (~20 min) - atjauno teorijas piemēru vai minimālo prototipu; 2. uzdevums (~25 min) - pielieto to galvenajā uzdevumā; 3. uzdevums (~25 min) - pārbaudi rezultātu, izlabo kļūdas un tikai beigās pieraksti vienu secinājumu. Papildus/4. līmeņa uzdevums ir paredzēts tikai tad, ja pamatdarbs ir pabeigts.
Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.
Lineārā meklēšana pārbauda variantus pēc kārtas: 1, 2, 3, 4... Binārā meklēšana katrā solī atmet pusi no vēl iespējamā diapazona. Tāpēc 100 skaitļu spēlē datoram vajag nevis līdz 100 minējumiem, bet ne vairāk kā 7, ja spēlētājs atbild godīgi.
apaksa = 1
augsa = 100
minejums = (apaksa + augsa) // 2
if atbilde == "lielāks":
apaksa = minejums + 1
elif atbilde == "mazāks":
augsa = minejums - 1
Pretruna rodas tad, ja robežas kļūst neiespējamas, piemēram, apakšējā robeža ir lielāka par augšējo. Tas nozīmē, ka iepriekšējās atbildes nevar visas būt patiesas.
Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 7.6 Noslēguma projekts: "Koda lauzējs: AI Efektivitāte"; detalizētu izpratni veidosi nākamajos uzdevumos.
Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.
apaksa = 1
augsa = 100
minejums = (apaksa + augsa) // 2
if atbilde == "lielāks":
apaksa = minejums + 1
elif atbilde == "mazāks":
augsa = minejums - 1
main.py failā un palaid no termināļa.Pievieno šīs stundas paņēmienu kā nelielu, strādājošu projekta daļu.
punkti, gajiens, atbilde, rezultats vai parbauda_ievadi().Pārbaudi, vai algoritms darbojas paredzami vairākās situācijās.
Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu programmētu uzlabojumu.
min_r <= max_r..strip().lower() un prasi ievadi vēlreiz, ja tā nav l, m vai u.main.py, kas ļauj datoram minēt skaitli un beigt spēli korektā brīdī.engine.py ar vismaz divām funkcijām: minējuma aprēķins un robežu atjaunošana.| Kritēriji | 4-6 (Turpina apgūt) | 7-8 (Apguvis) | 9-10 (Padziļināti) |
|---|---|---|---|
| Algoritma loģika | Dators min skaitļus haotiski vai neizmanto robežu pārbīdi. | Precīzi realizēta Binārā meklēšana (diapazona dalīšana uz pusēm). | Algoritms ir optimizēts; realizēta pretrunu (krāpšanās) detektēšana. |
| Efektivitātes analīze | Netiek uzskaitīti gājieni vai nav izpratnes par Big O. | Gājieni tiek uzskaitīti; izprot O(log n) efektivitāti. | README failā sniegta matemātiska analīze par algoritma robežām. |
| Koda kvalitāte | Kods ir vienā failā; trūkst parametru vai komentāru. | Kods sadalīts moduļos. Funkcijas saņem un atgriež datus. | Pilnīga modularitāte; profesionāls PEP 8 stils un docstrings. |
# Failā engine.py
def aprekinat_minejumu(apaksa, augsa):
"""Aprēķina viduspunktu binārajai meklēšanai."""
return (apaksa + augsa) // 2
# Failā main.py
from engine import aprekinat_minejumu
min_r, max_r = 1, 100
gajieni = 0
while min_r <= max_r:
minejums = aprekinat_minejumu(min_r, max_r)
gajieni += 1
atbilde = input(f"Vai Tavs skaitlis ir {minejums}? (L/M/U): ").lower()
if atbilde == 'u':
print(f"Uzvara {gajieni} gājienos!")
break
# ... tālāk seko robežu pārbīdes loģika