Un algoritme és un conjunt de sentències que resolen una tasca.
- Introducció
- Condició
- Execució sequencial
- Execució condicional
- Execució iterativa
- Condicions complexes
- Activitats
Introducció
Per podre resoldre una tasca, s’ha d’executar un conjunt instructions de manera:
- Sequencial. Una a continuació de l’altre
- Condicional. Si és compleix o no una condició.
- Iterativa. Diverses vegades el mateix conjunt d’instruccions mentre es compleixi una condició.
Pots veure que un algoritme està format per condicions que determinen quines instruccions s’executen i quantes vegades s’executen.
A Computació vas coneixer els tipus int
, float
i string
.
Ara toca presentar el tipus bool
.
Obre un terminal tal com s’explica a de Powershell - Introducció.
Inicia l’intèrpret de Python en mode interactiu:
uv run python
Condició
Una condició consisteix en una comparació dos valors (o dues variables).
El resultat d’aplicar una condició a un cas concret és un valor de tipus bool
que indica si la condició es compleix o no es compleix.
Per representar el resultat d’una condició utilizes una variable de tipus bool
perquè en el món de Python una condició es compleix o no es compleix.
El tipus bool
només té dos valors: True
i False
.
>>> type(True)
<class 'bool'>
>>> type(False)
<class 'bool'>
Una variable pot tenir un valor de tipus bool
.
>>> a = True
>>> a
True
==
Pots comparar sí dos valors són iguals amb l’operador ==
.
>>> 100 == 100
True
>>> 50 == 100
False
>>> "hola" == "hola"
True
Primer pensa 😺, i després verifica quin és el resultat de les condicions que es mostren a continuació:
200 == 200
200 == 100
"rosa" == "rossa"
"flor" == "flor"
2 == 2.0
2 == 2.1
"3" == 3
"hola" == "hello"
"Hola" == "hola"
200 == 200 # True
200 == 100 # False
"rosa" == "rossa" # False
"flor" == "flor" # True
2 == 2.0 # True
2 == 2.1 # False
"3" == 3 # False
"hola" == "hello" # False
"Hola" == "hola" # False
Pots veure que per Python una majúscula i una minúscula són lletres diferents.
Per tant "A"
no és igual a "a"
.
!=
Pots comparar sí dos valors no són iguals amb l’operador !=
.
>>> 2.0 != 2.1
True
>>> 2.0 != 2.0
False
Pots veure que el resultat sempre és el contrari de l’operador ==
.
On l’operador ==
diu True
, l’operador !=
diu False
.
És molt important que llegeixis el codi amb el teu llenguatge natural:
3 == 3 # 3 és igual a 3? Si!
3 != 3 # 3 no és igual a 3? No!
"hola" != "hola" #
2 != 2.0 #
"hola" != "hello" #
>
L’operador >
serveix per comparar si el número de l’esquerra és major que el de la dreta
>>> 50 > 40
True
Quin és el resultat de les condicions que es mostren a continuació?
300 > 100
300 > 300
100 > 300
200 > 200.0
25.2 > 25.1
"hello" > "bye"
"bye" > "hello"
300 > 100 # True
300 > 300 # False
100 > 300 # False
200 > 200.0 # False
25.2 > 25.1 # True
"hello" > "bye" # True
"bye" > "hello" # False
PENDENT
x > y # x és major que y
x < y # x és menor que y
x >= y # x és major o igual que y
x <= y # x és menor o igual que y
Un altre error és enlloc d’escriure >=
o <=
, escriure =>
o =<
:
>>> 3 => 3
File "<stdin>", line 1
3 => 3
^
SyntaxError: cannot assign to literal
Execució sequencial
Crea un projecte amb uv init
:
uv init algo
Instal·la PyCharm.
Obre el projecte amb pycharm
:
pycharm algo
Si recordes de Computació, per defecte l’intèrpret de Python executava totes les sentències d’un script.
A continuació modifica el codi de main.py
(borra el que hi ha).
Per exemple, tens la variable name
:
name = "Elena"
A continuació escriu una condició que el name
és igual a "Laura"
.
name = "Elena"
name == "Laura"
I saluda a Laura amb una 🦋 si name
és igual a "Laura"
:
name = "Elena"
name == "Laura"
print(f"Hola {name}! 🦋")
print("👻")
Executa el codi:
El resultat és:
Hola Elena! 🦋
👻
Sort que el missatge no era f"Hola {name}! ❤️❤️❤️"
😅
En aquest codi, hi ha una condició, però cap element que avalui la condició i executi diferents sentències en funció de la condició.
Per tant, només té un únic flux d’execució.
Execució condicional
Una execució condicional només s’executa si es compleix una condició …
Per tant, en una execució condicional l’intèrpret de Python no executa totes les sentències.
if
Una expressió condicional comença amb la paraula if
seguit de la condició i finalitza amb :
:
if <condition> :
A continuació de la sentència condicional hi ha un bloc de codi que només s’executarà si la condició és True
.
name = "Elena"
if name == "Laura":
print(f"Hola {name}! 🦋")
print("👻")
L’intèrpret de Python reconeix les sentències que formen part d’aquest bloc perquè estan sagnades amb el mateix nombre d’espais en blanc.
Quines sentències formen part del bloc que s’executarà si name
és igual a "Laura"
?
print(f"Hola {name}! 🦋")
Tal com està el codi, s’executaran aquestes sentències?
Executes el codi … i no!
👻
Ara l’script té dos fluxos d’execució possibles en funció del valor de la variable name
:
Una sentència if
sempre crea dos fluxos possibles d’execució.
Per qué possibles? Per exemple, en aquest codi sempre s’executarà el mateix flux d’execució perquè el valor de la variable name
és fix.
Per tal que aquest script tingui utilitat el valor de la variable name
ha de ser indeterminat.
name = input("Con et dius? ")
if name == "Laura":
print("Hola Laura! 🦋")
print("👻")
Ara ja pots executar el codi:
A continuació tens un diagrama de flux d’un algoritme que permet comprar un iPhone per un preu de 600 € (o més 👻):
Escriu el codi Python corresponent:
money = int(input("Euros: "))
iphone = 600
if money >= iphone:
print("You have a new iPhone!")
print("Bye!")
else
Amb la sentència condicional if
creas un flux d’execució de sentències que s’executaran si la condició és True
.
Però si la condició és False
, i vols executar un conjunt de sentències si la condició és False
, has d’utilitzar l’expressió else
com pots veure a continuació.
Modifica el codi de main.py
:
donation = int(input("Donatiu? "))
if donation > 5:
print("Generós 😀")
else:
print("Garrepa 🤨")
print("🦋")
Ara els dos fluxos d’execució executen codi específic a cada condició:
Abans has escrit un script que permet comprar un iPhone per un preu de 600 € (o més 👻).
Modifica l’script de tal manera que informi a l’usuari del preu que ha de pagar si no ofereix prou diners.
money = int(input("Euros: "))
iphone = 600
if money >= iphone:
print("You have a new iPhone!")
else:
print(f"iPhone cost {iphone} euros!")
print("Bye!")
Ara si volem comprar l’iPhone per menys diners del que costa ens avisa que no pot ser perquè l’iPhone val 600 €.
$ uv run main.py
Euros: 34
iPhone cost 600 euros!
Bye!
Imbricació
Mitjançant una estructura if-else
pots crear un o dos blocs de codi imbricats en el bloc de codi principal.
I aquests blocs al seu torn també poden tenir blocs de codi imbricats mitjançant estructures if-else
dins d’ells.
En la tasca anterior vas crear un script que permet compra un iPhone.
Però aquest script no torna el canvi, i això al comprador no li deu fer gens de gràcia 🤨.
Pots modificar el codi de main.py
per tal que torni el canvi:
money = int(input("Euros: "))
iphone = 600
if money >= iphone:
print("You have a new iPhone!")
if money > iphone:
print(f"Your change is {money - iphone} euros")
print("Great buy!")
else:
print(f"The iPhone costs {iphone} euros!")
print("Bye!")
Si ara compres un iPhone per mes de 600 euros, l’script torna el canvi:
$ uv run shop.py
Euros: 800
You have a new iPhone!
Your change is 200 euros
Great buy!
Bye!
Blocs de codi
Python pot distingir els diferents blocs en què està estructurat l’script perquè totes les sentències d’un mateix bloc estan sagnades amb el mateix nombre d’espais en blanc:
Pots veure que hi ha quatre blocs d’execució, un de principal i els altres imbricats dins del principal o dins d’un altre.
Això s’anomena programació estructurada:
-
Un programa és una estructura de blocs uns dins dels altres, que s’executen de manera condicional.
-
Cada bloc és un conjunt de sentències que s’executa una després de l’altre.
Fluxes d’execució
Cada expressió if
introdueix un nou flux d’execució!
Com que l’script té dos expression if
, el programa té 3 fluxos d’execució possibles.
A continuació tens el diagrama de flux:
Execució iterativa
En moltes ocasions, ens interessa executar una mateixa sentència moltes vegades mentre es compleixi una condició.
L’expressió while
repeteix un bloc de codi sempre que una condició es compleix.
És com dir-li a Python: “Repeteix això mentre alguna cosa sigui veritat”.
while <condició>:
# codi a repetir
Vegem-ho amb un exemple senzill: per exemple, mostrar els números de l’1 al 5.
i = 1
while i <= 5:
print(f"El número és {i}")
i += 1
print("Adeu!")
El número és: 1
El número és: 2
El número és: 3
El número és: 4
El número és: 5
Adeu!
Igual que passa amb l’expressió if
, l’expressió while
introdueix un flux alternatiu.
La diferència és que aquest nou flux genera un bucle que finalitza quan la condició ja no és compleix.
A continuació tens el diagrama de flux corresponent.
A continuació tens un programa que demana a l’usuari números fins que introdueixi un 0.
result = 0
number = None
print("Anem a sumar números!")
while number != 0:
number = int(input())
result += number
print(f"{result} + ", end="")
A continuació tens un exemple d’execució de l’script:
Anem a sumar números!
45
45 + 56
101 + 88
189 + 0
189 +
Crea un script guess.py
que ha d’endevinar un número entre 1 i 100.
import random
number = random.randint(1, 100)
guess = None
print("Guess a number: ", end="")
while ...
import random
number = random.randint(1, 100)
guess = None
print("Guess a number: ", end="")
while number != guess:
guess = int(input())
if guess < number:
print("Too low! ", end="")
elif guess > number:
print("Too high! ", end="")
else:
print("Just right! ", end="")
Condicions complexes
Una condició complexa està formada per la unió de condicions simples mitjançant operadors lògics.
Obre una sessió interactiva amb l’intèrpret de Python:
uv run python
and
L’operador and
compara dos bool
i torna True
només si els dos valors són True
.
>>> True and True
True
>>> True and False
False
Completa la taula de la veritat:
a | b | a and b |
---|---|---|
True | True | True |
True | False | False |
False | True | |
False | False |
Per exemple, tens un script que només permet treballar a aquelles persones majors de 15 anys i menors de 68.
Si només utilitzes condicions simples has d’escriure el programa amb if
imbricats:
age = int(input("Age? "))
if age > 15:
if age < 68:
print("Pots treballar!")
else:
print("No pots treballar")
else:
print("No pots treballar")
La condició “majors de 15 anys i menors de 68” es pot escriure literalment en Python:
>>> age = 30
>>> age > 15 and age < 68
True
Es tracta d’una condició complexa formada per dos condicions simples:
>>> age = 30
>>> age > 15
True
>>> age < 68
True
>>> True and True
True
Per tant, pots reescriure l’script amb una condició complexa:
age = int(input("Age? "))
if age > 15 and age < 68:
print("Pots treballar!")
else:
print("No pots treballar")
Segur que la IDE et fa el suggeriment que pots simplificar l’expressió condicional:
age = int(input("Age? "))
if 15 < age < 68:
print("Pots treballar!")
else:
print("No pots treballar")
or
L’operador or
compara dos bool
i torna True
si algún valor és True
.
>>> True and True
True
Completa la taula de la veritat:
a | b | a or b |
---|---|---|
True | True | True |
True | False | |
False | True | |
False | False |
A continuació tens un exemple amb or
:
answer = input('Do you...? (yes/no): ')
if answer == 'yes' or answer == 'y':
print('Yes!')
Es tracta d’una condició complexa formada per dos condicions simples:
>>> answer = "yes"
>>> answer == "yes"
True
>>> answer == "y"
False
>>> True or False
True
not
L’operador not
nega la condició:
>>> not True
False
Completa la taula de la veritat:
a | not a |
---|---|
True | False |
False |
Activitats
PENDENT