ntroducción a la programación con Python Andrés Marzal sabel Gracia Departamento De lenguajes y sistemas informáticos Codis d’assignatura 04 i G04 Andrés Marzal/sabel Gracia - SBN: 978-84-692-5869-9 ntroducción a la programación con Python - UJ Introducci´on a la programaci´on con Python Andr´es Marzal Isabel Gracia Departamento de Lenguajes y Sistemas Inform´aticos Universitat Jaume I Edita: Publicacions de la Universitat Jaume I. Servei de Comunicació i Publicacions Campus del Riu Sec. Edifici Rectorat i Serveis Centrals. 12071 Castelló de la Plana http://www.tenda.uji.es e-mail: [email protected] Col·lecció Sapientia, 23 www.sapientia.uji.es ISBN: 978-84-692-5869-9 Aquest text està subjecte a una llicència Reconeixement-NoComercial-CompartirIgual de Creative Commons, que permet copiar, distribuir i comunicar públicament l’obra sempre que especifique l’autor i el nom de la publicació i sense objectius comercials, i també per- met crear obres derivades, sempre que siguen distribuïdes amb aquesta mateixa llicència. http://creativecommons.org/licenses/by-nc-sa/2.5/es/deed.ca Andrés Marzal/Isabel Gracia - ISBN: 978-84-692-5869-9 II Introducción a la programación con Python - UJI Prefacio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Andrés Marzal/sabel Gracia - SBN: 978-84-692-5869-9 ntroducción a la programación con Python - UJ Andrés Marzal/sabel Gracia - SBN: 978-84-692-5869-9 V ntroducción a la programación con Python - UJ Andrés Marzal/sabel Gracia - SBN: 978-84-692-5869-9 V ntroducción a la programación con Python - UJ Andrés Marzal/sabel Gracia - SBN: 978-84-692-5869-9 V ntroducción a la programación con Python - UJ ˂˂ ˃˃ ˂˂ ˃˃ Prefacio ˂˂ ˃˃ Introducci´on a la programaci´on con Python e Introducci´on a la programaci´on con C desarrollaneltemariodelaasignatura Metodolog´ıaytecnolog´ıadelaprogramaci´on de las titulaciones de Ingenier´ıa Informa´tica e Ingenier´ıa T´ecnica en Informa´tica de Gesti´on de la Universitat Jaume I. En ella se pretende ensen˜ar a programar y, a diferencia de lo que es usual en cursos introductorios a la programaci´on, se propone el aprendizaje con dos lenguajes de programaci´on: Python y C. ˂˂ ˃˃ ¿Por qu´e dos lenguajes de programaci´on? Python y C son bien diferentes. El primero es un lenguaje de muy alto nivel que permite expresar algoritmos de forma casi directa (ha llegado a considerarse pseudoc´odigo ejecutable ) y hemos comprobado que se trata de un lenguaje particularmente adecuado para la ensen˜anza de la programaci´on. Esta impresi´on se ve corroborada por la adopci´on de Python como lenguaje introductorio en otras universidades. El lenguaje C exige una gran atenci´on a multitud de detalles que dificultan la implementaci´on de algoritmos a un estudiante que se enfrenta por primera vez al desarrollo de programas. No obstante, C sigue siendo un lenguaje de programaci´on de referencia y debe formar parte del curr´ıculum de todo informa´tico: su proximidad al computador nos permite controlar con gran precisi´on el consumo de recursos computacio- nales.AprenderPythonantesqueCpermiteestudiarlasestructurasdecontrolydedatos ba´sicas con un alto nivel de abstracci´on y, as´ı, entender mejor qu´e supone, exactamente, la mayor complejidad de la programaci´on en C y hasta qu´e punto es mayor el grado de control que nos otorga. Por ejemplo, una vez se han estudiado listas en Python, su implementaci´on en C permite al estudiante no perder de vista el objetivo u´ltimo: cons- truir una entidad con cierto nivel de abstracci´on usando unas herramientas concretas (los punteros). De ese modo se evita una desafortunada confusi´on entre estructuras dina´micas y punteros que es frecuente cuando ´estas se estudian u´nicamente a la luz de un lenguaje como C. En cierto modo, pues, Python y C se complementan en el aprendizaje y ofrecen una visi´on ma´s rica y completa de la programaci´on. Las similitudes y diferencias entre ambos permiten al estudiante inferir ma´s fa´cilmente qu´e es fundamental y qu´e accesorio o accidental al disen˜ar programas en un lenguaje de programaci´on cualquiera. ¿Yporqu´eotrolibrodetextointroductorioalaprogramaci´on?Ciertamentehaymuchos libros que ensen˜an a programar desde cero. Creemos que estos dos libros de texto se diferencia de ellos tanto en el hecho de estudiar secuencialmente dos lenguajes como en la forma en que se exponen y desarrollan los conocimientos. Hemos procurado adoptar siempre el punto de vista del estudiante y presentar los conceptos y estrategias para disen˜ar programas ba´sicos paso a paso, incrementalmente. La experiencia docente nos ha ido mostrando toda una serie l´ıneas de razonamiento inapropiadas, errores y vicios en los que caen muchos estudiantes. El texto trata de exponer, con mayor o menor fortuna, esos razonamientos, errores y vicios para que el estudiante los tenga presentes y procure evitarlos.As´ı,eneldesarrollodealgunosprogramasllegamosaofrecerversioneserr´oneas para, acto seguido, estudiar sus defectos y mostrar una versi´on corregida. Los apuntes esta´n repletos de cuadros que pretenden profundizar en aspectos marginales, llamar la atenci´on sobre algu´n extremo, ofrecer algunas pinceladas de historia o, sencillamente, desviarse de lo sustancial con alguna digresi´on que podr´ıa resultar motivadora para el Andrés Marzal/sabel Gracia - SBN: 978-84-692-5869-9 1 ntroducción a la programación con Python - UJ 1 estudiante. Hemos de recalcar que este libro pretende ensen˜ar a programar y no es un manual exhaustivo sobre el lenguaje de programaci´on Python. Son particularmente resen˜ables dos omisiones: los diccionarios y las clases. No forman parte de esta edici´on (aunque posiblementeseincluira´nenotraposterior)porquehemospreferidocentrarnosenaquellos aspectosquetantoPythoncomoCpresentanencomu´n.Laorientaci´onaobjetossepuede tratar a partir del material expuesto en estos volu´menes, pero hubiera resultado dif´ıcil incluir estos contenidos en el volumen de Python y no poder tratarlos adecuadamente en el volumen dedicado a C. Queremos aprovechar para dar un consejo a los estudiantes que no nos cansamos de repetir: es imposible aprender a programar limita´ndose a leer unos apuntes o a seguir pasivamente una explicaci´on en clase (especialmente si el per´ıodo de estudio se concen- tra en una o dos semanas). Programar al nivel propio de un curso introductorio no es particularmente dif´ıcil, pero constituye una actividad intelectual radicalmente nueva para los estudiantes. Es necesario darse una oportunidad para ir asentando los conocimien- tos y las estrategias de disen˜o de programas (y as´ı, superar el curso). Esa oportunidad requiere tiempo para madurar... y trabajo, mucho trabajo; por eso el texto ofrece ma´s de cuatrocientos ochenta ejercicios. S´olo tras haberse enfrentado a buena parte de ellos se estara´ preparado para demostrar que se ha aprendido lo necesario. Hay centenares de diferencias entre las dos primeras ediciones (publicadas como apuntes en la Universidad Jaume I y en formato electr´onico en Internet) y ´esta. No s´olo hemos corregido erratas (y errores), hemos an˜adido tambi´en nuevos ejemplos, modificado otros, preparado nuevos ejercicios, reubicado ejercicios para que aparezcan en lugares que hemos juzgado ma´s apropiados, etc. Los programas se presentan con una tipograf´ıa queh,tctrpe:e/m/oosc, wfa.cuijliita.ensotablemente la lectura. El documento PDF ofrece, adema´s, la posibilidaddedescargarc´omodamenteeltextodelosprogramas(quesepuedendescargar de ).Esperamosqueestaposibilidadsetraduzcaenunmayora´nimo del estudiante para experimentar con los programas. Convenios tipogr´aficos Hemos tratado de seguir una serie de convenios tipogra´ficos a lo largo del texto. Los 1 ’!Hola,␣mundo!’ programas, por ejemplo, se muestran con fondo gris, as´ı: print Por regla general, las l´ıneas del programa aparecen numeradas a mano izquierda. Esta numeraci´on tiene por objeto facilitar la referencia a puntos concretos del programa y no debe reproducirse en el fichero de texto si se copia el programa. Cuando se quiere destacar el nombre del fichero en el que reside un programa, se hola mundo.py dispone este en una barra encima del c´odigo: 1 ’!Hola,␣mundo!’ print http://ocw.uji.es programas.tgz programas.zip Si se trabaja con la versi´on electr´onica del libro en formato PDF (disponible en la pa´gina web ) es posible acceder c´omodamente al texto de los pro- gramas.Paraello,bastacondesempaquetarelfichero (o ) enelmismodirectorioenelqueest´eubicadoeldocumentoPDF.Losprogramasaccesibles tienen un icono que representa un documento escrito en la esquina superior izquierda. hola mundo.py Junto al icono aparece el nombre real del fichero: como ofrecemos varias versiones de un hola mundo 1.py hola mundo 2.py mismoprograma,noshemosvistoobligadosaseguirunesquemadenumeraci´onquemodi- ficaelpropionombredelfichero.Laprimeraversi´ondeunficherollamado es , la segunda , y as´ı sucesivamente. Andrés Marzal/sabel Gracia - SBN: 978-84-692-5869-9 2 ntroducción a la programación con Python - UJ Introducci´onalaprogramaci´onconPython (cid:31)cUJI 2 hola mundo.py holamundo1.py 1 ’!Hola,’,’mundo!’ print Si, aunque haya varias versiones, no aparece un nu´mero al final del nombre del fichero hola mundo.py holamundo.py descargable, se entiende que esa es la versi´on definitiva. 1 ’!Hola,␣mundo!’ print Alpincharenelicono,seabreunficherodetextoconelnavegadorweboeditordetextos que se indique en las preferencias del visualizador de documentos PDF. Cuandoelprogramacontienealgu´nerrorgrave,aparecenunparderayosflanqueando E hola mundo.py E al nombre del programa: 1 ’!Hola,␣mundo!’ rint Algunos programas no esta´n completos y, por ello, presentan alguna deficiencia. No obstante, hemos optado por no marcarlos como err´oneos cuando ´estos evolucionaban en el curso de hlaoleaxpmosuincdi´oon..py La informaci´on que se muestra por pantalla aparece siempre recuadrada. El resultado !Hola, mundo! de ejecutar se mostrara´ as´ı: En ocasiones mostrare↱mos las ´ordenes que deben ejecutarse en un int´erprete de $ python hola_mundo.py ´ordenes Unix. El prompt del int´erprete se representara´ con un s´ımbolo de d´olar: !Hola, mundo! ↱ La parte que debe teclear el usuario o el programador se muestra siempre con un fondo gris. El retorno de carro se representa expl´ıcitamente con el s´ımbolo . ˂˂>>>˃˃ Las sesione˂s˂.i.n.te˃˃ractivas del int´erprete de Python tambi´en se muestran recuadradas. El prompt primario del int´erprete Python se muestra con los caracteres y el secundariocon .Lasexpres↱ionesysentenciasquetecleaelprogramadorsedestacan >>> ’Hola,’+’␣’+’mundo!’ con fondo gris. ’!Hola, mundo!’ ↱ >>> ’Hola’==’mundo’: ↱ ... ’si’ ↱ ... : if ↱ ... ’no’ print ↱ ... else no print Agradecimientos ˂˂ ˃˃ Este texto es fruto de la experiencia docente de todo el profesorado de las asignaturas de Metodolog´ıaytecnolog´ıadelaprogramaci´on ysehaenriquecidoconlasaportaciones, comentarios y correcciones de muchos profesores del departamento de Lenguajes y Sis- temas Informa´ticos de la Universitat Jaume I de Castell´o: Juan Pablo Aibar Ausina, Rafael Berlanga Llavor´ı, Antonio Castellanos L´opez, Pedro Garc´ıa Sevilla, Mar´ıa Dolores Llid´o Escriva´, David Llorens Pin˜ana, Jos´e Luis Llopis Borra´s, Juan Miguel Vilar Torres, V´ıctor Manuel Jim´enez Pelayo y Ram´on Mollineda Ca´rdenas. Para todos ellos, nuestro agrade- cimAnideréns tMoa.rzEal/lsaabegl Graracdiae -c iSmBNi: e97n8t-o84-a692D-5a86v9i-d9 Llorens Pin˜ana3es doble por desarrollar,natrdodeumccia´óns a, lea plrogramación con Python - UJ Introducci´onalaprogramaci´onconPython (cid:31)cUJI 3