Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Introducció a Python, Apuntes de Lenguajes de Programación

Asignatura: Llenguatges de Programació, Profesor: , Carrera: Enginyeria Informàtica, Universidad: UPC

Tipo: Apuntes

2013/2014

Subido el 06/10/2014

blackwen
blackwen 🇪🇸

3

(2)

2 documentos

1 / 159

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Introducci´o a la programaci´o
Versi´o preliminar
Jeffrey Elkner Allen B. Downey Chris Meyers
Antoni Soto-Riera Marc Vigo-Anglada Sebasti`a Vila-Marta
Jordi Vives
1 de desembre de 2011
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Vista previa parcial del texto

¡Descarga Introducció a Python y más Apuntes en PDF de Lenguajes de Programación solo en Docsity!

Introducci´o a la programaci´o

Versi´o preliminar

Jeffrey Elkner Allen B. Downey Chris Meyers

Antoni Soto-Riera Marc Vigo-Anglada Sebasti`a Vila-Marta

Jordi Vives

1 de desembre de 2011

Aquest llibre ´es una obra derivada de l’original “How to Think Like a Computer Scientist. Learning with Python 2nd Edition” de Jeffrey Elkner, Allen B. Downey i Chris Meyers. L’original pot ser consultat seguint l’enlla¸c http://openbookproject.net/thinkcspy.

La composici´o d’aquest llibre s’ha realitzat amb LATEX i els fonts corresponents es poden trobar seguint aquest enlla¸c http://devel.cpl.upc.edu/infodocs

Copyright del text original ©c Jeffrey Elkner, Allen B. Downey and Chris Meyers. Copyright de la traducci´o i l’obra derivada ©c Antoni Soto-Riera, Marc Vigo-Anglada, Sebasti`a Vila-Marta i Jordi Vives.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with Invariant Sections being Foreward, Preface, and Contributor List, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.

Sumari

Pr`oleg

Per David Beazley

Com a educador, investigador i autor, estic complagut de poder veure la consecuci´o d’aquest llibre. Python ´es un llenguatge de programaci´o divertit i extremadament facil d’usar que ha guanyat en popu- laritat a un ritme constant els ´ultims anys. Desenvolupat ara fa uns deu anys per Guido van Rossum, la sintaxi simple de Python aix´ı com la filosofia general provenen majoritariament d’ABC, un llenguatge orientat a l’ensenyament desenvolupat als anys 80. No obstant aixo, Python tamb´e va ser creat per solucionar problemes reals i pren una amplia varietat de caracter´ıstiques de llenguatges de programaci´o tals com C++, Java, Modula-3 i Schema. Degut a aixo, una de les caracter´ıstiques m´es remarcables de Python ´es la seva gran capacitat d’atreure desenvolupadors de programari professional, cient´ıfics, investigadors, artistes i educadors.

