Krijo një grup deklaratash

Le të kujtojmë detyrën Merrni topin në kutinë fqinje. Detyra ishte që në çdo drejtim, Kareli duhej të përpiqej të shkonte në kutine fqinje dhe (nëse ai mund të shkonte në kutinë fqinje) të provonte të merrte topin atje. Për ta bërë më të lehtë provimin e drejtimit tjetër, ne zgjodhëm që pas çdo përpjekjeje ta kthenim Karelin në kutinë fillestare.

Një program që zgjidh këtë detyrë është:

Pjesa e programit nga rreshti i shtatë në të njëmbëdhjeti duket pak më i ashpër për t’u ndjekur. Në atë pjesë, ju mund të duhet të imagjinoni deklarimet e ekzekutimit të Karel për të kuptuar plotësisht se çfarë po ndodh atje.

Komentet disi ndihmojnë në bërjen më të lehtë të kësaj pjese të programit. Përveç komenteve, do të ishte edhe më mirë nëse do të kishte një funksion back (), i cili do ta lëvizte Karel një hap prapa. Atëherë programi do të ishte më i shkurtër dhe më i kuptueshëm:

Funksioni back () nuk është pjesë e bibliotekës së Karelit, por ne mund ta shkruajmë shumë lehtë këtë funksion vetë. Kur të kemi mbaruar, ne do të jemi në gjendje të përdorim funksionin back () në mënyrë të barabartë me funksionet e tjera të bibliotekës Karel, siç janë move () ose turn_right ().

Si të shkruajmë funksione

Për momentin, do te mesojmë menyra të thjeshta për te shkruar një funksion në Python dhe do të shohim me vonë forma të tjera më komplekse.

Kur shkruani ndonjë funksion në Python, fjala def në fillim, kllapat () dhe karakteri : në fund të rreshtit të parë janë të detyrueshme. Për function_name ne mund të përdorim çdo emër të shkruar saktë që zgjedhim. deklarimet e mëposhtme janë shkruar me theks, dhe ato formojnë trupin e funksionit (nëse më shumë se një komandë është shkruar me radhë, atëherë këto komanda ndahen me një pikëpresjes ; ). deklarimet në trupin e funksionit do të ekzekutohen sa herë që emri i funksionit haset gjatë ekzekutimit të programit, domethënë kur quhet ky funksion.

Në përputhje me këto rregulla, funksioni back () mund të shkruhet si më poshtë:

Programi ka këtë pamje:

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_functions__take_neighboring_ball_final)

Kur nxjerrim disa deklarim (që kanë një kuptim si grup) në një funksion, mund të shkruajmë programe që janë më të shkurtër dhe më të qartë, sepse e kemi zbërthyer problemin në pjesë më pak komplekse.

     Një avantazh tjetër i funksioneve të shkrimit është se ne mund t’i përdorim lehtë ato në programe të tjera (këtu, herë pas here do të kopjojmë funksionet e shkruara më parë, por, në programimin real, ekziston një mënyrë më e mirë dhe më e thjeshtë për të ripërdorur funksionet e shkruara dikur).

Nxerrja e funksionit nga loop

Kur duam të ndërpresim një ekzekutim të loop, shkruajmë një deklarim të veçantë break. Efekti i deklarims break është që të dali nga loop dhe të vazhdojë ekzekutimin e programit nga deklarim e parë pas loop.

     Duke përdorur një deklarim break, ne do të hidhemi nga lidhja më e afërt (më e ngushtë) for ose while me loop që përmban deklarimn break. Nëse një deklarim break ndodhet brenda dy ose më shumë lidhjeve loops, ekzekutimi vazhdon me deklarimn që ndjek loop/in më të brendshëm (më të ngushtë).

Duke përdorur deklarimn break, ne mund të modifikojmë pjesën kryesore të programit:

into:

Në këtë mënyrë, loop përfundon sa më shpejt që topi të gjendet dhe të merret. Pasi që nuk ka deklarime të tjera pas këtij loop, në këtë rast, duke ekzekutuar deklarimn break, funksionimi i programit përfundon.


Në mënyrë të ngjashme me daljen nga loop, ne gjithashtu mund të dalim nga funksioni para se të ekzekutohen të gjitha deklarimet e tij.

Kur duam të ndërpresim ekzekutimin e një funksioni, shkruajmë një deklarim të veçantë `` Return``. Efekti i deklarims return është të dalë jashtë funksionit dhe të vazhdojë ekzekutimin e programit nga deklarim e parë pas vendit nga u thirr funksioni.

     Me një deklarim return hedhim jashtë funksionit pa marrë parasysh sa sythe ka rreth deklarims return brenda funksionit.

