Programes d'entrada i sortida
En aquesta lliçó creareu els primers programes utilitzant un editor de text.Tot i que l’intèrpret interactiu és una eina que no heu d’abandonar mai, utilitzarem un fitxer de text on escriurem totes les instruccions que volem que executi el processador de Python sense la nostra interacció. Aprendrem les primeres nocions d’entrada i sortida de dades.
Primers programes: entrada i sortida de dades
Ja sabeu que un programa és un seguit d’instruccions mitjançant els quals es tracta la informació d’entrada (dades) fins a aconseguir una informació de sortida (resultat). També sabeu donar ordres a l’intèrpret interactiu i que aquest les executi una a una. El que falta és unir totes aquestes instruccions de manera que el processador les executi automàticament una després de l’altra. Per aconseguir això, les escriureu en un fitxer de text i les passareu al processador que les executarà automàticament.
A continuació abordarem el repte de crear un primer programa. Us detallarem les passes a seguir per fer aquest primer programa Hola, món i el que necessitareu per fer-ne d’altres.
Pas 1: editar el fitxer
Un programa de tractament de textos o un editor de text és un programa informàtic que permet crear i modificar documents de text. Aquests documents es diu que estan en text pla i es caracteritza per la seva absència de format a diferència dels documents elaborats amb un processador de text (per exemple Microsoft Word, o Open Office Writter).
Per començar hem d’obrir un editor de text. Per a fer això, cal que us dirigiu a la barra d’activitats i que teclegeu el nom d’un editor. Per exemple, aquí utilitzarem el Geany, però qualsevol va bé (vegeu la figura).
Un entorn integrat de desenvolupament, també conegut com a IDE (acrònim en anglès de Integrated Development Environment), és una eina informàtica dissenyada per facilitar i accelerar el desenvolupament de programari de manera eficient.Una única aplicació que reuneix generalment funcionalitats com un editor de codi, un compilador, una eina de depuració i, sovint, un dissenyador d’interfícies gràfiques.
En aquest curs de programació no farem ús de cap IDE, però això no vol dir que no n’utilitzeu algun si hi esteu acostumats o us sentiu més còmodes: cada programador té el seu IDE preferit que l’ajuda a treballar.
Heu de clicar sobre la icona de l’editor, el que farà que entreu en un quadre de diàleg. Li heu d’indicar que voleu obrir un fitxer nou prement la icona Create new file (vegeu figura).
En aquest moment ja podeu escriure la primera instrucció del vostre primer programa.
print('Hello World!')
L’editor hauria d’estar tal com veieu a la figura.
El següent pas és desar el fitxer. Podeu fer-ho en qualsevol directori que hàgiu escollit (i que s’hagi creat prèviament). El nom del fitxer pot ser el que vulgueu amb extensió .py. Per exemple: hello_world.py
No poseu noms de fitxers amb espais en blanc, accents o símbols estranys; només us portarà problemes.
Com crear un directori?
ATENCIÓ: al llarg de tot el repte, assumirem que som un usuari que es diu videoIoc. És per això que el seu directori home es diu videoIoc, i d’aquest hi pengen diverses carpetes com Documents, Downloads, etc..
Si us trobeu en la carpeta del vostre usuari i voleu crear un directori de nom programacio dins el directori Documents, cal obrir una terminal i escriure:
videoioc@debian-xtec:~$ mkdir Documents/programacio/
En l’exemple, es desa el fitxer anomenat hello_world.py, en un directori que ja estava creat que s’anomena programacio. Aquest directori ja s’havia creat a la carpeta Documents, de l’usuari videoIoc. Observeu la figura.
En el moment que desem el programa amb l’extensió per als programes de Python, l’editor fa que aparegui el text colorejat. D’aquesta manera ens ajuda ressaltant algunes paraules i indicant de quin tipus són, entre altres coses.
De seguida veurem què signifiquen els diferents colors que podeu observar a la figura.
Pas 2: execució del primer programa
Per executar un programa de Python, cal que des de la terminal us situeu en el directori on es troba el programa i que escriviu la comanda python3 seguida del nom del fitxer.
Per a executar un programa cal que feu els següents passos:
- Obriu una terminal.
- Situeu-vos en el directori que heu escollit, utilitzant l’ordre
cdi els tabuladors per a triar la ruta escollida. - Escriviu:
python3 nom_fitxer.py
L’ordre python3 crida (es a dir, executa) al mateix programa que l’intèrpret interactiu. Si l’acompanyem del nom d’un fitxer de text, com hello_world.py de la següent manera:
python3 hello_world.py
En comptes d’entrar a l’entorn interpretat, el processador executa les instruccions del fitxer, una darrere l’altra.
Exemple d'execució d'un programa
Suposem que esteu al Home del vostre usuari, que al fitxer del programa l’heu anomenat hello_world.py, i que l’heu desat en un directori que es diu programacio, situat dins del directori Documents del vostre compte, les ordres que us caldrà teclejar a la terminal són:
cd Documents/programacio/ python3 hello_world.py
Quan navegueu pel directori de fitxers, no és necessari que escriviu el nom sencer del directori o fitxer. Només cal que comenceu a escriure les primeres lletres del nom i prémer el tabulador.
En el cas de l’usuari videoIoc i el programa que hem fet anteriorment (hello_world.py) quan seguiu els passos indicats obtindreu els resultats que podeu obseravar a la figura.
Ja heu creat i executat el vostre primer programa en Python!
Pas 3: la funció print()
A l’intèrpret interactiu, quan li “demanàveu” el valor d’una variable indicant el nom, us responia. Però perquè el processador us mostri una dada per la pantalla cal que li indiqueu amb la funció print().
La funció print() serveix perquè l’ordinador us comuniqui els seus resultats. Mostra per pantalla allò que li passem per argument.
Una funció consta d’una paraula seguida dels parèntesis i l’argument és el que posem dins d’aquests parèntesis.
Per utilitzar la funció print s’ha d’escriure en el programa la instrucció:
print(dada)
El primer programa només tenia una línia. El resultat és exactament el mateix que si haguéssiu escrit aquesta mateixa instrucció directament a l’intèrpret interactiu. Comproveu-ho.
El concepte funció és molt semblant al que teniu a les matemàtiques. La funció print() sempre és la que s’encarrega de la sortida de les dades (mostrar per la pantalla). I l’argument és el que es vol mostrar (de moment, el text Hello, world!).
Les cometes simples que van després del parèntesi indiquen que allò que ve a continuació és un literal, és a dir una cadena i no el nom d’una variable de la qual volem saber-ne el valor. Tot el que es troba entre la primera cometa i la segona és una cadena, és a dir, un tipus dada anomenada string.
En Python, es poden “tancar” les cadenes utilitzant cometes simples (‘) als extrems o comentes dobles (“). Aquest editor mostra les cadenes en color groc.
Exemple de la funció print() amb diferents tipus de dades
Experimenteu amb la funció print afegint instruccions al fitxer del programa com:
print(3) print(3 + 2) print("Bon dia") a = 95 print(a) print(‘La meva edat: ‘, a)
Si heu afegit totes aquestes instruccions, el resultat que heu obtingut serà el següent:
Hello World! 3 5 Bon dia 95 La meva edat: 95
Podeu veure que la funció print() permet passar-li cadenes però també altres tipus de dades, com per exemple nombres.
Si li passeu com a argument a la funció print() una operació, busca el resultat abans de mostrar-lo per la pantalla.
print() també accepta dos o més arguments, sempre que els separeu per una coma.
Pas 4: la funció input()
La funció input() serveix perquè l’usuari pugui introduir les dades d’entrada a l’ordinador. És una funció que no necessita cap argument i li proporciona a l’ordinador la dada que tria l’usuari.
És la funció simètrica de la funció print(). Si print() ens mostra dades que ha calculat l’ordinador, input() fa el procés contrari, és a dir, s’utilitza per proporcionar dades que s’han de processar.
Amb la instrucció input() s’introdueixen les dades a l’ordinador (dades d’entrada o “ingredients”). L’ordinador les processa i amb la funció print() ens retorna el resultat una vegada “cuinat”.
La funció input() s’utilitza de la següent manera:
variable = input()
La funció input() s’activa quan premeu la tecla intro. En aquell moment, el que heu escrit al teclat s’assigna a la variable (recordeu que l’operador = és el de l’assignació).
Això fa que sembli que els programes siguin interactius i que l’ordinador “esperi” que algú estigui davant del teclat i la pantalla per introduir dades i veure resultats. Però aquesta no és la tasca dels administradors de sistemes sinó que treballen utilitzant la línia d’ordres. De moment, però, treballareu amb la pantalla i el teclat.
Entrada i sortida estàndard
Per defecte (llevat que li indiquem una altra cosa), quan l’ordinador ens retorna un resultat, ho fa mitjançant la pantalla. Ens mostra els seus resultats a través del que anomenem sortida estàndard. De la mateixa manera, el canal per defecte per introduir dades a un programa és el teclat, i s’anomena entrada estàndand. El sistema operatiu permet redirigir l’entrada o la sortida estandard per exemple, cap a un fitxer.
La funció input() llegirà les dades que introduïu fins al moment que teclegeu l’intro.
És molt important que assigneu el que retorni la funció a una variable. En cas contrari, tot i que la funció input() llegeixi alguna cosa que li passeu a través del teclat, si no ho guardeu en una “caixa” es perd i no podreu recuperar-ho. A partir d’aquí, si volem utilitzar-ho, només cal que emprem la variable.
Per acabar d’entendre aquesta funció, feu un nou programa. Creeu des de l’editor un nou fitxer que es digui, per exemple, lectura.py i que contingui el codi següent:
La funció input() pot acceptar arguments. Mireu què passa amb l’ordre input(‘escriu alguna cosa’).
Com a administradors de sistemes, però, evitareu fer programes interactius i donar instruccions a l’usuari.
a = input() print(a)
Què fa aquest programa?
- La funció
input()llegeix el que s’escriu en el teclat, i ho “carrega” a la variable a (quan es prem l’intro). - La funció
print()mostra el valor de la variable a la sortida estàndard (la pantalla).
Executeu-lo i comproveu que funciona.
Aquest és el resultat de tres execucions diferents. En la primera la dada d’entrada ha estat una cadena. En la segona un int (un nombre enter) i en la tercera un float (un nombre real).
~/Documents/programacio$ python3 lectura.py hola hola ~/Documents/programacio$ python3 lectura.py 34 34 ~/Documents/programacio$ python3 lectura.py 3.4 3.4
En cada execució, la primera línia és el que escrivim pel teclat i la segona la sortida del programa.
La funció input() sempre retorna una cadena. Tot i que escriviu el nombre 3 pel teclat, input() retorna la cadena 3 i mai l’enter 3.
Pas 5: els primers programes
En aquest apartat creareu els primers programes. Cada un ha d’estar en un fitxer a part i és molt aconsellable que poseu noms descriptius també als fitxers dels programes. Intenteu crear i executar els programes abans de veure la solució. Segurament us trobareu amb algun problema: l’objectiu és aprendre la solució després de trobar l’obstacle.
Programa 1: instruccions repetides
Editeu i executeu un programa que faci el següent:
- Llegir una frase pel teclat i mostrar-la tres vegades a la pantalla.
La solució seria:
a = input() print(a) print(a) print(a)
Cal repetir tres vegades la instrucció print(). En programació existeix una estructura de control iterativa (és a dir, que repeteix fent iteracions o repeticions) que ens facilitarà la feina en aquestes repeticions, però de moment aquest programa compleix l’objectiu.
Programa 2: treballar amb dades numèriques senceres
Editeu i executeu un programa que faci el següent:
- Llegir dos nombres per teclat i sumar-los.
Com ho solucionaríeu?
És probable que quan heu executat aquest programa el resultat no hagi estat l’esperat.
Amb el que heu après fins ara, segurament el codi escrit serà aquest:
a = input() b = input() print(a + b)
I en executar-lo us heu endut la següent sorpresa:
La funció input() sempre retorna una dada de tipus string (cadena). Això significa que encara que teclegeu el nombre 12, a la variable a li està entrant el ‘12’ (entès com a cadena, és a dir, la cadena formada pels caràcters ‘1’ i ‘2’).
Per a entendre el que ha passat feu el següent:
- Engegueu l’intèrpret interactiu i teclegeu la instrucció
‘12’ + ‘3’. Veureu que el resultat serà:
>>> '12'+'3' '123'
Això és perquè l’operador + , quan actua entre dades numèriques és la suma. Però quan actua sobre cadenes, és l’operador de concatenació i afegeix un text a l’altre.
Per comprovar-ho, feu el següent:
- Indiqueu a l’intèrpret interactiu que executi la instrucció
12 + 3. Veureu que obtindreu el resultat desitjat:
python >>> 12+3 15
Per evitar que l’intèrpret de Python interpreti que ‘12’ és una cadena de text, cal indicar-li que voleu que la converteixi a un nombre. Per això feu servir int(). Per comprovar-ho feu el següent:
- En l’intèrpret interactiu teclegeu:
int(‘12’) + int(‘3’). Veureu que obtindreu el resultat desitjat:
>>> int('12') + int('3')
15
Per a convertir una cadena en un nombre enter, existeix la funció int() .
Aquesta funció intenta convertir el que li passem per argument a enter, sempre que sigui possible.
Amb el que heu après, modifiqueu el programa anterior i comproveu que suma els nombres enters que entreu.
a = int(input()) b = int(input()) print(a + b)
Contesteu a les següents preguntes ajudant-vos de l’intèrpret interactiu:
- Què passa si utilitzeu l’operador
+entre una dada de tipus enter i una altra de tipus string?
Si sumeu un valor de tipus int i un valor de tipus string, obtenim el següent:
>>> 12+"hola" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str'
Veureu que genera un error perquè no es permet sumar un nombre enter i una cadena.
- Què passa si intenteu convertir a enter una dada que no es pot convertir a enter? Posem per cas, escriure la paraula “Python” pel teclat?
Si es vol convertir a tipus int la paraula “Python” que és una variable de tipus string, obtenim el següent:
>>> int(python) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'python' is not defined
Veureu que genera un error perquè no es permet convertir una cadena a valor enter.
Programa 3: càlcul del preu final
Editeu i executeu un programa que faci el següent:
- Calcular el preu final d’un producte després d’afegir el 21% d’IVA.
Penseu primer com ho solucionaríeu a mà. Un cop ho hàgiu resolt d’aquesta manera, traduïu aquests càlculs a les instruccions en Python que donaríeu a l’intèrpret interactiu.
Amb el que heu après fins ara, segurament el codi escrit serà aquest:
IVA = 21 preu_inicial = int(input()) increment_iva = preu_inicial * IVA / 100 preu_final = preu_inicial + increment_iva print(preu_final)
Si no heu definit la constant, el programa, tot i funcionar, no serà perfecte, ja que si canviem l’IVA serà més complicat adaptar el codi del programa.
Executeu aquest programa per a un producte que val 10 € (així és senzill comprovar que funciona), i per un altre que val 12,99 €. Recordeu que per Python cal expressar-ho com 12.99. Quin resultat obteniu? Possiblement tindreu una sortida similar a la següent:
Si el preu inicial del producte és de 10 €, el resultat del programa, al que s’ha anomenat calculaPreuF.py serà:
$python3 calculaPreuF.py 10 12.1
Però, quan introduïu 12.99 passa el següent:
$python3 calculaPreuF.py 12.99 Traceback (most recent call last): File "calculaPreuF.py", line 3, in <module> preu_inicial = int(input()) ValueError: invalid literal for int() with base 10: '12.99'
Què passa? La funció int() no és capaç de convertir la cadena 12.99 a enter i el processador es queixa.
La funció float() , anàloga a la funció int() idem. No té problemes per convertir un nombre amb decimals expressat com a cadena, ni un nombre enter (també com a cadena) a una dada de tipus float.
És per això que el programa per a calcular l’increment de preus (ja que els preus poden tenir decimals), està més ben programat si fem la conversió a float.
IVA = 21 preu_inicial = float(input()) increment_iva = preu_inicial * IVA / 100 preu_final = preu_inicial + increment_iva print(preu_final)
Pas 6: reconèixer errors
És molt útil que coneixeu els errors més comuns amb els que us trobareu en començar a executar programes. Els missatges de l’intèrpret són molt entenedors, i segur que quan us trobeu amb algun dels errors per segona vegada el reconeixereu.
Us recomanem que modifiqueu els programes que heu fet per poder reproduir cadascun dels errors i entendre què els ha propiciat.
Cometes no tancades
Mireu d’executar el següent programa:
print('Hello World!)
Trobareu que Python us donarà la següent resposta:
videoioc@debian-xtec:~/Documents/programacio$ python3 hello_world.py File "/home/videoioc/Documents/programacio/hello_world.py", line 1 print('Hello World!) ^ SyntaxError: unterminated string literal (detected at line 1)
Aquest error ocorre quan s’arriba a final de línia sense haver tancat una cadena. Si us hi fixeu, falta la cometa després de l’exclamació. Si editeu el programa i elimineu l’última cometa, veureu que l’editor de text modifica el color de la cadena: ja us està avisant que alguna cosa no funciona.
Mala indentació
Si executeu el següent programa:
print('Hello World!)
Trobareu que Python us donarà la següent resposta:
videoioc@debian-xtec:~/Documents/programacio$ python3 hello_world.py File "/home/videoioc/Documents/programacio/hello_world.py", line 1 print('Hello World!') IndentationError: unexpected indent
Molta atenció amb aquest error. El Python és un llenguatge en el qual els blocs s’estructuren mitjançant la indentació (o sagnia, és a dir, la posició respecte a l’inici de la línia). Quan ens indica IdentationError, vol dir que s’ha trobat una instrucció indentada (és a dir, precedida d’un espai en blanc o un tabulador) on no tocava.
Per a aconseguir aquest error podeu posar un espai en blanc a l’inici de la instrucció. I per corregir-lo cal que esborreu tots els espais del principi de la línia.
En Python els blocs s’estructuren respecte a la posició de la primera paraula de la línia. Si el processador troba un espai en blanc respecte a l’inici de la línia anterior, considera que comença un bloc. Els espais i tabuladors fan la funció que en C i altres llenguatges fan els caràcters { i }.
Parèntesi sense tancar
Feu la prova d’executar el següent programa:
print('Hello World!'
Veureu que Python us donarà la següent resposta:
videoioc@debian-xtec:~/Documents/programacio$ python3 hello_world.py File "/home/videoioc/Documents/programacio/hello_world.py", line 1 print('Hello World!' ^ SyntaxError: '(' was never closed
L’explicació de l’intèrpret és immillorable: hi ha un parèntesi que no s’ha tancat.
Oblidar els parèntesis de les funcions
Mireu quin resultat apareix en executar el següent programa suma.py:
a = int(input) b = int(input()) print(a + b)
Veureu que Python us donarà la següent resposta:
videoioc@debian-xtec:~/Documents/programacio$ python3 suma.py Traceback (most recent call last): File "/home/videoioc/Documents/programacio/suma.py", line 1, in <module> a = int(input) ^^^^^^^^^^ TypeError: int() argument must be a string, a bytes-like object or a real number, not 'builtin_function_or_method'
Aquí l’explicació és més complicada. El problema és que no s’han posat els parèntesis de la funció input(), de manera que la funció int() no sap què fer amb la paraula input (que és el nom d’una funció predefinida, és a dir, un builtin_function_or_method .
Quan l’error us parli de builtin_function_or_method , segurament haureu escrit una funció sense els parèntesis.
Variable no definida
A continuació executareu el programa suma.py:
a = int(input()) b = int(input()) print(a + b)
Tot seguit entrareu els valors 2 i 5. Els resultats que n’obtindreu seran els següents:
videoioc@debian-xtec:~/Documents/programacio$ python3 suma.py 2 5 Traceback (most recent call last): File "/home/videoioc/Documents/programacio/suma.py", line 3, in <module> print(a + c) ^ NameError: name 'c' is not defined
Recordeu que Python és un llenguatge interpretat. L’intèrpret ha pogut executar les instruccions sense cap problema fins a la línia tres. En aquest cas està executant el programa 2, el de la suma. En arribar a la línia tres ha trobat un nom de variable que no estava definit. S’anomenaven a i b, i en canvi en aquesta instrucció es fa referència a la variable c.
Operar amb variables de tipus diferent amb operadors que no ho permeten
A continuació executareu una nova versió del programa suma.py:
a = input() b = int(input()) print(a + b)
Tot seguit, entrareu els valors 3 i 4. Els resultats que n’obtindreu seran els següents:
videoioc@debian-xtec:~/Documents/programacio$ python3 suma.py 3 4 Traceback (most recent call last): File "/home/videoioc/Documents/programacio/suma.py", line 3, in <module> print(a + b) ~~^~~ TypeError: unsupported operand type(s) for +: 'int' and 'str'
En el programa anterior el contingut d’una variable s’ha convertit a enter i l’altra no. Es produeix un error quan s’intenta utilitzar l’operador + entre dos tipus de variables diferents: pot actuar entre dos valors numèrics o entre dues cadenes, però no amb un nombre i una cadena.
Cal que tingueu clar, però, que els operadors aritmètics poden actuar sense problemes entre dades enteres i float. En aquest cas es consideren els enters com a float i no hi ha problema.
Intentar una conversió d’alguna cosa que no ho permet
Si executeu el programa suma.py que conté:
a = int(input()) b = int(input()) print(a + b)
I tot seguit, entrem com a valor la cadena hola, quin resultat obtindreu? Proveu-ho i comproveu el resultat.
videoioc@debian-xtec:~/Documents/programacio$ python3 suma.py hola Traceback (most recent call last): File "/home/videoioc/Documents/programacio/suma.py", line 1, in <module> a = int(input()) ^^^^^^^^^^^^ ValueError: invalid literal for int() with base 10: 'hola'
La funció int() intenta convertir a enter tot allò que li passem com a argument. Però és incapaç de trobar cap nombre per a la cadena hola.
Funcions i aspectes fonamentals dels primers programes
Amb la pràctica d’avui heu après a editar i executar un programa. També heu après a utilitzar algunes funcions i a posar comentaris als programes.
Funció print(). Sortida de dades
La instrucció per mostrar dades per pantalla és:
print(dada1, dada2, dada3,..)
Pot haver-hi la quantitat de dades que necessiteu sempre que estiguin separades per una coma. Cada dada pot ser de qualsevol tipus.
La sortida estàndard és la pantalla. Però des del sistema operatiu podem redirigir la sortida i desar-la a un fitxer. En general, els administradors de sistemes necessitareu tenir la sortida “neta”, només amb les dades de sortida. És molt possible que la sortida d’un programa sigui l’entrada d’un altre, i si hi ha text superflu, s’haurà de “netejar”.
Exemple amb la funció print()
Si executeu la següent funció a l’intèrpret interactiu:
print('tinc', 3, 'anys')
Mostrarà per pantalla: tinc 3 anys.
Fixeu-vos que ha afegit un espai en blanc per separar les dades. La funció print() permet escollir el caràcter separador (i si es vol que n’hi hagi o no).
Funció input(). Entrada de dades
S’utilitza així:
variable = input()
Sempre carrega la variable amb una dada de tipus cadena o string.
Es pot posar un text com a argument per a donar informació a l’usuari en els programes interactius.
L’entrada estàndard de dades és el teclat, tot i que des del sistema operatiu es pot redirigir l’entrada perquè es faci a través d’un fitxer. O l’entrada poden ser les dades de sortida d’una altra aplicació.
Exemple amb la funció input()
Aquesta instrucció permet desar a la variable el text que heu escrit (fins a l’intro). A més a més, a l’usuari li dona indicacions sobre què ha de fer. D’aquesta manera, els programes interactius són molt més atractius, ja que el mateix programa ens dona les instruccions.
text = input('escriu una frase')
Com a administradors de sistemes, però, heu d’anar abandonant aquesta idea, ja que no podeu pensar a fer programes que s’executaran amb un humà davant. A més, aquests comentaris també surten per la sortida estàndard i “l’embruten”.
Funcions de conversió int() i float(). Funcions de conversió de tipus
Les funcions de conversió de tipus intenten convertir l’argument de dins els parèntesis al tipus indicat. Si no poden, llancen un error de conversió.
S’utilitzen de la següent manera:
num1 = int(alguna_cosa)
num2 = float(alguna_cosa)
cadena = str(alguna_cosa)
Exemple de conversió de tipus
Utilitzeu l’intèrpret interactiu per veure què passa quan intenteu fer conversions entre diferents tipus:
int(‘3’) int(3.5) int(‘3.5’) int(‘hola’) float(3) float(‘3’) float('3.3.3') float(‘2.a’) str(3.3)
Diríem que quasi tot funciona segons el que ens diu la intuïció: no hi ha cap problema per a convertir un enter a un float, ni per convertir nombres a cadenes (amb la funció str()). Hi ha un problema quan volem convertir a nombre cadenes que no ho poden ser, com és el cas de hola.
Fixeu-vos però en els casos int(3.5) i int(‘3.5’): La funció int() és capaç de convertir el float 3.5 a nombre enter (truncant la part decimal), en canvi, no pot fer-ho amb el 3.5 com a cadena.
Les conversions de tipus en anglès es diuen cast.
Exemple de composició de funcions
Quin valor mostrarà l’intèrpret interactiu després d’aquesta instrucció? Es produirà un error?
int(float('3.5'))
És una composició de funcions: una funció dins d’una altra. Tal com passa en les matemàtiques, els parèntesis niats ens indiquen que cal començar per la funció “interior”. El processador calcula el resultat i després aplica l’altra funció. En aquest exemple, la cadena 3.5 es converteix a float. Posteriorment, al nombre 3.5 se li aplica la funció int(). en aquest cas int(3.5) consisteix en buscar la part entera perquè l’argument és un nombre. És a dir que el resultat de la instrucció és 3.
Exemple d'assignació i composició de funcions
Fixeu-vos en aquesta instrucció que ja coneixem:
num = int(input())
És una assignació. Ho determina l’operador d’assignació, que és el =.
Sempre que hi ha una assignació, s’ha de calcular l’expressió de la dreta fins a tenir un valor concret. Després es posa aquest valor a la variable que es diu num.
L’expressió de la dreta: int(input()), és una composició de funcions.
Quan escriviu el nombre 3 al teclat i teclegeu intro, la funció input() retorna el 3 com a cadena (‘3’), de manera que després s’aplica la funció int() al 3 i s’obté el 3 com a nombre enter.










