Tema 2: Condicionals i iteracions
Objectius i argument
Aquest tema estèn l'anterior seguint la mateixa línia: una passejada ràpida, pràctica i intuïtiva per els elements bàsics. La intenció no és adquirir un coneixement profund sinó una perspectiva superficial. En aquest cas, els elements bàsics que s'estudien són les construccions alternativa i iterativa principalment.
Resultats d'aprenentatge
Un estudiant que assoleixi aquest tema:
- Ha de poder resoldre petits problemes de programació les solucions dels quals continguin iteracions i condicionals senzills.
- Ha de tenir una bona comprensió de la semàntica de la assignació, de la sentència alternativa i de la sentència mentre.
- Ha de tenir una comprensió raonable de l'estructura de blocs d'un programa.
- Ha d'entendre la semàntica d'una funció, incloent el valor de retorn i les variables locals, i sense estendre's en els detalls del pas de paràmetres.
- Ha de percebre que les funcions són objectes de primera categoria (sense aprofundir, a una nivell intuïtiu).
Conceptes clau
Mòdul, tipus i valors booleans, expressions booleanes, operadors booleans, sentència alternativa (o condicional), bloc, condicionals encadenats i aniuats, retorn d'una funció, lectura del teclat, conversió de tipus (cast), None, composició de funcions en expressions, funcions booleanes, funcions com a valors (amb suavitat!!), sentència iterativa, iteracions infinites, variables locals,
Referència principal
- How to Think Like a Computer Scientist: Learning with Python 2nd Edition (capítol 4 excepte 4.11, capítol 5 excepte 5.8, capítol 6). Teniu una traducció preliminar a la carpeta d'apunts.
Referències complementàries
- Python para todos (apartats Tipos Básicos i Control de flujo). Cobreix aproximadament els mateixos temes que la referència principal de manera una mica diferent. Us pot servir de reforç del que s'explica en la referència principal.
- Introduction to Programming using Python (capítol 7 i capítol 11 excepte 11.5, 11.6, 11.7). Una aproximació una mica diferent als mateixos temes vistos a la referència principal. Serveix per aprofundir i aclarir conceptes.
- Recursividad . Visió bastant concisa de què és la recursivitat (una alternativa, en moltes ocasions, a la iteració). Força tècnic, us pot ajudar a aprofundir en les vostres capacitats de programació.
Exercicis obligatoris de teoria
EOT 2.1
Dissenyeu una funció amb un paràmetre enter n que escrigui per pantalla "Si" si n es parell i "No" en cas que n sigui senar.
def parell(n):
...
EOT 2.2
Escriviu una variació de la funció anterior per que enlloc d'escriure per pantalla el resultat el retorni com a resultat.
EOT 2.3
Escriviu una funció amb un paràmetre enter n que retorni el número de digits del paràmetre n.
EOT 2.4
Escriviu una funció, amb identificador matriu, que escrigui per la pantalla una matriu de 10 per 10 tal i com es veu en el següent exemple:
>>> matriu()
1 2 3 4 5 6 7 8 9 10
2 3 4 5 6 7 8 9 10 11
3 4 5 6 7 8 9 10 11 12
4 5 6 7 8 9 10 11 12 13
5 6 7 8 9 10 11 12 13 14
6 7 8 9 10 11 12 13 14 15
7 8 9 10 11 12 13 14 15 16
8 9 10 11 12 13 14 15 16 17
9 10 11 12 13 14 15 16 17 18
10 11 12 13 14 15 16 17 18 19
Useu dues iteracions per a fer aquesta feina.
EOT 2.5
Dissenyeu una funció que retorni l'arrel quadrada d'un número real. Cal mostrar un missatge d'error en cas que el número sigui negatiu. Serieu capaços de disenyar aquesta funció sense emprar cap funció matemàtica directament (és a dir, usant únicament sumes, restes, productes i divisions)? Pista: estudieu-vos el mètode d'Heron o Babilònic.
EOT 2.6
Dissenyeu una funció que calculi el maxim de dos nombres. Pot aplicar-se indistintament a valors de tipus enter o real?
EOT 2.7
Dissenyeu una funció que llegeixi números enters del teclat fins que l'usuari escrigui un zero i finalment mostri la suma de tots els números llegits.
EOT 2.8
Quin deu ser el resultat d'executar el següent programa? ATENCIÓ: No el proveu directament en el intèrpret!! Primer raoneu quin és el resultat. Després, si voleu, comproveu-ho amb el intèrpret. En cas que el resultat de l'intèrpret no coincideixi amb el que havieu pensat, esbrineu en què us havieu equivocat en el raonament.
def f2(x,y):
t = x + y
return y ** t
x = 3
t = 4
y = f2(t,x)
print y
Exercicis obligatoris de laboratori
EOL 2.1
Escriviu un petit programa que mostri un menú simple d'una màquina expenedora, demani a l'usuari que introdueixi el número corresponent a l'opció que desitja, i escrigui l'acció corresponent o bé escrigui un missatge d'error indicant que l'opció no és vàlida.
Exemple 1 d'execució:
1. Amanida vegetal
2. Pasta amb salsa bolonyesa
3. Plat especial del dia
Introdueix la teva tria: 2
Pasta amb salsa bolonyesa a punt!
Exemple 2 d'execució:
1. Amanida vegetal
2. Pasta amb salsa bolonyesa
3. Plat especial del dia
Introdueix la teva tria: 5
Opcio incorrecta
EOL 2.2
Escriu un petit programa que demani un nombre a l'usuari i escrigui la taula de multiplicar d'aquest nombre en ordre invers.
Exemple d'execució:
Introdueix un nombre: 8
La taula de multiplicar del 8 es:
8 * 10 = 80
8 * 9 = 72
8 * 8 = 64
8 * 7 = 56
8 * 6 = 48
8 * 5 = 40
8 * 4 = 32
8 * 3 = 27
8 * 2 = 16
8 * 1 = 8
8 * 0 = 0
EOL 2.3.
Escriu un petit programa que calculi el factorial d'un nombre. Un exemple d'execució pot ser:
Introdueix nombre: 5
El factorial de 5 es 120
EOL 2.4.
Escriviu un programa que calculi les arrels d'una eqüació de segon grau i indiqui si tenia dues solucions reals, una solució real doble o cap solució real.
Exercicis optatius
EOP 2.1.
Què fa el següent programa?
a=input("Primer nombre: ")
b=input("Segon nombre: ")
c=input("Tercer nombre: ")
if a>=b and a>=c:
m=a
if b>=a and b>=c:
m=b
if c>=a and c>=b:
m=c
print m
EOP 2.2.
Què fa el següent programa? Analitza què passa quan la dada és un nombre positiu i quan és un nombre negatiu.
n=input("Introdueix un nombre: ")
s=0
i=1
while i<=n:
s=s+i
i=i+1
print s
EOP 2.3.
Quin és el resultat d'executar següent codi?
a=1
while a<3:
while a<3:
print "0",
a=a+1
EOP 2.4.
Quin és el resultat d'executar següent codi?
a=1
while a<3:
if a % 2 == 0:
b=1
while b < 3:
print "X",
b = b + 1
print "0",
a = a + 1
EOP 2.5.
Quin és el resultat d'executar següent codi?
a = 1
while a < 3:
b = 1
while b < 3:
if a == 2:
print "X",
print "0",
b = b + 1
print "0"
EOP 2.6.
Què escriu el següent programa?
def f(a):
a = a + 5
return a
b = 0
f(b)
print b, "," ,
b = f(b)
print b