from karel import *
# dopunite
U ovom delu ćemo samo uvežbavati upotrebu if naredbe i njeno kombinovanje sa petljama.
Karel treba da stigne do kraja hodnika, a da usput uzme samo prvu lopticu na koju naiđe. Polje sa koga Karel polazi nikad nema lopticu, a i Karel je na početku bez loptica.
(Karel_if__take_first_ball_only)
Na tabli se nalazi samo jedna loptica. Karel i loptica se nalaze na dva susedna polja, između kojih nema zida (Karela od loptice deli samo jedan korak, ako se pre toga okrene ka loptici). Između ostalih polja može a ne mora biti zidova. Karel treba da uzme lopticu i pri tome nije bitno na kojem polju će da ostane kada se program završi.
Kao i obično, pokrenite program više puta da biste ga testirali na različitim primerima.
Jedna od ideja je da u svakom od 4 smera pokušamo Karelom korak napred i uzimanje loptice. Pri svakom od 4 pokušaja mogu da nastupe razni slučajevi:
moguće je da u tom smeru nema polja napred
moguće je da postoji polje ispred Karela, ali da na njemu nema loptice
moguće je da postoji polje i da je na njemu loptica
Pri pokušaju u sledećem smeru nam je mnogo jednostavnije ako ne moramo da vodimo računa o tome da li je Karel u prethodnom smeru našao polje bez loptice, ili nije našao ni polje. Radi toga je potrebno da Karel, kada završi pokušaj u jednom smeru, stane na isti način kada je bio na praznom polju, kao i kada polja nije ni bilo. Kada polja u datom smeru nema, Karel će ostati na početnom polju, okrenut u tom smeru. Najjednostavnije za nastavak traganja je da Karela ostavimo na istom polju i u istom položaju i kada se vrati sa praznog susednog polja. U stvari, neće smetati ako to uradimo i kada Karel uzme lopticu (može da dogoditi da Karel nepotrebno nastavi da traži, ali neće doći do greške).
Zahvaljujući ovom dovođenju Karela na isto stanje (pozicija i orijentacija) posle bilo kog od tri gore nabrojana slučaja, za svaki sledeći pokušaj tačno znamo od kog Karelovog stanja počinjemo. Ostaje da nakon svakog pokušaja okrenemo Karela ka sledećem smeru u kojem ćemo pokušati da dođemo do loptice (na levo ili na desno).
(Karel_if__take_neighboring_ball)
Postoji samo jedna loptica i Karel treba da je uzme. Put do loptice je krivudav, ali nema raskrsnica (uvek postoji samo jedan nastavak puta, čak i sa polaznog polja).
(Karel_if__take_ball_no_branches)
Postoji samo jedna loptica i Karel treba da je uzme. Da bi stigao do loptice, Karel treba da ide pravo samo kad ne može da skrene ni levo ni desno (neće se pojaviti raskrsnice na kojima se može skrenuti i levo i desno).
(Karel_if__p1_left_p2_right_p3_forward)
Postoji samo jedna loptica i Karel treba da je uzme. Karel će do loptice uvek stići tako što skrene levo kad god može, a inače ide pravo (kad ne može ni levo ni pravo, znači da je stigao). Karel je na početku okrenut kako treba i prvi korak mu je uvek pravo.
(Karel_if_p1_left_p2_forward)