Malgrat aquesta atracci´o per Python per part de moltes comunitats, pot ser que encara et preguntis: Per que Python? O, per que ensenyar programaci´o amb Python? Contestar aquestes preguntes no ´es una tasca senzilla (especialment quan l’opini´o popular pertany al b`andol de les alternatives m´es masoquistes com C++ i Java). No obstant, crec que la resposta m´es directa ´es que programar en Python ´es simplement molt m´es divertit i productiu.

Quan imparteixo cursos d’enginyeria informatica, m’interessa tractar una serie de conceptes importants i tamb´e que el material sigui interessant i que enganxi als estudiants. Malauradament, existeix la tendencia en els cursos introductoris de programaci´o a centrar l’atenci´o en l’abstracci´o matematica i a fer que els estudiants esdevinguin frustrats pels molestos problemes relacionats amb detalls de baix nivell sobre sintaxis, compilaci´o i el fet de complir una serie de normes aparentment rebuscades. Tot i que aquesta abstracci´o i formalisme s´on importants per als enginyers de software i per als estudiants que tinguin intenci´o de continuar els seus estudis d’enginyeria informatica, fer aquest tipus d’aproximaci´o en un curs introductori, en gran part, nom´es aconsegueix convertir en avorrida l’enginyeria informatica. Quan imparteixo un curs, no vull tenir una classe amb alumnes insulsos. M’agradaria molt m´es veure’ls intentar resoldre problemes interessants mitjan¸cant l’exploraci´o de diverses idees, provant aproximacions no convencionals, trencant les normes i aprenent dels errors. Volent fer aixo, no m’interessa malbaratar la meitat del semestre intentant resoldre obscurs problemes sint`actics, errors de compilaci´o inintel.ligibles o els centenars de formes en que un programa pot generar una fallida de protecci´o general.

Una de les raons per les que a mi m’agrada Python ´es que proporciona un molt bon equilibri entre el que ´es practic i el que ´es conceptual. Degut a que Python ´es interpretat, els principiants poden agafar el llenguatge i comen¸car a desenvolupar coses senzilles immediatament sense haver de perdre temps en compilacions i enlla¸caments. A m´es, Python ve amb una amplia varietat de llibreries i moduls que es poden usar per fer tot tips de tasques que van des de la programaci´o web fins als grafics. Tenir aquest tipus d’orientaci´o practica ´es una bona manera d’atraure els estudiants i els hi permet completar projectes significatius. No obstant, Python tamb´e pot servir com a base per introduir conceptes importants d’enginyeria informatica. Donat que Python suporta completament subprogrames i classes, els estudiants poden ser introdu¨ıts gradualment a temes com ara l’abstracci´o de procediments, les estructures de dades i la programaci´o orientada a objectes (totes les quals s´on aplicables a cursos posteriors de Java o C++). Python fins i tot pren una serie de caracter´ıstiques dels llenguatges de programaci´o funcionals i pot ser usat per introduir conceptes que podrien ser tractats amb m´es detall a cursos de Scheme o Lisp.

vii

Pr`oleg

Llegint el prefaci d’en Jeffrey, em criden l’atenci´o els seus comentaris en que diu que Python li va permetre veure un nivell m´es alt d’exit i un nivell m´es baix de frustraci´o, aix´ı com li va permetre avan¸car m´es rapid amb uns millors resultats. Tot i que aquests comentaris fan referencia al seu curs introductori, a vegades faig servir Python exactament per les mateixes raons als cursos de nivell de graduat avan¸cat als cursos d’enginyeria inform`atica de la Universitat de Chicago. En aquests cursos, em trobo constantment enfrontat a la tasca desalentadora d’haver de tractar un munt de material dif´ıcil del curs en un devastador trimestre de nou setmanes. Tot i que certament em seria possible infligir una gran quantitat de dolor i sofriment usant un llenguatge com C++, sovint he trobat aquesta aproximaci´o contraproduent (especialment quan el curs tracta d’un tema no relacionat nom´es amb la programaci´o). He descobert que usar Python em permet centrar-me millor en el propi tema que pertoqui mentre els alumnes s´on capa¸cos de completar projectes de classe importants.

Tot i que Python encara ´es un llenguatge jove i en evoluci´o, crec que t´e un futur brillant a l’educaci´o. Aquest llibre ´es un pas important en aquesta direcci´o.

David Beazley Universitat de Chicago Autor de “the Python Essential Reference”

viii

Prefaci

2 Com vaig trobar un llibre de refer`encia

Un cop decidit a utilitzar Python a partir del proxim any en els meus cursos d’introducci´o a la infor- matica, el problema m´es urgent era la mancan¸ca d’un llibre de refer`encia disponible.

En aquest punt, els documents lliures em van ajudar. A comen¸caments d’any, en Richard Stallman m’- havia presentat l’Allen Downey. Els dos hav´ıem escrit al Richard tot mostrant-li interes a desenvolupar material educatiu lliure. L’Allen ja havia escrit un llibre d’informatica pels alumnes de primer curs, el ”How to Think Like a Computer Scientist”. Nom´es acabar de llegir aquest llibre ja vaig saber que el voldria utilitzar en els meus cursos. Era el llibre d’inform`atica m´es clar i de m´es ajuda amb el que mai m’havia topat ja que remarcava els processos de pensament involucrats en la programaci´o en comptes de les propietats d’un llenguatge en particular. De fet, despr´es de la lectura del llibre vaig cr´eixer com a professor.

El ”How to Think Like a Computer Scientist” no nom´es era un llibre excel.lent sin´o que a m´es havia estat publicat sota la llicencia GNU Public License, el qual significava que es podia utilitzar lliurament i modificar fins a acomplir les necessitats de l’usuari. Un cop feta la decisi´o d’utilitzar Python se’m va oc´orrer que podia traduir a aquest nou llenguatge la versi´o original del llibre de l’Allen, el qual estava escrit per Java. Tot i que jo no hauria estat capa¸c d’escriure un llibre de referencia, s´ı que m’era possible escriure a partir del llibre de l’Allen. Al mateix temps, aix`o demostrava que el desenvolupa- ment cooperatiu utilitzat amb tants bons resultats al programari tamb´e podia funcionar pels materials educatius.

El desenvolupament del llibre durant els darrers dos anys ha estat profit´os tant pels meus estudiants com per mi mateix i, a m´es, els meus estudiants han pres part en el proc´es. Com que jo podia canviar instantaniament qualsevol error d’escriptura o els trossos dif´ıcils que trobessin, els vaig animar a trobar errors al llibre tot donant-los punts extra cada cop que es produ´ıs un canvi en el text gracies als seus suggeriments. Aixo era doblement benefici´os ja que per una banda els encoratjava a llegir amb atenci´o el llibre i per altra banda s’obtenia una revisi´o profunda del llibre amb els ulls cr´ıtics m´es importants: els estudiants que utilitzen el llibre per aprendre informatica.

Per fer la segona meitat del llibre, el qual tracta la programaci´o orientada a objectes, jo ja sabia que faria falta alg´u m´es experimentat amb la programaci´o real. Durant la major part de l’any, el llibre es va quedar a mitges fins que la comunitat de programari lliure, un cop m´es, va aportar els recursos per acabar-lo.

Un dia vaig rebre un correu electronic d’un tal Chris Meyers a on m’expressava que tenia interes en el llibre. El Chris ´es un programador professional que el darrer any havia comen¸cat a ensenyar en un curs de programaci´o de Python al Lane Community College d’Eugene, a Oregon. Durant la planificaci´o del curs el Chris havia topat amb el llibre i de seguida va voler donar un cop de ma. Al final del curs academic ja havia creat un projecte de col.laboraci´o anomenat Python for Fun en el nostre lloc web http://openbookproject.net i treballava com a professor avan¸cat d’alguns dels meus estudiants privilegiats, tot guiant-los m´es enll`a dels meus l´ımits.

3 Python com a introducci´o a la programaci´o

El proc´es de traducci´o i la utilitzaci´o del How to Think Like a Computer Scientist durant els dos darrers anys, ha confirmat la idone¨ıtat de Python per a ensenyar els estudiants de primer curs. Python simplifica enormement els exemples de programaci´o i facilita l’ensenyament dels conceptes b`asics de programaci´o.

El primer exemple del llibre demostra aquesta idea. Tradicionalment, ´es el programa que mostra “Hola Mon! ”, el qual en la versi´o Java del llibre s’expressa com:

x

3 Python com a introducci´o a la programaci´o

class Hola { public static void main (String[] args) { System.out.println ("Hola Mon!."); } }

per`o en la versi´o de Python esdev´e:

print "Hola Mon!!"

Encara que sigui un exemple senzill, els avantatges de Python es fan evidents. La informatica que ensenyo a Yorktown no t´e prerequisits i per tant molts dels estudiants que veuen l’exemple es troben al davant el seu primer programa. Indubtablement, alguns estan una mica nerviosos ja que han sentit que la programaci´o informatica t´e un aprenentatge dif´ıcil. Amb la versi´o Java sempre m’he trobat amb el dilema d’escollir entre dues opcions insatisfactories: o b´e explico les sentencies “class Hola”, “public static void main”, “String[] args”, “{” i “}” tot arriscant-me a confondre o intimidar els alumnes nom´es comen¸car, o b´e els dic: “No us preocupeu d’aquestes coses, en parlarem m´es endavant” tamb´e arriscant-me al mateix. Els objectius educatius en aquest nivell de curs s´on introduir la idea de sent`encia als estudiants i permetre que escriguin el seu primer programa, al mateix temps que s’introdueixen a l’entorn de programaci´o. El programa amb Python t´e exactament el necessari per complir amb aquests objectius, i no afegeix res m´es.

Si es compara el text d’explicaci´o que acompanya el programa en cada versi´o del llibre, es demostra que significa per als estudiants que comencen. En la versi´o de Java hi ha set paragrafs per explicar el “Hola Mon!”; en canvi a la versi´o de Python n’hi ha prou amb unes quantes frases. Pero el m´es important ´es que els sis paragrafs de m´es no desenvolupen grans conceptes de la programaci´o informatica sin´o que es dediquen a les min´ucies de la sintaxi de Java. De fet, tot el llibre pateix el mateix problema. A la versi´o de Python, paragrafs complets desapareixen simplement gr`acies a que la sintaxi m´es planera de Python els fa innecessaris.

Quan s’usa un llenguatge d’alt nivell com ´es Python, el professor pot endarrerir l’entrada en detall del baix nivell de l’ordinador fins que els estudiants tenen un coneixement suficient per captar-ne l’essencia, de manera que es poden assentar les coses pedagogicament. Un exemple que ho demostra ´es la manera amb que Python manipula les variables. A Java, una variable ´es un nom d’un lloc a on s’emmagatzema un valor si ´es un tipus basic i en cas contrari ´es una referencia a un objecte. Per explicar aquesta diferencia cal detallar com s’emmagatzemen les dades a l’ordinador, aix´ı doncs, el concepte de variable esta lligada amb el maquinari de l’ordinador. La potencia i els conceptes fonamentals de les variables ja s´on prou dif´ıcils pels estudiants de primer (tant en informatica com en algebra) i els bytes i les adreces de memoria no hi ajuden. A Python una variable ´es un nom que referencia una cosa. Aixo ´es de lluny molt m´es intu¨ıtiu per als estudiants de primer i ´es molt m´es proxim al significat de variable que aprenen a matem`atiques. Aquest any que he ensenyat les variables d’aquesta manera, he tingut menys dificultat a explicar-les i he dedicat menys temps a resoldre dubtes sobre el seu ´us.

La sintaxi de les funcions ´es un altre exemple de com Python millora l’ensenyament i l’aprenentatge de la programaci´o. Els meus estudiants sempre havien presentat dificultat en la comprensi´o de les funcions. El problema principal rau en la diferencia entre la definici´o de la funci´o i la crida a la funci´o, a m´es del problema relacionat de distingir entre un parametre i un argument. En Python se soluciona el problema ni m´es ni menys que amb la sintaxi. Les definicions de les funcions comencen amb la paraula clau def, aix´ı que als estudiants simplement els dic “Quan definiu una funci´o comenceu amb def i a continuaci´o poseu-hi el nom de la funci´o que esteu definint”; per a cridar-la n’hi ha prou amb anomenar-la, ´es a dir escriure el seu nom. Els parametres s’usen a les definicions, els arguments s’usen a les crides. No hi ha declaraci´o dels tipus retornats, declaraci´o dels tipus dels parametres ni parametres apuntadors i de referencia al valor que destorbin. Aix´ı que ara s´oc capa¸c d’ensenyar funcions en menys de la meitat del temps que trigava abans, i a m´es millorant la comprensi´o.

xi

Llista de contribu¨ıdors

Parafrasejant la filosofia de la Free Software Foundation, aquest llibre ´es lliure, pero no necessariament gratu¨ıt^1. Aquest llibre ´es fruit d’un proc´es de col·laboraci´o que no hauria estat possible sense la lli- cencia GNU Free Documentation License. Per aixo, volem agrair a la Free Software Foundation haver desenvolupat aquesta llic`encia i, ´es clar, haver-la posat a la nostra disposici´o.

Tamb´e volem fer arribar el nostre agra¨ıment a m´es d’un centenar de lectors atents i perspica¸cos que ens han enviat suggeriments i correccions durant els darrers anys. Seguint l’esperit del programari lliure, volem expressar-los el nostre agra¨ıment mitjan¸cant una llista de contribu¨ıdors. Malauradament, aquesta llista ´es incompleta malgrat els nostres esfor¸cos per mantenir-la al dia. Per altra banda, est`a creixent massa per incloure tothom qui ha enviat una o dues correccions. Aquestes persones tenen el nostre agra¨ıment i la satisfacci´o personal d’haver contribu¨ıt a millorar un llibre que els ha resultat d’utilitat. Afegirem a la llista de contribu¨ıdors a la segona edici´o les persones que estan contribuint a hores d’ara.

Si resseguiu la llista, comprovareu que els suggeriments i les correccions aportades per cada un dels contribu¨ıdors us han estalviat, i estalviaran a futurs lectors, confusions provocades o b´e per errors t`ecnics, o b´e per explicacions poc clares.

Malgrat que sembli impossible despr´es de tantes correccions, encara podrien haver-hi errors en aquest llibre. Si en trobeu algun, esperem que trobeu el moment per contactar amb nosaltres. L’adre¸ca de correu electronic ´es [email protected]. Si els vostres suggeriments provoquen canvis substancials en el llibre, us afegirem a la propera versi´o de la llista de contribu¨ıdors (llevat que demaneu no figurar-hi, ´es clar). Gracies.

5 Segona Edici´o

  1. Un correu electronic de Mike MacHenry m’il·lustra sobre recursivitat final. I, a m´es de descobrir un error en la presentaci´o, sugger´ı com esmenar-lo.
  2. No fou fins que l’estudiant de cinqu`e grau Owen Davies va assistir a una classe d’aprofundiment de Python un dissabte al mat´ı i em va dir que volia escriure el joc de cartes Gin Rummy en Python quan vaig descobrir que volia usar-lo com a cas d’estudi per als cap´ıtols sobre programaci´o orientada a objectes.
  3. Vull dedicar un agra¨ıment especial als estudiants pioners de la classe de programaci´o en Python d’en Jeff al GCTAA del curs escolar 2009-2010: Safath Ahmed, Howard Batiste, Louis Elkner- Alfaro, i Rachel Hancock. Els vostres continus i assenyats comentaris van motivar canvis en la major part dels cap´ıtols del llibre. Vosaltres vareu establir el perfil d’estudiant actiu i compromes que ajudara la nova Governor’s Academy a esdevenir allo que hagi d’esdevenir. Gr`acies a vosaltres puc afirmar que aquest text ha estat provat per estudiants.
  4. De la mateixa manera, vull dedicar un agra¨ıment als estudiants de la classe d’Informatica d’en Jeff al programa HB-Woodlawn del curs escolar 2007-2008: James Crowley, Joshua Eddy, Eric Larson, Brian McGrail, i Iliana Vazuka. (^1) En angles free es pot referir tant a lliure com a gratu¨ıt. En aquest cas, el sentit ´es lliure, com en free speech i no gratis com en free pizza.

xiii

Llista de contribu¨ıdors

  1. Ammar Nabulsi envi`a un gran nombre de correccions dels cap´ıtols 1 i 2.
  2. Aldric Giacomoni descobr´ı un error en la definici´o de la seq¨u`encia de Fibonacci al Cap´ıtol 5.
  3. Roger Sperberg envia diverses correccions ortografiques i descobr´ı un fragment inconsistent al Cap´ıtol 3.
  4. Adele Goldberg segu´e amb en Jeff a la PyCon 2007 i li va proporcionar tot un seguit de suggeri- ments i correccions d’arreu del llibre.
  5. Ben Bruno envi`a correccions dels cap´ıtols 4, 5, 6 i 7.
  6. Carl LaCombe descobr´ı que usavem incorrectament el terme commutatiu al Cap´ıtol 6 quan el terme adient era simetric.
  7. Alessandro Montanile envi`a correccions d’errors tant en el codi dels exemples com en el text dels cap´ıtols 3, 12, 15, 17, 18, 19, i 20.
  8. Emanuele Rusconi trob`a errors als cap´ıtols 4, 8, i 15.
  9. Michael Vogt descrigu´e un error en el sagnat d’un exemple del Cap´ıtol 6, i envia un suggeriment per tal de clarificar la secci´o del Cap´ıtol 1 sobre les diferencies entre l’int`erpret interactiu i els scripts.

6 Primera Edici´o

  1. Lloyd Hugh Allen envi`a una correcci´o a la Secci´o 8.4.
  2. Yvon Boulianne envia una correcci´o d’un error semantic al Cap´ıtol 5.
  3. Fred Bremmer propos`a una correcci´o a la Secci´o 2.1.
  4. Jonah Cohen escrigu´e els scripts en Perl per tal de convertir la font original en LATEX d’aquest llibre a HTML.
  5. Michael Conlon envia una correcci´o gramatical al Cap´ıtol 2 i una millora d’estil al Cap´ıtol 1, i va iniciar un debat sobre aspectes tecnics dels int`erprets.
  6. Benoit Girard envi`a una correcci´o d’una errada divertida a la Secci´o 5.6.
  7. Courtney Gleason i Katherine Smith escrigueren horsebet.py, que es va usar com a cas d’estudi en una versi´o preliminar del llibre. El seu programa ara es pot trobar al lloc web.
  8. Lee Harr propos`a m´es correccions de les que podem encabir aqu´ı, i, per descomptat, hauria de ser considerat un dels editors principals del text.
  9. James Kaylin ´es un estudiant que usa el text. Ha proposat un bon nombre de correccions.
  10. David Kershaw correg´ı una versi´o incorrecta de la funci´o catTwice de la Secci´o 3.10.
  11. Eddie Lam ha enviat un bon nombre de correccions als cap´ıtols 1, 2, i 3. Ha corregit el Makefile per tal que generi un ´ındex el primer cop que s’executi i ens va ajudar a establir un esquema de versions.
  12. Man-Yong Lee envi`a una correcci´o del codi de l’exemple de la Secci´o 2.4.
  13. David Mayo va descobrir que calia canviar la paraula unconsciously per subconsciously al Cap´ıtol
  14. Chris McAloon envi`a diverses correccions a les seccions 3.9 i 3.10.

xiv

Llista de contribu¨ıdors

  1. Gregor Lingl ensenya Python en un institut de Vienna, Austria. Est`a treballant en la traducci´o a l’alemany del llibre i ha descobert un parell d’errors greus en el Cap´ıtol 5.
  2. Julie Peters detecta un error tipografic en el Prefaci.

xvi

1 El m`etode de programar

L’objectiu d’aquest curs ´es ensenyar-te a pensar com un informatic. Aquesta manera de pensar combina algunes de les millors caracter´ıstiques de les matematiques, l’enginyeria i les ciencies naturals. Com els matematics, els enginyers informatics usen llenguatges formals per denotar idees, particularment calculs. Com els enginyers, dissenyen coses, adapten components a sistemes i avaluen les avantatges entre les diferents alternatives. Com els cient´ıfics, observen el comportament de sistemes complexos, formulen hip`otesis i comproven les prediccions.

L’habilitat m´es important per a un informatic ´es la capacitat de resoldre problemes. Resoldre problemes requereix saber formular els problemes, pensar de manera creativa en les seves solucions i coneixer com expressar les solucions de manera clara i acurada. Com es fa evident, el proc´es d’aprendre a programar ´es una oportunitat excel.lent de practicar l’habilitat de resoldre problemes. ´Es per aquest motiu que aquest cap´ıtol s’anomena El m`etode de programar.

Per una banda, aprendras a programar, una habilitat ´util per si mateixa. D’altra banda, usaras la programaci´o com a un medi per aconseguir un fi. A mida que avancem, aquest fi quedar`a m´es clar.

1.1 El llenguatge de programaci´o Python

El llenguatge de programaci´o que aprendras sera Python. Python ´es un exemple de llenguatge d’alt nivell; altres llenguatges d’alt nivell dels quals potser haur`as sentit a parlar s´on C++, PHP i Java.

llenguatge d’alt nivell (high level language)

Com potser ja has dedu¨ıt del nom “llenguatge d’alt nivell”, tamb´e existeixen els llenguatges de baix nivell, a vegades anomenats llenguatge m`aquina o llenguatge assemblador. Parlant de manera planera,

llenguatges de baix ni- vell (low level lan- guages)

llenguatge m`aquina (machine language)

llenguatge assembla- dor (assem- bler)

els ordinadors nom´es poden executar programes escrits en llenguatges de baix nivell. Aix´ı, els programes escrits en llenguatges d’alt nivell han de ser processats abans de poder funcionar. Aquest processat pron una mica de temps, la qual cosa ´es una de les petites desavantatges dels llenguatges d’alt nivell.

Pero els avantatges s´on enormes. Primer, ´es molt m´es senzill escriure un programa en un llenguatge d’alt nivell. Els programes escrits en llenguatges d’alt nivell tamb´e prenen menys temps en ser escrits, s´on m´es curts i facils de llegir i molt m´es senzills de corregir. Segon, els programes escrits en llenguatges d’alt nivell s´on portables, la qual cosa vol dir que poden funcionar en diversos tipus de m`aquina amb

portables (portable)

poques o cap modificaci´o. Els llenguatges de baix nivell nom´es poden funcionar en un tipus de m`aquina i han de ser reescrits per tal de funcionar en una altra.

Degut a aquests avantatges, gaireb´e tots els programes estan escrits en llenguatges d’alt nivell. Els llenguatges de baix nivell nom´es s’usen per alguns programes molt especialitzats.

Existeixen dos tipus de programa que processen els programes escrits en llenguatges d’alt nivell i els transformen en programes escrits en llenguatges de baix nivell: els int`erprets i els compiladors. Un

int`erprets (interpre- ter)

compiladors (compiler)

interpret llegeix un programa escrit en un llenguatge d’alt nivell i l’executa. En l’ambit de la progra- maci´o, executar significa dur a terme els calculs que s’especifiquen al programa. L’interpret executa el

executar (empty)

programa de mica en mica, alternant la lectura de l´ınies i duent a terme c`alculs.

Un compilador llegeix el programa i el tradueix completament abans de qu`e aquest comenci a executar- se. En aquest cas, el programa en alt nivell s’anomena codi font i el programa tradu¨ıt s’anomena codi

codi font (source code)

objecte o executable. Una vegada un programa s’ha compilat, es pot executar repetidament sense cap

codi objec- te (object code)

executable

1.2 Qu`e ´es un programa?

Per conveni, els fitxers que contenen programes Python tenen noms acabats amb l’extensi´o .py.

Per executar el programa, hem d’escriure el nom del fitxer que cont´e el programa Python des del terminal de l’entorn Unix:

$ python firstprogram.py 2

L’int`erpret de Python llegeix el fitxer i l’executa, escrivint el resultat per pantalla.

Aquests exemples mostren Python funcionant des d’una terminal de comandes Unix. En altres entorns de desenvolupament, els detalls d’executar programes poden variar. A m´es, la majoria de programes s´on m´es interessants que el que acabem de veure.

Els exemples d’aquest curs usen ambd´os modes de Python: el mode interactiu i el mode comanda. Seras capa¸c de diferenciar-los perque els exemples en mode interactiu sempre comen¸caran amb el prompt de Python.

Treballar amb el mode interactiu ´es convenient per comprovar fragments curts de codi, ja que es rep resposta immediatament. Imagina’t que ´es com un tros de paper que uses per ajudar-te a solucionar problemes. Qualsevol c`alcul m´es llarg d’unes poques l´ınies s’hauria d’escriure en un script.

1.2 Qu`e ´es un programa?

Un programa ´es una seq¨uencia de sentencies que especifiquen com dur a terme un calcul. El calcul

programa (program)

pot ser de tipus matematic (com resoldre un sistema d’equacions o trobar les arrels d’un polinomi), pero tamb´e pot ser un calcul simbolic (com cercar i reempla¸car un text en un document o compilar un programa).

Els detalls varien en els diversos llenguatges, pero existeixen una serie de sentencies basiques que

sentencies basiques (empty)

apareixen gaireb´e a tots els llenguatges. Aquestes sent`encies serveixen per:

Entrada Obtenir dades del canal d’entrada (del teclat, d’un fitxer o de qualsevol altre dispositiu).

Sortida Mostrar dades pel canal de sortida (a la pantalla, enviant-les a un fitxer o un altre dispositiu).

Calcul Dur a terme operacions matematiques b`asiques (com les sumes o les multiplicacions).

Condicional Comprovar certes condicions i executar la seq¨uencia de sentencies adient segons el resultat de la comprovaci´o.

Iteraci´o Dur a terme determinades accions de manera repetitiva, normalment amb alguna variaci´o.

Ho creguis o no, aixo ´es practicament tot. Qualsevol programa que hagis pogut usar, no importa com de complicat fos, esta constru¨ıt amb sentencies (a vegades tamb´e s’anomenen instruccions) com les que acabes de veure. Aix´ı, podem descriure el fet de programar com el proc´es de trencar una tasca llarga i complexa en subtasques cada cop m´es i m´es petites, fins que les subtasques s´on prou senzilles com per ser dutes a terme amb una de les sentencies basiques.

Aixo pot sonar una mica vague, pero ja tornarem a insistir-hi m´es endavant quan parlem d’algorismes.

1 El m`etode de programar

1.3 Qu`e ´es depurar?

Programar ´es un proc´es complex i, at`es que el fan ´essers humans, sovint cont´e errors. El proc´es de

errors (bug)

trobar-los i corregir-los s’anomena depuraci´o. (^) depuraci´o

(debugging) En un programa podem trobar tres tipus d’errors: errors sint`actics, errors en temps d’execuci´o i errors

errors sin- t`actics (syntax error) errors en temps d’e- xecuci´o (runtime error)

sem`antics. Es for¸´ ca ´util saber distingir els tres tipus d’error per tal de poder-los localitzar i corregir de

errors se- m`antics (semantic error)

la manera m´es r`apida. Els seg¨uents apartats concreten aquests tipus d’errors.

1.4 Errors sint`actics

Python nom´es pot executar un programa si la seva sintaxi ´es correcta; d’altra manera, el proc´es falla i retorna un missatge d’error. La sintaxi es refereix a l’estructura del programa i a les normes sobre aquesta estructura. Per exemple, en Catala, una frase ha de comen¸car amb una lletra en maj´uscula i acabar amb un punt. aquesta frase cont´e un error sintactic. Aquesta tamb´e

Per a molts lectors, uns quants errors sintactics no s´on un problema significatiu, pero Python no ´es tant permissiu. Si hi ha un sol error sintactic a qualsevol punt del teu programa, Python et mostrara un missatge d’error i acabara, i no seras capa¸c de fer funcionar el teu programa. Durant les teves primeres setmanes com a programador, passaras for¸ca temps localitzant i corregint errors sintactics. A mida que vagis adquirint experiencia pero, cada vegada faras menys errors i seras capa¸c de trobar-los m´es de pressa.

1.5 Errors en temps d’execuci´o

El segon tipus d’error s´on els errors en temps d’execuci´o, anomenats aix´ı perqu`e no apareixen fins que no executes el teu programa. Aquests errors tamb´e s’anomenen excepcions ja que sovint indiquen que

excepcions (exception)

alguna cosa excepcional —i dolenta— ha succe¨ıt.

Els errors en temps d’execuci´o s´on estranys als programes senzills que es veuen en els primers cap´ıtols, aix´ı que encara passar`a un temps fins que te’n trobis algun.

1.6 Errors sem`antics

El tercer tipus d’error s´on els errors semantics. Si el teu programa t´e un error semantic, el programa funcionara correctament. L’ordinador no mostrara cap missatge d’error, pero no calculara el resultat correcte. Obtindr`a un resultat diferent al que tu esperaves.

El problema rau en que el programa que has escrit no ´es el programa que volies escriure. El significat del programa —la seva semantica— esta malament. Identificar els errors semantics pot ser complicat ja que, a partir del resultat incorrecte que s’ha obtingut, cal que dedueixis qu`e pot haver passat.