Ne mund ta kthejmë programin për marrjen e topit në një kuti fqinje në një funksion. Në atë rast, ne mund të shkruanim:

Ushtrim

Lësho tipin për sa kohë që ka topa dhe kuti

Fillimisht, Kareli ka disa topa dhe duhet t’i rregullojë ato përgjatë rrugës një në çdo kuti (duke filluar nga kutis ku ai qëndron) sa më shumë që të jetë e mundur. Kareli ndalon vendosjen e topave kur godet një pengesë ose kur i mbaron topat (çfarëdo që të ndodhë më parë). Nuk ka rëndësi nëse Kareli do të ndalet në kutinë e fundit të mbushur, apo në kutinë e parë bosh.

Këshillë: Vendosni njërën nga këto dy kushte në një loop while, në mënyrë që loop të përfundojë kur gjendja të mos plotësohet më. Për më tepër, përdorni deklarimn break për të dalë nga loop nëse kushti tjetër nuk plotësohet.

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_functions__put_balls_until_wall_or_no_more_balls)

Lëviz të gjithë topat një kuti mbrapa

Ka një rrugë me gjatësi të panjohur para Karelit. Nuk ka topa në kutinë fillestare. Kareli duhet të zhvendosë çdo top një katror në drejtim perëndim.

Ju mund ta zgjidhni këtë detyrë duke përsëritur hapat e mëposhtëm për sa kohë që ka kuti para Karel:

  • shkoni në kutinë tjetër

  • Merrni të gjitha topat nga ajo kuti

  • shkoni një hap prapa (domethënë, kthehu dhe shkoni një hap përpara)

  • hedhin të gjitha topat

  • kthehu në kutinë nga i cili morët topat

Duke vepruar kështu, ju mund të përdorni funksionin e shkruar më parë back () për t’u kthyer në kutinë në të cilin Karel lëviz topat. Thjesht duhet ta kopjoni (ose ri-shkruani atë) në zonën për zgjidhjen tuaj.

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_functions__all_balls_one_square_back)

Ndiq topin

Çdo katror përmban një top ose asnjë. Katrorat me topat mbi to formojnë një shteg, i cili fillon në kutinë ngjitur me Karel. Kareli duhet të ndjekë këtë rrugë dhe të marr të gjitha topat.

Këshillë: Për të zgjidhur këtë detyrë, ju mund të shkruani funksionin go_to_neighboriz_nonempty_square (), i cili duhet vetëm të lëvizë Karel në kutinë fqinj, i cili ka një top mbi të (deklarim return mund të jetë e dobishme atje). Funksioni go_to_neighboring_nonempty_square () duhet të ndryshojë nga funksioni i shkruar më parë take_at_ne cîran_square () vetëm në kuptimin që nuk e merr topin.

Kur Karel mbledh të gjitha topat, thirrja tjetër e këtij funksioni do ta vendosë atë në një kuti të zbrazët (kjo do të jetë kutia ku Karel mori topin e fundit). Kur nuk ka top në kutinë në të cilin ndodhet Karel, kjo do të thotë që Karel tashmë i ka marrë të gjitha topat.

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_functions__follow_the_balls)

Merr të gjithe topat nga e gjithë tavolina

Karel fillimisht përballet në veri (lart) dhe ai është vendosur në këndin e poshtëm të majtë të një tryeze drejtkëndëshe me madhësi të panjohur, pa mure të brendshme. Mund të ketë ndonjë numër topash në çdo katror. Kareli duhet të marrë të gjitha topat nga të gjitha kutitë në tabelë.

Këshillë: Shkruaj një funksion vac_one_row (), i cili e bën Karel:

  • kthehu majtas (në lindje), duke kërkuar përgjatë rreshtit në të cilin është

  • kaloni nëpër të gjithë rreshtin dhe merrni të gjitha topat nga secila katror në atë rresht, përfshirë edhe kutinë që ai filloi

  • kthehu në fillim të rreshtit (d.m.th. në perëndim)

  • kthehu në fillim të rreshtit dhe kthehu në veri (lart), pasi ai qëndronte para thirrjes së funksionit

Programi që zgjidh detyrën duke përdorur këtë funksion nuk është i gjatë. Duhet të bëjë sa më poshtë:

  • zbraz rreshtin e parë

  • ndërsa ka rreshta para Karelit, shkoni tek tjetra dhe zbrazini

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_functions_take_all_balls_2D)