Condicionals
En aquest capítol ensenyem a en Karel a prendre decisions.
En Karel ha de decidir
Imagina que el món pot tenir una perla en una casella, o bé no tenir-ne. I resulta que no podem saber-ho!
Si en Karel sempre fes grab() , tenim un problema: quan no hi ha perla, el programa s'atura amb un error.
Necessitem una manera de dir-li: «Mira Karel, si hi ha una perla, agafa-la; però si no hi ha cap perla, no facis res».
Això ho aconseguirem amb una instrucció que s'anomena if.
És cert o és fals?
if comprova una condició i segueix unes instruccions només si la condició és certa. Per exemple, llegeix aquest programa.
if pearl_here():
grab()
En Karel avança si pot
En l'exemple següent, en Karel intentarà fer 5 passes endavant.
Atenció! Hi ha una roca que li bloca el pas. Si no fem cap comprovació, en Karel xocarà.
Farem servir la instrucció if: en Karel comprova primer si té la via lliure, i llavors avança.
Prem ▶ Executa
I si no es compleix la condició, fes una altra cosa
De vegades volem que en Karel faci una cosa diferent quan no es compleix la condició. Fixa't en l'exemple.
if front_is_clear():
move()
else:
turn_left()
En Karel comprova si té la via lliure davant seu.
- Si això es compleix, avança.
- Si això no es compleix, llavors gira a l'esquerra (per exemple, hi ha una roca o bé hi ha paret).
En Karel navega al voltant d'un obstacle
En Karel es mou per una graella en la qual hi ha una roca que li bloca el pas.
Va comprovant si pot avançar o no pot
- si pot avançar, doncs endavant!
- si no pot avançar, llavors gira cap a l'esquerra i busca un camí alternatiu.
Prem ▶ Executa
Resum
Aquestes són totes les condicions que existeixen en el món d'en Karel:
pearl_here()— hi ha una perla a la casella actual?front_is_clear()— la casella del davant és lliure?front_is_blocked()— la casella del davant té un obstacle?bag_is_empty()— la motxilla no conté cap perla?bag_is_full()— la motxilla conté, com a mínim, una perla?
Exercici
Pista: usa un
for i in range(5):. Dins del for, avança primer i llavors comprova amb if pearl_here(): si has de recollir la perla.