Capítol 7

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

El món d'en Karel conté una fila de cinc caselles: algunes tenen una perla i d'altres no. En Karel ha de recollir totes les perles que trobi, siguin on siguin. Escriu el codi perquè funcioni independentment de quines caselles tinguin perla.

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.