From 3c407c3cd78cc4d3a9c602ab0bad30adb3b7e7d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Tue, 19 May 2026 11:27:27 +0200 Subject: [PATCH 01/18] Translate Think Python to Spanish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Translate the book notebooks and blank exercise notebooks to Spanish while preserving code cells, licensing, and original attribution. Add README instructions for building and running the notebooks, and credit the Spanish translation to midudev (Miguel Ángel Durán). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- README.md | 46 ++- blank/chap00.ipynb | 204 +++++++------- blank/chap01.ipynb | 420 ++++++++++++++------------- blank/chap02.ipynb | 344 +++++++++++------------ blank/chap03.ipynb | 338 +++++++++++----------- blank/chap04.ipynb | 356 +++++++++++------------ blank/chap05.ipynb | 521 +++++++++++++++++----------------- blank/chap06.ipynb | 508 ++++++++++++++++----------------- blank/chap07.ipynb | 371 ++++++++++++------------ blank/chap08.ipynb | 457 +++++++++++++++--------------- blank/chap09.ipynb | 416 +++++++++++++-------------- blank/chap10.ipynb | 460 +++++++++++++++--------------- blank/chap11.ipynb | 511 +++++++++++++++++---------------- blank/chap12.ipynb | 527 +++++++++++++++++----------------- blank/chap13.ipynb | 488 ++++++++++++++++---------------- blank/chap14.ipynb | 399 +++++++++++++------------- blank/chap15.ipynb | 298 ++++++++++---------- blank/chap16.ipynb | 356 +++++++++++------------ blank/chap17.ipynb | 529 ++++++++++++++++++----------------- blank/chap18.ipynb | 492 ++++++++++++++++---------------- blank/chap19.ipynb | 112 ++++---- chapters/chap00.ipynb | 204 +++++++------- chapters/chap01.ipynb | 420 ++++++++++++++------------- chapters/chap02.ipynb | 344 +++++++++++------------ chapters/chap03.ipynb | 338 +++++++++++----------- chapters/chap04.ipynb | 356 +++++++++++------------ chapters/chap05.ipynb | 521 +++++++++++++++++----------------- chapters/chap06.ipynb | 506 ++++++++++++++++----------------- chapters/chap07.ipynb | 371 ++++++++++++------------ chapters/chap08.ipynb | 457 +++++++++++++++--------------- chapters/chap09.ipynb | 416 +++++++++++++-------------- chapters/chap10.ipynb | 460 +++++++++++++++--------------- chapters/chap11.ipynb | 511 +++++++++++++++++---------------- chapters/chap12.ipynb | 527 +++++++++++++++++----------------- chapters/chap13.ipynb | 492 ++++++++++++++++---------------- chapters/chap14.ipynb | 399 +++++++++++++------------- chapters/chap15.ipynb | 298 ++++++++++---------- chapters/chap16.ipynb | 356 +++++++++++------------ chapters/chap17.ipynb | 529 ++++++++++++++++++----------------- chapters/chap18.ipynb | 490 ++++++++++++++++---------------- chapters/chap19.ipynb | 112 ++++---- chapters/jupyter_intro.ipynb | 116 ++++---- jb/_config.yml | 10 +- 43 files changed, 8203 insertions(+), 8183 deletions(-) diff --git a/README.md b/README.md index 39a0d8b..7600031 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,46 @@ -# Think Python, 3rd edition +# Think Python, 3.ª edición -Jupyter notebooks and other material for the 3rd edition of *Think Python: How to Think Like a Computer Scientist* +Notebooks de Jupyter y otros materiales de la 3.ª edición de *Think Python: How to Think Like a Computer Scientist*. -by Allen B. Downey +Por Allen B. Downey. -You can order print and electronic versions of *Think Python 3e* from -[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and +Traducción al español por midudev (Miguel Ángel Durán). + +Puedes pedir las versiones impresa y electrónica de *Think Python 3e* en +[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y [Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325). -The home page for the book is at [Green Tea Press](http://thinkpython.com). +La página principal del libro está en [Green Tea Press](http://thinkpython.com). + +## Cómo ejecutar este fork + +Para que todo funcione correctamente: + +1. Instala Python 3 y Jupyter si todavía no los tienes. +2. Instala las herramientas de Jupyter Book si necesitas construir el libro: + + ```bash + python -m pip install jupyter-book + ``` + +3. Construye el libro desde la carpeta `jb`: + + ```bash + cd jb && jb build . + ``` + +4. Para ejecutar o abrir los notebooks con Jupyter, desde la raíz del repositorio puedes usar: + + ```bash + jupyter notebook + ``` + + Luego abre el notebook que quieras desde la interfaz del navegador. También puedes usar JupyterLab si lo tienes instalado: + + ```bash + jupyter lab + ``` + +## Licencia +Se conserva la atribución original a Allen B. Downey. La traducción al español fue realizada por midudev (Miguel Ángel Durán). diff --git a/blank/chap00.ipynb b/blank/chap00.ipynb index 55b62c2..c733efe 100644 --- a/blank/chap00.ipynb +++ b/blank/chap00.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -15,7 +15,7 @@ "id": "d9724920", "metadata": {}, "source": [ - "# Preface\n", + "# Prefacio\n", "\n" ] }, @@ -24,21 +24,21 @@ "id": "b76f38c6", "metadata": {}, "source": [ - "## Who Is This Book For?\n", + "## ¿Para quién es este libro?\n", "\n", - "If you want to learn to program, you have come to the right place.\n", - "Python is one of the best programming languages for beginners -- and it is also one of the most in-demand skills.\n", + "Si quieres aprender a programar, has llegado al lugar adecuado.\n", + "Python es uno de los mejores lenguajes de programación para principiantes, y también una de las habilidades más demandadas.\n", "\n", - "You have also come at the right time, because learning to program now is probably easier than ever.\n", - "With virtual assistants like ChatGPT, you don't have to learn alone.\n", - "Throughout this book, I'll suggest ways you can use these tools to accelerate your learning.\n", + "También has llegado en el momento adecuado, porque aprender a programar ahora probablemente sea más fácil que nunca.\n", + "Con asistentes virtuales como ChatGPT, no tienes que aprender en soledad.\n", + "A lo largo de este libro, sugeriré formas de usar estas herramientas para acelerar tu aprendizaje.\n", "\n", - "This book is primarily for people who have never programmed before and people who have some experience in another programming language.\n", - "If you have substantial experience in Python, you might find the first few chapters too slow.\n", + "Este libro es principalmente para personas que nunca han programado y para personas que tienen algo de experiencia en otro lenguaje de programación.\n", + "Si tienes bastante experiencia en Python, quizá los primeros capítulos te parezcan demasiado lentos.\n", "\n", - "One of the challenges of learning to program is that you have to learn *two* languages: one is the programming language itself; the other is the vocabulary we use to talk about programs.\n", - "If you learn only the programming language, you are likely to have problems when you need to interpret an error message, read documentation, talk to another person, or use virtual assistants.\n", - "If you have done some programming, but you have not also learned this second language, I hope you find this book helpful." + "Uno de los retos de aprender a programar es que tienes que aprender *dos* lenguajes: uno es el propio lenguaje de programación; el otro es el vocabulario que usamos para hablar de programas.\n", + "Si solo aprendes el lenguaje de programación, es probable que tengas problemas cuando necesites interpretar un mensaje de error, leer documentación, hablar con otra persona o usar asistentes virtuales.\n", + "Si has programado algo, pero no has aprendido también este segundo lenguaje, espero que este libro te resulte útil." ] }, { @@ -46,21 +46,21 @@ "id": "b4dd57bc", "metadata": {}, "source": [ - "## Goals of the Book\n", + "## Objetivos del libro\n", "\n", - "Writing this book, I tried to be careful with the vocabulary.\n", - "I define each term when it first appears.\n", - "And there is a glossary that the end of each chapter that reviews the terms that were introduced.\n", + "Al escribir este libro, intenté tener cuidado con el vocabulario.\n", + "Defino cada término cuando aparece por primera vez.\n", + "Y al final de cada capítulo hay un glosario que repasa los términos que se han introducido.\n", "\n", - "I also tried to be concise.\n", - "The less mental effort it takes to read the book, the more capacity you will have for programming.\n", + "También intenté ser conciso.\n", + "Cuanto menos esfuerzo mental requiera leer el libro, más capacidad tendrás para programar.\n", "\n", - "But you can't learn to program just by reading a book -- you have to practice.\n", - "For that reason, this book includes exercises at the end of every chapter where you can practice what you have learned.\n", + "Pero no puedes aprender a programar solo leyendo un libro: tienes que practicar.\n", + "Por eso, este libro incluye ejercicios al final de cada capítulo en los que puedes practicar lo que has aprendido.\n", "\n", - "If you read carefully and work on exercises consistently, you will make progress.\n", - "But I'll warn you now -- learning to program is not easy, and even for experienced programmers it can be frustrating.\n", - "As we go, I will suggest strategies to help you write correct programs and fix incorrect ones." + "Si lees con atención y trabajas en los ejercicios de forma constante, avanzarás.\n", + "Pero te aviso desde ahora: aprender a programar no es fácil, e incluso para programadores con experiencia puede ser frustrante.\n", + "A medida que avancemos, sugeriré estrategias para ayudarte a escribir programas correctos y arreglar los incorrectos." ] }, { @@ -68,31 +68,31 @@ "id": "6516d914", "metadata": {}, "source": [ - "## Navigating the Book\n", + "## Cómo navegar por el libro\n", "\n", - "Each chapter in this book builds on the previous ones, so you should read them in order and take time to work on the exercises before you move on.\n", + "Cada capítulo de este libro se basa en los anteriores, así que deberías leerlos en orden y dedicar tiempo a trabajar en los ejercicios antes de seguir adelante.\n", "\n", - "The first six chapters introduce basic elements like arithmetic, conditionals, and loops.\n", - "They also introduce the most important concept in programming, functions, and a powerful way to use them, recursion.\n", + "Los primeros seis capítulos presentan elementos básicos como la aritmética, los condicionales y los bucles.\n", + "También presentan el concepto más importante de la programación, las funciones, y una forma potente de usarlas, la recursión.\n", "\n", - "Chapters 7 and 8 introduce strings -- which can represent letter, words, and sentences -- and algorithms for working with them.\n", + "Los capítulos 7 y 8 presentan strings, que pueden representar letras, palabras y frases, y algoritmos para trabajar con ellas.\n", "\n", - "Chapters 9 through 12 introduce Python's core data structures -- lists, dictionaries, and tuples -- which are powerful tools for writing efficient programs.\n", - "Chapter 12 presents algorithms for analyzing text and randomly generating new text.\n", - "Algorithms like these are at the core of large language models (LLMs), so this chapter will give you an idea of how tools like ChatGPT work.\n", + "Los capítulos 9 a 12 presentan las estructuras de datos principales de Python: listas, diccionarios y tuplas, que son herramientas potentes para escribir programas eficientes.\n", + "El capítulo 12 presenta algoritmos para analizar texto y generar texto nuevo de forma aleatoria.\n", + "Algoritmos como estos están en el núcleo de los modelos de lenguaje grandes (LLMs), así que este capítulo te dará una idea de cómo funcionan herramientas como ChatGPT.\n", "\n", - "Chapter 13 is about ways to store data in long-term storage -- files and databases.\n", - "As an exercise, you can write a program that searches a file system and finds duplicate files.\n", + "El capítulo 13 trata sobre formas de almacenar datos a largo plazo: archivos y bases de datos.\n", + "Como ejercicio, puedes escribir un programa que busque en un sistema de archivos y encuentre archivos duplicados.\n", "\n", - "Chapters 14 through 17 introduce object-oriented programming (OOP), which is a way to organize programs and the data they work with.\n", - "Many Python libraries are written in object-oriented style, so these chapters will help you understand their design -- and define your own objects.\n", + "Los capítulos 14 a 17 presentan la programación orientada a objetos (OOP), que es una forma de organizar programas y los datos con los que trabajan.\n", + "Muchas librerías de Python están escritas con estilo orientado a objetos, así que estos capítulos te ayudarán a entender su diseño y a definir tus propios objetos.\n", "\n", - "The goal of this book is not to cover the entire Python language.\n", - "Rather, I focus on a subset of the language that provides the greatest capability with the fewest concepts.\n", - "Nevertheless, Python has a lot of features you can use to solve common problems efficiently.\n", - "Chapter 18 presents some of these features.\n", + "El objetivo de este libro no es cubrir todo el lenguaje Python.\n", + "En cambio, me centro en un subconjunto del lenguaje que ofrece la mayor capacidad con el menor número de conceptos.\n", + "Aun así, Python tiene muchas características que puedes usar para resolver problemas comunes de forma eficiente.\n", + "El capítulo 18 presenta algunas de estas características.\n", "\n", - "Finally, Chapter 19 presents my parting thoughts and suggestions for continuing your programming journey." + "Por último, el capítulo 19 presenta mis reflexiones finales y sugerencias para continuar tu camino en la programación." ] }, { @@ -100,38 +100,38 @@ "id": "23013838", "metadata": {}, "source": [ - "## What's new in the third edition?\n", + "## ¿Qué hay de nuevo en la tercera edición?\n", "\n", - "The biggest changes in this edition were driven by two new technologies -- Jupyter notebooks and virtual assistants.\n", + "Los cambios más grandes de esta edición fueron impulsados por dos tecnologías nuevas: los Jupyter notebooks y los asistentes virtuales.\n", "\n", - "Each chapter of this book is a Jupyter notebook, which is a document that contains both ordinary text and code.\n", - "For me, that makes it easier to write the code, test it, and keep it consistent with the text.\n", - "For you, it means you can run the code, modify it, and work on the exercises, all in one place.\n", - "Instructions for working with the notebooks are in the first chapter.\n", + "Cada capítulo de este libro es un Jupyter notebook, que es un documento que contiene tanto texto normal como código.\n", + "Para mí, eso facilita escribir el código, probarlo y mantenerlo coherente con el texto.\n", + "Para ti, significa que puedes ejecutar el código, modificarlo y trabajar en los ejercicios, todo en un solo lugar.\n", + "Las instrucciones para trabajar con los notebooks están en el primer capítulo.\n", "\n", - "The other big change is that I've added advice for working with virtual assistants like ChatGPT and using them to accelerate your learning.\n", - "When the previous edition of this book was published in 2016, the predecessors of these tools were far less useful and most people were unaware of them. \n", - "Now they are a standard tool for software engineering, and I think they will be a transformational tool for learning to program -- and learning a lot of other things, too.\n", + "El otro gran cambio es que he añadido consejos para trabajar con asistentes virtuales como ChatGPT y usarlos para acelerar tu aprendizaje.\n", + "Cuando se publicó la edición anterior de este libro en 2016, los predecesores de estas herramientas eran mucho menos útiles y la mayoría de la gente no los conocía. \n", + "Ahora son una herramienta estándar para la ingeniería de software, y creo que serán una herramienta transformadora para aprender a programar, y para aprender muchas otras cosas también.\n", "\n", - "The other changes in the book were motivated by my regrets about the second edition.\n", + "Los demás cambios del libro fueron motivados por mis arrepentimientos sobre la segunda edición.\n", "\n", - "The first is that I did not emphasize software testing.\n", - "That was already a regrettable omission in 2016, but with the advent of virtual assistants, automated testing has become even more important.\n", - "So this edition presents Python's most widely-used testing tools, `doctest` and `unittest`, and includes several exercises where you can practice working with them.\n", + "El primero es que no puse suficiente énfasis en las pruebas de software.\n", + "Eso ya era una omisión lamentable en 2016, pero con la llegada de los asistentes virtuales, las pruebas automatizadas se han vuelto aún más importantes.\n", + "Así que esta edición presenta las herramientas de testing más usadas de Python, `doctest` y `unittest`, e incluye varios ejercicios donde puedes practicar con ellas.\n", "\n", - "My other regret is that the exercises in the second edition were uneven -- some were more interesting than others and some were too hard.\n", - "Moving to Jupyter notebooks helped me develop and test a more engaging and effective sequence of exercises.\n", + "Mi otro arrepentimiento es que los ejercicios de la segunda edición eran desiguales: algunos eran más interesantes que otros y algunos eran demasiado difíciles.\n", + "Pasar a Jupyter notebooks me ayudó a desarrollar y probar una secuencia de ejercicios más atractiva y eficaz.\n", "\n", - "In this revision, the sequence of topics is almost the same, but I rearranged a few of the chapters and compressed two short chapters into one.\n", - "Also, I expanded the coverage of strings to include regular expressions.\n", + "En esta revisión, la secuencia de temas es casi la misma, pero reorganicé algunos capítulos y comprimí dos capítulos cortos en uno.\n", + "Además, amplié la cobertura de strings para incluir expresiones regulares.\n", "\n", - "A few chapters use turtle graphics.\n", - "In previous editions, I used Python's `turtle` module, but unfortunately it doesn't work in Jupyter notebooks.\n", - "So I replaced it with a new turtle module that should be easier to use.\n", + "Algunos capítulos usan turtle graphics.\n", + "En ediciones anteriores usé el módulo `turtle` de Python, pero por desgracia no funciona en Jupyter notebooks.\n", + "Así que lo reemplacé por un nuevo turtle módulo que debería ser más fácil de usar.\n", "\n", - "Finally, I rewrote a substantial fraction of the text, clarifying places that needed it and cutting back in places where I was not as concise as I could be.\n", + "Por último, reescribí una parte considerable del texto, aclarando lugares que lo necesitaban y recortando en lugares donde no fui tan conciso como podía ser.\n", "\n", - "I am very proud of this new edition -- I hope you like it!" + "Estoy muy orgulloso de esta nueva edición. ¡Espero que te guste!" ] }, { @@ -139,27 +139,27 @@ "id": "bfb779bb", "metadata": {}, "source": [ - "## Getting started\n", + "## Primeros pasos\n", "\n", - "For most programming languages, including Python, there are many tools you can use to write and run programs. \n", - "These tools are called integrated development environments (IDEs).\n", - "In general, there are two kinds of IDEs:\n", + "Para la mayoría de los lenguajes de programación, incluido Python, hay muchas herramientas que puedes usar para escribir y ejecutar programas. \n", + "Estas herramientas se llaman entornos de desarrollo integrados (IDEs).\n", + "En general, hay dos tipos de IDEs:\n", "\n", - "* Some work with files that contain code, so they provide tools for editing and running these files.\n", + "* Algunos trabajan con archivos que contienen código, así que proporcionan herramientas para editar y ejecutar esos archivos.\n", "\n", - "* Others work primarily with notebooks, which are documents that contain text and code.\n", + "* Otros trabajan principalmente con notebooks, que son documentos que contienen texto y código.\n", "\n", - "For beginners, I recommend starting with a notebook development environment like Jupyter.\n", + "Para principiantes, recomiendo empezar con un entorno de desarrollo de notebooks como Jupyter.\n", "\n", - "The notebooks for this book are available from an online repository at .\n", + "Los notebooks de este libro están disponibles en un repositorio online en .\n", "\n", - "There are two ways to use them:\n", + "Hay dos formas de usarlos:\n", "\n", - "* You can download the notebooks and run them on your own computer. In that case, you have to install Python and Jupyter, which is not hard, but if you want to learn Python, it can be frustrating to spend a lot of time installing software.\n", + "* Puedes descargar los notebooks y ejecutarlos en tu propio ordenador. En ese caso, tienes que instalar Python y Jupyter, lo cual no es difícil, pero si quieres aprender Python puede ser frustrante pasar mucho tiempo instalando software.\n", "\n", - "* An alternative is to run the notebooks on Colab, which is a Jupyter environment that runs in a web browser, so you don't have to install anything. Colab is operated by Google, and it is free to use.\n", + "* Una alternativa es ejecutar los notebooks en Colab, que es un entorno Jupyter que se ejecuta en un navegador web, así que no tienes que instalar nada. Colab está operado por Google y es gratuito.\n", "\n", - "If you are just getting started, I strongly recommend you start with Colab." + "Si estás empezando, te recomiendo encarecidamente que empieces con Colab." ] }, { @@ -167,17 +167,17 @@ "id": "2ebd2412", "metadata": {}, "source": [ - "## Resources for Teachers\n", + "## Recursos para docentes\n", "\n", - "If you are teaching with this book, here are some resources you might find useful.\n", + "Si enseñas con este libro, aquí tienes algunos recursos que pueden resultarte útiles.\n", "\n", - "* You can find notebooks with solutions to the exercises from , along with links to the additional resources below.\n", + "* Puedes encontrar notebooks con soluciones a los ejercicios en , junto con enlaces a los recursos adicionales de abajo.\n", "\n", - "* Quizzes for each chapter, and a summative quiz for the whole book, are available from [COMING SOON]\n", + "* Los cuestionarios de cada capítulo, y un cuestionario final para todo el libro, están disponibles en [PRÓXIMAMENTE]\n", "\n", - "* *Teaching and Learning with Jupyter* is an online book with suggestions for using Jupyter effectively in the classroom. You can read the book at \n", + "* *Teaching and Learning with Jupyter* es un libro online con sugerencias para usar Jupyter de forma eficaz en el aula. Puedes leer el libro en \n", "\n", - "* One of the best ways to use notebooks is live coding, where an instructor writes code and students follow along in their own notebooks. To learn about live coding -- and get other great advice about teaching programming -- I recommend the instructor training provided by The Carpentries, at " + "* Una de las mejores formas de usar notebooks es programación en vivo (live coding), donde un instructor escribe código y los estudiantes le siguen en sus propios notebooks. Para aprender sobre programación en vivo, y obtener otros grandes consejos sobre enseñanza de programación, recomiendo la formación para instructores ofrecida por The Carpentries, en " ] }, { @@ -185,29 +185,29 @@ "id": "28e7de55", "metadata": {}, "source": [ - "## Acknowledgments\n", + "## Agradecimientos\n", "\n", - "Many thanks to Jeff Elkner, who translated my Java book into Python,\n", - "which got this project started and introduced me to what has turned out\n", - "to be my favorite language.\n", - "Thanks also to Chris Meyers, who contributed several sections to *How to Think Like a Computer Scientist*.\n", + "Muchas gracias a Jeff Elkner, que tradujo mi libro de Java a Python,\n", + "lo que puso en marcha este proyecto y me presentó lo que ha acabado siendo\n", + "mi lenguaje favorito.\n", + "Gracias también a Chris Meyers, que contribuyó con varias secciones a *How to Think Like a Computer Scientist*.\n", "\n", - "Thanks to the Free Software Foundation for developing the GNU Free Documentation License, which helped make my collaboration with Jeff and Chris possible, and thanks to the Creative Commons for the license I am using now.\n", + "Gracias a la Free Software Foundation por desarrollar la GNU Free Documentation License, que ayudó a hacer posible mi colaboración con Jeff y Chris, y gracias a Creative Commons por la licencia que uso ahora.\n", "\n", - "Thanks to the developers and maintainers of the Python language and the libraries I used, including the Turtle graphics module; the tools I used to develop the book, including Jupyter and JupyterBook; and the services I used, including ChatGPT, Copilot, Colab and GitHub.\n", + "Gracias a quienes desarrollan y mantienen el lenguaje Python y las librerías que usé, incluido el módulo de Turtle graphics; las herramientas que usé para desarrollar el libro, incluidos Jupyter y JupyterBook; y los servicios que usé, incluidos ChatGPT, Copilot, Colab y GitHub.\n", "\n", - "Thanks to the editors at Lulu who worked on *How to Think Like a Computer Scientist* and the editors at O'Reilly Media who worked on *Think Python*.\n", + "Gracias a los editores de Lulu que trabajaron en *How to Think Like a Computer Scientist* y a los editores de O'Reilly Media que trabajaron en *Think Python*.\n", "\n", - "Special thanks to the technical reviewers for the second edition, Melissa Lewis and Luciano Ramalho, and for the third edition, Sam Lau and Luciano Ramalho (again!).\n", - "I am also grateful to Luciano for developing the turtle graphics module I use in several chapters, called `jupyturtle`.\n", + "Un agradecimiento especial a los revisores técnicos de la segunda edición, Melissa Lewis y Luciano Ramalho, y de la tercera edición, Sam Lau y Luciano Ramalho (¡otra vez!).\n", + "También agradezco a Luciano haber desarrollado el turtle graphics módulo que uso en varios capítulos, llamado `jupyturtle`.\n", "\n", - "Thanks to all the students who worked with earlier versions of this book and all the contributors who sent in corrections and suggestions.\n", - "More than 100 sharp-eyed and thoughtful readers have sent in suggestions and corrections over the past few years. Their contributions, and enthusiasm for this project, have been a huge help.\n", + "Gracias a todos los estudiantes que trabajaron con versiones anteriores de este libro y a todos los colaboradores que enviaron correcciones y sugerencias.\n", + "Más de 100 lectores atentos y reflexivos han enviado sugerencias y correcciones durante los últimos años. Sus contribuciones, y su entusiasmo por este proyecto, han sido de enorme ayuda.\n", "\n", - "If you have a suggestion or correction, please send email to `feedback@thinkpython.com`.\n", - "If you include at least part of the sentence the error appears in, that\n", - "makes it easy for me to search. Page and section numbers are fine, too,\n", - "but not quite as easy to work with. Thanks!" + "Si tienes una sugerencia o corrección, envía un email a `feedback@thinkpython.com`.\n", + "Si incluyes al menos una parte de la frase en la que aparece el error, eso\n", + "me facilita la búsqueda. Los números de página y sección también sirven,\n", + "pero no son tan fáciles de manejar. ¡Gracias!" ] }, { @@ -225,13 +225,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Licencia del código: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] } ], diff --git a/blank/chap01.ipynb b/blank/chap01.ipynb index 7b758f0..3ec37ff 100644 --- a/blank/chap01.ipynb +++ b/blank/chap01.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -17,14 +17,14 @@ "tags": [] }, "source": [ - "# Welcome\n", + "# Bienvenida\n", "\n", - "This is the Jupyter notebook for Chapter 1 of [*Think Python*, 3rd edition](https://greenteapress.com/wp/think-python-3rd-edition), by Allen B. Downey.\n", + "Este es el Jupyter notebook del capítulo 1 de [*Think Python*, 3.ª edición](https://greenteapress.com/wp/think-python-3rd-edition), de Allen B. Downey.\n", "\n", - "If you are not familiar with Jupyter notebooks,\n", - "[click here for a short introduction](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/jupyter_intro.ipynb).\n", + "Si no conoces los Jupyter notebooks,\n", + "[haz clic aquí para ver una breve introducción](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/jupyter_intro.ipynb).\n", "\n", - "Then, if you are not already running this notebook on Colab, [click here to run this notebook on Colab](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/chap01.ipynb)." + "Luego, si aún no estás ejecutando este notebook en Colab, [haz clic aquí para ejecutar este notebook en Colab](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/chap01.ipynb)." ] }, { @@ -34,9 +34,9 @@ "tags": [] }, "source": [ - "The following cell downloads a file and runs some code that is used specifically for this book.\n", - "You don't have to understand this code yet, but you should run it before you do anything else in this notebook.\n", - "Remember that you can run the code by selecting the cell and pressing the play button (a triangle in a circle) or hold down `Shift` and press `Enter`." + "La siguiente celda descarga un archivo y ejecuta algo de código que se usa específicamente para este libro.\n", + "Todavía no tienes que entender este código, pero deberías ejecutarlo antes de hacer cualquier otra cosa en este notebook.\n", + "Recuerda que puedes ejecutar el código seleccionando la celda y pulsando el botón de reproducción (un triángulo dentro de un círculo) o manteniendo pulsada la tecla `Shift` y presionando `Enter`." ] }, { @@ -71,21 +71,21 @@ "tags": [] }, "source": [ - "# Programming as a way of thinking\n", + "# Programar como una forma de pensar\n", "\n", - "The first goal of this book is to teach you how to program in Python.\n", - "But learning to program means learning a new way to think, so the second goal of this book is to help you think like a computer scientist.\n", - "This way of thinking combines some of the best features of mathematics, engineering, and natural science.\n", - "Like mathematicians, computer scientists use formal languages to denote ideas -- specifically computations.\n", - "Like engineers, they design things, assembling components into systems and evaluating trade-offs among alternatives.\n", - "Like scientists, they observe the behavior of complex systems, form hypotheses, and test predictions.\n", + "El primer objetivo de este libro es enseñarte a programar en Python.\n", + "Pero aprender a programar implica aprender una nueva forma de pensar, así que el segundo objetivo de este libro es ayudarte a pensar como un científico de la computación.\n", + "Esta forma de pensar combina algunas de las mejores características de las matemáticas, la ingeniería y las ciencias naturales.\n", + "Como los matemáticos, los científicos de la computación usan lenguajes formales para expresar ideas -- específicamente, cómputos.\n", + "Como los ingenieros, diseñan cosas, ensamblan componentes en sistemas y evalúan las ventajas y desventajas de distintas alternativas.\n", + "Como los científicos, observan el comportamiento de sistemas complejos, formulan hipótesis y prueban predicciones.\n", "\n", - "We will start with the most basic elements of programming and work our way up.\n", - "In this chapter, we'll see how Python represents numbers, letters, and words.\n", - "And you'll learn to perform arithmetic operations.\n", + "Empezaremos con los elementos más básicos de la programación y avanzaremos poco a poco.\n", + "En este capítulo veremos cómo Python representa números, letras y palabras.\n", + "Y aprenderás a realizar operaciones aritméticas.\n", "\n", - "You will also start to learn the vocabulary of programming, including terms like operator, expression, value, and type.\n", - "This vocabulary is important -- you will need it to understand the rest of the book, to communicate with other programmers, and to use and understand virtual assistants." + "También empezarás a aprender el vocabulario de la programación, incluyendo términos como operador, expresión, valor y tipo.\n", + "Este vocabulario es importante -- lo necesitarás para entender el resto del libro, comunicarte con otros programadores y usar y entender asistentes virtuales." ] }, { @@ -93,9 +93,9 @@ "id": "a371aea3", "metadata": {}, "source": [ - "## Arithmetic operators\n", + "## Operadores aritméticos\n", "\n", - "An **arithmetic operator** is a symbol that represents an arithmetic computation. For example, the plus sign, `+`, performs addition." + "Un **operador aritmético** es un símbolo que representa un cálculo aritmético. Por ejemplo, el signo más, `+`, realiza una suma." ] }, { @@ -111,7 +111,7 @@ "id": "fc0e7ce8", "metadata": {}, "source": [ - "The minus sign, `-`, is the operator that performs subtraction." + "El signo menos, `-`, es el operador que realiza una resta." ] }, { @@ -127,7 +127,7 @@ "id": "63e4e780", "metadata": {}, "source": [ - "The asterisk, `*`, performs multiplication." + "El asterisco, `*`, realiza una multiplicación." ] }, { @@ -143,7 +143,7 @@ "id": "a6192d13", "metadata": {}, "source": [ - "And the forward slash, `/`, performs division:" + "Y la barra inclinada, `/`, realiza una división:" ] }, { @@ -159,16 +159,16 @@ "id": "641ad233", "metadata": {}, "source": [ - "Notice that the result of the division is `42.0` rather than `42`. That's because there are two types of numbers in Python: \n", + "Observa que el resultado de la división es `42.0` en lugar de `42`. Eso se debe a que hay dos tipos de números en Python: \n", "\n", - "* **integers**, which represent numbers with no fractional or decimal part, and \n", + "* **enteros**, que representan números sin parte fraccionaria o decimal, y \n", "\n", - "* **floating-point numbers**, which represent integers and numbers with a decimal point.\n", + "* **números de coma flotante**, que representan enteros y números con punto decimal.\n", "\n", - "If you add, subtract, or multiply two integers, the result is an integer.\n", - "But if you divide two integers, the result is a floating-point number.\n", - "Python provides another operator, `//`, that performs **integer division**.\n", - "The result of integer division is always an integer." + "Si sumas, restas o multiplicas dos enteros, el resultado es un entero.\n", + "Pero si divides dos enteros, el resultado es un número de coma flotante.\n", + "Python proporciona otro operador, `//`, que realiza **división entera**.\n", + "El resultado de la división entera siempre es un entero." ] }, { @@ -184,7 +184,7 @@ "id": "b2a620ab", "metadata": {}, "source": [ - "Integer division is also called \"floor division\" because it always rounds down (toward the \"floor\"). " + "La división entera también se llama \"división de piso\" porque siempre redondea hacia abajo (hacia el \"piso\"). " ] }, { @@ -200,8 +200,7 @@ "id": "41e2886a", "metadata": {}, "source": [ - "Finally, the operator `**` performs exponentiation; that is, it raises a\n", - "number to a power:" + "Por último, el operador `**` realiza exponenciación; es decir, eleva un número a una potencia:" ] }, { @@ -217,9 +216,8 @@ "id": "b2502fb6", "metadata": {}, "source": [ - "In some other languages, the caret, `^`, is used for exponentiation, but in Python\n", - "it is a bitwise operator called XOR.\n", - "If you are not familiar with bitwise operators, the result might be unexpected:" + "En algunos otros lenguajes, el acento circunflejo, `^`, se usa para la exponenciación, pero en Python es un operador bit a bit llamado XOR.\n", + "Si no conoces los operadores bit a bit, el resultado puede ser inesperado:" ] }, { @@ -235,8 +233,7 @@ "id": "30078370", "metadata": {}, "source": [ - "I won't cover bitwise operators in this book, but you can read about\n", - "them at ." + "No cubriré los operadores bit a bit en este libro, pero puedes leer sobre ellos en ." ] }, { @@ -244,11 +241,11 @@ "id": "0f5b7e97", "metadata": {}, "source": [ - "## Expressions\n", + "## Expresiones\n", "\n", - "A collection of operators and numbers is called an **expression**.\n", - "An expression can contain any number of operators and numbers.\n", - "For example, here's an expression that contains two operators." + "Un conjunto de operadores y números se llama una **expresión**.\n", + "Una expresión puede contener cualquier cantidad de operadores y números.\n", + "Por ejemplo, aquí hay una expresión que contiene dos operadores." ] }, { @@ -264,10 +261,10 @@ "id": "8e95039c", "metadata": {}, "source": [ - "Notice that exponentiation happens before addition.\n", - "Python follows the order of operations you might have learned in a math class: exponentiation happens before multiplication and division, which happen before addition and subtraction.\n", + "Observa que la exponenciación ocurre antes que la suma.\n", + "Python sigue el orden de operaciones que quizá aprendiste en clase de matemáticas: la exponenciación ocurre antes que la multiplicación y la división, que ocurren antes que la suma y la resta.\n", "\n", - "In the following example, multiplication happens before addition." + "En el siguiente ejemplo, la multiplicación ocurre antes que la suma." ] }, { @@ -283,7 +280,7 @@ "id": "914a60d8", "metadata": {}, "source": [ - "If you want the addition to happen first, you can use parentheses." + "Si quieres que la suma ocurra primero, puedes usar paréntesis." ] }, { @@ -299,8 +296,8 @@ "id": "67ae0ae9", "metadata": {}, "source": [ - "Every expression has a **value**.\n", - "For example, the expression `6 * 7` has the value `42`." + "Toda expresión tiene un **valor**.\n", + "Por ejemplo, la expresión `6 * 7` tiene el valor `42`." ] }, { @@ -308,10 +305,10 @@ "id": "caebaa51", "metadata": {}, "source": [ - "## Arithmetic functions\n", + "## Funciones aritméticas\n", "\n", - "In addition to the arithmetic operators, Python provides a few **functions** that work with numbers.\n", - "For example, the `round` function takes a floating-point number and rounds it off to the nearest integer." + "Además de los operadores aritméticos, Python proporciona algunas **funciones** que trabajan con números.\n", + "Por ejemplo, la función `round` toma un número de coma flotante y lo redondea al entero más cercano." ] }, { @@ -335,8 +332,8 @@ "id": "f5738b4b", "metadata": {}, "source": [ - "The `abs` function computes the absolute value of a number.\n", - "For a positive number, the absolute value is the number itself." + "La función `abs` calcula el valor absoluto de un número.\n", + "Para un número positivo, el valor absoluto es el propio número." ] }, { @@ -352,7 +349,7 @@ "id": "e518494a", "metadata": {}, "source": [ - "For a negative number, the absolute value is positive." + "Para un número negativo, el valor absoluto es positivo." ] }, { @@ -368,11 +365,11 @@ "id": "6969ce45", "metadata": {}, "source": [ - "When we use a function like this, we say we're **calling** the function.\n", - "An expression that calls a function is a **function call**.\n", + "Cuando usamos una función como esta, decimos que estamos **llamando** a la función.\n", + "Una expresión que llama a una función es una **llamada a función**.\n", "\n", - "When you call a function, the parentheses are required.\n", - "If you leave them out, you get an error message." + "Cuando llamas a una función, los paréntesis son obligatorios.\n", + "Si los omites, obtienes un mensaje de error." ] }, { @@ -382,8 +379,8 @@ "tags": [] }, "source": [ - "NOTE: The following cell uses `%%expect`, which is a Jupyter \"magic command\" that means we expect the code in this cell to produce an error. For more on this topic, see the\n", - "[Jupyter notebook introduction](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/jupyter_intro.ipynb)." + "NOTA: La siguiente celda usa `%%expect`, que es un \"magic command\" de Jupyter que significa que esperamos que el código de esta celda produzca un error. Para más información sobre este tema, consulta la\n", + "[introducción a Jupyter notebook](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/jupyter_intro.ipynb)." ] }, { @@ -401,13 +398,13 @@ "id": "7d356f1b", "metadata": {}, "source": [ - "You can ignore the first line of this message; it doesn't contain any information we need to understand right now.\n", - "The second line is the code that contains the error, with a caret (`^`) beneath it to indicate where the error was discovered.\n", + "Puedes ignorar la primera línea de este mensaje; no contiene ninguna información que necesitemos entender ahora mismo.\n", + "La segunda línea es el código que contiene el error, con un acento circunflejo (`^`) debajo para indicar dónde se descubrió el error.\n", "\n", - "The last line indicates that this is a **syntax error**, which means that there is something wrong with the structure of the expression.\n", - "In this example, the problem is that a function call requires parentheses.\n", + "La última línea indica que se trata de un **error de sintaxis**, lo que significa que hay algo incorrecto en la estructura de la expresión.\n", + "En este ejemplo, el problema es que una llamada a función requiere paréntesis.\n", "\n", - "Let's see what happens if you leave out the parentheses *and* the value." + "Veamos qué ocurre si omites los paréntesis *y* el valor." ] }, { @@ -423,8 +420,8 @@ "id": "94478885", "metadata": {}, "source": [ - "A function name all by itself is a legal expression that has a value.\n", - "When it's displayed, the value indicates that `abs` is a function, and it includes some additional information I'll explain later." + "Un nombre de función por sí solo es una expresión válida que tiene un valor.\n", + "Cuando se muestra, el valor indica que `abs` es una función e incluye información adicional que explicaré más adelante." ] }, { @@ -434,8 +431,8 @@ "source": [ "## Strings\n", "\n", - "In addition to numbers, Python can also represent sequences of letters, which are called **strings** because the letters are strung together like beads on a necklace.\n", - "To write a string, we can put a sequence of letters inside straight quotation marks." + "Además de números, Python también puede representar secuencias de letras, que se llaman **strings** porque las letras están ensartadas como cuentas en un collar.\n", + "Para escribir un string, podemos poner una secuencia de letras entre comillas rectas." ] }, { @@ -451,7 +448,7 @@ "id": "d20050d8", "metadata": {}, "source": [ - "It is also legal to use double quotation marks." + "También es válido usar comillas dobles." ] }, { @@ -467,7 +464,7 @@ "id": "76f5edb7", "metadata": {}, "source": [ - "Double quotes make it easy to write a string that contains an apostrophe, which is the same symbol as a straight quote." + "Las comillas dobles facilitan escribir un string que contiene un apóstrofo, que es el mismo símbolo que una comilla recta." ] }, { @@ -483,7 +480,7 @@ "id": "d62d4b1c", "metadata": {}, "source": [ - "Strings can also contain spaces, punctuation, and digits." + "Los strings también pueden contener espacios, signos de puntuación y dígitos." ] }, { @@ -499,7 +496,7 @@ "id": "9ad47f7a", "metadata": {}, "source": [ - "The `+` operator works with strings; it joins two strings into a single string, which is called **concatenation**" + "El operador `+` funciona con strings; une dos strings en un solo string, lo que se llama **concatenación**" ] }, { @@ -515,7 +512,7 @@ "id": "0ad969a3", "metadata": {}, "source": [ - "The `*` operator also works with strings; it makes multiple copies of a string and concatenates them." + "El operador `*` también funciona con strings; hace varias copias de un string y las concatena." ] }, { @@ -531,9 +528,9 @@ "id": "dfba16a5", "metadata": {}, "source": [ - "The other arithmetic operators don't work with strings.\n", + "Los otros operadores aritméticos no funcionan con strings.\n", "\n", - "Python provides a function called `len` that computes the length of a string." + "Python proporciona una función llamada `len` que calcula la longitud de un string." ] }, { @@ -549,10 +546,10 @@ "id": "d91e00b3", "metadata": {}, "source": [ - "Notice that `len` counts the letters between the quotes, but not the quotes.\n", + "Observa que `len` cuenta las letras entre las comillas, pero no las comillas.\n", "\n", - "When you create a string, be sure to use straight quotes.\n", - "The back quote, also known as a backtick, causes a syntax error." + "Cuando crees un string, asegúrate de usar comillas rectas.\n", + "La comilla invertida, también conocida como backtick, causa un error de sintaxis." ] }, { @@ -570,7 +567,7 @@ "id": "40d893d1", "metadata": {}, "source": [ - "Smart quotes, also known as curly quotes, are also illegal." + "Las comillas tipográficas, también conocidas como comillas curvas, tampoco son válidas." ] }, { @@ -588,21 +585,21 @@ "id": "5471d4f8", "metadata": {}, "source": [ - "## Values and types\n", + "## Valores y tipos\n", "\n", - "So far we've seen three kinds of values:\n", + "Hasta ahora hemos visto tres clases de valores:\n", "\n", - "* `2` is an integer,\n", + "* `2` es un entero,\n", "\n", - "* `42.0` is a floating-point number, and \n", + "* `42.0` es un número de coma flotante, y \n", "\n", - "* `'Hello'` is a string.\n", + "* `'Hello'` es un string.\n", "\n", - "A kind of value is called a **type**.\n", - "Every value has a type -- or we sometimes say it \"belongs to\" a type.\n", + "Una clase de valor se llama **tipo**.\n", + "Todo valor tiene un tipo -- o a veces decimos que \"pertenece a\" un tipo.\n", "\n", - "Python provides a function called `type` that tells you the type of any value.\n", - "The type of an integer is `int`." + "Python proporciona una función llamada `type` que te dice el tipo de cualquier valor.\n", + "El tipo de un entero es `int`." ] }, { @@ -618,7 +615,7 @@ "id": "b137814c", "metadata": {}, "source": [ - "The type of a floating-point number is `float`." + "El tipo de un número de coma flotante es `float`." ] }, { @@ -634,7 +631,7 @@ "id": "266dea4e", "metadata": {}, "source": [ - "And the type of a string is `str`." + "Y el tipo de un string es `str`." ] }, { @@ -650,8 +647,8 @@ "id": "76d216ed", "metadata": {}, "source": [ - "The types `int`, `float`, and `str` can be used as functions.\n", - "For example, `int` can take a floating-point number and convert it to an integer (always rounding down)." + "Los tipos `int`, `float` y `str` se pueden usar como funciones.\n", + "Por ejemplo, `int` puede tomar un número de coma flotante y convertirlo en un entero (siempre redondeando hacia abajo)." ] }, { @@ -667,7 +664,7 @@ "id": "dcd8d114", "metadata": {}, "source": [ - "And `float` can convert an integer to a floating-point value." + "Y `float` puede convertir un entero en un valor de punto flotante." ] }, { @@ -683,8 +680,8 @@ "id": "eda70b61", "metadata": {}, "source": [ - "Now, here's something that can be confusing.\n", - "What do you get if you put a sequence of digits in quotes?" + "Ahora, aquí hay algo que puede ser confuso.\n", + "¿Qué obtienes si pones una secuencia de dígitos entre comillas?" ] }, { @@ -700,7 +697,7 @@ "id": "fdded653", "metadata": {}, "source": [ - "It looks like a number, but it is actually a string." + "Parece un número, pero en realidad es un string." ] }, { @@ -716,7 +713,7 @@ "id": "2683ac35", "metadata": {}, "source": [ - "If you try to use it like a number, you might get an error." + "Si intentas usarlo como un número, puede que obtengas un error." ] }, { @@ -734,10 +731,10 @@ "id": "32c11cc4", "metadata": {}, "source": [ - "This example generates a `TypeError`, which means that the values in the expression, which are called **operands**, have the wrong type.\n", - "The error message indicates that the `/` operator does not support the types of these values, which are `str` and `int`.\n", + "Este ejemplo genera un `TypeError`, lo que significa que los valores de la expresión, que se llaman **operandos**, tienen el tipo incorrecto.\n", + "El mensaje de error indica que el operador `/` no admite los tipos de estos valores, que son `str` e `int`.\n", "\n", - "If you have a string that contains digits, you can use `int` to convert it to an integer." + "Si tienes un string que contiene dígitos, puedes usar `int` para convertirlo en un entero." ] }, { @@ -753,7 +750,7 @@ "id": "86935d56", "metadata": {}, "source": [ - "If you have a string that contains digits and a decimal point, you can use `float` to convert it to a floating-point number." + "Si tienes un string que contiene dígitos y un punto decimal, puedes usar `float` para convertirlo en un número de coma flotante." ] }, { @@ -769,9 +766,8 @@ "id": "03103ef4", "metadata": {}, "source": [ - "When you write a large integer, you might be tempted to use commas\n", - "between groups of digits, as in `1,000,000`.\n", - "This is a legal expression in Python, but the result is not an integer." + "Cuando escribes un entero grande, puede que te sientas tentado a usar comas entre grupos de dígitos, como en `1,000,000`.\n", + "Esta es una expresión válida en Python, pero el resultado no es un entero." ] }, { @@ -787,10 +783,10 @@ "id": "3d24af71", "metadata": {}, "source": [ - "Python interprets `1,000,000` as a comma-separated sequence of integers.\n", - "We'll learn more about this kind of sequence later.\n", + "Python interpreta `1,000,000` como una secuencia de enteros separados por comas.\n", + "Aprenderemos más sobre este tipo de secuencia más adelante.\n", "\n", - "You can use underscores to make large numbers easier to read." + "Puedes usar guiones bajos para que los números grandes sean más fáciles de leer." ] }, { @@ -806,13 +802,13 @@ "id": "1761cbac", "metadata": {}, "source": [ - "## Formal and natural languages\n", + "## Lenguajes formales y naturales\n", "\n", - "**Natural languages** are the languages people speak, like English, Spanish, and French. They were not designed by people; they evolved naturally.\n", + "Los **lenguajes naturales** son los idiomas que hablan las personas, como inglés, español y francés. No fueron diseñados por personas; evolucionaron de forma natural.\n", "\n", - "**Formal languages** are languages that are designed by people for specific applications. \n", - "For example, the notation that mathematicians use is a formal language that is particularly good at denoting relationships among numbers and symbols.\n", - "Similarly, programming languages are formal languages that have been designed to express computations." + "Los **lenguajes formales** son lenguajes diseñados por personas para aplicaciones específicas. \n", + "Por ejemplo, la notación que usan los matemáticos es un lenguaje formal especialmente bueno para representar relaciones entre números y símbolos.\n", + "De forma similar, los lenguajes de programación son lenguajes formales diseñados para expresar cómputos." ] }, { @@ -820,19 +816,13 @@ "id": "1bf3d2dc", "metadata": {}, "source": [ - "Although formal and natural languages have some features in\n", - "common there are important differences:\n", + "Aunque los lenguajes formales y naturales tienen algunas características en común, hay diferencias importantes:\n", "\n", - "* Ambiguity: Natural languages are full of ambiguity, which people deal with by\n", - " using contextual clues and other information. Formal languages are\n", - " designed to be nearly or completely unambiguous, which means that\n", - " any program has exactly one meaning, regardless of context.\n", + "* Ambigüedad: Los lenguajes naturales están llenos de ambigüedad, que las personas manejan usando pistas contextuales y otra información. Los lenguajes formales están diseñados para ser casi o completamente no ambiguos, lo que significa que cualquier programa tiene exactamente un significado, independientemente del contexto.\n", "\n", - "* Redundancy: In order to make up for ambiguity and reduce misunderstandings,\n", - " natural languages use redundancy. As a result, they are\n", - " often verbose. Formal languages are less redundant and more concise.\n", + "* Redundancia: Para compensar la ambigüedad y reducir malentendidos, los lenguajes naturales usan redundancia. Como resultado, a menudo son verbosos. Los lenguajes formales son menos redundantes y más concisos.\n", "\n", - "* Literalness: Natural languages are full of idiom and metaphor. Formal languages mean exactly what they say." + "* Literalidad: Los lenguajes naturales están llenos de modismos y metáforas. Los lenguajes formales significan exactamente lo que dicen." ] }, { @@ -840,12 +830,10 @@ "id": "78a1cec8", "metadata": {}, "source": [ - "Because we all grow up speaking natural languages, it is sometimes hard to adjust to formal languages.\n", - "Formal languages are more dense than natural languages, so it takes longer to read them.\n", - "Also, the structure is important, so it is not always best to read from top to bottom, left to right.\n", - "Finally, the details matter. Small errors in spelling and\n", - "punctuation, which you can get away with in natural languages, can make\n", - "a big difference in a formal language." + "Como todos crecemos hablando lenguajes naturales, a veces cuesta adaptarse a los lenguajes formales.\n", + "Los lenguajes formales son más densos que los lenguajes naturales, así que lleva más tiempo leerlos.\n", + "Además, la estructura es importante, por lo que no siempre es mejor leer de arriba abajo, de izquierda a derecha.\n", + "Por último, los detalles importan. Pequeños errores de ortografía y puntuación, que puedes tolerar en los lenguajes naturales, pueden marcar una gran diferencia en un lenguaje formal." ] }, { @@ -855,15 +843,15 @@ "source": [ "## Debugging\n", "\n", - "Programmers make mistakes. For whimsical reasons, programming errors are called **bugs** and the process of tracking them down is called **debugging**.\n", + "Los programadores cometen errores. Por razones caprichosas, los errores de programación se llaman **bugs** y el proceso de encontrarlos se llama **debugging**.\n", "\n", - "Programming, and especially debugging, sometimes brings out strong emotions. If you are struggling with a difficult bug, you might feel angry, sad, or embarrassed.\n", + "Programar, y especialmente debugging, a veces provoca emociones intensas. Si estás luchando con un bug difícil, puede que sientas enfado, tristeza o vergüenza.\n", "\n", - "Preparing for these reactions might help you deal with them. One approach is to think of the computer as an employee with certain strengths, like speed and precision, and particular weaknesses, like lack of empathy and inability to grasp the big picture.\n", + "Prepararte para estas reacciones puede ayudarte a manejarlas. Un enfoque es pensar en la computadora como un empleado con ciertas fortalezas, como velocidad y precisión, y debilidades particulares, como falta de empatía e incapacidad para captar el panorama general.\n", "\n", - "Your job is to be a good manager: find ways to take advantage of the strengths and mitigate the weaknesses. And find ways to use your emotions to engage with the problem, without letting your reactions interfere with your ability to work effectively.\n", + "Tu trabajo es ser un buen gerente: encontrar formas de aprovechar las fortalezas y mitigar las debilidades. Y encontrar formas de usar tus emociones para involucrarte con el problema, sin dejar que tus reacciones interfieran con tu capacidad de trabajar eficazmente.\n", "\n", - "Learning to debug can be frustrating, but it is a valuable skill that is useful for many activities beyond programming. At the end of each chapter there is a section, like this one, with my suggestions for debugging. I hope they help!" + "Aprender a debug puede ser frustrante, pero es una habilidad valiosa que resulta útil para muchas actividades más allá de la programación. Al final de cada capítulo hay una sección, como esta, con mis sugerencias para debugging. ¡Espero que te ayuden!" ] }, { @@ -871,62 +859,62 @@ "id": "33b8ad00", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**arithmetic operator:**\n", - "A symbol, like `+` and `*`, that denotes an arithmetic operation like addition or multiplication.\n", + "**operador aritmético:**\n", + "Un símbolo, como `+` y `*`, que denota una operación aritmética como suma o multiplicación.\n", "\n", - "**integer:**\n", - "A type that represents numbers with no fractional or decimal part.\n", + "**entero:**\n", + "Un tipo que representa números sin parte fraccionaria o decimal.\n", "\n", - "**floating-point:**\n", - "A type that represents integers and numbers with decimal parts.\n", + "**número de coma flotante:**\n", + "Un tipo que representa enteros y números con partes decimales.\n", "\n", - "**integer division:**\n", - "An operator, `//`, that divides two numbers and rounds down to an integer.\n", + "**división entera:**\n", + "Un operador, `//`, que divide dos números y redondea hacia abajo a un entero.\n", "\n", - "**expression:**\n", - "A combination of variables, values, and operators.\n", + "**expresión:**\n", + "Una combinación de variables, valores y operadores.\n", "\n", - "**value:**\n", - "An integer, floating-point number, or string -- or one of other kinds of values we will see later.\n", + "**valor:**\n", + "Un entero, número de coma flotante o string -- u otro de los tipos de valores que veremos más adelante.\n", "\n", - "**function:**\n", - "A named sequence of statements that performs some useful operation.\n", - "Functions may or may not take arguments and may or may not produce a result.\n", + "**función:**\n", + "Una secuencia con nombre de sentencias que realiza alguna operación útil.\n", + "Las funciones pueden tomar argumentos o no, y pueden producir un resultado o no.\n", "\n", - "**function call:**\n", - "An expression -- or part of an expression -- that runs a function.\n", - "It consists of the function name followed by an argument list in parentheses.\n", + "**llamada a función:**\n", + "Una expresión -- o parte de una expresión -- que ejecuta una función.\n", + "Consiste en el nombre de la función seguido de una lista de argumentos entre paréntesis.\n", "\n", - "**syntax error:**\n", - "An error in a program that makes it impossible to parse -- and therefore impossible to run.\n", + "**error de sintaxis:**\n", + "Un error en un programa que hace imposible analizarlo -- y por lo tanto imposible ejecutarlo.\n", "\n", "**string:**\n", - " A type that represents sequences of characters.\n", + " Un tipo que representa secuencias de caracteres.\n", "\n", - "**concatenation:**\n", - "Joining two strings end-to-end.\n", + "**concatenación:**\n", + "Unir dos strings extremo con extremo.\n", "\n", - "**type:**\n", - "A category of values.\n", - "The types we have seen so far are integers (type `int`), floating-point numbers (type ` float`), and strings (type `str`).\n", + "**tipo:**\n", + "Una categoría de valores.\n", + "Los tipos que hemos visto hasta ahora son enteros (tipo `int`), números de coma flotante (tipo ` float`) y strings (tipo `str`).\n", "\n", - "**operand:**\n", - "One of the values on which an operator operates.\n", + "**operando:**\n", + "Uno de los valores sobre los que opera un operador.\n", "\n", - "**natural language:**\n", - "Any of the languages that people speak that evolved naturally.\n", + "**lenguaje natural:**\n", + "Cualquiera de los idiomas que hablan las personas y que evolucionaron de forma natural.\n", "\n", - "**formal language:**\n", - "Any of the languages that people have designed for specific purposes, such as representing mathematical ideas or computer programs.\n", - "All programming languages are formal languages.\n", + "**lenguaje formal:**\n", + "Cualquiera de los lenguajes que las personas han diseñado para propósitos específicos, como representar ideas matemáticas o programas de computadora.\n", + "Todos los lenguajes de programación son lenguajes formales.\n", "\n", "**bug:**\n", - "An error in a program.\n", + "Un error en un programa.\n", "\n", "**debugging:**\n", - "The process of finding and correcting errors." + "El proceso de encontrar y corregir errores." ] }, { @@ -934,7 +922,7 @@ "id": "ed4ec01b", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -957,15 +945,15 @@ "id": "23adf208", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregúntale a un asistente virtual\n", "\n", - "As you work through this book, there are several ways you can use a virtual assistant or chatbot to help you learn.\n", + "A medida que avances en este libro, hay varias formas en las que puedes usar un asistente virtual o chatbot para ayudarte a aprender.\n", "\n", - "* If you want to learn more about a topic in the chapter, or anything is unclear, you can ask for an explanation.\n", + "* Si quieres aprender más sobre un tema del capítulo, o algo no está claro, puedes pedir una explicación.\n", "\n", - "* If you are having a hard time with any of the exercises, you can ask for help.\n", + "* Si tienes dificultades con alguno de los ejercicios, puedes pedir ayuda.\n", "\n", - "In each chapter, I'll suggest exercises you can do with a virtual assistant, but I encourage you to try things on your own and see what works for you." + "En cada capítulo sugeriré ejercicios que puedes hacer con un asistente virtual, pero te animo a probar cosas por tu cuenta y ver qué te funciona." ] }, { @@ -973,15 +961,15 @@ "id": "ebf1a451", "metadata": {}, "source": [ - "Here are some topics you could ask a virtual assistant about:\n", + "Aquí tienes algunos temas sobre los que podrías preguntar a un asistente virtual:\n", "\n", - "* Earlier I mentioned bitwise operators but I didn't explain why the value of `7 ^ 2` is 5. Try asking \"What are the bitwise operators in Python?\" or \"What is the value of `7 XOR 2`?\"\n", + "* Antes mencioné los operadores bit a bit, pero no expliqué por qué el valor de `7 ^ 2` es 5. Prueba a preguntar \"¿Cuáles son los operadores bit a bit en Python?\" o \"¿Cuál es el valor de `7 XOR 2`?\"\n", "\n", - "* I also mentioned the order of operations. For more details, ask \"What is the order of operations in Python?\"\n", + "* También mencioné el orden de operaciones. Para más detalles, pregunta \"¿Cuál es el orden de las operaciones en Python?\"\n", "\n", - "* The `round` function, which we used to round a floating-point number to the nearest integer, can take a second argument. Try asking \"What are the arguments of the round function?\" or \"How do I round pi off to three decimal places?\"\n", + "* La función `round`, que usamos para redondear un número de coma flotante al entero más cercano, puede tomar un segundo argumento. Prueba a preguntar \"¿Cuáles son los argumentos de la función round?\" o \"¿Cómo redondeo pi a tres decimales?\"\n", "\n", - "* There's one more arithmetic operator I didn't mention; try asking \"What is the modulus operator in Python?\"" + "* Hay un operador aritmético más que no mencioné; prueba a preguntar \"¿Qué es el operador módulo en Python?\"" ] }, { @@ -989,9 +977,9 @@ "id": "9be3e1c7", "metadata": {}, "source": [ - "Most virtual assistants know about Python, so they answer questions like this pretty reliably.\n", - "But remember that these tools make mistakes.\n", - "If you get code from a chatbot, test it!" + "La mayoría de los asistentes virtuales saben sobre Python, así que responden preguntas como estas de forma bastante fiable.\n", + "Pero recuerda que estas herramientas cometen errores.\n", + "Si obtienes código de un chatbot, ¡pruébalo!" ] }, { @@ -999,11 +987,11 @@ "id": "03c1ef93", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "You might wonder what `round` does if a number ends in `0.5`.\n", - "The answer is that it sometimes rounds up and sometimes rounds down.\n", - "Try these examples and see if you can figure out what rule it follows." + "Quizá te preguntes qué hace `round` si un número termina en `0.5`.\n", + "La respuesta es que a veces redondea hacia arriba y a veces hacia abajo.\n", + "Prueba estos ejemplos y mira si puedes averiguar qué regla sigue." ] }, { @@ -1027,7 +1015,7 @@ "id": "dd2f890e", "metadata": {}, "source": [ - "If you are curious, ask a virtual assistant, \"If a number ends in 0.5, does Python round up or down?\"" + "Si tienes curiosidad, pregunta a un asistente virtual: \"Si un número termina en 0.5, ¿Python redondea hacia arriba o hacia abajo?\"" ] }, { @@ -1035,17 +1023,17 @@ "id": "2cd03bcb", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "When you learn about a new feature, you should try it out and make mistakes on purpose.\n", - "That way, you learn the error messages, and when you see them again, you will know what they mean.\n", - "It is better to make mistakes now and deliberately than later and accidentally.\n", + "Cuando aprendes una característica nueva, deberías probarla y cometer errores a propósito.\n", + "Así aprendes los mensajes de error y, cuando los vuelvas a ver, sabrás qué significan.\n", + "Es mejor cometer errores ahora y deliberadamente que más tarde y accidentalmente.\n", "\n", - "1. You can use a minus sign to make a negative number like `-2`. What happens if you put a plus sign before a number? What about `2++2`?\n", + "1. Puedes usar un signo menos para crear un número negativo como `-2`. ¿Qué ocurre si pones un signo más delante de un número? ¿Y con `2++2`?\n", "\n", - "2. What happens if you have two values with no operator between them, like `4 2`?\n", + "2. ¿Qué ocurre si tienes dos valores sin operador entre ellos, como `4 2`?\n", "\n", - "3. If you call a function like `round(42.5)`, what happens if you leave out one or both parentheses?" + "3. Si llamas a una función como `round(42.5)`, ¿qué ocurre si omites uno o ambos paréntesis?" ] }, { @@ -1053,11 +1041,11 @@ "id": "1fb0adfe", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Recall that every expression has a value, every value has a type, and we can use the `type` function to find the type of any value.\n", + "Recuerda que toda expresión tiene un valor, todo valor tiene un tipo, y podemos usar la función `type` para encontrar el tipo de cualquier valor.\n", "\n", - "What is the type of the value of the following expressions? Make your best guess for each one, and then use `type` to find out.\n", + "¿Cuál es el tipo del valor de las siguientes expresiones? Haz tu mejor conjetura para cada una y luego usa `type` para averiguarlo.\n", "\n", "* `765`\n", "\n", @@ -1081,22 +1069,22 @@ "id": "23762eec", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The following questions give you a chance to practice writing arithmetic expressions.\n", + "Las siguientes preguntas te dan la oportunidad de practicar escribiendo expresiones aritméticas.\n", "\n", - "1. How many seconds are there in 42 minutes 42 seconds?\n", + "1. ¿Cuántos segundos hay en 42 minutos y 42 segundos?\n", "\n", - "2. How many miles are there in 10 kilometers? Hint: there are 1.61 kilometers in a mile.\n", + "2. ¿Cuántas millas hay en 10 kilómetros? Pista: hay 1,61 kilómetros en una milla.\n", "\n", - "3. If you run a 10 kilometer race in 42 minutes 42 seconds, what is your average pace in seconds per mile? \n", + "3. Si corres una carrera de 10 kilómetros en 42 minutos y 42 segundos, ¿cuál es tu ritmo medio en segundos por milla? \n", " \n", - "4. What is your average pace in minutes and seconds per mile?\n", + "4. ¿Cuál es tu ritmo medio en minutos y segundos por milla?\n", "\n", - "5. What is your average speed in miles per hour?\n", + "5. ¿Cuál es tu velocidad media en millas por hora?\n", "\n", - "If you already know about variables, you can use them for this exercise.\n", - "If you don't, you can do the exercise without them -- and then we'll see them in the next chapter." + "Si ya sabes sobre variables, puedes usarlas para este ejercicio.\n", + "Si no, puedes hacer el ejercicio sin ellas -- y luego las veremos en el siguiente capítulo." ] }, { @@ -1170,13 +1158,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/blank/chap02.ipynb b/blank/chap02.ipynb index 345e793..b988c84 100644 --- a/blank/chap02.ipynb +++ b/blank/chap02.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -41,12 +41,12 @@ "id": "d0286422", "metadata": {}, "source": [ - "# Variables and Statements\n", + "# Variables y sentencias\n", "\n", - "In the previous chapter, we used operators to write expressions that perform arithmetic computations.\n", + "En el capítulo anterior usamos operadores para escribir expresiones que realizan cálculos aritméticos.\n", "\n", - "In this chapter, you'll learn about variables and statements, the `import` statement, and the `print` function.\n", - "And I'll introduce more of the vocabulary we use to talk about programs, including \"argument\" and \"module\".\n" + "En este capítulo aprenderás sobre variables y sentencias, la sentencia `import` y la función `print`.\n", + "Y presentaré más vocabulario que usamos para hablar de programas, incluyendo \"argumento\" y \"módulo\".\n" ] }, { @@ -56,8 +56,8 @@ "source": [ "## Variables\n", "\n", - "A **variable** is a name that refers to a value.\n", - "To create a variable, we can write a **assignment statement** like this." + "Una **variable** es un nombre que se refiere a un valor.\n", + "Para crear una variable, podemos escribir una **sentencia de asignación** como esta." ] }, { @@ -73,9 +73,9 @@ "id": "52f187f1", "metadata": {}, "source": [ - "An assignment statement has three parts: the name of the variable on the left, the equals operator, `=`, and an expression on the right.\n", - "In this example, the expression is an integer.\n", - "In the following example, the expression is a floating-point number." + "Una sentencia de asignación tiene tres partes: el nombre de la variable a la izquierda, el operador igual, `=`, y una expresión a la derecha.\n", + "En este ejemplo, la expresión es un entero.\n", + "En el siguiente ejemplo, la expresión es un número de punto flotante." ] }, { @@ -91,7 +91,7 @@ "id": "3e27e65c", "metadata": {}, "source": [ - "And in the following example, the expression is a string." + "Y en el siguiente ejemplo, la expresión es un string." ] }, { @@ -107,10 +107,10 @@ "id": "cb5916ea", "metadata": {}, "source": [ - "When you run an assignment statement, there is no output.\n", - "Python creates the variable and gives it a value, but the assignment statement has no visible effect.\n", - "However, after creating a variable, you can use it as an expression.\n", - "So we can display the value of `message` like this:" + "Cuando ejecutas una sentencia de asignación, no hay salida.\n", + "Python crea la variable y le da un valor, pero la sentencia de asignación no tiene ningún efecto visible.\n", + "Sin embargo, después de crear una variable, puedes usarla como una expresión.\n", + "Así que podemos mostrar el valor de `message` así:" ] }, { @@ -126,7 +126,7 @@ "id": "e3fd81de", "metadata": {}, "source": [ - "You can also use a variable as part of an expression with arithmetic operators." + "También puedes usar una variable como parte de una expresión con operadores aritméticos." ] }, { @@ -150,7 +150,7 @@ "id": "97396e7d", "metadata": {}, "source": [ - "And you can use a variable when you call a function." + "Y puedes usar una variable cuando llamas a una función." ] }, { @@ -174,10 +174,9 @@ "id": "397d9da3", "metadata": {}, "source": [ - "## State diagrams\n", + "## Diagramas de estado\n", "\n", - "A common way to represent variables on paper is to write the name with\n", - "an arrow pointing to its value. " + "Una forma común de representar variables en papel es escribir el nombre con una flecha apuntando a su valor. " ] }, { @@ -223,8 +222,8 @@ "id": "6f40da93", "metadata": {}, "source": [ - "This kind of figure is called a **state diagram** because it shows what state each of the variables is in (think of it as the variable's state of mind).\n", - "We'll use state diagrams throughout the book to represent a model of how Python stores variables and their values." + "Este tipo de figura se llama **diagrama de estado** porque muestra en qué estado está cada una de las variables (piensa en ello como el estado mental de la variable).\n", + "Usaremos diagramas de estado a lo largo del libro para representar un modelo de cómo Python almacena variables y sus valores." ] }, { @@ -232,16 +231,15 @@ "id": "ba252c85", "metadata": {}, "source": [ - "## Variable names\n", + "## Nombres de variables\n", "\n", - "Variable names can be as long as you like. They can contain both letters and numbers, but they can't begin with a number. \n", - "It is legal to use uppercase letters, but it is conventional to use only lower case for\n", - "variable names.\n", + "Los nombres de variables pueden ser tan largos como quieras. Pueden contener letras y números, pero no pueden comenzar con un número. \n", + "Es válido usar letras mayúsculas, pero lo convencional es usar solo minúsculas para los nombres de variables.\n", "\n", - "The only punctuation that can appear in a variable name is the underscore character, `_`. It is often used in names with multiple words, such as `your_name` or `airspeed_of_unladen_swallow`.\n", + "El único signo de puntuación que puede aparecer en un nombre de variable es el carácter de guion bajo, `_`. Se usa a menudo en nombres con varias palabras, como `your_name` o `airspeed_of_unladen_swallow`.\n", "\n", - "If you give a variable an illegal name, you get a syntax error.\n", - "The name `million!` is illegal because it contains punctuation." + "Si le das a una variable un nombre no válido, obtienes un error de sintaxis.\n", + "El nombre `million!` no es válido porque contiene puntuación." ] }, { @@ -259,7 +257,7 @@ "id": "a1cefe3e", "metadata": {}, "source": [ - "`76trombones` is illegal because it starts with a number." + "`76trombones` no es válido porque empieza con un número." ] }, { @@ -277,7 +275,7 @@ "id": "94aa7e60", "metadata": {}, "source": [ - "`class` is also illegal, but it might not be obvious why." + "`class` tampoco es válido, pero puede que no sea obvio por qué." ] }, { @@ -295,10 +293,10 @@ "id": "784cfb5c", "metadata": {}, "source": [ - "It turns out that `class` is a **keyword**, which is a special word used to specify the structure of a program.\n", - "Keywords can't be used as variable names.\n", + "Resulta que `class` es una **palabra clave**, que es una palabra especial usada para especificar la estructura de un programa.\n", + "Las palabras clave no se pueden usar como nombres de variables.\n", "\n", - "Here's a complete list of Python's keywords:" + "Aquí tienes una lista completa de las palabras clave de Python:" ] }, { @@ -332,9 +330,7 @@ "id": "6f14d301", "metadata": {}, "source": [ - "You don't have to memorize this list. In most development environments,\n", - "keywords are displayed in a different color; if you try to use one as a\n", - "variable name, you'll know." + "No tienes que memorizar esta lista. En la mayoría de los entornos de desarrollo, las palabras clave se muestran en un color diferente; si intentas usar una como nombre de variable, lo sabrás." ] }, { @@ -342,10 +338,10 @@ "id": "c954a3b0", "metadata": {}, "source": [ - "## The import statement\n", + "## La sentencia import\n", "\n", - "In order to use some Python features, you have to **import** them.\n", - "For example, the following statement imports the `math` module." + "Para usar algunas características de Python, tienes que **importarlas**.\n", + "Por ejemplo, la siguiente sentencia importa el módulo `math`." ] }, { @@ -361,9 +357,9 @@ "id": "ea4f75ec", "metadata": {}, "source": [ - "A **module** is a collection of variables and functions.\n", - "The math module provides a variable called `pi` that contains the value of the mathematical constant denoted $\\pi$.\n", - "We can display its value like this." + "Un **módulo** es una colección de variables y funciones.\n", + "El módulo math proporciona una variable llamada `pi` que contiene el valor de la constante matemática denotada $\\pi$.\n", + "Podemos mostrar su valor así." ] }, { @@ -379,10 +375,10 @@ "id": "c96106e4", "metadata": {}, "source": [ - "To use a variable in a module, you have to use the **dot operator** (`.`) between the name of the module and the name of the variable.\n", + "Para usar una variable de un módulo, tienes que usar el **operador punto** (`.`) entre el nombre del módulo y el nombre de la variable.\n", "\n", - "The math module also contains functions.\n", - "For example, `sqrt` computes square roots." + "El módulo math también contiene funciones.\n", + "Por ejemplo, `sqrt` calcula raíces cuadradas." ] }, { @@ -398,7 +394,7 @@ "id": "185e94a3", "metadata": {}, "source": [ - "And `pow` raises one number to the power of a second number." + "Y `pow` eleva un número a la potencia de un segundo número." ] }, { @@ -414,8 +410,8 @@ "id": "5df25a9a", "metadata": {}, "source": [ - "At this point we've seen two ways to raise a number to a power: we can use the `math.pow` function or the exponentiation operator, `**`.\n", - "Either one is fine, but the operator is used more often than the function." + "En este punto hemos visto dos formas de elevar un número a una potencia: podemos usar la función `math.pow` o el operador de exponenciación, `**`.\n", + "Cualquiera de las dos está bien, pero el operador se usa más a menudo que la función." ] }, { @@ -423,13 +419,13 @@ "id": "6538f22b", "metadata": {}, "source": [ - "## Expressions and statements\n", + "## Expresiones y sentencias\n", "\n", - "So far, we've seen a few kinds of expressions.\n", - "An expression can be a single value, like an integer, floating-point number, or string.\n", - "It can also be a collection of values and operators.\n", - "And it can include variable names and function calls.\n", - "Here's an expression that includes several of these elements." + "Hasta ahora hemos visto algunos tipos de expresiones.\n", + "Una expresión puede ser un solo valor, como un entero, un número de punto flotante o un string.\n", + "También puede ser una colección de valores y operadores.\n", + "Y puede incluir nombres de variables y llamadas a funciones.\n", + "Aquí hay una expresión que incluye varios de estos elementos." ] }, { @@ -445,9 +441,9 @@ "id": "000dd2ba", "metadata": {}, "source": [ - "We have also seen a few kind of statements.\n", - "A **statement** is a unit of code that has an effect, but no value.\n", - "For example, an assignment statement creates a variable and gives it a value, but the statement itself has no value." + "También hemos visto algunos tipos de sentencias.\n", + "Una **sentencia** es una unidad de código que tiene un efecto, pero no un valor.\n", + "Por ejemplo, una sentencia de asignación crea una variable y le da un valor, pero la sentencia en sí no tiene valor." ] }, { @@ -463,7 +459,7 @@ "id": "cff0414b", "metadata": {}, "source": [ - "Similarly, an import statement has an effect -- it imports a module so we can use the variables and functions it contains -- but it has no visible effect." + "De forma similar, una sentencia import tiene un efecto -- importa un módulo para que podamos usar las variables y funciones que contiene -- pero no tiene efecto visible." ] }, { @@ -479,8 +475,8 @@ "id": "2aeb1000", "metadata": {}, "source": [ - "Computing the value of an expression is called **evaluation**.\n", - "Running a statement is called **execution**." + "Calcular el valor de una expresión se llama **evaluación**.\n", + "Ejecutar una sentencia se llama **ejecución**." ] }, { @@ -488,9 +484,9 @@ "id": "f61601e4", "metadata": {}, "source": [ - "## The print function\n", + "## La función print\n", "\n", - "When you evaluate an expression, the result is displayed." + "Cuando evalúas una expresión, se muestra el resultado." ] }, { @@ -506,7 +502,7 @@ "id": "efacf0fa", "metadata": {}, "source": [ - "But if you evaluate more than one expression, only the value of the last one is displayed." + "Pero si evalúas más de una expresión, solo se muestra el valor de la última." ] }, { @@ -522,7 +518,7 @@ "id": "cf2b991d", "metadata": {}, "source": [ - "To display more than one value, you can use the `print` function." + "Para mostrar más de un valor, puedes usar la función `print`." ] }, { @@ -538,7 +534,7 @@ "id": "29af1f89", "metadata": {}, "source": [ - "It also works with floating-point numbers and strings." + "También funciona con números de punto flotante y strings." ] }, { @@ -554,7 +550,7 @@ "id": "8b4d7f4a", "metadata": {}, "source": [ - "You can also use a sequence of expressions separated by commas." + "También puedes usar una secuencia de expresiones separadas por comas." ] }, { @@ -570,7 +566,7 @@ "id": "af447ec4", "metadata": {}, "source": [ - "Notice that the `print` function puts a space between the values." + "Observa que la función `print` coloca un espacio entre los valores." ] }, { @@ -578,12 +574,12 @@ "id": "7c73a2fa", "metadata": {}, "source": [ - "## Arguments\n", + "## Argumentos\n", "\n", - "When you call a function, the expression in parenthesis is called an **argument**.\n", - "Normally I would explain why, but in this case the technical meaning of a term has almost nothing to do with the common meaning of the word, so I won't even try.\n", + "Cuando llamas a una función, la expresión entre paréntesis se llama un **argumento**.\n", + "Normalmente explicaría por qué, pero en este caso el significado técnico de un término no tiene casi nada que ver con el significado común de la palabra, así que ni siquiera lo intentaré.\n", "\n", - "Some of the functions we've seen so far take only one argument, like `int`." + "Algunas de las funciones que hemos visto hasta ahora toman solo un argumento, como `int`." ] }, { @@ -599,7 +595,7 @@ "id": "c4ad4f2c", "metadata": {}, "source": [ - "Some take two, like `math.pow`." + "Algunas toman dos, como `math.pow`." ] }, { @@ -615,8 +611,8 @@ "id": "17293749", "metadata": {}, "source": [ - "Some can take additional arguments that are optional. \n", - "For example, `int` can take a second argument that specifies the base of the number." + "Algunas pueden tomar argumentos adicionales que son opcionales. \n", + "Por ejemplo, `int` puede tomar un segundo argumento que especifica la base del número." ] }, { @@ -632,9 +628,9 @@ "id": "c95589a1", "metadata": {}, "source": [ - "The sequence of digits `101` in base 2 represents the number 5 in base 10.\n", + "La secuencia de dígitos `101` en base 2 representa el número 5 en base 10.\n", "\n", - "`round` also takes an optional second argument, which is the number of decimal places to round off to." + "`round` también toma un segundo argumento opcional, que es el número de posiciones decimales al que redondear." ] }, { @@ -650,7 +646,7 @@ "id": "21e4a448", "metadata": {}, "source": [ - "Some functions can take any number of arguments, like `print`." + "Algunas funciones pueden tomar cualquier número de argumentos, como `print`." ] }, { @@ -666,7 +662,7 @@ "id": "667cff14", "metadata": {}, "source": [ - "If you call a function and provide too many arguments, that's a `TypeError`." + "Si llamas a una función y proporcionas demasiados argumentos, eso es un `TypeError`." ] }, { @@ -684,7 +680,7 @@ "id": "5103368e", "metadata": {}, "source": [ - "If you provide too few arguments, that's also a `TypeError`." + "Si proporcionas muy pocos argumentos, eso también es un `TypeError`." ] }, { @@ -702,7 +698,7 @@ "id": "5333c416", "metadata": {}, "source": [ - "And if you provide an argument with a type the function can't handle, that's a `TypeError`, too." + "Y si proporcionas un argumento con un tipo que la función no puede manejar, eso también es un `TypeError`." ] }, { @@ -720,7 +716,7 @@ "id": "548828af", "metadata": {}, "source": [ - "This kind of checking can be annoying when you are getting started, but it helps you detect and correct errors." + "Este tipo de comprobación puede ser molesto cuando estás empezando, pero te ayuda a detectar y corregir errores." ] }, { @@ -728,13 +724,13 @@ "id": "be2b6a9b", "metadata": {}, "source": [ - "## Comments\n", + "## Comentarios\n", "\n", - "As programs get bigger and more complicated, they get more difficult to read.\n", - "Formal languages are dense, and it is often difficult to look at a piece of code and figure out what it is doing and why.\n", + "A medida que los programas se hacen más grandes y complicados, se vuelven más difíciles de leer.\n", + "Los lenguajes formales son densos, y a menudo es difícil mirar un fragmento de código y averiguar qué hace y por qué.\n", "\n", - "For this reason, it is a good idea to add notes to your programs to explain in natural language what the program is doing. \n", - "These notes are called **comments**, and they start with the `#` symbol." + "Por esta razón, es buena idea añadir notas a tus programas para explicar en lenguaje natural qué está haciendo el programa. \n", + "Estas notas se llaman **comentarios**, y empiezan con el símbolo `#`." ] }, { @@ -750,8 +746,7 @@ "id": "519c83a9", "metadata": {}, "source": [ - "In this case, the comment appears on a line by itself. You can also put\n", - "comments at the end of a line:" + "En este caso, el comentario aparece en una línea por sí solo. También puedes poner comentarios al final de una línea:" ] }, { @@ -767,13 +762,12 @@ "id": "87c8d10c", "metadata": {}, "source": [ - "Everything from the `#` to the end of the line is ignored---it has no\n", - "effect on the execution of the program.\n", + "Todo desde el `#` hasta el final de la línea se ignora---no tiene efecto en la ejecución del programa.\n", "\n", - "Comments are most useful when they document non-obvious features of the code.\n", - "It is reasonable to assume that the reader can figure out *what* the code does; it is more useful to explain *why*.\n", + "Los comentarios son más útiles cuando documentan características no obvias del código.\n", + "Es razonable suponer que el lector puede averiguar *qué* hace el código; es más útil explicar *por qué*.\n", "\n", - "This comment is redundant with the code and useless:" + "Este comentario es redundante con el código y no sirve:" ] }, { @@ -789,7 +783,7 @@ "id": "eb83b14a", "metadata": {}, "source": [ - "This comment contains useful information that is not in the code:" + "Este comentario contiene información útil que no está en el código:" ] }, { @@ -805,8 +799,7 @@ "id": "6cd60d4f", "metadata": {}, "source": [ - "Good variable names can reduce the need for comments, but long names can\n", - "make complex expressions hard to read, so there is a tradeoff." + "Los buenos nombres de variables pueden reducir la necesidad de comentarios, pero los nombres largos pueden hacer que las expresiones complejas sean difíciles de leer, así que hay una compensación." ] }, { @@ -816,14 +809,14 @@ "source": [ "## Debugging\n", "\n", - "Three kinds of errors can occur in a program: syntax errors, runtime errors, and semantic errors.\n", - "It is useful to distinguish between them in order to track them down more quickly.\n", + "En un programa pueden ocurrir tres tipos de errores: errores de sintaxis, errores en tiempo de ejecución y errores semánticos.\n", + "Es útil distinguirlos para localizarlos más rápidamente.\n", "\n", - "* **Syntax error**: \"Syntax\" refers to the structure of a program and the rules about that structure. If there is a syntax error anywhere in your program, Python does not run the program. It displays an error message immediately.\n", + "* **Error de sintaxis**: \"Sintaxis\" se refiere a la estructura de un programa y a las reglas sobre esa estructura. Si hay un error de sintaxis en cualquier parte de tu programa, Python no ejecuta el programa. Muestra un mensaje de error inmediatamente.\n", "\n", - "* **Runtime error**: If there are no syntax errors in your program, it can start running. But if something goes wrong, Python displays an error message and stops. This type of error is called a runtime error. It is also called an **exception** because it indicates that something exceptional has happened.\n", + "* **Error en tiempo de ejecución**: Si no hay errores de sintaxis en tu programa, puede empezar a ejecutarse. Pero si algo sale mal, Python muestra un mensaje de error y se detiene. Este tipo de error se llama error en tiempo de ejecución. También se llama una **excepción** porque indica que ha ocurrido algo excepcional.\n", "\n", - "* **Semantic error**: The third type of error is \"semantic\", which means related to meaning. If there is a semantic error in your program, it runs without generating error messages, but it does not do what you intended. Identifying semantic errors can be tricky because it requires you to work backward by looking at the output of the program and trying to figure out what it is doing." + "* **Error semántico**: El tercer tipo de error es \"semántico\", lo que significa relacionado con el significado. Si hay un error semántico en tu programa, se ejecuta sin generar mensajes de error, pero no hace lo que pretendías. Identificar errores semánticos puede ser complicado porque requiere que trabajes hacia atrás mirando la salida del programa e intentando averiguar qué está haciendo." ] }, { @@ -831,7 +824,7 @@ "id": "6cd52721", "metadata": {}, "source": [ - "As we've seen, an illegal variable name is a syntax error." + "Como hemos visto, un nombre de variable no válido es un error de sintaxis." ] }, { @@ -849,7 +842,7 @@ "id": "b8971d33", "metadata": {}, "source": [ - "If you use an operator with a type it doesn't support, that's a runtime error. " + "Si usas un operador con un tipo que no admite, eso es un error en tiempo de ejecución. " ] }, { @@ -867,8 +860,8 @@ "id": "e51fa6e2", "metadata": {}, "source": [ - "Finally, here's an example of a semantic error.\n", - "Suppose we want to compute the average of `1` and `3`, but we forget about the order of operations and write this:" + "Por último, aquí tienes un ejemplo de error semántico.\n", + "Supongamos que queremos calcular la media de `1` y `3`, pero olvidamos el orden de operaciones y escribimos esto:" ] }, { @@ -884,9 +877,9 @@ "id": "0828afc0", "metadata": {}, "source": [ - "When this expression is evaluated, it does not produce an error message, so there is no syntax error or runtime error.\n", - "But the result is not the average of `1` and `3`, so the program is not correct.\n", - "This is a semantic error because the program runs but it doesn't do what's intended." + "Cuando se evalúa esta expresión, no produce un mensaje de error, así que no hay error de sintaxis ni error en tiempo de ejecución.\n", + "Pero el resultado no es la media de `1` y `3`, así que el programa no es correcto.\n", + "Este es un error semántico porque el programa se ejecuta pero no hace lo que se pretendía." ] }, { @@ -894,52 +887,52 @@ "id": "07396f3d", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", "**variable:**\n", - "A name that refers to a value.\n", + "Un nombre que se refiere a un valor.\n", "\n", - "**assignment statement:**\n", - "A statement that assigns a value to a variable.\n", + "**sentencia de asignación:**\n", + "Una sentencia que asigna un valor a una variable.\n", "\n", - "**state diagram:**\n", - "A graphical representation of a set of variables and the values they refer to.\n", + "**diagrama de estado:**\n", + "Una representación gráfica de un conjunto de variables y los valores a los que se refieren.\n", "\n", - "**keyword:**\n", - "A special word used to specify the structure of a program.\n", + "**palabra clave:**\n", + "Una palabra especial usada para especificar la estructura de un programa.\n", "\n", - "**import statement:**\n", - "A statement that reads a module file so we can use the variables and functions it contains.\n", + "**sentencia de importación:**\n", + "Una sentencia que lee un archivo de módulo para que podamos usar las variables y funciones que contiene.\n", "\n", - "**module:**\n", - "A file that contains Python code, including function definitions and sometimes other statements.\n", + "**módulo:**\n", + "Un archivo que contiene código Python, incluyendo definiciones de funciones y a veces otras sentencias.\n", "\n", - "**dot operator:**\n", - "The operator, `.`, used to access a function in another module by specifying the module name followed by a dot and the function name.\n", + "**operador punto:**\n", + "El operador, `.`, usado para acceder a una función en otro módulo especificando el nombre del módulo seguido de un punto y el nombre de la función.\n", "\n", - "**evaluate:**\n", - "Perform the operations in an expression in order to compute a value.\n", + "**evaluar:**\n", + "Realizar las operaciones de una expresión para calcular un valor.\n", "\n", - "**statement:**\n", - "One or more lines of code that represent a command or action.\n", + "**sentencia:**\n", + "Una o más líneas de código que representan una orden o acción.\n", "\n", - "**execute:**\n", - "Run a statement and do what it says.\n", + "**ejecutar:**\n", + "Ejecutar una sentencia y hacer lo que dice.\n", "\n", - "**argument:**\n", - "A value provided to a function when the function is called.\n", + "**argumento:**\n", + "Un valor proporcionado a una función cuando se llama a la función.\n", "\n", - "**comment:**\n", - "Text included in a program that provides information about the program but has no effect on its execution.\n", + "**comentario:**\n", + "Texto incluido en un programa que proporciona información sobre el programa pero no tiene efecto en su ejecución.\n", "\n", - "**runtime error:**\n", - "An error that causes a program to display an error message and exit.\n", + "**error en tiempo de ejecución:**\n", + "Un error que hace que un programa muestre un mensaje de error y termine.\n", "\n", - "**exception:**\n", - "An error that is detected while the program is running.\n", + "**excepción:**\n", + "Un error que se detecta mientras el programa se está ejecutando.\n", "\n", - "**semantic error:**\n", - "An error that causes a program to do the wrong thing, but not to display an error message." + "**error semántico:**\n", + "Un error que hace que un programa haga algo incorrecto, pero no muestre un mensaje de error." ] }, { @@ -947,7 +940,7 @@ "id": "70ee273d", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -970,20 +963,20 @@ "id": "7256a9b2", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregúntale a un asistente virtual\n", "\n", - "Again, I encourage you to use a virtual assistant to learn more about any of the topics in this chapter.\n", + "De nuevo, te animo a usar un asistente virtual para aprender más sobre cualquiera de los temas de este capítulo.\n", "\n", - "If you are curious about any of keywords I listed, you could ask \"Why is class a keyword?\" or \"Why can't variable names be keywords?\"\n", + "Si tienes curiosidad por alguna de las palabras clave que enumeré, podrías preguntar \"¿Por qué class es una palabra clave?\" o \"¿Por qué los nombres de variables no pueden ser palabras clave?\"\n", "\n", - "You might have noticed that `int`, `float`, and `str` are not Python keywords.\n", - "They are variables that represent types, and they can be used as functions.\n", - "So it is *legal* to have a variable or function with one of those names, but it is strongly discouraged. Ask an assistant \"Why is it bad to use int, float, and str as variable names?\"\n", + "Quizá hayas notado que `int`, `float` y `str` no son palabras clave de Python.\n", + "Son variables que representan tipos, y se pueden usar como funciones.\n", + "Así que es *legal* tener una variable o función con uno de esos nombres, pero se desaconseja firmemente. Pregunta a un asistente: \"¿Por qué es mala idea usar int, float y str como nombres de variables?\"\n", "\n", - "Also ask, \"What are the built-in functions in Python?\"\n", - "If you are curious about any of them, ask for more information.\n", + "Pregunta también: \"¿Cuáles son las funciones incorporadas de Python?\"\n", + "Si tienes curiosidad por alguna de ellas, pide más información.\n", "\n", - "In this chapter we imported the `math` module and used some of the variable and functions it provides. Ask an assistant, \"What variables and functions are in the math module?\" and \"Other than math, what modules are considered core Python?\"" + "En este capítulo importamos el módulo `math` y usamos algunas de las variables y funciones que proporciona. Pregunta a un asistente: \"¿Qué variables y funciones hay en el módulo math?\" y \"Además de math, ¿qué módulos se consideran parte del núcleo de Python?\"" ] }, { @@ -991,20 +984,19 @@ "id": "f92afde0", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Repeating my advice from the previous chapter, whenever you learn a new feature, you should make errors on purpose to see what goes wrong.\n", + "Repitiendo mi consejo del capítulo anterior: siempre que aprendas una característica nueva, deberías cometer errores a propósito para ver qué falla.\n", "\n", - "- We've seen that `n = 17` is legal. What about `17 = n`?\n", + "- Hemos visto que `n = 17` es válido. ¿Qué pasa con `17 = n`?\n", "\n", - "- How about `x = y = 1`?\n", + "- ¿Y con `x = y = 1`?\n", "\n", - "- In some languages every statement ends with a semi-colon (`;`). What\n", - " happens if you put a semi-colon at the end of a Python statement?\n", + "- En algunos lenguajes, cada sentencia termina con punto y coma (`;`). ¿Qué ocurre si pones un punto y coma al final de una sentencia de Python?\n", "\n", - "- What if you put a period at the end of a statement?\n", + "- ¿Qué pasa si pones un punto al final de una sentencia?\n", "\n", - "- What happens if you spell the name of a module wrong and try to import `maath`?" + "- ¿Qué ocurre si escribes mal el nombre de un módulo e intentas importar `maath`?" ] }, { @@ -1012,11 +1004,11 @@ "id": "9d562609", "metadata": {}, "source": [ - "### Exercise\n", - "Practice using the Python interpreter as a calculator:\n", + "### Ejercicio\n", + "Practica usando el intérprete de Python como calculadora:\n", "\n", - "**Part 1.** The volume of a sphere with radius $r$ is $\\frac{4}{3} \\pi r^3$.\n", - "What is the volume of a sphere with radius 5? Start with a variable named `radius` and then assign the result to a variable named `volume`. Display the result. Add comments to indicate that `radius` is in centimeters and `volume` in cubic centimeters." + "**Parte 1.** El volumen de una esfera con radio $r$ es $\\frac{4}{3} \\pi r^3$.\n", + "¿Cuál es el volumen de una esfera con radio 5? Empieza con una variable llamada `radius` y luego asigna el resultado a una variable llamada `volume`. Muestra el resultado. Añade comentarios para indicar que `radius` está en centímetros y `volume` en centímetros cúbicos." ] }, { @@ -1032,12 +1024,12 @@ "id": "6449b12b", "metadata": {}, "source": [ - "**Part 2.** A rule of trigonometry says that for any value of $x$, $(\\cos x)^2 + (\\sin x)^2 = 1$. Let's see if it's true for a specific value of $x$ like 42.\n", + "**Parte 2.** Una regla de trigonometría dice que para cualquier valor de $x$, $(\\cos x)^2 + (\\sin x)^2 = 1$. Veamos si es cierta para un valor específico de $x$, como 42.\n", "\n", - "Create a variable named `x` with this value.\n", - "Then use `math.cos` and `math.sin` to compute the sine and cosine of $x$, and the sum of their squared.\n", + "Crea una variable llamada `x` con este valor.\n", + "Luego usa `math.cos` y `math.sin` para calcular el seno y el coseno de $x$, y la suma de sus cuadrados.\n", "\n", - "The result should be close to 1. It might not be exactly 1 because floating-point arithmetic is not exact---it is only approximately correct." + "El resultado debería estar cerca de 1. Puede que no sea exactamente 1 porque la aritmética de punto flotante no es exacta---solo es aproximadamente correcta." ] }, { @@ -1053,16 +1045,16 @@ "id": "4986801f", "metadata": {}, "source": [ - "**Part 3.** In addition to `pi`, the other variable defined in the `math` module is `e`, which represents the base of the natural logarithm, written in math notation as $e$. If you are not familiar with this value, ask a virtual assistant \"What is `math.e`?\" Now let's compute $e^2$ three ways:\n", + "**Parte 3.** Además de `pi`, la otra variable definida en el módulo `math` es `e`, que representa la base del logaritmo natural, escrita en notación matemática como $e$. Si no conoces este valor, pregunta a un asistente virtual \"¿Qué es `math.e`?\" Ahora calculemos $e^2$ de tres formas:\n", "\n", - "* Use `math.e` and the exponentiation operator (`**`).\n", + "* Usa `math.e` y el operador de exponenciación (`**`).\n", "\n", - "* Use `math.pow` to raise `math.e` to the power `2`.\n", + "* Usa `math.pow` para elevar `math.e` a la potencia `2`.\n", "\n", - "* Use `math.exp`, which takes as an argument a value, $x$, and computes $e^x$.\n", + "* Usa `math.exp`, que toma como argumento un valor, $x$, y calcula $e^x$.\n", "\n", - "You might notice that the last result is slightly different from the other two.\n", - "See if you can find out which is correct." + "Puede que notes que el último resultado es ligeramente diferente de los otros dos.\n", + "Mira si puedes averiguar cuál es correcto." ] }, { @@ -1104,13 +1096,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/blank/chap03.ipynb b/blank/chap03.ipynb index a2b6766..5dd1607 100644 --- a/blank/chap03.ipynb +++ b/blank/chap03.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes comprar versiones impresas y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -41,15 +41,15 @@ "id": "6bd858a8", "metadata": {}, "source": [ - "# Functions\n", + "# Funciones\n", "\n", - "In the previous chapter we used several functions provided by Python, like `int` and `float`, and a few provided by the `math` module, like `sqrt` and `pow`.\n", - "In this chapter, you will learn how to create your own functions and run them.\n", - "And we'll see how one function can call another.\n", - "As examples, we'll display lyrics from Monty Python songs.\n", - "These silly examples demonstrate an important feature -- the ability to write your own functions is the foundation of programming.\n", + "En el capítulo anterior usamos varias funciones proporcionadas por Python, como `int` y `float`, y algunas proporcionadas por el módulo `math`, como `sqrt` y `pow`.\n", + "En este capítulo aprenderás a crear tus propias funciones y a ejecutarlas.\n", + "Y veremos cómo una función puede llamar a otra.\n", + "Como ejemplos, mostraremos letras de canciones de Monty Python.\n", + "Estos ejemplos absurdos demuestran una característica importante: la capacidad de escribir tus propias funciones es la base de la programación.\n", "\n", - "This chapter also introduces a new statement, the `for` loop, which is used to repeat a computation." + "Este capítulo también introduce una nueva sentencia, el bucle `for`, que se usa para repetir un cálculo." ] }, { @@ -57,9 +57,9 @@ "id": "b4ea99c5", "metadata": {}, "source": [ - "## Defining new functions\n", + "## Definir nuevas funciones\n", "\n", - "A **function definition** specifies the name of a new function and the sequence of statements that run when the function is called. Here's an example:" + "Una **definición de función** especifica el nombre de una nueva función y la secuencia de sentencias que se ejecutan cuando se llama a la función. Aquí tienes un ejemplo:" ] }, { @@ -75,17 +75,17 @@ "id": "0174fc41", "metadata": {}, "source": [ - "`def` is a keyword that indicates that this is a function definition.\n", - "The name of the function is `print_lyrics`.\n", - "Anything that's a legal variable name is also a legal function name.\n", + "`def` es una palabra clave que indica que esto es una definición de función.\n", + "El nombre de la función es `print_lyrics`.\n", + "Cualquier cosa que sea un nombre de variable válido también es un nombre de función válido.\n", "\n", - "The empty parentheses after the name indicate that this function doesn't take any arguments.\n", + "Los paréntesis vacíos después del nombre indican que esta función no recibe argumentos.\n", "\n", - "The first line of the function definition is called the **header** -- the rest is called the **body**.\n", - "The header has to end with a colon and the body has to be indented. By convention, indentation is always four spaces. \n", - "The body of this function is two print statements; in general, the body of a function can contain any number of statements of any kind.\n", + "La primera línea de la definición de función se llama **encabezado**; el resto se llama **cuerpo**.\n", + "El encabezado tiene que terminar con dos puntos y el cuerpo tiene que estar indentado. Por convención, la indentación es siempre de cuatro espacios. \n", + "El cuerpo de esta función son dos sentencias `print`; en general, el cuerpo de una función puede contener cualquier número de sentencias de cualquier tipo.\n", "\n", - "Defining a function creates a **function object**, which we can display like this." + "Definir una función crea un **objeto función**, que podemos mostrar así." ] }, { @@ -101,10 +101,10 @@ "id": "12bd0879", "metadata": {}, "source": [ - "The output indicates that `print_lyrics` is a function that takes no arguments.\n", - "`__main__` is the name of the module that contains `print_lyrics`.\n", + "La salida indica que `print_lyrics` es una función que no recibe argumentos.\n", + "`__main__` es el nombre del módulo que contiene `print_lyrics`.\n", "\n", - "Now that we've defined a function, we can call it the same way we call built-in functions." + "Ahora que hemos definido una función, podemos llamarla del mismo modo que llamamos a las funciones incorporadas." ] }, { @@ -120,7 +120,7 @@ "id": "8f0fc45d", "metadata": {}, "source": [ - "When the function runs, it executes the statements in the body, which display the first two lines of \"The Lumberjack Song\"." + "Cuando la función se ejecuta, ejecuta las sentencias del cuerpo, que muestran las dos primeras líneas de \"The Lumberjack Song\"." ] }, { @@ -128,12 +128,12 @@ "id": "6d35193e", "metadata": {}, "source": [ - "## Parameters\n", + "## Parámetros\n", "\n", - "Some of the functions we have seen require arguments; for example, when you call `abs` you pass a number as an argument.\n", - "Some functions take more than one argument; for example, `math.pow` takes two, the base and the exponent.\n", + "Algunas de las funciones que hemos visto requieren argumentos; por ejemplo, cuando llamas a `abs` pasas un número como argumento.\n", + "Algunas funciones reciben más de un argumento; por ejemplo, `math.pow` recibe dos: la base y el exponente.\n", "\n", - "Here is a definition for a function that takes an argument." + "Aquí tienes la definición de una función que recibe un argumento." ] }, { @@ -149,9 +149,9 @@ "id": "1716e3dc", "metadata": {}, "source": [ - "The variable name in parentheses is a **parameter**.\n", - "When the function is called, the value of the argument is assigned to the parameter.\n", - "For example, we can call `print_twice` like this." + "El nombre de variable entre paréntesis es un **parámetro**.\n", + "Cuando se llama a la función, el valor del argumento se asigna al parámetro.\n", + "Por ejemplo, podemos llamar a `print_twice` así." ] }, { @@ -167,7 +167,7 @@ "id": "f02be6d2", "metadata": {}, "source": [ - "Running this function has the same effect as assigning the argument to the parameter and then executing the body of the function, like this." + "Ejecutar esta función tiene el mismo efecto que asignar el argumento al parámetro y luego ejecutar el cuerpo de la función, así." ] }, { @@ -183,7 +183,7 @@ "id": "ea8b8b6e", "metadata": {}, "source": [ - "You can also use a variable as an argument." + "También puedes usar una variable como argumento." ] }, { @@ -199,7 +199,7 @@ "id": "5c1884ad", "metadata": {}, "source": [ - "In this example, the value of `line` gets assigned to the parameter `string`." + "En este ejemplo, el valor de `line` se asigna al parámetro `string`." ] }, { @@ -207,10 +207,10 @@ "id": "a3e5a790", "metadata": {}, "source": [ - "## Calling functions\n", + "## Llamar funciones\n", "\n", - "Once you have defined a function, you can use it inside another function.\n", - "To demonstrate, we'll write functions that print the lyrics of \"The Spam Song\" ().\n", + "Una vez que has definido una función, puedes usarla dentro de otra función.\n", + "Para demostrarlo, escribiremos funciones que imprimen la letra de \"The Spam Song\" ().\n", "\n", "> Spam, Spam, Spam, Spam, \n", "> Spam, Spam, Spam, Spam, \n", @@ -218,7 +218,7 @@ "> (Lovely Spam, Wonderful Spam!) \n", "> Spam, Spam,\n", "\n", - "We'll start with the following function, which takes two parameters.\n" + "Empezaremos con la siguiente función, que recibe dos parámetros.\n" ] }, { @@ -234,7 +234,7 @@ "id": "bdd4daa4", "metadata": {}, "source": [ - "We can use this function to print the first line of the song, like this." + "Podemos usar esta función para imprimir la primera línea de la canción, así." ] }, { @@ -250,7 +250,7 @@ "id": "c6f81e09", "metadata": {}, "source": [ - "To display the first two lines, we can define a new function that uses `repeat`." + "Para mostrar las dos primeras líneas, podemos definir una nueva función que use `repeat`." ] }, { @@ -266,7 +266,7 @@ "id": "8058ffe4", "metadata": {}, "source": [ - "And then call it like this." + "Y luego llamarla así." ] }, { @@ -282,7 +282,7 @@ "id": "07ca432a", "metadata": {}, "source": [ - "To display the last three lines, we can define another function, which also uses `repeat`." + "Para mostrar las últimas tres líneas, podemos definir otra función, que también usa `repeat`." ] }, { @@ -306,7 +306,7 @@ "id": "d6456a19", "metadata": {}, "source": [ - "Finally, we can bring it all together with one function that prints the whole verse." + "Por último, podemos unirlo todo con una función que imprime la estrofa completa." ] }, { @@ -330,10 +330,10 @@ "id": "d088fe68", "metadata": {}, "source": [ - "When we run `print_verse`, it calls `first_two_lines`, which calls `repeat`, which calls `print`.\n", - "That's a lot of functions.\n", + "Cuando ejecutamos `print_verse`, llama a `first_two_lines`, que llama a `repeat`, que llama a `print`.\n", + "Son muchas funciones.\n", "\n", - "Of course, we could have done the same thing with fewer functions, but the point of this example is to show how functions can work together." + "Por supuesto, podríamos haber hecho lo mismo con menos funciones, pero el objetivo de este ejemplo es mostrar cómo las funciones pueden trabajar juntas." ] }, { @@ -341,10 +341,10 @@ "id": "c3b16e3f", "metadata": {}, "source": [ - "## Repetition\n", + "## Repetición\n", "\n", - "If we want to display more than one verse, we can use a `for` statement.\n", - "Here's a simple example." + "Si queremos mostrar más de una estrofa, podemos usar una sentencia `for`.\n", + "Aquí tienes un ejemplo sencillo." ] }, { @@ -360,20 +360,20 @@ "id": "bf320549", "metadata": {}, "source": [ - "The first line is a header that ends with a colon.\n", - "The second line is the body, which has to be indented.\n", + "La primera línea es un encabezado que termina con dos puntos.\n", + "La segunda línea es el cuerpo, que tiene que estar indentado.\n", "\n", - "The header starts with the keyword `for`, a new variable named `i`, and another keyword, `in`. \n", - "It uses the `range` function to create a sequence of two values, which are `0` and `1`.\n", - "In Python, when we start counting, we usually start from `0`.\n", + "El encabezado empieza con la palabra clave `for`, una nueva variable llamada `i` y otra palabra clave, `in`. \n", + "Usa la función `range` para crear una secuencia de dos valores, que son `0` y `1`.\n", + "En Python, cuando empezamos a contar, normalmente empezamos desde `0`.\n", "\n", - "When the `for` statement runs, it assigns the first value from `range` to `i` and then runs the `print` function in the body, which displays `0`.\n", + "Cuando la sentencia `for` se ejecuta, asigna el primer valor de `range` a `i` y luego ejecuta la función `print` en el cuerpo, que muestra `0`.\n", "\n", - "When it gets to the end of the body, it loops back around to the header, which is why this statement is called a **loop**.\n", - "The second time through the loop, it assigns the next value from `range` to `i`, and displays it.\n", - "Then, because that's the last value from `range`, the loop ends.\n", + "Cuando llega al final del cuerpo, vuelve al encabezado, por eso esta sentencia se llama **bucle**.\n", + "La segunda vez que recorre el bucle, asigna el siguiente valor de `range` a `i` y lo muestra.\n", + "Entonces, como ese es el último valor de `range`, el bucle termina.\n", "\n", - "Here's how we can use a `for` loop to print two verses of the song." + "Así es como podemos usar un bucle `for` para imprimir dos estrofas de la canción." ] }, { @@ -389,8 +389,8 @@ "id": "88a46733", "metadata": {}, "source": [ - "You can put a `for` loop inside a function.\n", - "For example, `print_n_verses` takes a parameter named `n`, which has to be an integer, and displays the given number of verses. " + "Puedes poner un bucle `for` dentro de una función.\n", + "Por ejemplo, `print_n_verses` recibe un parámetro llamado `n`, que tiene que ser un entero, y muestra el número dado de estrofas. " ] }, { @@ -406,7 +406,7 @@ "id": "ad8060fe", "metadata": {}, "source": [ - "In this example, we don't use `i` in the body of the loop, but there has to be a variable name in the header anyway." + "En este ejemplo, no usamos `i` en el cuerpo del bucle, pero de todos modos tiene que haber un nombre de variable en el encabezado." ] }, { @@ -414,11 +414,11 @@ "id": "b320ec90", "metadata": {}, "source": [ - "## Variables and parameters are local\n", + "## Las variables y los parámetros son locales\n", "\n", - "When you create a variable inside a function, it is **local**, which\n", - "means that it only exists inside the function.\n", - "For example, the following function takes two arguments, concatenates them, and prints the result twice." + "Cuando creas una variable dentro de una función, es **local**, lo que\n", + "significa que solo existe dentro de la función.\n", + "Por ejemplo, la siguiente función recibe dos argumentos, los concatena e imprime el resultado dos veces." ] }, { @@ -434,7 +434,7 @@ "id": "3a35a6d0", "metadata": {}, "source": [ - "Here's an example that uses it:" + "Aquí tienes un ejemplo que la usa:" ] }, { @@ -450,8 +450,8 @@ "id": "4ab4e008", "metadata": {}, "source": [ - "When `cat_twice` runs, it creates a local variable named `cat`, which is destroyed when the function ends.\n", - "If we try to display it, we get a `NameError`:" + "Cuando `cat_twice` se ejecuta, crea una variable local llamada `cat`, que se destruye cuando termina la función.\n", + "Si intentamos mostrarla, obtenemos un `NameError`:" ] }, { @@ -469,10 +469,10 @@ "id": "3ae36c29", "metadata": {}, "source": [ - "Outside of the function, `cat` is not defined. \n", + "Fuera de la función, `cat` no está definida. \n", "\n", - "Parameters are also local.\n", - "For example, outside `cat_twice`, there is no such thing as `part1` or `part2`." + "Los parámetros también son locales.\n", + "Por ejemplo, fuera de `cat_twice`, no existe nada llamado `part1` o `part2`." ] }, { @@ -480,15 +480,15 @@ "id": "eabac8a6", "metadata": {}, "source": [ - "## Stack diagrams\n", + "## Diagramas de pila\n", "\n", - "To keep track of which variables can be used where, it is sometimes useful to draw a **stack diagram**. \n", - "Like state diagrams, stack diagrams show the value of each variable, but they also show the function each variable belongs to.\n", + "Para llevar la cuenta de qué variables se pueden usar en cada lugar, a veces es útil dibujar un **diagrama de pila**. \n", + "Como los diagramas de estado, los diagramas de pila muestran el valor de cada variable, pero también muestran la función a la que pertenece cada variable.\n", "\n", - "Each function is represented by a **frame**.\n", - "A frame is a box with the name of a function on the outside and the parameters and local variables of the function on the inside.\n", + "Cada función se representa mediante un **marco**.\n", + "Un marco es una caja con el nombre de una función por fuera y los parámetros y variables locales de la función por dentro.\n", "\n", - "Here's the stack diagram for the previous example." + "Aquí tienes el diagrama de pila del ejemplo anterior." ] }, { @@ -543,12 +543,12 @@ "id": "854fee12", "metadata": {}, "source": [ - "The frames are arranged in a stack that indicates which function called\n", - "which, and so on. Reading from the bottom, `print` was called by `print_twice`, which was called by `cat_twice`, which was called by `__main__` -- which is a special name for the topmost frame.\n", - "When you create a variable outside of any function, it belongs to `__main__`.\n", + "Los marcos se organizan en un stack que indica qué función llamó a\n", + "cuál, y así sucesivamente. Leyendo desde abajo, `print` fue llamada por `print_twice`, que fue llamada por `cat_twice`, que fue llamada por `__main__`, que es un nombre especial para el marco superior.\n", + "Cuando creas una variable fuera de cualquier función, pertenece a `__main__`.\n", "\n", - "In the frame for `print`, the question mark indicates that we don't know the name of the parameter.\n", - "If you are curious, ask a virtual assistant, \"What are the parameters of the Python print function?\"" + "En el marco de `print`, el signo de interrogación indica que no sabemos el nombre del parámetro.\n", + "Si tienes curiosidad, pregunta a un asistente virtual: \"¿Cuáles son los parámetros de la función `print` de Python?" ] }, { @@ -558,8 +558,8 @@ "source": [ "## Tracebacks\n", "\n", - "When a runtime error occurs in a function, Python displays the name of the function that was running, the name of the function that called it, and so on, up the stack.\n", - "To see an example, I'll define a version of `print_twice` that contains an error -- it tries to print `cat`, which is a local variable in another function." + "Cuando ocurre un error en tiempo de ejecución dentro de una función, Python muestra el nombre de la función que se estaba ejecutando, el nombre de la función que la llamó, y así sucesivamente, subiendo por el stack.\n", + "Para ver un ejemplo, definiré una versión de `print_twice` que contiene un error: intenta imprimir `cat`, que es una variable local de otra función." ] }, { @@ -575,7 +575,7 @@ "id": "d7c0713b", "metadata": {}, "source": [ - "Now here's what happens when we run `cat_twice`." + "Ahora esto es lo que ocurre cuando ejecutamos `cat_twice`." ] }, { @@ -608,11 +608,11 @@ "id": "2f4defcf", "metadata": {}, "source": [ - "The error message includes a **traceback**, which shows the function that was running when the error occurred, the function that called it, and so on.\n", - "In this example, it shows that `cat_twice` called `print_twice`, and the error occurred in a `print_twice`.\n", + "El mensaje de error incluye un **traceback**, que muestra la función que se estaba ejecutando cuando ocurrió el error, la función que la llamó, y así sucesivamente.\n", + "En este ejemplo, muestra que `cat_twice` llamó a `print_twice`, y que el error ocurrió en un `print_twice`.\n", "\n", - "The order of the functions in the traceback is the same as the order of the frames in the stack diagram.\n", - "The function that was running is at the bottom." + "El orden de las funciones en el traceback es el mismo que el orden de los marcos en el diagrama de pila.\n", + "La función que se estaba ejecutando está abajo del todo." ] }, { @@ -620,23 +620,23 @@ "id": "374b4696", "metadata": {}, "source": [ - "## Why functions?\n", + "## ¿Por qué funciones?\n", "\n", - "It may not be clear yet why it is worth the trouble to divide a program into\n", - "functions.\n", - "There are several reasons:\n", + "Puede que todavía no esté claro por qué merece la pena dividir un programa en\n", + "funciones.\n", + "Hay varias razones:\n", "\n", - "- Creating a new function gives you an opportunity to name a group of\n", - " statements, which makes your program easier to read and debug.\n", + "- Crear una nueva función te da la oportunidad de nombrar un grupo de\n", + " sentencias, lo que hace que tu programa sea más fácil de leer y depurar.\n", "\n", - "- Functions can make a program smaller by eliminating repetitive code.\n", - " Later, if you make a change, you only have to make it in one place.\n", + "- Las funciones pueden hacer que un programa sea más pequeño al eliminar código repetitivo.\n", + " Más adelante, si haces un cambio, solo tienes que hacerlo en un lugar.\n", "\n", - "- Dividing a long program into functions allows you to debug the parts\n", - " one at a time and then assemble them into a working whole.\n", + "- Dividir un programa largo en funciones te permite depurar las partes\n", + " de una en una y luego ensamblarlas en un todo que funciona.\n", "\n", - "- Well-designed functions are often useful for many programs. Once you\n", - " write and debug one, you can reuse it." + "- Las funciones bien diseñadas suelen ser útiles para muchos programas. Una vez que\n", + " escribes y depuras una, puedes reutilizarla." ] }, { @@ -644,25 +644,25 @@ "id": "c6dd486e", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "Debugging can be frustrating, but it is also challenging, interesting, and sometimes even fun.\n", - "And it is one of the most important skills you can learn.\n", + "Depurar puede ser frustrante, pero también es desafiante, interesante y a veces incluso divertido.\n", + "Y es una de las habilidades más importantes que puedes aprender.\n", "\n", - "In some ways debugging is like detective work.\n", - "You are given clues and you have to infer the events that led to the\n", - "results you see.\n", + "En cierto modo, depurar es como hacer trabajo de detective.\n", + "Se te dan pistas y tienes que inferir los eventos que llevaron a los\n", + "resultados que ves.\n", "\n", - "Debugging is also like experimental science.\n", - "Once you have an idea about what is going wrong, you modify your program and try again.\n", - "If your hypothesis was correct, you can predict the result of the modification, and you take a step closer to a working program.\n", - "If your hypothesis was wrong, you have to come up with a new one.\n", + "Depurar también se parece a la ciencia experimental.\n", + "Una vez que tienes una idea de qué va mal, modificas tu programa y vuelves a intentarlo.\n", + "Si tu hipótesis era correcta, puedes predecir el resultado de la modificación, y das un paso más hacia un programa que funciona.\n", + "Si tu hipótesis era incorrecta, tienes que proponer una nueva.\n", "\n", - "For some people, programming and debugging are the same thing; that is, programming is the process of gradually debugging a program until it does what you want.\n", - "The idea is that you should start with a working program and make small modifications, debugging them as you go.\n", + "Para algunas personas, programar y depurar son lo mismo; es decir, programar es el proceso de depurar gradualmente un programa hasta que hace lo que quieres.\n", + "La idea es que deberías empezar con un programa que funciona y hacer pequeñas modificaciones, depurándolas sobre la marcha.\n", "\n", - "If you find yourself spending a lot of time debugging, that is often a sign that you are writing too much code before you start tests.\n", - "If you take smaller steps, you might find that you can move faster." + "Si te encuentras pasando mucho tiempo depurando, a menudo es una señal de que estás escribiendo demasiado código antes de empezar a hacer pruebas.\n", + "Si das pasos más pequeños, puede que descubras que puedes avanzar más rápido." ] }, { @@ -670,39 +670,39 @@ "id": "d4e95e63", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**function definition:**\n", - "A statement that creates a function.\n", + "**definición de función:**\n", + "Una sentencia que crea una función.\n", "\n", - "**header:**\n", - " The first line of a function definition.\n", + "**encabezado:**\n", + " La primera línea de una definición de función.\n", "\n", - "**body:**\n", - " The sequence of statements inside a function definition.\n", + "**cuerpo:**\n", + " La secuencia de sentencias dentro de una definición de función.\n", "\n", - "**function object:**\n", - "A value created by a function definition.\n", - "The name of the function is a variable that refers to a function object.\n", + "**objeto de función:**\n", + "Un valor creado por una definición de función.\n", + "El nombre de la función es una variable que se refiere a un objeto función.\n", "\n", - "**parameter:**\n", - " A name used inside a function to refer to the value passed as an argument.\n", + "**parámetro:**\n", + " Un nombre usado dentro de una función para referirse al valor pasado como argumento.\n", "\n", - "**loop:**\n", - " A statement that runs one or more statements, often repeatedly.\n", + "**bucle:**\n", + " Una sentencia que ejecuta una o más sentencias, a menudo repetidamente.\n", "\n", - "**local variable:**\n", - "A variable defined inside a function, and which can only be accessed inside the function.\n", + "**variable local:**\n", + "Una variable definida dentro de una función, y a la que solo se puede acceder dentro de la función.\n", "\n", - "**stack diagram:**\n", - "A graphical representation of a stack of functions, their variables, and the values they refer to.\n", + "**diagrama de pila:**\n", + "Una representación gráfica de un stack de funciones, sus variables y los valores a los que se refieren.\n", "\n", - "**frame:**\n", - " A box in a stack diagram that represents a function call.\n", - " It contains the local variables and parameters of the function.\n", + "**marco:**\n", + " Una caja en un diagrama de pila que representa una llamada a función.\n", + " Contiene las variables locales y los parámetros de la función.\n", "\n", "**traceback:**\n", - " A list of the functions that are executing, printed when an exception occurs." + " Una lista de las funciones que se están ejecutando, impresa cuando ocurre una excepción." ] }, { @@ -710,7 +710,7 @@ "id": "eca485f2", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -733,23 +733,23 @@ "id": "82951027", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "The statements in a function or a `for` loop are indented by four spaces, by convention.\n", - "But not everyone agrees with that convention.\n", - "If you are curious about the history of this great debate, ask a virtual assistant to \"tell me about spaces and tabs in Python\".\n", + "Las sentencias dentro de una función o un bucle `for` se indentan con cuatro espacios, por convención.\n", + "Pero no todo el mundo está de acuerdo con esa convención.\n", + "Si tienes curiosidad por la historia de este gran debate, pregunta a un asistente virtual que te hable sobre \"espacios y tabulaciones en Python\".\n", "\n", - "Virtual assistant are pretty good at writing small functions.\n", + "Los asistentes virtuales son bastante buenos escribiendo funciones pequeñas.\n", "\n", - "1. Ask your favorite VA to \"Write a function called repeat that takes a string and an integer and prints the string the given number of times.\" \n", + "1. Pregunta a tu asistente virtual favorito: \"Escribe una función llamada repeat que reciba un string y un entero e imprima el string el número de veces indicado\". \n", "\n", - "2. If the result uses a `for` loop, you could ask, \"Can you do it without a for loop?\"\n", + "2. Si el resultado usa un bucle `for`, podrías preguntar: \"¿Puedes hacerlo sin un bucle for?\"\n", "\n", - "3. Pick any other function in this chapter and ask a VA to write it. The challenge is to describe the function precisely enough to get what you want. Use the vocabulary you have learned so far in this book.\n", + "3. Elige cualquier otra función de este capítulo y pide a un asistente virtual que la escriba. El reto es describir la función con suficiente precisión para obtener lo que quieres. Usa el vocabulario que has aprendido hasta ahora en este libro.\n", "\n", - "Virtual assistants are also pretty good at debugging functions.\n", + "Los asistentes virtuales también son bastante buenos depurando funciones.\n", "\n", - "1. Ask a VA what's wrong with this version of `print_twice`.\n", + "1. Pregunta a un asistente virtual qué está mal en esta versión de `print_twice`.\n", "\n", " ```\n", " def print_twice(string):\n", @@ -757,7 +757,7 @@ " print(cat)\n", " ```\n", " \n", - "And if you get stuck on any of the exercises below, consider asking a VA for help." + "Y si te bloqueas en cualquiera de los ejercicios siguientes, considera pedir ayuda a un asistente virtual." ] }, { @@ -765,9 +765,9 @@ "id": "b7157b09", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function named `print_right` that takes a string named `text` as a parameter and prints the string with enough leading spaces that the last letter of the string is in the 40th column of the display." + "Escribe una función llamada `print_right` que reciba un string llamado `text` como parámetro e imprima el string con suficientes espacios iniciales para que la última letra del string esté en la columna 40 de la pantalla." ] }, { @@ -783,9 +783,9 @@ "id": "428fbee5", "metadata": {}, "source": [ - "Hint: Use the `len` function, the string concatenation operator (`+`) and the string repetition operator (`*`).\n", + "Pista: usa la función `len`, el operador de concatenación de strings (`+`) y el operador de repetición de strings (`*`).\n", "\n", - "Here's an example that shows how it should work." + "Aquí tienes un ejemplo que muestra cómo debería funcionar." ] }, { @@ -807,9 +807,9 @@ "id": "b47467fa", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `triangle` that takes a string and an integer and draws a pyramid with the given height, made up using copies of the string. Here's an example of a pyramid with `5` levels, using the string `'L'`." + "Escribe una función llamada `triangle` que reciba un string y un entero, y dibuje una pirámide con la altura dada, hecha usando copias del string. Aquí tienes un ejemplo de una pirámide con `5` niveles, usando el string `'L'`." ] }, { @@ -838,9 +838,9 @@ "id": "4a28f635", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `rectangle` that takes a string and two integers and draws a rectangle with the given width and height, made up using copies of the string. Here's an example of a rectangle with width `5` and height `4`, made up of the string `'H'`." + "Escribe una función llamada `rectangle` que reciba un string y dos enteros, y dibuje un rectángulo con la anchura y altura dadas, hecho usando copias del string. Aquí tienes un ejemplo de un rectángulo con anchura `5` y altura `4`, hecho con el string `'H'`." ] }, { @@ -869,20 +869,20 @@ "id": "44a5de6f", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The song \"99 Bottles of Beer\" starts with this verse:\n", + "La canción \"99 Bottles of Beer\" empieza con esta estrofa:\n", "\n", "> 99 bottles of beer on the wall \n", "> 99 bottles of beer \n", "> Take one down, pass it around \n", "> 98 bottles of beer on the wall \n", "\n", - "Then the second verse is the same, except that it starts with 98 bottles and ends with 97. The song continues -- for a very long time -- until there are 0 bottles of beer.\n", + "Luego la segunda estrofa es igual, excepto que empieza con 98 botellas y termina con 97. La canción continúa, durante muchísimo tiempo, hasta que hay 0 botellas de cerveza.\n", "\n", - "Write a function called `bottle_verse` that takes a number as a parameter and displays the verse that starts with the given number of bottles.\n", + "Escribe una función llamada `bottle_verse` que reciba un número como parámetro y muestre la estrofa que empieza con el número dado de botellas.\n", "\n", - "Hint: Consider starting with a function that can print the first, second, or last line of the verse, and then use it to write `bottle_verse`." + "Pista: considera empezar con una función que pueda imprimir la primera, segunda o última línea de la estrofa, y luego úsala para escribir `bottle_verse`." ] }, { @@ -908,7 +908,7 @@ "tags": [] }, "source": [ - "Use this function call to display the first verse." + "Usa esta llamada a función para mostrar la primera estrofa." ] }, { @@ -930,8 +930,8 @@ "tags": [] }, "source": [ - "If you want to print the whole song, you can use this `for` loop, which counts down from `99` to `1`.\n", - "You don't have to completely understand this example---we'll learn more about `for` loops and the `range` function later." + "Si quieres imprimir la canción completa, puedes usar este bucle `for`, que cuenta hacia atrás desde `99` hasta `1`.\n", + "No tienes que entender completamente este ejemplo; aprenderemos más sobre los bucles `for` y la función `range` más adelante." ] }, { @@ -963,13 +963,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/blank/chap04.ipynb b/blank/chap04.ipynb index 23e5490..14369aa 100644 --- a/blank/chap04.ipynb +++ b/blank/chap04.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes comprar versiones impresas y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -35,10 +35,10 @@ "id": "fbb4d5a2", "metadata": {}, "source": [ - "# Functions and Interfaces\n", + "# Funciones e interfaces\n", "\n", - "This chapter introduces a module called `jupyturtle`, which allows you to create simple drawings by giving instructions to an imaginary turtle.\n", - "We will use this module to write functions that draw squares, polygons, and circles -- and to demonstrate **interface design**, which is a way of designing functions that work together." + "Este capítulo introduce un módulo llamado `jupyturtle`, que te permite crear dibujos sencillos dando instrucciones a una turtle imaginaria.\n", + "Usaremos este módulo para escribir funciones que dibujan cuadrados, polígonos y círculos, y para demostrar el **diseño de interfaces**, que es una forma de diseñar funciones que trabajan juntas." ] }, { @@ -48,9 +48,9 @@ "tags": [] }, "source": [ - "## The jupyturtle module\n", + "## El módulo jupyturtle\n", "\n", - "To use the `jupyturtle` module, we can import it like this." + "Para usar el módulo `jupyturtle`, podemos importarlo así." ] }, { @@ -66,7 +66,7 @@ "id": "8c801121", "metadata": {}, "source": [ - "Now we can use the functions defined in the module, like `make_turtle` and `forward`." + "Ahora podemos usar las funciones definidas en el módulo, como `make_turtle` y `forward`." ] }, { @@ -82,14 +82,14 @@ "id": "77a61cbb", "metadata": {}, "source": [ - "`make_turtle` creates a **canvas**, which is a space on the screen where we can draw, and a turtle, which is represented by a circular shell and a triangular head.\n", - "The circle shows the location of the turtle and the triangle indicates the direction it is facing.\n", + "`make_turtle` crea un **canvas**, que es un espacio en la pantalla donde podemos dibujar, y una turtle, que se representa con un caparazón circular y una cabeza triangular.\n", + "El círculo muestra la ubicación de la turtle y el triángulo indica la dirección hacia la que mira.\n", "\n", - "`forward` moves the turtle a given distance in the direction it's facing, drawing a line segment along the way.\n", - "The distance is in arbitrary units -- the actual size depends on your computer's screen.\n", + "`forward` mueve la turtle una distancia dada en la dirección hacia la que mira, dibujando un segmento de línea por el camino.\n", + "La distancia está en unidades arbitrarias: el tamaño real depende de la pantalla de tu ordenador.\n", "\n", - "We will use functions defined in the `jupyturtle` module many times, so it would be nice if we did not have to write the name of the module every time.\n", - "That's possible if we import the module like this." + "Usaremos muchas veces funciones definidas en el módulo `jupyturtle`, así que estaría bien no tener que escribir el nombre del módulo cada vez.\n", + "Eso es posible si importamos el módulo así." ] }, { @@ -105,7 +105,7 @@ "id": "c1322d31", "metadata": {}, "source": [ - "This version of the import statement imports `make_turtle` and `forward` from the `jupyturtle` module so we can call them like this." + "Esta versión de la sentencia `import` importa `make_turtle` y `forward` desde el módulo `jupyturtle`, de modo que podemos llamarlas así." ] }, { @@ -121,8 +121,8 @@ "id": "bd319754", "metadata": {}, "source": [ - "`jupyturtle` provides two other functions we'll use, called `left` and `right`.\n", - "We'll import them like this." + "`jupyturtle` proporciona otras dos funciones que usaremos, llamadas `left` y `right`.\n", + "Las importaremos así." ] }, { @@ -138,8 +138,8 @@ "id": "0da2a311", "metadata": {}, "source": [ - "`left` causes the turtle to turn left. It takes one argument, which is the angle of the turn in degrees.\n", - "For example, we can make a 90 degree left turn like this." + "`left` hace que la turtle gire a la izquierda. Recibe un argumento, que es el ángulo del giro en grados.\n", + "Por ejemplo, podemos hacer un giro a la izquierda de 90 grados así." ] }, { @@ -155,8 +155,8 @@ "id": "cea2940f", "metadata": {}, "source": [ - "This program moves the turtle east and then north, leaving two line segments behind.\n", - "Before you go on, see if you can modify the previous program to make a square." + "Este programa mueve la turtle hacia el este y luego hacia el norte, dejando dos segmentos de línea detrás.\n", + "Antes de continuar, prueba si puedes modificar el programa anterior para hacer un cuadrado." ] }, { @@ -164,9 +164,9 @@ "id": "e20ea96c", "metadata": {}, "source": [ - "## Making a square\n", + "## Hacer un cuadrado\n", "\n", - "Here's one way to make a square." + "Aquí tienes una forma de hacer un cuadrado." ] }, { @@ -182,7 +182,7 @@ "id": "a7500957", "metadata": {}, "source": [ - "Because this program repeats the same pair of lines four times, we can do the same thing more concisely with a `for` loop." + "Como este programa repite el mismo par de líneas cuatro veces, podemos hacer lo mismo de forma más concisa con un bucle `for`." ] }, { @@ -200,9 +200,9 @@ "tags": [] }, "source": [ - "## Encapsulation and generalization\n", + "## Encapsulación y generalización\n", "\n", - "Let's take the square-drawing code from the previous section and put it in a function called `square`." + "Tomemos el código para dibujar cuadrados de la sección anterior y pongámoslo en una función llamada `square`." ] }, { @@ -218,7 +218,7 @@ "id": "0789b5d9", "metadata": {}, "source": [ - "Now we can call the function like this." + "Ahora podemos llamar a la función así." ] }, { @@ -234,11 +234,11 @@ "id": "da905fc6", "metadata": {}, "source": [ - "Wrapping a piece of code up in a function is called **encapsulation**.\n", - "One of the benefits of encapsulation is that it attaches a name to the code, which serves as a kind of documentation. Another advantage is that if you re-use the code, it is more concise to call a function twice than to copy and paste the body!\n", + "Envolver un fragmento de código en una función se llama **encapsulación**.\n", + "Uno de los beneficios de la encapsulación es que le da un nombre al código, que sirve como una especie de documentación. ¡Otra ventaja es que, si reutilizas el código, es más conciso llamar a una función dos veces que copiar y pegar el cuerpo!\n", "\n", - "In the current version, the size of the square is always `50`.\n", - "If we want to draw squares with different sizes, we can take the length of the sides as a parameter. " + "En la versión actual, el tamaño del cuadrado siempre es `50`.\n", + "Si queremos dibujar cuadrados de distintos tamaños, podemos tomar la longitud de los lados como parámetro. " ] }, { @@ -254,7 +254,7 @@ "id": "397fda4b", "metadata": {}, "source": [ - "Now we can draw squares with different sizes." + "Ahora podemos dibujar cuadrados de distintos tamaños." ] }, { @@ -270,10 +270,10 @@ "id": "5a46bf64", "metadata": {}, "source": [ - "Adding a parameter to a function is called **generalization** because it makes the function more general: with the previous version, the square is always the same size; with this version it can be any size.\n", + "Añadir un parámetro a una función se llama **generalización** porque hace que la función sea más general: con la versión anterior, el cuadrado siempre tiene el mismo tamaño; con esta versión puede tener cualquier tamaño.\n", "\n", - "If we add another parameter, we can make it even more general.\n", - "The following function draws regular polygons with a given number of sides." + "Si añadimos otro parámetro, podemos hacerla aún más general.\n", + "La siguiente función dibuja polígonos regulares con un número dado de lados." ] }, { @@ -289,9 +289,9 @@ "id": "286d3c77", "metadata": {}, "source": [ - "In a regular polygon with `n` sides, the angle between adjacent sides is `360 / n` degrees. \n", + "En un polígono regular con `n` lados, el ángulo entre lados adyacentes es de `360 / n` grados. \n", "\n", - "The following example draws a `7`-sided polygon with side length `30`." + "El siguiente ejemplo dibuja un polígono de `7` lados con longitud de lado `30`." ] }, { @@ -307,8 +307,8 @@ "id": "dc0226db", "metadata": {}, "source": [ - "When a function has more than a few numeric arguments, it is easy to forget what they are, or what order they should be in. \n", - "It can be a good idea to include the names of the parameters in the argument list." + "Cuando una función tiene más de unos pocos argumentos numéricos, es fácil olvidar qué son o en qué orden deberían ir. \n", + "Puede ser una buena idea incluir los nombres de los parámetros en la lista de argumentos." ] }, { @@ -326,10 +326,10 @@ "id": "6aa28eba", "metadata": {}, "source": [ - "These are sometimes called \"named arguments\" because they include the parameter names.\n", - "But in Python they are more often called **keyword arguments** (not to be confused with Python keywords like `for` and `def`).\n", + "A veces se llaman \"argumentos con nombre\" porque incluyen los nombres de los parámetros.\n", + "Pero en Python se llaman más a menudo **argumentos de palabra clave** (no deben confundirse con las palabras clave de Python como `for` y `def`).\n", "\n", - "This use of the assignment operator, `=`, is a reminder about how arguments and parameters work -- when you call a function, the arguments are assigned to the parameters." + "Este uso del operador de asignación, `=`, sirve como recordatorio de cómo funcionan los argumentos y los parámetros: cuando llamas a una función, los argumentos se asignan a los parámetros." ] }, { @@ -337,11 +337,11 @@ "id": "b10184b4", "metadata": {}, "source": [ - "## Approximating a circle\n", + "## Aproximar un círculo\n", "\n", - "Now suppose we want to draw a circle.\n", - "We can do that, approximately, by drawing a polygon with a large number of sides, so each side is small enough that it's hard to see.\n", - "Here is a function that uses `polygon` to draw a `30`-sided polygon that approximates a circle." + "Ahora supongamos que queremos dibujar un círculo.\n", + "Podemos hacerlo, aproximadamente, dibujando un polígono con un gran número de lados, de modo que cada lado sea lo bastante pequeño como para que cueste verlo.\n", + "Aquí tienes una función que usa `polygon` para dibujar un polígono de `30` lados que aproxima un círculo." ] }, { @@ -357,13 +357,13 @@ "id": "39023314", "metadata": {}, "source": [ - "`circle` takes the radius of the the circle as a parameter.\n", - "It computes `circumference`, which is the circumference of a circle with the given radius.\n", - "`n` is the number of sides, so `circumference / n` is the length of each side.\n", + "`circle` recibe el radio del círculo como parámetro.\n", + "Calcula `circumference`, que es la circunferencia de un círculo con el radio dado.\n", + "`n` es el número de lados, así que `circumference / n` es la longitud de cada lado.\n", "\n", - "This function might take a long time to run.\n", - "We can speed it up by calling `make_turtle` with a keyword argument called `delay` that sets the time, in seconds, the turtle waits after each step.\n", - "The default value is `0.2` seconds -- if we set it to `0.02` it runs about 10 times faster." + "Esta función podría tardar mucho en ejecutarse.\n", + "Podemos acelerarla llamando a `make_turtle` con un argumento de palabra clave llamado `delay` que establece el tiempo, en segundos, que la turtle espera después de cada paso.\n", + "El valor predeterminado es `0.2` segundos; si lo establecemos en `0.02`, se ejecuta unas 10 veces más rápido." ] }, { @@ -379,11 +379,11 @@ "id": "701f9cf8", "metadata": {}, "source": [ - "A limitation of this solution is that `n` is a constant, which means\n", - "that for very big circles, the sides are too long, and for small\n", - "circles, we waste time drawing very short sides.\n", - "One option is to generalize the function by taking `n` as a parameter.\n", - "But let's keep it simple for now." + "Una limitación de esta solución es que `n` es una constante, lo que significa\n", + "que para círculos muy grandes los lados son demasiado largos, y para círculos pequeños\n", + "perdemos tiempo dibujando lados muy cortos.\n", + "Una opción es generalizar la función tomando `n` como parámetro.\n", + "Pero mantengámoslo sencillo por ahora." ] }, { @@ -391,15 +391,15 @@ "id": "c48f262c", "metadata": {}, "source": [ - "## Refactoring\n", + "## Refactorización\n", "\n", - "Now let's write a more general version of `circle`, called `arc`, that takes a second parameter, `angle`, and draws an arc of a circle that spans the given angle.\n", - "For example, if `angle` is `360` degrees, it draws a complete circle. If `angle` is `180` degrees, it draws a half circle.\n", + "Ahora escribamos una versión más general de `circle`, llamada `arc`, que recibe un segundo parámetro, `angle`, y dibuja un arco de un círculo que abarca el ángulo dado.\n", + "Por ejemplo, si `angle` es `360` grados, dibuja un círculo completo. Si `angle` es `180` grados, dibuja un semicírculo.\n", "\n", - "To write `circle`, we were able to reuse `polygon`, because a many-sided polygon is a good approximation of a circle.\n", - "But we can't use `polygon` to write `arc`.\n", + "Para escribir `circle`, pudimos reutilizar `polygon`, porque un polígono con muchos lados es una buena aproximación de un círculo.\n", + "Pero no podemos usar `polygon` para escribir `arc`.\n", "\n", - "Instead, we'll create the more general version of `polygon`, called `polyline`." + "En su lugar, crearemos una versión más general de `polygon`, llamada `polyline`." ] }, { @@ -415,9 +415,9 @@ "id": "c2b2503e", "metadata": {}, "source": [ - "`polyline` takes as parameters the number of line segments to draw, `n`, the length of the segments, `length`, and the angle between them, `angle`.\n", + "`polyline` recibe como parámetros el número de segmentos de línea que debe dibujar, `n`, la longitud de los segmentos, `length`, y el ángulo entre ellos, `angle`.\n", "\n", - "Now we can rewrite `polygon` to use `polyline`." + "Ahora podemos reescribir `polygon` para que use `polyline`." ] }, { @@ -433,7 +433,7 @@ "id": "2714a59e", "metadata": {}, "source": [ - "And we can use `polyline` to write `arc`." + "Y podemos usar `polyline` para escribir `arc`." ] }, { @@ -449,9 +449,9 @@ "id": "3c18773c", "metadata": {}, "source": [ - "`arc` is similar to `circle`, except that it computes `arc_length`, which is a fraction of the circumference of a circle.\n", + "`arc` es similar a `circle`, salvo que calcula `arc_length`, que es una fracción de la circunferencia de un círculo.\n", "\n", - "Finally, we can rewrite `circle` to use `arc`." + "Por último, podemos reescribir `circle` para que use `arc`." ] }, { @@ -467,8 +467,8 @@ "id": "313a357c", "metadata": {}, "source": [ - "To check that these functions work as expected, we'll use them to draw something like a snail.\n", - "With `delay=0`, the turtle runs as fast as possible." + "Para comprobar que estas funciones funcionan como esperamos, las usaremos para dibujar algo parecido a un caracol.\n", + "Con `delay=0`, la turtle va lo más rápido posible." ] }, { @@ -484,12 +484,12 @@ "id": "a34da3d8", "metadata": {}, "source": [ - "In this example, we started with working code and reorganized it with different functions.\n", - "Changes like this, which improve the code without changing its behavior, are called **refactoring**.\n", + "En este ejemplo, empezamos con código que funcionaba y lo reorganizamos con funciones diferentes.\n", + "Los cambios como este, que mejoran el código sin cambiar su comportamiento, se llaman **refactorización**.\n", "\n", - "If we had planned ahead, we might have written `polyline` first and avoided refactoring, but often you don't know enough at the beginning of a project to design all the functions.\n", - "Once you start coding, you understand the problem better.\n", - "Sometimes refactoring is a sign that you have learned something." + "Si lo hubiéramos planeado con antelación, quizá habríamos escrito `polyline` primero y evitado la refactorización, pero a menudo no sabes lo suficiente al principio de un proyecto para diseñar todas las funciones.\n", + "Una vez que empiezas a programar, entiendes mejor el problema.\n", + "A veces la refactorización es una señal de que has aprendido algo." ] }, { @@ -497,10 +497,10 @@ "id": "d18c9d16", "metadata": {}, "source": [ - "## Stack diagram\n", + "## Diagrama de pila\n", "\n", - "When we call `circle`, it calls `arc`, which calls `polyline`.\n", - "We can use a stack diagram to show this sequence of function calls and the parameters for each one." + "Cuando llamamos a `circle`, llama a `arc`, que llama a `polyline`.\n", + "Podemos usar un diagrama de pila para mostrar esta secuencia de llamadas a funciones y los parámetros de cada una." ] }, { @@ -528,8 +528,8 @@ "id": "3160bba1", "metadata": {}, "source": [ - "Notice that the value of `angle` in `polyline` is different from the value of `angle` in `arc`.\n", - "Parameters are local, which means you can use the same parameter name in different functions; it's a different variable in each function, and it can refer to a different value. " + "Observa que el valor de `angle` en `polyline` es diferente del valor de `angle` en `arc`.\n", + "Los parámetros son locales, lo que significa que puedes usar el mismo nombre de parámetro en funciones diferentes; es una variable distinta en cada función y puede referirse a un valor diferente. " ] }, { @@ -537,27 +537,27 @@ "id": "c23552d3", "metadata": {}, "source": [ - "## A development plan\n", + "## Un plan de desarrollo\n", "\n", - "A **development plan** is a process for writing programs.\n", - "The process we used in this chapter is \"encapsulation and generalization\".\n", - "The steps of this process are:\n", + "Un **plan de desarrollo** es un proceso para escribir programas.\n", + "El proceso que usamos en este capítulo es \"encapsulación y generalización\".\n", + "Los pasos de este proceso son:\n", "\n", - "1. Start by writing a small program with no function definitions.\n", + "1. Empieza escribiendo un programa pequeño sin definiciones de funciones.\n", "\n", - "2. Once you get the program working, identify a coherent piece of it,\n", - " encapsulate the piece in a function and give it a name.\n", + "2. Una vez que consigas que el programa funcione, identifica una parte coherente,\n", + " encapsula esa parte en una función y dale un nombre.\n", "\n", - "3. Generalize the function by adding appropriate parameters.\n", + "3. Generaliza la función añadiendo los parámetros adecuados.\n", "\n", - "4. Repeat Steps 1 to 3 until you have a set of working functions.\n", + "4. Repite los pasos 1 a 3 hasta que tengas un conjunto de funciones que funcionen.\n", "\n", - "5. Look for opportunities to improve the program by refactoring. For\n", - " example, if you have similar code in several places, consider\n", - " factoring it into an appropriately general function.\n", + "5. Busca oportunidades para mejorar el programa mediante refactorización. Por\n", + " ejemplo, si tienes código similar en varios lugares, considera\n", + " factorizarlo en una función adecuadamente general.\n", "\n", - "This process has some drawbacks -- we will see alternatives later -- but it can be useful if you don't know ahead of time how to divide the program into functions.\n", - "This approach lets you design as you go along." + "Este proceso tiene algunas desventajas (veremos alternativas más adelante), pero puede ser útil si no sabes de antemano cómo dividir el programa en funciones.\n", + "Este enfoque te permite diseñar sobre la marcha." ] }, { @@ -565,13 +565,13 @@ "id": "a3b6b83d", "metadata": {}, "source": [ - "The design of a function has two parts:\n", + "El diseño de una función tiene dos partes:\n", "\n", - "* The **interface** is how the function is used, including its name, the parameters it takes and what the function is supposed to do.\n", + "* La **interfaz** es cómo se usa la función, incluyendo su nombre, los parámetros que recibe y lo que se supone que debe hacer.\n", "\n", - "* The **implementation** is how the function does what it's supposed to do.\n", + "* La **implementación** es cómo la función hace lo que se supone que debe hacer.\n", "\n", - "For example, here's the first version of `circle` we wrote, which uses `polygon`." + "Por ejemplo, aquí tienes la primera versión de `circle` que escribimos, que usa `polygon`." ] }, { @@ -587,7 +587,7 @@ "id": "5d3d2e79", "metadata": {}, "source": [ - "And here's the refactored version that uses `arc`." + "Y aquí tienes la versión refactorizada que usa `arc`." ] }, { @@ -603,7 +603,7 @@ "id": "b726f72c", "metadata": {}, "source": [ - "These two functions have the same interface -- they take the same parameters and do the same thing -- but they have different implementations." + "Estas dos funciones tienen la misma interfaz: reciben los mismos parámetros y hacen lo mismo, pero tienen implementaciones diferentes." ] }, { @@ -615,8 +615,8 @@ "source": [ "## Docstrings\n", "\n", - "A **docstring** is a string at the beginning of a function that explains the interface (\"doc\" is short for \"documentation\").\n", - "Here is an example:" + "Un **docstring** es un string al principio de una función que explica la interfaz (\"doc\" es la abreviatura de \"documentación\").\n", + "Aquí tienes un ejemplo:" ] }, { @@ -632,18 +632,18 @@ "id": "55b60cbc", "metadata": {}, "source": [ - "By convention, docstrings are triple-quoted strings, also known as **multiline strings** because the triple quotes allow the string to span more than one line.\n", + "Por convención, los docstrings son strings entre comillas triples, también conocidos como **strings multilínea** porque las comillas triples permiten que el string ocupe más de una línea.\n", "\n", - "A docstring should:\n", + "Un docstring debería:\n", "\n", - "* Explain concisely what the function does, without getting into the details of how it works,\n", + "* Explicar de forma concisa qué hace la función, sin entrar en los detalles de cómo funciona,\n", "\n", - "* Explain what effect each parameter has on the behavior of the function, and\n", + "* Explicar qué efecto tiene cada parámetro en el comportamiento de la función, e\n", "\n", - "* Indicate what type each parameter should be, if it is not obvious.\n", + "* Indicar qué tipo debería tener cada parámetro, si no es obvio.\n", "\n", - "Writing this kind of documentation is an important part of interface design.\n", - "A well-designed interface should be simple to explain; if you have a hard time explaining one of your functions, maybe the interface could be improved." + "Escribir este tipo de documentación es una parte importante del diseño de interfaces.\n", + "Una interfaz bien diseñada debería ser sencilla de explicar; si te cuesta explicar una de tus funciones, quizá la interfaz podría mejorarse." ] }, { @@ -651,20 +651,20 @@ "id": "f1115940", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "An interface is like a contract between a function and a caller. The\n", - "caller agrees to provide certain arguments and the function agrees to\n", - "do certain work.\n", + "Una interfaz es como un contrato entre una función y quien la llama. Quien\n", + "llama acepta proporcionar ciertos argumentos y la función acepta\n", + "hacer cierto trabajo.\n", "\n", - "For example, `polyline` requires three arguments: `n` has to be an integer; `length` should be a positive number; and `angle` has to be a number, which is understood to be in degrees.\n", + "Por ejemplo, `polyline` requiere tres argumentos: `n` tiene que ser un entero; `length` debería ser un número positivo; y `angle` tiene que ser un número, que se entiende que está en grados.\n", "\n", - "These requirements are called **preconditions** because they are supposed to be true before the function starts executing. Conversely, conditions at the end of the function are **postconditions**.\n", - "Postconditions include the intended effect of the function (like drawing line segments) and any side effects (like moving the turtle or making other changes).\n", + "Estos requisitos se llaman **precondiciones** porque se supone que deben ser verdaderos antes de que la función empiece a ejecutarse. Por el contrario, las condiciones al final de la función son **postcondiciones**.\n", + "Las postcondiciones incluyen el efecto previsto de la función (como dibujar segmentos de línea) y cualquier efecto secundario (como mover la turtle o hacer otros cambios).\n", "\n", - "Preconditions are the responsibility of the caller. If the caller violates a precondition and the function doesn't work correctly, the bug is in the caller, not the function.\n", + "Las precondiciones son responsabilidad de quien llama. Si quien llama viola una precondición y la función no funciona correctamente, el bug está en quien llama, no en la función.\n", "\n", - "If the preconditions are satisfied and the postconditions are not, the bug is in the function. If your pre- and postconditions are clear, they can help with debugging." + "Si las precondiciones se satisfacen y las postcondiciones no, el bug está en la función. Si tus precondiciones y postcondiciones están claras, pueden ayudar con la depuración." ] }, { @@ -672,40 +672,40 @@ "id": "a4d33a70", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**interface design:**\n", - "A process for designing the interface of a function, which includes the parameters it should take.\n", + "**diseño de interfaces:**\n", + "Un proceso para diseñar la interfaz de una función, que incluye los parámetros que debería recibir.\n", "\n", - "**canvas:**\n", - "A window used to display graphical elements including lines, circles, rectangles, and other shapes.\n", + "**lienzo:**\n", + "Una ventana usada para mostrar elementos gráficos, incluyendo líneas, círculos, rectángulos y otras formas.\n", "\n", - "**encapsulation:**\n", - " The process of transforming a sequence of statements into a function definition.\n", + "**encapsulación:**\n", + " El proceso de transformar una secuencia de sentencias en una definición de función.\n", "\n", - "**generalization:**\n", - " The process of replacing something unnecessarily specific (like a number) with something appropriately general (like a variable or parameter).\n", + "**generalización:**\n", + " El proceso de reemplazar algo innecesariamente específico (como un número) por algo adecuadamente general (como una variable o un parámetro).\n", "\n", - "**keyword argument:**\n", - "An argument that includes the name of the parameter.\n", + "**argumento de palabra clave:**\n", + "Un argumento que incluye el nombre del parámetro.\n", "\n", - "**refactoring:**\n", - " The process of modifying a working program to improve function interfaces and other qualities of the code.\n", + "**refactorización:**\n", + " El proceso de modificar un programa que funciona para mejorar las interfaces de las funciones y otras cualidades del código.\n", "\n", - "**development plan:**\n", - "A process for writing programs.\n", + "**plan de desarrollo:**\n", + "Un proceso para escribir programas.\n", "\n", "**docstring:**\n", - " A string that appears at the top of a function definition to document the function's interface.\n", + " Un string que aparece al principio de una definición de función para documentar la interfaz de la función.\n", "\n", - "**multiline string:**\n", - "A string enclosed in triple quotes that can span more than one line of a program.\n", + "**string multilínea:**\n", + "Un string encerrado entre comillas triples que puede ocupar más de una línea de un programa.\n", "\n", - "**precondition:**\n", - " A requirement that should be satisfied by the caller before a function starts.\n", + "**precondición:**\n", + " Un requisito que debería satisfacer quien llama antes de que empiece una función.\n", "\n", - "**postcondition:**\n", - " A requirement that should be satisfied by the function before it ends." + "**postcondición:**\n", + " Un requisito que debería satisfacer la función antes de terminar." ] }, { @@ -713,7 +713,7 @@ "id": "0bfe2e19", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -731,13 +731,13 @@ "id": "50ed5c38", "metadata": {}, "source": [ - "For the exercises below, there are a few more turtle functions you might want to use.\n", + "Para los ejercicios siguientes, hay algunas funciones más de turtle que quizá quieras usar.\n", "\n", - "* `penup` lifts the turtle's imaginary pen so it doesn't leave a trail when it moves.\n", + "* `penup` levanta el lápiz imaginario de la turtle para que no deje rastro cuando se mueve.\n", "\n", - "* `pendown` puts the pen back down.\n", + "* `pendown` vuelve a bajar el lápiz.\n", "\n", - "The following function uses `penup` and `pendown` to move the turtle without leaving a trail." + "La siguiente función usa `penup` y `pendown` para mover la turtle sin dejar rastro." ] }, { @@ -753,10 +753,10 @@ "id": "c78c1e17", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `rectangle` that draws a rectangle with given side lengths.\n", - "For example, here's a rectangle that's `80` units wide and `40` units tall." + "Escribe una función llamada `rectangle` que dibuje un rectángulo con longitudes de lado dadas.\n", + "Por ejemplo, aquí tienes un rectángulo de `80` unidades de ancho y `40` unidades de alto." ] }, { @@ -774,7 +774,7 @@ "tags": [] }, "source": [ - "You can use the following code to test your function." + "Puedes usar el siguiente código para probar tu función." ] }, { @@ -792,9 +792,9 @@ "id": "8b8faaf6", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `rhombus` that draws a rhombus with a given side length and a given interior angle. For example, here's a rhombus with side length `50` and an interior angle of `60` degrees." + "Escribe una función llamada `rhombus` que dibuje un rombo con una longitud de lado dada y un ángulo interior dado. Por ejemplo, aquí tienes un rombo con longitud de lado `50` y un ángulo interior de `60` grados." ] }, { @@ -812,7 +812,7 @@ "tags": [] }, "source": [ - "You can use the following code to test your function." + "Puedes usar el siguiente código para probar tu función." ] }, { @@ -830,9 +830,9 @@ "id": "a9175a90", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Now write a more general function called `parallelogram` that draws a quadrilateral with parallel sides. Then rewrite `rectangle` and `rhombus` to use `parallelogram`." + "Ahora escribe una función más general llamada `parallelogram` que dibuje un cuadrilátero con lados paralelos. Luego reescribe `rectangle` y `rhombus` para que usen `parallelogram`." ] }, { @@ -866,7 +866,7 @@ "tags": [] }, "source": [ - "You can use the following code to test your functions." + "Puedes usar el siguiente código para probar tus funciones." ] }, { @@ -884,13 +884,13 @@ "id": "991ab59d", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write an appropriately general set of functions that can draw shapes like this.\n", + "Escribe un conjunto de funciones adecuadamente general que pueda dibujar formas como esta.\n", "\n", "![](https://github.com/AllenDowney/ThinkPython/raw/v3/jupyturtle_pie.png)\n", "\n", - "Hint: Write a function called `triangle` that draws one triangular segment, and then a function called `draw_pie` that uses `triangle`." + "Pista: escribe una función llamada `triangle` que dibuje un segmento triangular, y luego una función llamada `draw_pie` que use `triangle`." ] }, { @@ -916,7 +916,7 @@ "tags": [] }, "source": [ - "You can use the following code to test your functions." + "Puedes usar el siguiente código para probar tus funciones." ] }, { @@ -944,13 +944,13 @@ "id": "9c78b76f", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write an appropriately general set of functions that can draw flowers like this.\n", + "Escribe un conjunto de funciones adecuadamente general que pueda dibujar flores como esta.\n", "\n", "![](https://github.com/AllenDowney/ThinkPython/raw/v3/jupyturtle_flower.png)\n", "\n", - "Hint: Use `arc` to write a function called `petal` that draws one flower petal." + "Pista: usa `arc` para escribir una función llamada `petal` que dibuje un pétalo de flor." ] }, { @@ -976,12 +976,12 @@ "tags": [] }, "source": [ - "You can use the following code to test your functions.\n", + "Puedes usar el siguiente código para probar tus funciones.\n", "\n", - "Because the solution draws a lot of small line segments, it tends to slow down as it runs.\n", - "To avoid that, you can add the keyword argument `auto_render=False` to avoid drawing after every step, and then call the `render` function at the end to show the result.\n", + "Como la solución dibuja muchos segmentos de línea pequeños, tiende a ralentizarse mientras se ejecuta.\n", + "Para evitarlo, puedes añadir el argumento de palabra clave `auto_render=False` para evitar dibujar después de cada paso, y luego llamar a la función `render` al final para mostrar el resultado.\n", "\n", - "While you are debugging, you might want to remove `auto_render=False`." + "Mientras estés depurando, quizá quieras quitar `auto_render=False`." ] }, { @@ -1009,12 +1009,12 @@ "id": "9d9f35d1", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "There are several modules like `jupyturtle` in Python, and the one we used in this chapter has been customized for this book.\n", - "So if you ask a virtual assistant for help, it won't know which module to use.\n", - "But if you give it a few examples to work with, it can probably figure it out.\n", - "For example, try this prompt and see if it can write a function that draws a spiral:\n", + "Hay varios módulos como `jupyturtle` en Python, y el que usamos en este capítulo se ha personalizado para este libro.\n", + "Así que, si pides ayuda a un asistente virtual, no sabrá qué módulo usar.\n", + "Pero si le das algunos ejemplos con los que trabajar, probablemente pueda deducirlo.\n", + "Por ejemplo, prueba este prompt y mira si puede escribir una función que dibuje una espiral:\n", "\n", "```\n", "The following program uses a turtle graphics module to draw a circle:\n", @@ -1046,9 +1046,9 @@ "id": "7beb2afe", "metadata": {}, "source": [ - "Keep in mind that the result might use features we have not seen yet, and it might have errors.\n", - "Copy the code from the VA and see if you can get it working.\n", - "If you didn't get what you wanted, try modifying the prompt.\n" + "Ten en cuenta que el resultado podría usar características que aún no hemos visto, y podría tener errores.\n", + "Copia el código del asistente virtual y comprueba si puedes hacerlo funcionar.\n", + "Si no obtuviste lo que querías, prueba a modificar el prompt.\n" ] }, { @@ -1074,13 +1074,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/blank/chap05.ipynb b/blank/chap05.ipynb index 9f9ad19..2d480f6 100644 --- a/blank/chap05.ipynb +++ b/blank/chap05.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes comprar versiones impresas y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -25,12 +25,12 @@ "id": "75b60d6c", "metadata": {}, "source": [ - "# Conditionals and Recursion\n", + "# Condicionales y recursión\n", "\n", - "The main topic of this chapter is the `if` statement, which executes different code depending on the state of the program.\n", - "And with the `if` statement we'll be able to explore one of the most powerful ideas in computing, **recursion**.\n", + "El tema principal de este capítulo es la sentencia `if`, que ejecuta código distinto según el estado del programa.\n", + "Y con la sentencia `if` podremos explorar una de las ideas más potentes de la informática: la **recursión**.\n", "\n", - "But we'll start with three new features: the modulus operator, boolean expressions, and logical operators." + "Pero empezaremos con tres características nuevas: el operador módulo, las expresiones booleanas y los operadores lógicos." ] }, { @@ -38,13 +38,13 @@ "id": "4ab7caf4", "metadata": {}, "source": [ - "## Integer division and modulus\n", + "## División entera y módulo\n", "\n", - "Recall that the integer division operator, `//`, divides two numbers and rounds\n", - "down to an integer.\n", - "For example, suppose the run time of a movie is 105 minutes. \n", - "You might want to know how long that is in hours.\n", - "Conventional division returns a floating-point number:" + "Recuerda que el operador de división entera, `//`, divide dos números y redondea\n", + "hacia abajo hasta un entero.\n", + "Por ejemplo, supón que la duración de una película es de 105 minutos. \n", + "Puede que quieras saber cuánto es eso en horas.\n", + "La división convencional devuelve un número de punto flotante:" ] }, { @@ -60,8 +60,8 @@ "id": "3f224403", "metadata": {}, "source": [ - "But we don't normally write hours with decimal points.\n", - "Integer division returns the integer number of hours, rounding down:" + "Pero normalmente no escribimos las horas con decimales.\n", + "La división entera devuelve el número entero de horas, redondeando hacia abajo:" ] }, { @@ -77,7 +77,7 @@ "id": "bfa9b0cf", "metadata": {}, "source": [ - "To get the remainder, you could subtract off one hour in minutes:" + "Para obtener el resto, podrías restar una hora expresada en minutos:" ] }, { @@ -93,7 +93,7 @@ "id": "05caf27f", "metadata": {}, "source": [ - "Or you could use the **modulus operator**, `%`, which divides two numbers and returns the remainder." + "O podrías usar el **operador módulo**, `%`, que divide dos números y devuelve el resto." ] }, { @@ -109,12 +109,12 @@ "id": "18c1e0d0", "metadata": {}, "source": [ - "The modulus operator is more useful than it might seem.\n", - "For example, it can check whether one number is divisible by another -- if `x % y` is zero, then `x` is divisible by `y`.\n", + "El operador módulo es más útil de lo que podría parecer.\n", + "Por ejemplo, puede comprobar si un número es divisible por otro: si `x % y` es cero, entonces `x` es divisible por `y`.\n", "\n", - "Also, it can extract the right-most digit or digits from a number.\n", - "For example, `x % 10` yields the right-most digit of `x` (in base 10).\n", - "Similarly, `x % 100` yields the last two digits." + "También puede extraer el dígito o los dígitos más a la derecha de un número.\n", + "Por ejemplo, `x % 10` produce el dígito más a la derecha de `x` (en base 10).\n", + "De forma similar, `x % 100` produce los dos últimos dígitos." ] }, { @@ -138,8 +138,8 @@ "id": "f2344fc0", "metadata": {}, "source": [ - "Finally, the modulus operator can do \"clock arithmetic\".\n", - "For example, if an event starts at 11 AM and lasts three hours, we can use the modulus operator to figure out what time it ends." + "Por último, el operador módulo puede hacer «aritmética de reloj».\n", + "Por ejemplo, si un evento empieza a las 11 AM y dura tres horas, podemos usar el operador módulo para averiguar a qué hora termina." ] }, { @@ -155,7 +155,7 @@ "id": "351c30df", "metadata": {}, "source": [ - "The event would end at 2 PM." + "El evento terminaría a las 2 PM." ] }, { @@ -163,10 +163,10 @@ "id": "5ed1b58b", "metadata": {}, "source": [ - "## Boolean Expressions\n", + "## Expresiones booleanas\n", "\n", - "A **boolean expression** is an expression that is either true or false.\n", - "For example, the following expressions use the equals operator, `==`, which compares two values and produces `True` if they are equal and `False` otherwise:" + "Una **expresión booleana** es una expresión que es verdadera o falsa.\n", + "Por ejemplo, las siguientes expresiones usan el operador de igualdad, `==`, que compara dos valores y produce `True` si son iguales y `False` en caso contrario:" ] }, { @@ -190,8 +190,8 @@ "id": "41fbc642", "metadata": {}, "source": [ - "A common error is to use a single equal sign (`=`) instead of a double equal sign (`==`).\n", - "Remember that `=` assigns a value to a variable and `==` compares two values. " + "Un error común es usar un solo signo igual (`=`) en lugar de un doble signo igual (`==`).\n", + "Recuerda que `=` asigna un valor a una variable y `==` compara dos valores. " ] }, { @@ -215,8 +215,8 @@ "id": "d3ec6b48", "metadata": {}, "source": [ - "`True` and `False` are special values that belong to the type `bool`;\n", - "they are not strings:" + "`True` y `False` son valores especiales que pertenecen al tipo `bool`;\n", + "no son cadenas:" ] }, { @@ -240,7 +240,7 @@ "id": "451b2e8d", "metadata": {}, "source": [ - "The `==` operator is one of the **relational operators**; the others are:" + "El operador `==` es uno de los **operadores relacionales**; los otros son:" ] }, { @@ -288,12 +288,12 @@ "id": "db5a9477", "metadata": {}, "source": [ - "## Logical operators\n", + "## Operadores lógicos\n", "\n", - "To combine boolean values into expressions, we can use **logical operators**.\n", - "The most common are `and`, ` or`, and `not`.\n", - "The meaning of these operators is similar to their meaning in English.\n", - "For example, the value of the following expression is `True` only if `x` is greater than `0` *and* less than `10`." + "Para combinar valores booleanos en expresiones, podemos usar **operadores lógicos**.\n", + "Los más comunes son `and`, ` or` y `not`.\n", + "El significado de estos operadores es parecido a su significado en inglés.\n", + "Por ejemplo, el valor de la siguiente expresión es `True` solo si `x` es mayor que `0` *y* menor que `10`." ] }, { @@ -309,7 +309,7 @@ "id": "e8c14026", "metadata": {}, "source": [ - "The following expression is `True` if *either or both* of the conditions is true, that is, if the number is divisible by 2 *or* 3:" + "La siguiente expresión es `True` si *una o ambas* condiciones son verdaderas, es decir, si el número es divisible por 2 *o* por 3:" ] }, { @@ -325,7 +325,7 @@ "id": "3bd0ef52", "metadata": {}, "source": [ - "Finally, the `not` operator negates a boolean expression, so the following expression is `True` if `x > y` is `False`." + "Por último, el operador `not` niega una expresión booleana, de modo que la siguiente expresión es `True` si `x > y` es `False`." ] }, { @@ -341,8 +341,8 @@ "id": "fc6098c2", "metadata": {}, "source": [ - "Strictly speaking, the operands of a logical operator should be boolean expressions, but Python is not very strict.\n", - "Any nonzero number is interpreted as `True`:" + "En sentido estricto, los operandos de un operador lógico deberían ser expresiones booleanas, pero Python no es muy estricto.\n", + "Cualquier número distinto de cero se interpreta como `True`:" ] }, { @@ -358,8 +358,8 @@ "id": "102ceab9", "metadata": {}, "source": [ - "This flexibility can be useful, but there are some subtleties to it that can be confusing.\n", - "You might want to avoid it." + "Esta flexibilidad puede ser útil, pero tiene algunas sutilezas que pueden resultar confusas.\n", + "Quizá prefieras evitarla." ] }, { @@ -367,12 +367,12 @@ "id": "6b0f2dc1", "metadata": {}, "source": [ - "## if statements\n", + "## Sentencias `if`\n", "\n", - "In order to write useful programs, we almost always need the ability to\n", - "check conditions and change the behavior of the program accordingly.\n", - "**Conditional statements** give us this ability. The simplest form is\n", - "the `if` statement:" + "Para escribir programas útiles, casi siempre necesitamos la capacidad de\n", + "comprobar condiciones y cambiar el comportamiento del programa en consecuencia.\n", + "Las **sentencias condicionales** nos dan esta capacidad. La forma más sencilla es\n", + "la sentencia `if`:" ] }, { @@ -388,16 +388,16 @@ "id": "973f705e", "metadata": {}, "source": [ - "`if` is a Python keyword.\n", - "`if` statements have the same structure as function definitions: a\n", - "header followed by an indented statement or sequence of statements called a **block**.\n", + "`if` es una palabra clave de Python.\n", + "Las sentencias `if` tienen la misma estructura que las definiciones de función: una\n", + "cabecera seguida de una sentencia indentada o de una secuencia de sentencias llamada **bloque**.\n", "\n", - "The boolean expression after `if` is called the **condition**.\n", - "If it is true, the statements in the indented block run. If not, they don't.\n", + "La expresión booleana que va después de `if` se llama **condición**.\n", + "Si es verdadera, se ejecutan las sentencias del bloque indentado. Si no, no se ejecutan.\n", "\n", - "There is no limit to the number of statements that can appear in the block, but there has to be at least one.\n", - "Occasionally, it is useful to have a block that does nothing -- usually as a place keeper for code you haven't written yet.\n", - "In that case, you can use the `pass` statement, which does nothing." + "No hay límite para el número de sentencias que pueden aparecer en el bloque, pero tiene que haber al menos una.\n", + "A veces resulta útil tener un bloque que no hace nada, normalmente como marcador de posición para código que todavía no has escrito.\n", + "En ese caso, puedes usar la sentencia `pass`, que no hace nada." ] }, { @@ -413,7 +413,7 @@ "id": "adf3f6c5", "metadata": {}, "source": [ - "The word `TODO` in a comment is a conventional reminder that there's something you need to do later." + "La palabra `TODO` en un comentario es un recordatorio convencional de que hay algo que tienes que hacer más adelante." ] }, { @@ -421,10 +421,10 @@ "id": "eb39bcd9", "metadata": {}, "source": [ - "## The `else` clause\n", + "## La cláusula `else`\n", "\n", - "An `if` statement can have a second part, called an `else` clause.\n", - "The syntax looks like this:" + "Una sentencia `if` puede tener una segunda parte, llamada cláusula `else`.\n", + "La sintaxis tiene este aspecto:" ] }, { @@ -440,14 +440,14 @@ "id": "e7dc8943", "metadata": {}, "source": [ - "If the condition is true, the first indented statement runs; otherwise, the second indented statement runs.\n", + "Si la condición es verdadera, se ejecuta la primera sentencia indentada; si no, se ejecuta la segunda sentencia indentada.\n", "\n", - "In this example, if `x` is even, the remainder when `x` is divided by `2` is `0`, so the condition is true and the program displays `x is even`.\n", - "If `x` is odd, the remainder is `1`, so the condition\n", - "is false, and the program displays `x is odd`.\n", + "En este ejemplo, si `x` es par, el resto al dividir `x` entre `2` es `0`, así que la condición es verdadera y el programa muestra `x is even`.\n", + "Si `x` es impar, el resto es `1`, así que la condición\n", + "es falsa, y el programa muestra `x is odd`.\n", "\n", - "Since the condition must be true or false, exactly one of the alternatives will run. \n", - "The alternatives are called **branches**." + "Como la condición debe ser verdadera o falsa, se ejecutará exactamente una de las alternativas. \n", + "Las alternativas se llaman **ramas**." ] }, { @@ -455,10 +455,10 @@ "id": "20c8adb6", "metadata": {}, "source": [ - "## Chained conditionals\n", + "## Condicionales encadenados\n", "\n", - "Sometimes there are more than two possibilities and we need more than two branches.\n", - "One way to express a computation like that is a **chained conditional**, which includes an `elif` clause." + "A veces hay más de dos posibilidades y necesitamos más de dos ramas.\n", + "Una forma de expresar un cálculo así es un **condicional encadenado**, que incluye una cláusula `elif`." ] }, { @@ -474,15 +474,15 @@ "id": "46916379", "metadata": {}, "source": [ - "`elif` is an abbreviation of \"else if\".\n", - "There is no limit on the number of `elif` clauses.\n", - "If there is an `else` clause, it has to be at the end, but there doesn't have to be\n", - "one.\n", + "`elif` es una abreviatura de «else if».\n", + "No hay límite en el número de cláusulas `elif`.\n", + "Si hay una cláusula `else`, tiene que ir al final, pero no tiene por qué haber\n", + "una.\n", "\n", - "Each condition is checked in order.\n", - "If the first is false, the next is checked, and so on.\n", - "If one of them is true, the corresponding branch runs and the `if` statement ends.\n", - "Even if more than one condition is true, only the first true branch runs." + "Cada condición se comprueba en orden.\n", + "Si la primera es falsa, se comprueba la siguiente, y así sucesivamente.\n", + "Si una de ellas es verdadera, se ejecuta la rama correspondiente y termina la sentencia `if`.\n", + "Aunque más de una condición sea verdadera, solo se ejecuta la primera rama verdadera." ] }, { @@ -490,10 +490,10 @@ "id": "e0c0b9dd", "metadata": {}, "source": [ - "## Nested Conditionals\n", + "## Condicionales anidados\n", "\n", - "One conditional can also be nested within another.\n", - "We could have written the example in the previous section like this:" + "Un condicional también puede estar anidado dentro de otro.\n", + "Podríamos haber escrito el ejemplo de la sección anterior así:" ] }, { @@ -509,15 +509,15 @@ "id": "29f67a0a", "metadata": {}, "source": [ - "The outer `if` statement contains two branches. \n", - "The first branch contains a simple statement. The second branch contains another `if` statement, which has two branches of its own.\n", - "Those two branches are both simple statements, although they could have been conditional statements as well.\n", + "La sentencia `if` exterior contiene dos ramas. \n", + "La primera rama contiene una sentencia sencilla. La segunda rama contiene otra sentencia `if`, que tiene dos ramas propias.\n", + "Esas dos ramas son ambas sentencias sencillas, aunque también podrían haber sido sentencias condicionales.\n", "\n", - "Although the indentation of the statements makes the structure apparent, **nested conditionals** can be difficult to read.\n", - "I suggest you avoid them when you can.\n", + "Aunque la indentación de las sentencias hace visible la estructura, los **condicionales anidados** pueden ser difíciles de leer.\n", + "Te sugiero que los evites cuando puedas.\n", "\n", - "Logical operators often provide a way to simplify nested conditional statements.\n", - "Here's an example with a nested conditional." + "Los operadores lógicos suelen proporcionar una forma de simplificar sentencias condicionales anidadas.\n", + "Aquí tienes un ejemplo con un condicional anidado." ] }, { @@ -533,7 +533,7 @@ "id": "5292eb11", "metadata": {}, "source": [ - "The `print` statement runs only if we make it past both conditionals, so we get the same effect with the `and` operator." + "La sentencia `print` se ejecuta solo si superamos ambos condicionales, así que conseguimos el mismo efecto con el operador `and`." ] }, { @@ -549,7 +549,7 @@ "id": "dd8e808a", "metadata": {}, "source": [ - "For this kind of condition, Python provides a more concise option:" + "Para este tipo de condición, Python ofrece una opción más concisa:" ] }, { @@ -565,11 +565,11 @@ "id": "db583cd9", "metadata": {}, "source": [ - "## Recursion\n", + "## Recursión\n", "\n", - "It is legal for a function to call itself.\n", - "It may not be obvious why that is a good thing, but it turns out to be one of the most magical things a program can do.\n", - "Here's an example." + "Es legal que una función se llame a sí misma.\n", + "Puede que no sea obvio por qué eso es algo bueno, pero resulta ser una de las cosas más mágicas que puede hacer un programa.\n", + "Aquí tienes un ejemplo." ] }, { @@ -585,10 +585,10 @@ "id": "c88e0dc7", "metadata": {}, "source": [ - "If `n` is 0 or negative, `countdown` outputs the word, \"Blastoff!\" Otherwise, it\n", - "outputs `n` and then calls itself, passing `n-1` as an argument.\n", + "Si `n` es 0 o negativo, `countdown` muestra la palabra «Blastoff!». En caso contrario,\n", + "muestra `n` y luego se llama a sí misma, pasando `n-1` como argumento.\n", "\n", - "Here's what happens when we call this function with the argument `3`." + "Esto es lo que ocurre cuando llamamos a esta función con el argumento `3`." ] }, { @@ -604,23 +604,23 @@ "id": "3f3c87ec", "metadata": {}, "source": [ - "The execution of `countdown` begins with `n=3`, and since `n` is greater\n", - "than `0`, it displays `3`, and then calls itself\\...\n", + "La ejecución de `countdown` empieza con `n=3`, y como `n` es mayor\n", + "que `0`, muestra `3` y luego se llama a sí misma\\...\n", "\n", - "> The execution of `countdown` begins with `n=2`, and since `n` is\n", - "> greater than `0`, it displays `2`, and then calls itself\\...\n", + "> La ejecución de `countdown` empieza con `n=2`, y como `n` es\n", + "> mayor que `0`, muestra `2` y luego se llama a sí misma\\...\n", ">\n", - "> > The execution of `countdown` begins with `n=1`, and since `n` is\n", - "> > greater than `0`, it displays `1`, and then calls itself\\...\n", + "> > La ejecución de `countdown` empieza con `n=1`, y como `n` es\n", + "> > mayor que `0`, muestra `1` y luego se llama a sí misma\\...\n", "> >\n", - "> > > The execution of `countdown` begins with `n=0`, and since `n` is\n", - "> > > not greater than `0`, it displays \"Blastoff!\" and returns.\n", + "> > > La ejecución de `countdown` empieza con `n=0`, y como `n` no es\n", + "> > > mayor que `0`, muestra «Blastoff!» y retorna.\n", "> >\n", - "> > The `countdown` that got `n=1` returns.\n", + "> > La `countdown` que recibió `n=1` retorna.\n", ">\n", - "> The `countdown` that got `n=2` returns.\n", + "> La `countdown` que recibió `n=2` retorna.\n", "\n", - "The `countdown` that got `n=3` returns." + "La `countdown` que recibió `n=3` retorna." ] }, { @@ -628,8 +628,8 @@ "id": "782e95bb", "metadata": {}, "source": [ - "A function that calls itself is **recursive**.\n", - "As another example, we can write a function that prints a string `n` times." + "Una función que se llama a sí misma es **recursiva**.\n", + "Como otro ejemplo, podemos escribir una función que imprime una cadena `n` veces." ] }, { @@ -645,11 +645,11 @@ "id": "73d07c17", "metadata": {}, "source": [ - "If `n` is positive, `print_n_times` displays the value of `string` and then calls itself, passing along `string` and `n-1` as arguments.\n", + "Si `n` es positivo, `print_n_times` muestra el valor de `string` y luego se llama a sí misma, pasando `string` y `n-1` como argumentos.\n", "\n", - "If `n` is `0` or negative, the condition is false and `print_n_times` does nothing.\n", + "Si `n` es `0` o negativo, la condición es falsa y `print_n_times` no hace nada.\n", "\n", - "Here's how it works." + "Así es como funciona." ] }, { @@ -665,9 +665,9 @@ "id": "1fb55a78", "metadata": {}, "source": [ - "For simple examples like this, it is probably easier to use a `for`\n", - "loop. But we will see examples later that are hard to write with a `for`\n", - "loop and easy to write with recursion, so it is good to start early." + "Para ejemplos sencillos como este, probablemente sea más fácil usar un bucle `for`.\n", + "Pero más adelante veremos ejemplos que son difíciles de escribir con un bucle `for`\n", + "y fáciles de escribir con recursión, así que conviene empezar pronto." ] }, { @@ -675,9 +675,9 @@ "id": "c652c739", "metadata": {}, "source": [ - "## Stack diagrams for recursive functions\n", + "## Diagramas de stack para funciones recursivas\n", "\n", - "Here's a stack diagram that shows the frames created when we called `countdown` with `n = 3`." + "Aquí tienes un diagrama de stack que muestra los marcos creados cuando llamamos a `countdown` con `n = 3`." ] }, { @@ -705,9 +705,9 @@ "id": "9282331b", "metadata": {}, "source": [ - "The four `countdown` frames have different values for the parameter `n`.\n", - "The bottom of the stack, where `n=0`, is called the **base case**.\n", - "It does not make a recursive call, so there are no more frames." + "Los cuatro marcos de `countdown` tienen valores distintos para el parámetro `n`.\n", + "La parte inferior del stack, donde `n=0`, se llama **caso base**.\n", + "No hace una llamada recursiva, así que no hay más marcos." ] }, { @@ -725,12 +725,12 @@ "id": "37bbc2b8", "metadata": {}, "source": [ - "## Infinite recursion\n", + "## Recursión infinita\n", "\n", - "If a recursion never reaches a base case, it goes on making recursive\n", - "calls forever, and the program never terminates. This is known as\n", - "**infinite recursion**, and it is generally not a good idea.\n", - "Here's a minimal function with an infinite recursion." + "Si una recursión nunca alcanza un caso base, sigue haciendo llamadas\n", + "recursivas para siempre, y el programa nunca termina. Esto se conoce como\n", + "**recursión infinita**, y por lo general no es una buena idea.\n", + "Aquí tienes una función mínima con una recursión infinita." ] }, { @@ -746,9 +746,9 @@ "id": "450a20ac", "metadata": {}, "source": [ - "Every time `recurse` is called, it calls itself, which creates another frame.\n", - "In Python, there is a limit to the number of frames that can be on the stack at the same time.\n", - "If a program exceeds the limit, it causes a runtime error." + "Cada vez que se llama a `recurse`, se llama a sí misma, lo que crea otro marco.\n", + "En Python, hay un límite para el número de marcos que pueden estar en el stack al mismo tiempo.\n", + "Si un programa supera el límite, provoca un error en tiempo de ejecución." ] }, { @@ -776,9 +776,9 @@ "id": "39fc5c31", "metadata": {}, "source": [ - "The traceback indicates that there were almost 3000 frames on the stack when the error occurred.\n", + "El traceback indica que había casi 3000 marcos en el stack cuando ocurrió el error.\n", "\n", - "If you encounter an infinite recursion by accident, review your function to confirm that there is a base case that does not make a recursive call. And if there is a base case, check whether you are guaranteed to reach it." + "Si te encuentras por accidente con una recursión infinita, revisa tu función para confirmar que hay un caso base que no hace una llamada recursiva. Y si hay un caso base, comprueba si tienes garantizado llegar a él." ] }, { @@ -786,15 +786,15 @@ "id": "45299414", "metadata": {}, "source": [ - "## Keyboard input\n", + "## Entrada por teclado\n", "\n", - "The programs we have written so far accept no input from the user. They\n", - "just do the same thing every time.\n", + "Los programas que hemos escrito hasta ahora no aceptan entrada del usuario. Simplemente\n", + "hacen lo mismo cada vez.\n", "\n", - "Python provides a built-in function called `input` that stops the\n", - "program and waits for the user to type something. When the user presses\n", - "*Return* or *Enter*, the program resumes and `input` returns what the user\n", - "typed as a string." + "Python proporciona una función integrada llamada `input` que detiene el\n", + "programa y espera a que el usuario escriba algo. Cuando el usuario pulsa\n", + "*Return* o *Enter*, el programa continúa y `input` devuelve lo que el usuario\n", + "ha escrito como una cadena." ] }, { @@ -820,8 +820,8 @@ "id": "acf9ec53", "metadata": {}, "source": [ - "Before getting input from the user, you might want to display a prompt\n", - "telling the user what to type. `input` can take a prompt as an argument:" + "Antes de obtener entrada del usuario, puede que quieras mostrar un prompt\n", + "que le indique qué debe escribir. `input` puede recibir un prompt como argumento:" ] }, { @@ -847,9 +847,10 @@ "id": "1b754b39", "metadata": {}, "source": [ - "The sequence `\\n` at the end of the prompt represents a **newline**, which is a special character that causes a line break -- that way the user's input appears below the prompt.\n", + "La secuencia `\n", + "` al final del prompt representa una **nueva línea**, que es un carácter especial que provoca un salto de línea; así, la entrada del usuario aparece debajo del prompt.\n", "\n", - "If you expect the user to type an integer, you can use the `int` function to convert the return value to `int`." + "Si esperas que el usuario escriba un entero, puedes usar la función `int` para convertir el valor de retorno a `int`." ] }, { @@ -875,7 +876,7 @@ "id": "0a65f2af", "metadata": {}, "source": [ - "But if they type something that's not an integer, you'll get a runtime error." + "Pero si escribe algo que no es un entero, obtendrás un error en tiempo de ejecución." ] }, { @@ -903,7 +904,7 @@ "id": "a4ce3ed5", "metadata": {}, "source": [ - "We will see how to handle this kind of error later." + "Más adelante veremos cómo manejar este tipo de error." ] }, { @@ -913,17 +914,16 @@ "source": [ "## Debugging\n", "\n", - "When a syntax or runtime error occurs, the error message contains a lot\n", - "of information, but it can be overwhelming. The most useful parts are\n", - "usually:\n", + "Cuando ocurre un error de sintaxis o en tiempo de ejecución, el mensaje de error contiene mucha\n", + "información, pero puede resultar abrumador. Las partes más útiles suelen ser:\n", "\n", - "- What kind of error it was, and\n", + "- Qué tipo de error fue, y\n", "\n", - "- Where it occurred.\n", + "- Dónde ocurrió.\n", "\n", - "Syntax errors are usually easy to find, but there are a few gotchas.\n", - "Errors related to spaces and tabs can be tricky because they are invisible\n", - "and we are used to ignoring them." + "Los errores de sintaxis suelen ser fáciles de encontrar, pero hay algunas trampas.\n", + "Los errores relacionados con espacios y tabulaciones pueden ser complicados porque son invisibles\n", + "y estamos acostumbrados a ignorarlos." ] }, { @@ -941,12 +941,12 @@ "id": "d1d06263", "metadata": {}, "source": [ - "In this example, the problem is that the second line is indented by one space.\n", - "But the error message points to `y`, which is misleading.\n", - "Error messages indicate where the problem was discovered, but the actual error might be earlier in the code.\n", + "En este ejemplo, el problema es que la segunda línea está indentada con un espacio.\n", + "Pero el mensaje de error señala a `y`, lo que resulta engañoso.\n", + "Los mensajes de error indican dónde se descubrió el problema, pero el error real podría estar antes en el código.\n", "\n", - "The same is true of runtime errors. \n", - "For example, suppose you are trying to convert a ratio to decibels, like this:" + "Lo mismo ocurre con los errores en tiempo de ejecución. \n", + "Por ejemplo, supón que intentas convertir una razón a decibelios, así:" ] }, { @@ -974,11 +974,11 @@ "id": "55914374", "metadata": {}, "source": [ - "The error message indicates line 5, but there is nothing wrong with that line.\n", - "The problem is in line 4, which uses integer division instead of floating-point division -- as a result, the value of `ratio` is `0`.\n", - "When we call `math.log10`, we get a `ValueError` with the message `math domain error`, because `0` is not in the \"domain\" of valid arguments for `math.log10`, because the logarithm of `0` is undefined.\n", + "El mensaje de error indica la línea 5, pero no hay nada malo en esa línea.\n", + "El problema está en la línea 4, que usa división entera en lugar de división de punto flotante; como resultado, el valor de `ratio` es `0`.\n", + "Cuando llamamos a `math.log10`, obtenemos un `ValueError` con el mensaje `math domain error`, porque `0` no está en el «dominio» de argumentos válidos para `math.log10`, ya que el logaritmo de `0` no está definido.\n", "\n", - "In general, you should take the time to read error messages carefully, but don't assume that everything they say is correct." + "En general, deberías tomarte el tiempo de leer cuidadosamente los mensajes de error, pero no asumas que todo lo que dicen es correcto." ] }, { @@ -986,53 +986,53 @@ "id": "8ffe690e", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**recursion:**\n", - "The process of calling the function that is currently executing.\n", + "**recursión:**\n", + "El proceso de llamar a la función que se está ejecutando en ese momento.\n", "\n", - "**modulus operator:**\n", - "An operator, `%`, that works on integers and returns the remainder when one number is divided by another.\n", + "**operador módulo:**\n", + "Un operador, `%`, que funciona con enteros y devuelve el resto cuando un número se divide entre otro.\n", "\n", - "**boolean expression:**\n", - "An expression whose value is either `True` or `False`.\n", + "**expresión booleana:**\n", + "Una expresión cuyo valor es `True` o `False`.\n", "\n", - "**relational operator:**\n", - "One of the operators that compares its operands: `==`, `!=`, `>`, `<`, `>=`, and `<=`.\n", + "**operador relacional:**\n", + "Uno de los operadores que compara sus operandos: `==`, `!=`, `>`, `<`, `>=` y `<=`.\n", "\n", - "**logical operator:**\n", - "One of the operators that combines boolean expressions, including `and`, `or`, and `not`.\n", + "**operador lógico:**\n", + "Uno de los operadores que combina expresiones booleanas, incluidos `and`, `or` y `not`.\n", "\n", - "**conditional statement:**\n", - "A statement that controls the flow of execution depending on some condition.\n", + "**sentencia condicional:**\n", + "Una sentencia que controla el flujo de ejecución dependiendo de alguna condición.\n", "\n", - "**condition:**\n", - "The boolean expression in a conditional statement that determines which branch runs.\n", + "**condición:**\n", + "La expresión booleana en una sentencia condicional que determina qué rama se ejecuta.\n", "\n", - "**block:**\n", - "One or more statements indented to indicate they are part of another statement.\n", + "**bloque:**\n", + "Una o más sentencias indentadas para indicar que forman parte de otra sentencia.\n", "\n", - "**branch:**\n", - "One of the alternative sequences of statements in a conditional statement.\n", + "**rama:**\n", + "Una de las secuencias alternativas de sentencias en una sentencia condicional.\n", "\n", - "**chained conditional:**\n", - "A conditional statement with a series of alternative branches.\n", + "**condicional encadenado:**\n", + "Una sentencia condicional con una serie de ramas alternativas.\n", "\n", - "**nested conditional:**\n", - "A conditional statement that appears in one of the branches of another conditional statement.\n", + "**condicional anidado:**\n", + "Una sentencia condicional que aparece en una de las ramas de otra sentencia condicional.\n", "\n", - "**recursive:**\n", - "A function that calls itself is recursive.\n", + "**recursiva:**\n", + "Una función que se llama a sí misma es recursiva.\n", "\n", - "**base case:**\n", - "A conditional branch in a recursive function that does not make a recursive call.\n", + "**caso base:**\n", + "Una rama condicional en una función recursiva que no hace una llamada recursiva.\n", "\n", - "**infinite recursion:**\n", - "A recursion that doesn't have a base case, or never reaches it.\n", - "Eventually, an infinite recursion causes a runtime error.\n", + "**recursión infinita:**\n", + "Una recursión que no tiene caso base o que nunca lo alcanza.\n", + "Con el tiempo, una recursión infinita provoca un error en tiempo de ejecución.\n", "\n", - "**newline:**\n", - "A character that creates a line break between two parts of a string." + "**nueva línea:**\n", + "Un carácter que crea un salto de línea entre dos partes de una cadena." ] }, { @@ -1040,7 +1040,7 @@ "id": "8d783953", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1058,15 +1058,15 @@ "id": "02f9f1d7", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "* Ask a virtual assistant, \"What are some uses of the modulus operator?\"\n", + "* Pregunta a un asistente virtual: «¿Cuáles son algunos usos del operador módulo?»\n", "\n", - "* Python provides operators to compute the logical operations `and`, `or`, and `not`, but it doesn't have an operator that computes the exclusive `or` operation, usually written `xor`. Ask an assistant \"What is the logical xor operation and how do I compute it in Python?\"\n", + "* Python proporciona operadores para calcular las operaciones lógicas `and`, `or` y `not`, pero no tiene un operador que calcule la operación `or` exclusiva, que normalmente se escribe `xor`. Pregunta a un asistente: «¿Qué es la operación lógica xor y cómo la calculo en Python?»\n", "\n", - "In this chapter, we saw two ways to write an `if` statement with three branches, using a chained conditional or a nested conditional.\n", - "You can use a virtual assistant to convert from one to the other.\n", - "For example, ask a VA, \"Convert this statement to a chained conditional.\"" + "En este capítulo, vimos dos formas de escribir una sentencia `if` con tres ramas: usando un condicional encadenado o un condicional anidado.\n", + "Puedes usar un asistente virtual para convertir de una forma a la otra.\n", + "Por ejemplo, pregunta a un asistente virtual: «Convierte esta sentencia en un condicional encadenado»." ] }, { @@ -1092,7 +1092,7 @@ "id": "9c2a8466", "metadata": {}, "source": [ - "Ask a VA, \"Rewrite this statement with a single conditional.\"" + "Pregunta a un asistente virtual: «Reescribe esta sentencia con un único condicional»." ] }, { @@ -1108,7 +1108,7 @@ "id": "e0fbed08", "metadata": {}, "source": [ - "See if a VA can simplify this unnecessary complexity." + "Comprueba si un asistente virtual puede simplificar esta complejidad innecesaria." ] }, { @@ -1124,7 +1124,7 @@ "id": "74ef776d", "metadata": {}, "source": [ - "Here's an attempt at a recursive function that counts down by two." + "Aquí tienes un intento de función recursiva que cuenta hacia atrás de dos en dos." ] }, { @@ -1140,7 +1140,7 @@ "id": "77178e79", "metadata": {}, "source": [ - "It seems to work." + "Parece funcionar." ] }, { @@ -1156,8 +1156,8 @@ "id": "c9d3a8dc", "metadata": {}, "source": [ - "But it has an error. Ask a virtual assistant what's wrong and how to fix it.\n", - "Paste the solution it provides back here and test it." + "Pero tiene un error. Pregunta a un asistente virtual qué está mal y cómo arreglarlo.\n", + "Pega aquí la solución que te proporcione y pruébala." ] }, { @@ -1165,10 +1165,10 @@ "id": "240a3888", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The `time` module provides a function, also called `time`, that returns\n", - "returns the number of seconds since the \"Unix epoch\", which is January 1, 1970, 00:00:00 UTC (Coordinated Universal Time)." + "El módulo `time` proporciona una función, también llamada `time`, que devuelve\n", + "el número de segundos transcurridos desde la «época Unix», que es el 1 de enero de 1970, 00:00:00 UTC (tiempo universal coordinado)." ] }, { @@ -1184,7 +1184,7 @@ "id": "054c3197", "metadata": {}, "source": [ - "Use integer division and the modulus operator to compute the number of days since January 1, 1970 and the current time of day in hours, minutes, and seconds." + "Usa la división entera y el operador módulo para calcular el número de días transcurridos desde el 1 de enero de 1970 y la hora actual del día en horas, minutos y segundos." ] }, { @@ -1194,7 +1194,7 @@ "tags": [] }, "source": [ - "You can read more about the `time` module at ." + "Puedes leer más sobre el módulo `time` en ." ] }, { @@ -1234,23 +1234,22 @@ "id": "6b1fd514", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "If you are given three sticks, you may or may not be able to arrange\n", - "them in a triangle. For example, if one of the sticks is 12 inches long\n", - "and the other two are one inch long, you will not be able to get the\n", - "short sticks to meet in the middle. For any three lengths, there is a\n", - "test to see if it is possible to form a triangle:\n", + "Si te dan tres palos, puede que puedas colocarlos formando un triángulo, o puede que no. Por ejemplo, si uno de los palos mide 12 pulgadas\n", + "y los otros dos miden una pulgada, no podrás hacer que los\n", + "palos cortos se encuentren en el centro. Para tres longitudes cualesquiera, hay una\n", + "prueba para ver si es posible formar un triángulo:\n", "\n", - "> If any of the three lengths is greater than the sum of the other two,\n", - "> then you cannot form a triangle. Otherwise, you can. (If the sum of\n", - "> two lengths equals the third, they form what is called a \"degenerate\"\n", - "> triangle.)\n", + "> Si cualquiera de las tres longitudes es mayor que la suma de las otras dos,\n", + "> entonces no puedes formar un triángulo. En caso contrario, sí puedes. (Si la suma de\n", + "> dos longitudes es igual a la tercera, forman lo que se llama un triángulo\n", + "> «degenerado».)\n", "\n", - "Write a function named `is_triangle` that takes three integers as\n", - "arguments, and that prints either \"Yes\" or \"No\", depending on\n", - "whether you can or cannot form a triangle from sticks with the given\n", - "lengths. Hint: Use a chained conditional.\n", + "Escribe una función llamada `is_triangle` que reciba tres enteros como\n", + "argumentos, y que imprima «Yes» o «No», dependiendo de\n", + "si se puede o no formar un triángulo con palos de las longitudes dadas.\n", + "Pista: usa un condicional encadenado.\n", "\n" ] }, @@ -1271,7 +1270,7 @@ "tags": [] }, "source": [ - "Test your function with the following cases." + "Prueba tu función con los siguientes casos." ] }, { @@ -1319,10 +1318,10 @@ "id": "2ba42106", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "What is the output of the following program? Draw a stack diagram that\n", - "shows the state of the program when it prints the result." + "¿Cuál es la salida del siguiente programa? Dibuja un diagrama de stack que\n", + "muestre el estado del programa cuando imprime el resultado." ] }, { @@ -1356,14 +1355,14 @@ "id": "bca9517d", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The following exercises use the `jupyturtle` module, described in Chapter 4.\n", + "Los siguientes ejercicios usan el módulo `jupyturtle`, descrito en el Capítulo 4.\n", "\n", - "Read the following function and see if you can figure out what it does.\n", - "Then run it and see if you got it right.\n", - "Adjust the values of `length`, `angle` and `factor` and see what effect they have on the result.\n", - "If you are not sure you understand how it works, try asking a virtual assistant." + "Lee la siguiente función y mira si puedes averiguar qué hace.\n", + "Luego ejecútala y comprueba si acertaste.\n", + "Ajusta los valores de `length`, `angle` y `factor`, y observa qué efecto tienen en el resultado.\n", + "Si no tienes claro cómo funciona, prueba a preguntar a un asistente virtual." ] }, { @@ -1387,30 +1386,30 @@ "id": "e525ba59", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Ask a virtual assistant \"What is the Koch curve?\"\n", + "Pregunta a un asistente virtual: «¿Qué es la curva de Koch?»\n", "\n", - "To draw a Koch curve with length `x`, all you\n", - "have to do is\n", + "Para dibujar una curva de Koch con longitud `x`, todo lo que\n", + "tienes que hacer es\n", "\n", - "1. Draw a Koch curve with length `x/3`.\n", + "1. Dibujar una curva de Koch con longitud `x/3`.\n", "\n", - "2. Turn left 60 degrees.\n", + "2. Girar a la izquierda 60 grados.\n", "\n", - "3. Draw a Koch curve with length `x/3`.\n", + "3. Dibujar una curva de Koch con longitud `x/3`.\n", "\n", - "4. Turn right 120 degrees.\n", + "4. Girar a la derecha 120 grados.\n", "\n", - "5. Draw a Koch curve with length `x/3`.\n", + "5. Dibujar una curva de Koch con longitud `x/3`.\n", "\n", - "6. Turn left 60 degrees.\n", + "6. Girar a la izquierda 60 grados.\n", "\n", - "7. Draw a Koch curve with length `x/3`.\n", + "7. Dibujar una curva de Koch con longitud `x/3`.\n", "\n", - "The exception is if `x` is less than `5` -- in that case, you can just draw a straight line with length `x`.\n", + "La excepción es si `x` es menor que `5`; en ese caso, puedes dibujar simplemente una línea recta con longitud `x`.\n", "\n", - "Write a function called `koch` that takes `x` as an argument and draws a Koch curve with the given length.\n" + "Escribe una función llamada `koch` que reciba `x` como argumento y dibuje una curva de Koch con la longitud dada.\n" ] }, { @@ -1426,7 +1425,7 @@ "id": "2991143a", "metadata": {}, "source": [ - "The result should look like this:" + "El resultado debería verse así:" ] }, { @@ -1444,7 +1443,7 @@ "tags": [] }, "source": [ - "Once you have koch working, you can use this loop to draw three Koch curves in the shape of a snowflake." + "Cuando tengas `koch` funcionando, puedes usar este bucle para dibujar tres curvas de Koch con forma de copo de nieve." ] }, { @@ -1462,17 +1461,17 @@ "id": "4c964239", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Virtual assistants know about the functions in the `jupyturtle` module, but there are many versions of these functions, with different names, so a VA might not know which one you are talking about.\n", + "Los asistentes virtuales conocen las funciones del módulo `jupyturtle`, pero hay muchas versiones de estas funciones, con nombres distintos, así que un asistente virtual podría no saber de cuál estás hablando.\n", "\n", - "To solve this problem, you can provide additional information before you ask a question.\n", - "For example, you could start a prompt with \"Here's a program that uses the `jupyturtle` module,\" and then paste in one of the examples from this chapter.\n", - "After that, the VA should be able to generate code that uses this module.\n", + "Para resolver este problema, puedes proporcionar información adicional antes de hacer una pregunta.\n", + "Por ejemplo, podrías empezar un prompt con «Aquí tienes un programa que usa el módulo `jupyturtle`», y luego pegar uno de los ejemplos de este capítulo.\n", + "Después de eso, el asistente virtual debería poder generar código que use este módulo.\n", "\n", - "As an example, ask a VA for a program that draws a Sierpiński triangle.\n", - "The code you get should be a good starting place, but you might have to do some debugging.\n", - "If the first attempt doesn't work, you can tell the VA what happened and ask for help -- or you can debug it yourself." + "Como ejemplo, pide a un asistente virtual un programa que dibuje un triángulo de Sierpiński.\n", + "El código que obtengas debería ser un buen punto de partida, pero quizá tengas que hacer algo de debugging.\n", + "Si el primer intento no funciona, puedes contarle al asistente virtual qué ocurrió y pedir ayuda, o puedes depurarlo por tu cuenta." ] }, { @@ -1488,7 +1487,7 @@ "id": "6a95097a", "metadata": {}, "source": [ - "Here's what the result might look like, although the version you get might be different." + "Este es un posible aspecto del resultado, aunque la versión que obtengas podría ser diferente." ] }, { @@ -1518,9 +1517,11 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/blank/chap06.ipynb b/blank/chap06.ipynb index 7fadc4e..f9d5cce 100644 --- a/blank/chap06.ipynb +++ b/blank/chap06.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes comprar las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -25,16 +25,16 @@ "id": "88ecc443", "metadata": {}, "source": [ - "# Return Values\n", + "# Valores de retorno\n", "\n", - "In previous chapters, we've used built-in functions -- like `abs` and `round` -- and functions in the math module -- like `sqrt` and `pow`.\n", - "When you call one of these functions, it returns a value you can assign to a variable or use as part of an expression.\n", + "En capítulos anteriores, hemos usado funciones integradas -- como `abs` y `round` -- y funciones del módulo math -- como `sqrt` y `pow`.\n", + "Cuando llamas a una de estas funciones, devuelve un valor que puedes asignar a una variable o usar como parte de una expresión.\n", "\n", - "The functions we have written so far are different.\n", - "Some use the `print` function to display values, and some use turtle functions to draw figures.\n", - "But they don't return values we assign to variables or use in expressions.\n", + "Las funciones que hemos escrito hasta ahora son diferentes.\n", + "Algunas usan la función `print` para mostrar valores, y otras usan funciones de turtle para dibujar figuras.\n", + "Pero no devuelven valores que asignemos a variables o usemos en expresiones.\n", "\n", - "In this chapter, we'll see how to write functions that return values." + "En este capítulo veremos cómo escribir funciones que devuelven valores." ] }, { @@ -42,10 +42,10 @@ "id": "6cf2cf80", "metadata": {}, "source": [ - "## Some functions have return values\n", + "## Algunas funciones tienen valores de retorno\n", "\n", - "When you call a function like `math.sqrt`, the result is called a **return value**.\n", - "If the function call appears at the end of a cell, Jupyter displays the return value immediately." + "Cuando llamas a una función como `math.sqrt`, el resultado se llama **valor de retorno**.\n", + "Si la llamada a la función aparece al final de una celda, Jupyter muestra inmediatamente el valor de retorno." ] }, { @@ -61,7 +61,7 @@ "id": "4b4885c2", "metadata": {}, "source": [ - "If you assign the return value to a variable, it doesn't get displayed." + "Si asignas el valor de retorno a una variable, no se muestra." ] }, { @@ -77,7 +77,7 @@ "id": "196c692b", "metadata": {}, "source": [ - "But you can display it later." + "Pero puedes mostrarlo más tarde." ] }, { @@ -93,7 +93,7 @@ "id": "257b28d5", "metadata": {}, "source": [ - "Or you can use the return value as part of an expression." + "O puedes usar el valor de retorno como parte de una expresión." ] }, { @@ -109,7 +109,7 @@ "id": "23ed47ab", "metadata": {}, "source": [ - "Here's an example of a function that returns a value." + "Aquí tienes un ejemplo de una función que devuelve un valor." ] }, { @@ -125,11 +125,12 @@ "id": "273acabc", "metadata": {}, "source": [ - "`circle_area` takes `radius` as a parameter and computes the area of a circle with that radius.\n", + "`circle_area` toma `radius` como parámetro y calcula el área de un círculo con ese radio.\n", "\n", - "The last line is a `return` statement that returns the value of `area`.\n", + "La última línea es una sentencia `return` que devuelve el valor de `area`.\n", "\n", - "If we call the function like this, Jupyter displays the return value.\n" + "Si llamamos a la función así, Jupyter muestra el valor de retorno.\n", + "\n" ] }, { @@ -145,7 +146,7 @@ "id": "4f28bfd6", "metadata": {}, "source": [ - "We can assign the return value to a variable." + "Podemos asignar el valor de retorno a una variable." ] }, { @@ -161,7 +162,7 @@ "id": "3f82fe70", "metadata": {}, "source": [ - "Or use it as part of an expression." + "O usarlo como parte de una expresión." ] }, { @@ -177,7 +178,7 @@ "id": "15122fd2", "metadata": {}, "source": [ - "Later we can display the value of the variable we assigned the result to." + "Más tarde podemos mostrar el valor de la variable a la que asignamos el resultado." ] }, { @@ -193,7 +194,7 @@ "id": "a3f6dcae", "metadata": {}, "source": [ - "But we can't access `area`." + "Pero no podemos acceder a `area`." ] }, { @@ -211,7 +212,7 @@ "id": "f8ace9ce", "metadata": {}, "source": [ - "`area` is a local variable in a function, so we can't access it from outside the function." + "`area` es una variable local dentro de una función, así que no podemos acceder a ella desde fuera de la función." ] }, { @@ -219,10 +220,10 @@ "id": "41a4f03f", "metadata": {}, "source": [ - "## And some have None\n", + "## Y algunas tienen None\n", "\n", - "If a function doesn't have a `return` statement, it returns `None`, which is a special value like `True` and `False`.\n", - "For example, here's the `repeat` function from Chapter 3." + "Si una función no tiene una sentencia `return`, devuelve `None`, que es un valor especial como `True` y `False`.\n", + "Por ejemplo, aquí está la función `repeat` del Capítulo 3." ] }, { @@ -238,7 +239,7 @@ "id": "6ada19cf", "metadata": {}, "source": [ - "If we call it like this, it displays the first line of the Monty Python song \"Finland\"." + "Si la llamamos así, muestra la primera línea de la canción \"Finland\" de Monty Python." ] }, { @@ -254,8 +255,8 @@ "id": "fe49f5e5", "metadata": {}, "source": [ - "This function uses the `print` function to display a string, but it does not use a `return` statement to return a value.\n", - "If we assign the result to a variable, it displays the string anyway. " + "Esta función usa la función `print` para mostrar una cadena, pero no usa una sentencia `return` para devolver un valor.\n", + "Si asignamos el resultado a una variable, muestra la cadena de todos modos. " ] }, { @@ -271,7 +272,7 @@ "id": "4ecabbdb", "metadata": {}, "source": [ - "And if we display the value of the variable, we get nothing." + "Y si mostramos el valor de la variable, no obtenemos nada." ] }, { @@ -287,8 +288,8 @@ "id": "07033959", "metadata": {}, "source": [ - "`result` actually has a value, but Jupyter doesn't show it.\n", - "However, we can display it like this." + "`result` en realidad tiene un valor, pero Jupyter no lo muestra.\n", + "Sin embargo, podemos mostrarlo así." ] }, { @@ -304,9 +305,9 @@ "id": "379b98c5", "metadata": {}, "source": [ - "The return value from `repeat` is `None`.\n", + "El valor de retorno de `repeat` es `None`.\n", "\n", - "Now here's a function similar to `repeat` except that has a return value." + "Ahora aquí tienes una función parecida a `repeat`, excepto que sí tiene un valor de retorno." ] }, { @@ -322,10 +323,10 @@ "id": "db6ad3d4", "metadata": {}, "source": [ - "Notice that we can use an expression in a `return` statement, not just a variable.\n", + "Observa que podemos usar una expresión en una sentencia `return`, no solo una variable.\n", "\n", - "With this version, we can assign the result to a variable.\n", - "When the function runs, it doesn't display anything." + "Con esta versión, podemos asignar el resultado a una variable.\n", + "Cuando la función se ejecuta, no muestra nada." ] }, { @@ -341,7 +342,7 @@ "id": "1232cd8a", "metadata": {}, "source": [ - "But later we can display the value assigned to `line`." + "Pero más tarde podemos mostrar el valor asignado a `line`." ] }, { @@ -357,7 +358,7 @@ "id": "ae02c7d2", "metadata": {}, "source": [ - "A function like this is called a **pure function** because it doesn't display anything or have any other effect -- other than returning a value." + "Una función como esta se llama **función pura** porque no muestra nada ni tiene ningún otro efecto -- aparte de devolver un valor." ] }, { @@ -365,9 +366,9 @@ "id": "567ae734", "metadata": {}, "source": [ - "## Return values and conditionals\n", + "## Valores de retorno y condicionales\n", "\n", - "If Python did not provide `abs`, we could write it like this." + "Si Python no proporcionara `abs`, podríamos escribirla así." ] }, { @@ -383,12 +384,12 @@ "id": "ffd559b8", "metadata": {}, "source": [ - "If `x` is negative, the first `return` statement returns `-x` and the function ends immediately.\n", - "Otherwise, the second `return` statement returns `x` and the function ends.\n", - "So this function is correct.\n", + "Si `x` es negativo, la primera sentencia `return` devuelve `-x` y la función termina inmediatamente.\n", + "En caso contrario, la segunda sentencia `return` devuelve `x` y la función termina.\n", + "Así que esta función es correcta.\n", "\n", - "However, if you put `return` statements in a conditional, you have to make sure that every possible path through the program hits a `return` statement.\n", - "For example, here's an incorrect version of `absolute_value`." + "Sin embargo, si pones sentencias `return` en un condicional, tienes que asegurarte de que todos los caminos posibles del programa lleguen a una sentencia `return`.\n", + "Por ejemplo, aquí tienes una versión incorrecta de `absolute_value`." ] }, { @@ -404,7 +405,7 @@ "id": "da3280ae", "metadata": {}, "source": [ - "Here's what happens if we call this function with `0` as an argument." + "Esto es lo que ocurre si llamamos a esta función con `0` como argumento." ] }, { @@ -420,9 +421,9 @@ "id": "5733f239", "metadata": {}, "source": [ - "We get nothing! Here's the problem: when `x` is `0`, neither condition is true, and the function ends without hitting a `return` statement, which means that the return value is `None`, so Jupyter displays nothing.\n", + "¡No obtenemos nada! Este es el problema: cuando `x` es `0`, ninguna condición es verdadera, y la función termina sin llegar a una sentencia `return`, lo que significa que el valor de retorno es `None`, así que Jupyter no muestra nada.\n", "\n", - "As another example, here's a version of `absolute_value` with an extra `return` statement at the end." + "Como otro ejemplo, aquí tienes una versión de `absolute_value` con una sentencia `return` adicional al final." ] }, { @@ -438,12 +439,12 @@ "id": "cf5486fd", "metadata": {}, "source": [ - "If `x` is negative, the first `return` statement runs and the function ends.\n", - "Otherwise the second `return` statement runs and the function ends.\n", - "Either way, we never get to the third `return` statement -- so it can never run.\n", + "Si `x` es negativo, se ejecuta la primera sentencia `return` y la función termina.\n", + "En caso contrario, se ejecuta la segunda sentencia `return` y la función termina.\n", + "De cualquier manera, nunca llegamos a la tercera sentencia `return` -- así que nunca puede ejecutarse.\n", "\n", - "Code that can never run is called **dead code**.\n", - "In general, dead code doesn't do any harm, but it often indicates a misunderstanding, and it might be confusing to someone trying to understand the program." + "El código que nunca puede ejecutarse se llama **código muerto**.\n", + "En general, el código muerto no hace daño, pero a menudo indica un malentendido y podría confundir a alguien que intenta entender el programa." ] }, { @@ -453,22 +454,22 @@ "tags": [] }, "source": [ - "## Incremental development\n", + "## Desarrollo incremental\n", "\n", - "As you write larger functions, you might find yourself spending more\n", - "time debugging.\n", - "To deal with increasingly complex programs, you might want to try **incremental development**, which is a way of adding and testing only a small amount of code at a time.\n", + "A medida que escribas funciones más grandes, puede que notes que pasas más\n", + "tiempo depurando.\n", + "Para enfrentarte a programas cada vez más complejos, quizá quieras probar el **desarrollo incremental**, que es una forma de añadir y probar solo una pequeña cantidad de código cada vez.\n", "\n", - "As an example, suppose you want to find the distance between two points represented by the coordinates $(x_1, y_1)$ and $(x_2, y_2)$.\n", - "By the Pythagorean theorem, the distance is:\n", + "Como ejemplo, supón que quieres encontrar la distancia entre dos puntos representados por las coordenadas $(x_1, y_1)$ y $(x_2, y_2)$.\n", + "Por el teorema de Pitágoras, la distancia es:\n", "\n", "$$\\mathrm{distance} = \\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}$$ \n", "\n", - "The first step is to consider what a `distance` function should look like in Python -- that is, what are the inputs (parameters) and what is the output (return value)?\n", + "El primer paso es considerar cómo debería ser una función `distance` en Python -- es decir, cuáles son las entradas (parámetros) y cuál es la salida (valor de retorno).\n", "\n", - "For this function, the inputs are the coordinates of the points.\n", - "The return value is the distance.\n", - "Immediately you can write an outline of the function:" + "Para esta función, las entradas son las coordenadas de los puntos.\n", + "El valor de retorno es la distancia.\n", + "De inmediato puedes escribir un esquema de la función:" ] }, { @@ -484,10 +485,10 @@ "id": "7b384fcf", "metadata": {}, "source": [ - "This version doesn't compute distances yet -- it always returns zero.\n", - "But it is a complete function with a return value, which means that you can test it before you make it more complicated.\n", + "Esta versión todavía no calcula distancias -- siempre devuelve cero.\n", + "Pero es una función completa con un valor de retorno, lo que significa que puedes probarla antes de hacerla más complicada.\n", "\n", - "To test the new function, we'll call it with sample arguments:" + "Para probar la nueva función, la llamaremos con argumentos de ejemplo:" ] }, { @@ -503,13 +504,13 @@ "id": "13a98096", "metadata": {}, "source": [ - "I chose these values so that the horizontal distance is `3` and the\n", - "vertical distance is `4`.\n", - "That way, the result is `5`, the hypotenuse of a `3-4-5` right triangle. When testing a function, it is useful to know the right answer.\n", + "Elegí estos valores para que la distancia horizontal sea `3` y la\n", + "distancia vertical sea `4`.\n", + "Así, el resultado es `5`, la hipotenusa de un triángulo rectángulo `3-4-5`. Al probar una función, es útil conocer la respuesta correcta.\n", "\n", - "At this point we have confirmed that the function runs and returns a value, and we can start adding code to the body.\n", - "A good next step is to find the differences `x2 - x1` and `y2 - y1`. \n", - "Here's a version that stores those values in temporary variables and displays them." + "En este punto hemos confirmado que la función se ejecuta y devuelve un valor, y podemos empezar a añadir código al cuerpo.\n", + "Un buen siguiente paso es encontrar las diferencias `x2 - x1` e `y2 - y1`. \n", + "Aquí tienes una versión que almacena esos valores en variables temporales y los muestra." ] }, { @@ -525,10 +526,10 @@ "id": "c342a3bd", "metadata": {}, "source": [ - "If the function is working, it should display `dx is 3` and `dy is 4`.\n", - "If so, we know that the function is getting the right arguments and\n", - "performing the first computation correctly. If not, there are only a few\n", - "lines to check." + "Si la función funciona, debería mostrar `dx is 3` y `dy is 4`.\n", + "Si es así, sabemos que la función está recibiendo los argumentos correctos y\n", + "realizando correctamente el primer cálculo. Si no, solo hay unas pocas\n", + "líneas que revisar." ] }, { @@ -544,7 +545,7 @@ "id": "9424eca9", "metadata": {}, "source": [ - "Good so far. Next we compute the sum of squares of `dx` and `dy`:" + "Hasta aquí, bien. A continuación calculamos la suma de los cuadrados de `dx` e `dy`:" ] }, { @@ -560,7 +561,7 @@ "id": "e28262f9", "metadata": {}, "source": [ - "Again, we can run the function and check the output, which should be `25`. " + "De nuevo, podemos ejecutar la función y comprobar la salida, que debería ser `25`. " ] }, { @@ -576,7 +577,7 @@ "id": "c09f0ddc", "metadata": {}, "source": [ - "Finally, we can use `math.sqrt` to compute the distance:" + "Por último, podemos usar `math.sqrt` para calcular la distancia:" ] }, { @@ -592,7 +593,7 @@ "id": "f27902ac", "metadata": {}, "source": [ - "And test it." + "Y probarla." ] }, { @@ -608,9 +609,9 @@ "id": "8ad2e626", "metadata": {}, "source": [ - "The result is correct, but this version of the function displays the result rather than returning it, so the return value is `None`.\n", + "El resultado es correcto, pero esta versión de la función muestra el resultado en lugar de devolverlo, así que el valor de retorno es `None`.\n", "\n", - "We can fix that by replacing the `print` function with a `return` statement." + "Podemos arreglarlo sustituyendo la función `print` por una sentencia `return`." ] }, { @@ -626,8 +627,8 @@ "id": "f3a13a14", "metadata": {}, "source": [ - "This version of `distance` is a pure function.\n", - "If we call it like this, only the result is displayed." + "Esta versión de `distance` es una función pura.\n", + "Si la llamamos así, solo se muestra el resultado." ] }, { @@ -643,7 +644,7 @@ "id": "7db8cf86", "metadata": {}, "source": [ - "And if we assign the result to a variable, nothing is displayed." + "Y si asignamos el resultado a una variable, no se muestra nada." ] }, { @@ -659,20 +660,20 @@ "id": "0c3b8829", "metadata": {}, "source": [ - "The `print` statements we wrote are useful for debugging, but once the function is working, we can remove them. \n", - "Code like that is called **scaffolding** because it is helpful for building the program but is not part of the final product.\n", + "Las sentencias `print` que escribimos son útiles para depurar, pero una vez que la función funciona, podemos eliminarlas. \n", + "El código de ese tipo se llama **andamiaje** porque ayuda a construir el programa, pero no forma parte del producto final.\n", "\n", - "This example demonstrates incremental development.\n", - "The key aspects of this process are:\n", + "Este ejemplo demuestra el desarrollo incremental.\n", + "Los aspectos clave de este proceso son:\n", "\n", - "1. Start with a working program, make small changes, and test after every change.\n", + "1. Empieza con un programa que funcione, haz cambios pequeños y prueba después de cada cambio.\n", "\n", - "2. Use variables to hold intermediate values so you can display and check them.\n", + "2. Usa variables para guardar valores intermedios, de modo que puedas mostrarlos y comprobarlos.\n", "\n", - "3. Once the program is working, remove the scaffolding.\n", + "3. Una vez que el programa funcione, elimina el andamiaje.\n", "\n", - "At any point, if there is an error, you should have a good idea where it is.\n", - "Incremental development can save you a lot of debugging time." + "En cualquier punto, si hay un error, deberías tener una buena idea de dónde está.\n", + "El desarrollo incremental puede ahorrarte mucho tiempo de debugging." ] }, { @@ -680,10 +681,10 @@ "id": "3dd7514f", "metadata": {}, "source": [ - "## Boolean functions\n", + "## Funciones booleanas\n", "\n", - "Functions can return the boolean values `True` and `False`, which is often convenient for encapsulating a complex test in a function.\n", - "For example, `is_divisible` checks whether `x` is divisible by `y` with no remainder." + "Las funciones pueden devolver los valores booleanos `True` y `False`, lo que a menudo resulta conveniente para encapsular una prueba compleja en una función.\n", + "Por ejemplo, `is_divisible` comprueba si `x` es divisible por `y` sin resto." ] }, { @@ -699,7 +700,7 @@ "id": "f3a58afb", "metadata": {}, "source": [ - "Here's how we use it." + "Así es como la usamos." ] }, { @@ -723,8 +724,8 @@ "id": "e9103ece", "metadata": {}, "source": [ - "Inside the function, the result of the `==` operator is a boolean, so we can write the\n", - "function more concisely by returning it directly." + "Dentro de la función, el resultado del operador `==` es un booleano, así que podemos escribir la\n", + "función de forma más concisa devolviéndolo directamente." ] }, { @@ -740,7 +741,7 @@ "id": "4d82dae5", "metadata": {}, "source": [ - "Boolean functions are often used in conditional statements." + "Las funciones booleanas se usan a menudo en sentencias condicionales." ] }, { @@ -756,7 +757,7 @@ "id": "9e232afc", "metadata": {}, "source": [ - "It might be tempting to write something like this:" + "Podría ser tentador escribir algo como esto:" ] }, { @@ -772,7 +773,7 @@ "id": "ff9e5160", "metadata": {}, "source": [ - "But the comparison is unnecessary." + "Pero la comparación es innecesaria." ] }, { @@ -780,27 +781,27 @@ "id": "a932a966", "metadata": {}, "source": [ - "## Recursion with return values\n", + "## Recursión con valores de retorno\n", "\n", - "Now that we can write functions with return values, we can write recursive functions with return values, and with that capability, we have passed an important threshold -- the subset of Python we have is now **Turing complete**, which means that we can perform any computation that can be described by an algorithm.\n", + "Ahora que podemos escribir funciones con valores de retorno, podemos escribir funciones recursivas con valores de retorno, y con esa capacidad hemos cruzado un umbral importante -- el subconjunto de Python que tenemos ahora es **Turing completo**, lo que significa que podemos realizar cualquier cálculo que pueda describirse mediante un algoritmo.\n", "\n", - "To demonstrate recursion with return values, we'll evaluate a few recursively defined mathematical functions.\n", - "A recursive definition is similar to a circular definition, in the sense that the definition refers to the thing being defined. A truly circular definition is not very useful:\n", + "Para demostrar la recursión con valores de retorno, evaluaremos algunas funciones matemáticas definidas de forma recursiva.\n", + "Una definición recursiva se parece a una definición circular, en el sentido de que la definición se refiere a la cosa que se está definiendo. Una definición verdaderamente circular no es muy útil:\n", "\n", - "> vorpal: An adjective used to describe something that is vorpal.\n", + "> vorpal: Un adjetivo usado para describir algo que es vorpal.\n", "\n", - "If you saw that definition in the dictionary, you might be annoyed. \n", - "On the other hand, if you looked up the definition of the factorial function, denoted with the symbol $!$, you might get something like this: \n", + "Si vieras esa definición en el diccionario, quizá te molestaría. \n", + "Por otro lado, si buscaras la definición de la función factorial, denotada con el símbolo $!$, podrías encontrar algo como esto: \n", "\n", - "$$\\begin{aligned}\n", - "0! &= 1 \\\\\n", + "$$\begin{aligned}\n", + "0! &= 1 \\\n", "n! &= n~(n-1)!\n", "\\end{aligned}$$ \n", "\n", - "This definition says that the factorial of $0$ is $1$, and the factorial of any other value, $n$, is $n$ multiplied by the factorial of $n-1$.\n", + "Esta definición dice que el factorial de $0$ es $1$, y que el factorial de cualquier otro valor, $n$, es $n$ multiplicado por el factorial de $n-1$.\n", "\n", - "If you can write a recursive definition of something, you can write a Python program to evaluate it. \n", - "Following an incremental development process, we'll start with a function that take `n` as a parameter and always returns `0`." + "Si puedes escribir una definición recursiva de algo, puedes escribir un programa en Python para evaluarlo. \n", + "Siguiendo un proceso de desarrollo incremental, empezaremos con una función que toma `n` como parámetro y siempre devuelve `0`." ] }, { @@ -816,7 +817,7 @@ "id": "ee1f63b8", "metadata": {}, "source": [ - "Now let's add the first part of the definition -- if the argument happens to be `0`, all we have to do is return `1`:" + "Ahora añadamos la primera parte de la definición -- si resulta que el argumento es `0`, todo lo que tenemos que hacer es devolver `1`:" ] }, { @@ -832,8 +833,8 @@ "id": "4f2fd7c7", "metadata": {}, "source": [ - "Now let's fill in the second part -- if `n` is not `0`, we have to make a recursive\n", - "call to find the factorial of `n-1` and then multiply the result by `n`:" + "Ahora completemos la segunda parte -- si `n` no es `0`, tenemos que hacer una llamada recursiva\n", + "para encontrar el factorial de `n-1` y luego multiplicar el resultado por `n`:" ] }, { @@ -849,32 +850,32 @@ "id": "da3d1595", "metadata": {}, "source": [ - "The flow of execution for this program is similar to the flow of `countdown` in Chapter 5.\n", - "If we call `factorial` with the value `3`:\n", + "El flujo de ejecución de este programa es similar al flujo de `countdown` en el Capítulo 5.\n", + "Si llamamos a `factorial` con el valor `3`:\n", "\n", - "Since `3` is not `0`, we take the second branch and calculate the factorial\n", - "of `n-1`\\...\n", + "Como `3` no es `0`, tomamos la segunda rama y calculamos el factorial\n", + "de `n-1`\\...\n", "\n", - "> Since `2` is not `0`, we take the second branch and calculate the\n", - "> factorial of `n-1`\\...\n", + "> Como `2` no es `0`, tomamos la segunda rama y calculamos el\n", + "> factorial de `n-1`\\...\n", ">\n", - "> > Since `1` is not `0`, we take the second branch and calculate the\n", - "> > factorial of `n-1`\\...\n", + "> > Como `1` no es `0`, tomamos la segunda rama y calculamos el\n", + "> > factorial de `n-1`\\...\n", "> >\n", - "> > > Since `0` equals `0`, we take the first branch and return `1` without\n", - "> > > making any more recursive calls.\n", + "> > > Como `0` es igual a `0`, tomamos la primera rama y devolvemos `1` sin\n", + "> > > hacer más llamadas recursivas.\n", "> >\n", - "> > The return value, `1`, is multiplied by `n`, which is `1`, and the\n", - "> > result is returned.\n", + "> > El valor de retorno, `1`, se multiplica por `n`, que es `1`, y se\n", + "> > devuelve el resultado.\n", ">\n", - "> The return value, `1`, is multiplied by `n`, which is `2`, and the result\n", - "> is returned.\n", + "> El valor de retorno, `1`, se multiplica por `n`, que es `2`, y se devuelve\n", + "> el resultado.\n", "\n", - "The return value `2` is multiplied by `n`, which is `3`, and the result,\n", - "`6`, becomes the return value of the function call that started the whole\n", - "process.\n", + "El valor de retorno `2` se multiplica por `n`, que es `3`, y el resultado,\n", + "`6`, se convierte en el valor de retorno de la llamada a la función que inició todo el\n", + "proceso.\n", "\n", - "The following figure shows the stack diagram for this sequence of function calls." + "La figura siguiente muestra el diagrama de pila para esta secuencia de llamadas a funciones." ] }, { @@ -902,10 +903,10 @@ "id": "f924c539", "metadata": {}, "source": [ - "The return values are shown being passed back up the stack.\n", - "In each frame, the return value is the product of `n` and `recurse`.\n", + "Los valores de retorno se muestran pasando de vuelta hacia arriba por la pila.\n", + "En cada marco, el valor de retorno es el producto de `n` y `recurse`.\n", "\n", - "In the last frame, the local variable `recurse` does not exist because the branch that creates it does not run." + "En el último marco, la variable local `recurse` no existe porque la rama que la crea no se ejecuta." ] }, { @@ -913,20 +914,20 @@ "id": "acea9dc1", "metadata": {}, "source": [ - "## Leap of faith\n", + "## Salto de fe\n", "\n", - "Following the flow of execution is one way to read programs, but it can quickly become overwhelming. An alternative is what I call the \"leap of faith\". When you come to a function call, instead of following the flow of execution, you *assume* that the function works correctly and returns the right result.\n", + "Seguir el flujo de ejecución es una forma de leer programas, pero puede volverse abrumadora rápidamente. Una alternativa es lo que llamo el \"salto de fe\". Cuando llegas a una llamada a una función, en lugar de seguir el flujo de ejecución, *asumes* que la función funciona correctamente y devuelve el resultado adecuado.\n", "\n", - "In fact, you are already practicing this leap of faith when you use built-in functions.\n", - "When you call `abs` or `math.sqrt`, you don't examine the bodies of those functions -- you just assume that they work.\n", + "De hecho, ya estás practicando este salto de fe cuando usas funciones integradas.\n", + "Cuando llamas a `abs` o `math.sqrt`, no examinas los cuerpos de esas funciones -- simplemente asumes que funcionan.\n", "\n", - "The same is true when you call one of your own functions. For example, earlier we wrote a function called `is_divisible` that determines whether one number is divisible by another. Once we convince ourselves that this function is correct, we can use it without looking at the body again.\n", + "Lo mismo ocurre cuando llamas a una de tus propias funciones. Por ejemplo, antes escribimos una función llamada `is_divisible` que determina si un número es divisible por otro. Una vez que nos convencemos de que esta función es correcta, podemos usarla sin volver a mirar el cuerpo.\n", "\n", - "The same is true of recursive programs.\n", - "When you get to the recursive call, instead of following the flow of execution, you should assume that the recursive call works and then ask yourself, \"Assuming that I can compute the factorial of $n-1$, can I compute the factorial of $n$?\"\n", - "The recursive definition of factorial implies that you can, by multiplying by $n$.\n", + "Lo mismo ocurre con los programas recursivos.\n", + "Cuando llegas a la llamada recursiva, en lugar de seguir el flujo de ejecución, deberías asumir que la llamada recursiva funciona y luego preguntarte: \"Suponiendo que puedo calcular el factorial de $n-1$, ¿puedo calcular el factorial de $n$?\"\n", + "La definición recursiva del factorial implica que sí puedes, multiplicando por $n$.\n", "\n", - "Of course, it's a bit strange to assume that the function works correctly when you haven't finished writing it, but that's why it's called a leap of faith!" + "Por supuesto, es un poco extraño asumir que la función funciona correctamente cuando aún no has terminado de escribirla, ¡pero por eso se llama salto de fe!" ] }, { @@ -938,15 +939,15 @@ "source": [ "## Fibonacci\n", "\n", - "After `factorial`, the most common example of a recursive function is `fibonacci`, which has the following definition: \n", + "Después de `factorial`, el ejemplo más común de función recursiva es `fibonacci`, que tiene la siguiente definición: \n", "\n", - "$$\\begin{aligned}\n", - "\\mathrm{fibonacci}(0) &= 0 \\\\\n", - "\\mathrm{fibonacci}(1) &= 1 \\\\\n", + "$$\begin{aligned}\n", + "\\mathrm{fibonacci}(0) &= 0 \\\n", + "\\mathrm{fibonacci}(1) &= 1 \\\n", "\\mathrm{fibonacci}(n) &= \\mathrm{fibonacci}(n-1) + \\mathrm{fibonacci}(n-2)\n", "\\end{aligned}$$ \n", "\n", - "Translated into Python, it looks like this:" + "Traducida a Python, se ve así:" ] }, { @@ -962,11 +963,11 @@ "id": "69d56a0b", "metadata": {}, "source": [ - "If you try to follow the flow of execution here, even for small values of $n$, your head explodes.\n", - "But according to the leap of faith, if you assume that the two recursive calls work correctly, you can be confident that the last `return` statement is correct.\n", + "Si intentas seguir aquí el flujo de ejecución, incluso para valores pequeños de $n$, te explota la cabeza.\n", + "Pero según el salto de fe, si asumes que las dos llamadas recursivas funcionan correctamente, puedes confiar en que la última sentencia `return` es correcta.\n", "\n", - "As an aside, this way of computing Fibonacci numbers is very inefficient.\n", - "In [Chapter 10](section_memos) I'll explain why and suggest a way to improve it." + "Como nota aparte, esta forma de calcular números de Fibonacci es muy ineficiente.\n", + "En el [Capítulo 10](section_memos) explicaré por qué y sugeriré una forma de mejorarla." ] }, { @@ -974,9 +975,9 @@ "id": "26d9706b", "metadata": {}, "source": [ - "## Checking types\n", + "## Comprobación de tipos\n", "\n", - "What happens if we call `factorial` and give it `1.5` as an argument?" + "¿Qué ocurre si llamamos a `factorial` y le damos `1.5` como argumento?" ] }, { @@ -994,17 +995,17 @@ "id": "0bec7ba4", "metadata": {}, "source": [ - "It looks like an infinite recursion. How can that be? The function has a\n", - "base case -- when `n == 0`.\n", - "But if `n` is not an integer, we can *miss* the base case and recurse forever.\n", + "Parece una recursión infinita. ¿Cómo puede ser? La función tiene un\n", + "caso base -- cuando `n == 0`.\n", + "Pero si `n` no es un entero, podemos *saltarnos* el caso base y hacer recursión para siempre.\n", "\n", - "In this example, the initial value of `n` is `1.5`.\n", - "In the first recursive call, the value of `n` is `0.5`.\n", - "In the next, it is `-0.5`. \n", - "From there, it gets smaller (more negative), but it will never be `0`.\n", + "En este ejemplo, el valor inicial de `n` es `1.5`.\n", + "En la primera llamada recursiva, el valor de `n` es `0.5`.\n", + "En la siguiente, es `-0.5`. \n", + "A partir de ahí, se hace más pequeño (más negativo), pero nunca será `0`.\n", "\n", - "To avoid infinite recursion we can use the built-in function `isinstance` to check the type of the argument.\n", - "Here's how we check whether a value is an integer." + "Para evitar la recursión infinita podemos usar la función integrada `isinstance` para comprobar el tipo del argumento.\n", + "Así comprobamos si un valor es un entero." ] }, { @@ -1028,7 +1029,7 @@ "id": "b0017b42", "metadata": {}, "source": [ - "Now here's a version of `factorial` with error-checking." + "Ahora aquí tienes una versión de `factorial` con comprobación de errores." ] }, { @@ -1044,8 +1045,9 @@ "id": "0561e3f5", "metadata": {}, "source": [ - "First it checks whether `n` is an integer.\n", - "If not, it displays an error message and returns `None`.\n", + "Primero comprueba si `n` es un entero.\n", + "Si no lo es, muestra un mensaje de error y devuelve `None`.\n", + "\n", "\n" ] }, @@ -1062,8 +1064,8 @@ "id": "10b00a39", "metadata": {}, "source": [ - "Then it checks whether `n` is negative.\n", - "If so, it displays an error message and returns `None.`" + "Luego comprueba si `n` es negativo.\n", + "Si lo es, muestra un mensaje de error y devuelve `None`." ] }, { @@ -1079,8 +1081,8 @@ "id": "96aa1403", "metadata": {}, "source": [ - "If we get past both checks, we know that `n` is a non-negative integer, so we can be confident the recursion will terminate.\n", - "Checking the parameters of a function to make sure they have the correct types and values is called **input validation**." + "Si superamos ambas comprobaciones, sabemos que `n` es un entero no negativo, así que podemos confiar en que la recursión terminará.\n", + "Comprobar los parámetros de una función para asegurarse de que tienen los tipos y valores correctos se llama **validación de entrada**." ] }, { @@ -1092,25 +1094,25 @@ "source": [ "## Debugging\n", "\n", - "Breaking a large program into smaller functions creates natural checkpoints for debugging.\n", - "If a function is not working, there are three possibilities to consider:\n", + "Dividir un programa grande en funciones más pequeñas crea puntos de control naturales para depurar.\n", + "Si una función no funciona, hay tres posibilidades que considerar:\n", "\n", - "- There is something wrong with the arguments the function is getting -- that is, a precondition is violated.\n", + "- Hay algo mal con los argumentos que recibe la función -- es decir, se viola una precondición.\n", "\n", - "- There is something wrong with the function -- that is, a postcondition is violated.\n", + "- Hay algo mal con la función -- es decir, se viola una postcondición.\n", "\n", - "- The caller is doing something wrong with the return value.\n", + "- Quien llama a la función está haciendo algo mal con el valor de retorno.\n", "\n", - "To rule out the first possibility, you can add a `print` statement at the beginning of the function that displays the values of the parameters (and maybe their types).\n", - "Or you can write code that checks the preconditions explicitly.\n", + "Para descartar la primera posibilidad, puedes añadir una sentencia `print` al principio de la función que muestre los valores de los parámetros (y quizá sus tipos).\n", + "O puedes escribir código que compruebe explícitamente las precondiciones.\n", "\n", - "If the parameters look good, you can add a `print` statement before each `return` statement and display the return value.\n", - "If possible, call the function with arguments that make it easy check the result. \n", + "Si los parámetros parecen correctos, puedes añadir una sentencia `print` antes de cada sentencia `return` y mostrar el valor de retorno.\n", + "Si es posible, llama a la función con argumentos que faciliten comprobar el resultado. \n", "\n", - "If the function seems to be working, look at the function call to make sure the return value is being used correctly -- or used at all!\n", + "Si la función parece funcionar, mira la llamada a la función para asegurarte de que el valor de retorno se está usando correctamente -- ¡o de que se está usando siquiera!\n", "\n", - "Adding `print` statements at the beginning and end of a function can help make the flow of execution more visible.\n", - "For example, here is a version of `factorial` with print statements:" + "Añadir sentencias `print` al principio y al final de una función puede ayudar a hacer más visible el flujo de ejecución.\n", + "Por ejemplo, aquí tienes una versión de `factorial` con sentencias print:" ] }, { @@ -1126,8 +1128,8 @@ "id": "0c044111", "metadata": {}, "source": [ - "`space` is a string of space characters that controls the indentation of\n", - "the output. Here is the result of `factorial(3)` :" + "`space` es una cadena de caracteres de espacio que controla la indentación de\n", + "la salida. Este es el resultado de `factorial(3)` :" ] }, { @@ -1143,8 +1145,8 @@ "id": "43b3e408", "metadata": {}, "source": [ - "If you are confused about the flow of execution, this kind of output can be helpful.\n", - "It takes some time to develop effective scaffolding, but a little bit of scaffolding can save a lot of debugging." + "Si tienes dudas sobre el flujo de ejecución, este tipo de salida puede ser útil.\n", + "Lleva tiempo desarrollar andamiaje eficaz, pero un poco de andamiaje puede ahorrar mucho debugging." ] }, { @@ -1152,29 +1154,29 @@ "id": "b7c3962f", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**return value:**\n", - "The result of a function. If a function call is used as an expression, the return value is the value of the expression.\n", + "**valor de retorno:**\n", + "El resultado de una función. Si una llamada a una función se usa como expresión, el valor de retorno es el valor de la expresión.\n", "\n", - "**pure function:**\n", - "A function that does not display anything or have any other effect, other than returning a return value.\n", + "**función pura:**\n", + "Una función que no muestra nada ni tiene ningún otro efecto, aparte de devolver un valor de retorno.\n", "\n", "\n", - "**dead code:**\n", - "Part of a program that can never run, often because it appears after a `return` statement.\n", + "**código muerto:**\n", + "Parte de un programa que nunca puede ejecutarse, a menudo porque aparece después de una sentencia `return`.\n", "\n", - "**incremental development:**\n", - "A program development plan intended to avoid debugging by adding and testing only a small amount of code at a time.\n", + "**desarrollo incremental:**\n", + "Un plan de desarrollo de programas pensado para evitar la depuración añadiendo y probando solo una pequeña cantidad de código cada vez.\n", "\n", - "**scaffolding:**\n", - " Code that is used during program development but is not part of the final version.\n", + "**andamiaje:**\n", + " Código que se usa durante el desarrollo del programa pero que no forma parte de la versión final.\n", "\n", - "**Turing complete:**\n", - "A language, or subset of a language, is Turing complete if it can perform any computation that can be described by an algorithm.\n", + "**Turing completo:**\n", + "Un lenguaje, o un subconjunto de un lenguaje, es Turing completo si puede realizar cualquier cálculo que pueda describirse mediante un algoritmo.\n", "\n", - "**input validation:**\n", - "Checking the parameters of a function to make sure they have the correct types and values" + "**validación de entrada:**\n", + "Comprobar los parámetros de una función para asegurarse de que tienen los tipos y valores correctos" ] }, { @@ -1182,7 +1184,7 @@ "id": "ff7b1edf", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1200,9 +1202,9 @@ "id": "0da2daaf", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "In this chapter, we saw an incorrect function that can end without returning a value." + "En este capítulo vimos una función incorrecta que puede terminar sin devolver un valor." ] }, { @@ -1218,7 +1220,7 @@ "id": "69563d4b", "metadata": {}, "source": [ - "And a version of the same function that has dead code at the end." + "Y una versión de la misma función que tiene código muerto al final." ] }, { @@ -1234,7 +1236,7 @@ "id": "9fe8ae2e", "metadata": {}, "source": [ - "And we saw the following example, which is correct but not idiomatic." + "Y vimos el siguiente ejemplo, que es correcto pero no idiomático." ] }, { @@ -1250,9 +1252,9 @@ "id": "14f52688", "metadata": {}, "source": [ - "Ask a virtual assistant what's wrong with each of these functions and see if it can spot the errors or improve the style.\n", + "Pregunta a un asistente virtual qué está mal en cada una de estas funciones y comprueba si puede detectar los errores o mejorar el estilo.\n", "\n", - "Then ask \"Write a function that takes coordinates of two points and computes the distance between them.\" See if the result resembles the version of `distance` we wrote in this chapter." + "Luego pregunta: \"Escribe una función que tome las coordenadas de dos puntos y calcule la distancia entre ellos.\" Comprueba si el resultado se parece a la versión de `distance` que escribimos en este capítulo." ] }, { @@ -1260,14 +1262,14 @@ "id": "fd23bb60", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Use incremental development to write a function called `hypot` that returns the length of the hypotenuse of a right triangle given the lengths of the other two legs as arguments.\n", + "Usa desarrollo incremental para escribir una función llamada `hypot` que devuelva la longitud de la hipotenusa de un triángulo rectángulo dadas las longitudes de los otros dos catetos como argumentos.\n", "\n", - "Note: There's a function in the math module called `hypot` that does the same thing, but you should not use it for this exercise!\n", + "Nota: Hay una función en el módulo math llamada `hypot` que hace lo mismo, ¡pero no deberías usarla para este ejercicio!\n", "\n", - "Even if you can write the function correctly on the first try, start with a function that always returns `0` and practice making small changes, testing as you go.\n", - "When you are done, the function should only return a value -- it should not display anything." + "Aunque puedas escribir la función correctamente al primer intento, empieza con una función que siempre devuelva `0` y practica haciendo cambios pequeños, probando a medida que avanzas.\n", + "Cuando termines, la función solo debería devolver un valor -- no debería mostrar nada." ] }, { @@ -1355,10 +1357,10 @@ "id": "0a66d82a", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a boolean function, `is_between(x, y, z)`, that returns `True` if $x < y < z$ or if \n", - "$z < y < x$, and`False` otherwise." + "Escribe una función booleana, `is_between(x, y, z)`, que devuelva `True` si $x < y < z$ o si \n", + "$z < y < x$, y `False` en caso contrario." ] }, { @@ -1376,7 +1378,7 @@ "tags": [] }, "source": [ - "You can use these examples to test your function." + "Puedes usar estos ejemplos para probar tu función." ] }, { @@ -1424,20 +1426,20 @@ "id": "57f06466", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The Ackermann function, $A(m, n)$, is defined:\n", + "La función de Ackermann, $A(m, n)$, se define así:\n", "\n", - "$$\\begin{aligned}\n", - "A(m, n) = \\begin{cases} \n", - " n+1 & \\mbox{if } m = 0 \\\\ \n", - " A(m-1, 1) & \\mbox{if } m > 0 \\mbox{ and } n = 0 \\\\ \n", + "$$\begin{aligned}\n", + "A(m, n) = \begin{cases} \n", + " n+1 & \\mbox{if } m = 0 \\ \n", + " A(m-1, 1) & \\mbox{if } m > 0 \\mbox{ and } n = 0 \\ \n", "A(m-1, A(m, n-1)) & \\mbox{if } m > 0 \\mbox{ and } n > 0.\n", "\\end{cases} \n", "\\end{aligned}$$ \n", "\n", - "Write a function named `ackermann` that evaluates the Ackermann function.\n", - "What happens if you call `ackermann(5, 5)`?" + "Escribe una función llamada `ackermann` que evalúe la función de Ackermann.\n", + "¿Qué ocurre si llamas a `ackermann(5, 5)`?" ] }, { @@ -1455,7 +1457,7 @@ "tags": [] }, "source": [ - "You can use these examples to test your function." + "Puedes usar estos ejemplos para probar tu función." ] }, { @@ -1495,7 +1497,7 @@ "tags": [] }, "source": [ - "If you call this function with values bigger than 4, you get a `RecursionError`." + "Si llamas a esta función con valores mayores que 4, obtienes un `RecursionError`." ] }, { @@ -1515,7 +1517,7 @@ "tags": [] }, "source": [ - "To see why, add a print statement to the beginning of the function to display the values of the parameters, and then run the examples again." + "Para ver por qué, añade una sentencia print al principio de la función para mostrar los valores de los parámetros, y luego ejecuta los ejemplos de nuevo." ] }, { @@ -1525,12 +1527,12 @@ "tags": [] }, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "A number, $a$, is a power of $b$ if it is divisible by $b$ and $a/b$ is\n", - "a power of $b$. Write a function called `is_power` that takes parameters\n", - "`a` and `b` and returns `True` if `a` is a power of `b`. Note: you will\n", - "have to think about the base case." + "Un número, $a$, es una potencia de $b$ si es divisible por $b$ y $a/b$ es\n", + "una potencia de $b$. Escribe una función llamada `is_power` que tome los parámetros\n", + "`a` y `b`, y devuelva `True` si `a` es una potencia de `b`. Nota: tendrás\n", + "que pensar en el caso base." ] }, { @@ -1548,7 +1550,7 @@ "tags": [] }, "source": [ - "You can use these examples to test your function." + "Puedes usar estos ejemplos para probar tu función." ] }, { @@ -1596,17 +1598,17 @@ "id": "a33bbd07", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The greatest common divisor (GCD) of $a$ and $b$ is the largest number\n", - "that divides both of them with no remainder.\n", + "El máximo común divisor (MCD) de $a$ y $b$ es el número más grande\n", + "que divide a ambos sin dejar resto.\n", "\n", - "One way to find the GCD of two numbers is based on the observation that\n", - "if $r$ is the remainder when $a$ is divided by $b$, then $gcd(a,\n", - "b) = gcd(b, r)$. As a base case, we can use $gcd(a, 0) = a$.\n", + "Una forma de encontrar el MCD de dos números se basa en la observación de que\n", + "si $r$ es el resto cuando $a$ se divide por $b$, entonces $gcd(a,\n", + "b) = gcd(b, r)$. Como caso base, podemos usar $gcd(a, 0) = a$.\n", "\n", - "Write a function called `gcd` that takes parameters `a` and `b` and\n", - "returns their greatest common divisor." + "Escribe una función llamada `gcd` que tome los parámetros `a` y `b`, y\n", + "devuelva su máximo común divisor." ] }, { @@ -1624,7 +1626,7 @@ "tags": [] }, "source": [ - "You can use these examples to test your function." + "Puedes usar estos ejemplos para probar tu función." ] }, { @@ -1666,9 +1668,11 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", + "\n", + "Licencia del código: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del texto: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/blank/chap07.ipynb b/blank/chap07.ipynb index 22ea459..2b473b7 100644 --- a/blank/chap07.ipynb +++ b/blank/chap07.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes comprar versiones impresas y libro electrónico de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -27,15 +27,15 @@ "tags": [] }, "source": [ - "# Iteration and Search\n", + "# Iteración y búsqueda\n", "\n", - "In 1939 Ernest Vincent Wright published a 50,000 word novel called *Gadsby* that does not contain the letter \"e\". Since \"e\" is the most common letter in English, writing even a few words without using it is difficult.\n", - "To get a sense of how difficult, in this chapter we'll compute the fraction of English words have at least one \"e\".\n", + "En 1939, Ernest Vincent Wright publicó una novela de 50.000 palabras llamada *Gadsby* que no contiene la letra \"e\". Como \"e\" es la letra más común en inglés, escribir incluso unas pocas palabras sin usarla es difícil.\n", + "Para hacernos una idea de lo difícil que es, en este capítulo calcularemos la fracción de palabras en inglés que tienen al menos una \"e\".\n", "\n", - "For that, we'll use `for` statements to loop through the letters in a string and the words in a file, and we'll update variables in a loop to count the number of words that contain an \"e\".\n", - "We'll use the `in` operator to check whether a letter appears in a word, and you'll learn a programming pattern called a \"linear search\".\n", + "Para ello, usaremos sentencias `for` para recorrer las letras de una cadena y las palabras de un archivo, y actualizaremos variables en un bucle para contar el número de palabras que contienen una \"e\".\n", + "Usaremos el operador `in` para comprobar si una letra aparece en una palabra, y aprenderás un patrón de programación llamado \"búsqueda lineal\".\n", "\n", - "As an exercise, you'll use these tools to solve a word puzzle called \"Spelling Bee\"." + "Como ejercicio, usarás estas herramientas para resolver un juego de palabras llamado \"Spelling Bee\"." ] }, { @@ -43,9 +43,9 @@ "id": "389f5162-0a8c-4cc7-99f1-a261e0b39006", "metadata": {}, "source": [ - "## Loops and strings\n", + "## Bucles y cadenas\n", "\n", - "In Chapter 3 we saw a `for` loop that uses the `range` function to display a sequence of numbers." + "En el capítulo 3 vimos un bucle `for` que usa la función `range` para mostrar una secuencia de números." ] }, { @@ -61,9 +61,9 @@ "id": "937a0af9-5486-4195-8e59-6f819db1cf3f", "metadata": {}, "source": [ - "This version uses the keyword argument `end` so the `print` function puts a space after each number rather than a newline.\n", + "Esta versión usa el argumento de palabra clave `end` para que la función `print` añada un espacio después de cada número en lugar de un salto de línea.\n", "\n", - "We can also use a `for` loop to display the letters in a string." + "También podemos usar un bucle `for` para mostrar las letras de una cadena." ] }, { @@ -79,10 +79,10 @@ "id": "72044436-ed85-407b-8821-9696648ec29c", "metadata": {}, "source": [ - "Notice that I changed the name of the variable from `i` to `letter`, which provides more information about the value it refers to.\n", - "The variable defined in a `for` loop is called the **loop variable**.\n", + "Fíjate en que he cambiado el nombre de la variable de `i` a `letter`, lo que proporciona más información sobre el valor al que se refiere.\n", + "La variable definida en un bucle `for` se llama **variable de bucle**.\n", "\n", - "Now that we can loop through the letters in a word, we can check whether it contains the letter \"e\"." + "Ahora que podemos recorrer las letras de una palabra, podemos comprobar si contiene la letra \"e\"." ] }, { @@ -98,7 +98,7 @@ "id": "644b7df2-4528-48d9-a003-2d21fbefbaab", "metadata": {}, "source": [ - "Before we go on, let's encapsulate that loop in a function." + "Antes de seguir, encapsulemos ese bucle en una función." ] }, { @@ -114,7 +114,7 @@ "id": "31cfacd9-5721-457a-be40-80cf002723b2", "metadata": {}, "source": [ - "And let's make it a pure function that return `True` if the word contains an \"e\" and `False` otherwise." + "Y convirtámosla en una función pura que devuelva `True` si la palabra contiene una \"e\" y `False` en caso contrario." ] }, { @@ -130,7 +130,7 @@ "id": "8f45502e-6db3-4fcc-802c-c97398787dbd", "metadata": {}, "source": [ - "We can generalize it to take the word as a parameter." + "Podemos generalizarla para que tome la palabra como parámetro." ] }, { @@ -146,7 +146,7 @@ "id": "590f4399-16d3-4f1c-93bc-b1fe7ce46633", "metadata": {}, "source": [ - "Now we can test it like this:" + "Ahora podemos probarla así:" ] }, { @@ -170,10 +170,10 @@ "id": "8adf1e92-435e-4b54-837a-bad603ebcafd", "metadata": {}, "source": [ - "## Reading the word list\n", + "## Leer la lista de palabras\n", "\n", - "To see how many words contain an \"e\", we'll need a word list.\n", - "The one we'll use is a list of about 114,000 official crosswords; that is, words that are considered valid in crossword puzzles and other word games. " + "Para ver cuántas palabras contienen una \"e\", necesitaremos una lista de palabras.\n", + "La que usaremos es una lista de unas 114.000 palabras oficiales de crucigramas; es decir, palabras que se consideran válidas en crucigramas y otros juegos de palabras." ] }, { @@ -183,7 +183,7 @@ "tags": [] }, "source": [ - "The following cell downloads the word list, which is a modified version of a list collected and contributed to the public domain by Grady Ward as part of the Moby lexicon project (see )." + "La siguiente celda descarga la lista de palabras, que es una versión modificada de una lista recopilada y aportada al dominio público por Grady Ward como parte del proyecto léxico Moby (consulta )." ] }, { @@ -201,8 +201,8 @@ "id": "5b383a3c-d173-4a66-bf86-23b329032004", "metadata": {}, "source": [ - "The word list is in a file called `words.txt`, which is downloaded in the notebook for this chapter.\n", - "To read it, we'll use the built-in function `open`, which takes the name of the file as a parameter and returns a **file object** we can use to read the file." + "La lista de palabras está en un archivo llamado `words.txt`, que se descarga en el notebook de este capítulo.\n", + "Para leerlo, usaremos la función integrada `open`, que toma el nombre del archivo como parámetro y devuelve un **objeto de archivo** que podemos usar para leer el archivo." ] }, { @@ -218,7 +218,7 @@ "id": "4414d9b1-cb8e-472e-818c-0555e29b1ad5", "metadata": {}, "source": [ - "The file object provides a function called `readline`, which reads characters from the file until it gets to a newline and returns the result as a string:" + "El objeto de archivo proporciona un método llamado `readline`, que lee caracteres del archivo hasta llegar a un salto de línea y devuelve el resultado como una cadena:" ] }, { @@ -234,14 +234,15 @@ "id": "d74e9fe9-117e-436a-ade3-3d08dfda2a00", "metadata": {}, "source": [ - "Notice that the syntax for calling `readline` is different from functions we've seen so far. That's because it is a **method**, which is a function associated with an object.\n", - "In this case `readline` is associated with the file object, so we call it using the name of the object, the dot operator, and the name of the method.\n", + "Fíjate en que la sintaxis para llamar a `readline` es diferente de la de las funciones que hemos visto hasta ahora. Eso se debe a que es un **método**, que es una función asociada a un objeto.\n", + "En este caso `readline` está asociado al objeto de archivo, así que lo llamamos usando el nombre del objeto, el operador punto y el nombre del método.\n", "\n", - "The first word in the list is \"aa\", which is a kind of lava.\n", - "The sequence `\\n` represents the newline character that separates this word from the next.\n", + "La primera palabra de la lista es \"aa\", que es un tipo de lava.\n", + "La secuencia `\n", + "` representa el carácter de salto de línea que separa esta palabra de la siguiente.\n", "\n", - "The file object keeps track of where it is in the file, so if you call\n", - "`readline` again, you get the next word:" + "El objeto de archivo lleva la cuenta de en qué parte del archivo está, así que si llamas a\n", + "`readline` de nuevo, obtienes la siguiente palabra:" ] }, { @@ -257,7 +258,7 @@ "id": "cd466fdb-38ce-4e5b-92c7-05dc23922005", "metadata": {}, "source": [ - "To remove the newline from the end of the word, we can use `strip`, which is a method associated with strings, so we can call it like this." + "Para eliminar el salto de línea del final de la palabra, podemos usar `strip`, que es un método asociado con las cadenas, así que podemos llamarlo así." ] }, { @@ -273,10 +274,10 @@ "id": "6dda6bac-e02e-47ee-9bab-70cef8c27d7a", "metadata": {}, "source": [ - "`strip` removes whitespace characters -- including spaces, tabs, and newlines -- from the beginning and end of the string.\n", + "`strip` elimina caracteres de espacio en blanco -- incluidos espacios, tabulaciones y saltos de línea -- del principio y el final de la cadena.\n", "\n", - "You can also use a file object as part of a `for` loop. \n", - "This program reads `words.txt` and prints each word, one per line:" + "También puedes usar un objeto de archivo como parte de un bucle `for`.\n", + "Este programa lee `words.txt` e imprime cada palabra, una por línea:" ] }, { @@ -294,8 +295,8 @@ "id": "93e320a5-4827-487e-a8ce-216392f398a8", "metadata": {}, "source": [ - "Now that we can read the word list, the next step is to count them.\n", - "For that, we will need the ability to update variables." + "Ahora que podemos leer la lista de palabras, el siguiente paso es contarlas.\n", + "Para eso, necesitaremos la capacidad de actualizar variables." ] }, { @@ -303,13 +304,12 @@ "id": "b63a6877", "metadata": {}, "source": [ - "## Updating variables\n", + "## Actualizar variables\n", "\n", - "As you may have discovered, it is legal to make more than one assignment\n", - "to the same variable.\n", - "A new assignment makes an existing variable refer to a new value (and stop referring to the old value).\n", + "Como quizá hayas descubierto, es legal hacer más de una asignación a la misma variable.\n", + "Una nueva asignación hace que una variable existente se refiera a un valor nuevo (y deje de referirse al valor anterior).\n", "\n", - "For example, here is an initial assignment that creates a variable." + "Por ejemplo, aquí hay una asignación inicial que crea una variable." ] }, { @@ -325,7 +325,7 @@ "id": "c9735982", "metadata": {}, "source": [ - "And here is an assignment that changes the value of a variable." + "Y aquí hay una asignación que cambia el valor de una variable." ] }, { @@ -341,7 +341,7 @@ "id": "fbcd1092-ce06-47fc-9204-fce1c9a100a5", "metadata": {}, "source": [ - "The following figure shows what these assignments looks like in a state diagram." + "La siguiente figura muestra cómo se ven estas asignaciones en un diagrama de estado." ] }, { @@ -369,11 +369,11 @@ "id": "42b7b044-f83b-4483-9a24-64980c688c94", "metadata": {}, "source": [ - "The dotted arrow indicates that `x` no longer refers to `5`.\n", - "The solid arrow indicates that it now refers to `7`.\n", + "La flecha punteada indica que `x` ya no se refiere a `5`.\n", + "La flecha sólida indica que ahora se refiere a `7`.\n", "\n", - "A common kind of assignment is an **update**, where the new value of\n", - "the variable depends on the old." + "Un tipo común de asignación es una **actualización**, donde el nuevo valor de\n", + "la variable depende del anterior." ] }, { @@ -399,9 +399,9 @@ "id": "d3025706", "metadata": {}, "source": [ - "This statement means \"get the current value of `x`, add one, and assign the result back to `x`.\"\n", + "Esta sentencia significa \"obtén el valor actual de `x`, suma uno y asigna el resultado de nuevo a `x`.\"\n", "\n", - "If you try to update a variable that doesn't exist, you get an error, because Python evaluates the expression on the right before it assigns a value to the variable on the left." + "Si intentas actualizar una variable que no existe, obtienes un error, porque Python evalúa la expresión de la derecha antes de asignar un valor a la variable de la izquierda." ] }, { @@ -419,8 +419,8 @@ "id": "03d3959f", "metadata": {}, "source": [ - "Before you can update a variable, you have to **initialize** it, usually\n", - "with a simple assignment:" + "Antes de poder actualizar una variable, tienes que **inicializarla**, normalmente\n", + "con una asignación sencilla:" ] }, { @@ -436,9 +436,9 @@ "id": "374fb3d5", "metadata": {}, "source": [ - "Increasing the value of a variable is called an **increment**; decreasing the value is called a **decrement**.\n", - "Because these operations are so common, Python provides **augmented assignment operators** that update a variable more concisely.\n", - "For example, the `+=` operator increments a variable by the given amount." + "Aumentar el valor de una variable se llama **incremento**; disminuir el valor se llama **decremento**.\n", + "Como estas operaciones son tan comunes, Python proporciona **operadores de asignación aumentada** que actualizan una variable de forma más concisa.\n", + "Por ejemplo, el operador `+=` incrementa una variable en la cantidad dada." ] }, { @@ -454,7 +454,7 @@ "id": "3f4eedf1", "metadata": {}, "source": [ - "There are augmented assignment operators for the other arithmetic operators, including `-=` and `*=`." + "Hay operadores de asignación aumentada para los otros operadores aritméticos, incluidos `-=` y `*=`." ] }, { @@ -462,9 +462,9 @@ "id": "70eeef60-6a34-403a-96bb-aa5c4574a5fe", "metadata": {}, "source": [ - "## Looping and counting\n", + "## Recorrer y contar\n", "\n", - "The following program counts the number of words in the word list." + "El siguiente programa cuenta el número de palabras en la lista de palabras." ] }, { @@ -480,9 +480,9 @@ "id": "9bd83ddd", "metadata": {}, "source": [ - "It starts by initializing `total` to `0`.\n", - "Each time through the loop, it increments `total` by `1`.\n", - "So when the loop exits, `total` refers to the total number of words." + "Empieza inicializando `total` a `0`.\n", + "Cada vez que pasa por el bucle, incrementa `total` en `1`.\n", + "Así que cuando el bucle termina, `total` se refiere al número total de palabras." ] }, { @@ -498,9 +498,9 @@ "id": "54904394", "metadata": {}, "source": [ - "A variable like this, used to count the number of times something happens, is called a **counter**.\n", + "Una variable como esta, usada para contar el número de veces que ocurre algo, se llama **contador**.\n", "\n", - "We can add a second counter to the program to keep track of the number of words that contain an \"e\"." + "Podemos añadir un segundo contador al programa para llevar la cuenta del número de palabras que contienen una \"e\"." ] }, { @@ -516,7 +516,7 @@ "id": "ab73c1e3", "metadata": {}, "source": [ - "Let's see how many words contain an \"e\"." + "Veamos cuántas palabras contienen una \"e\"." ] }, { @@ -532,7 +532,7 @@ "id": "d2262e64", "metadata": {}, "source": [ - "As a percentage of `total`, about two-thirds of the words use the letter \"e\"." + "Como porcentaje de `total`, alrededor de dos tercios de las palabras usan la letra \"e\"." ] }, { @@ -548,7 +548,7 @@ "id": "fe002dde", "metadata": {}, "source": [ - "So you can understand why it's difficult to craft a book without using any such words." + "Así puedes entender por qué es difícil escribir un libro sin usar ninguna de esas palabras." ] }, { @@ -556,10 +556,10 @@ "id": "632a992f", "metadata": {}, "source": [ - "## The in operator\n", + "## El operador in\n", "\n", - "The version of `has_e` we wrote in this chapter is more complicated than it needs to be.\n", - "Python provides an operator, `in`, that checks whether a character appears in a string." + "La versión de `has_e` que escribimos en este capítulo es más complicada de lo necesario.\n", + "Python proporciona un operador, `in`, que comprueba si un carácter aparece en una cadena." ] }, { @@ -575,7 +575,7 @@ "id": "ede36fe9", "metadata": {}, "source": [ - "So we can rewrite `has_e` like this." + "Así que podemos reescribir `has_e` así." ] }, { @@ -591,7 +591,7 @@ "id": "f86f6fc7", "metadata": {}, "source": [ - "And because the conditional of the `if` statement has a boolean value, we can eliminate the `if` statement and return the boolean directly." + "Y como la condición de la sentencia `if` tiene un valor booleano, podemos eliminar la sentencia `if` y devolver el valor booleano directamente." ] }, { @@ -607,8 +607,8 @@ "id": "f2a05319", "metadata": {}, "source": [ - "We can simplify this function even more using the method `lower`, which converts the letters in a string to lowercase.\n", - "Here's an example." + "Podemos simplificar esta función todavía más usando el método `lower`, que convierte las letras de una cadena a minúsculas.\n", + "Aquí tienes un ejemplo." ] }, { @@ -624,7 +624,7 @@ "id": "57aa625a", "metadata": {}, "source": [ - "`lower` makes a new string -- it does not modify the existing string -- so the value of `word` is unchanged. " + "`lower` crea una cadena nueva -- no modifica la cadena existente -- así que el valor de `word` no cambia." ] }, { @@ -640,7 +640,7 @@ "id": "9f0bd075", "metadata": {}, "source": [ - "Here's how we can use `lower` in `has_e`." + "Así es como podemos usar `lower` en `has_e`." ] }, { @@ -672,10 +672,10 @@ "id": "1c39cb6b", "metadata": {}, "source": [ - "## Search\n", + "## Búsqueda\n", "\n", - "Based on this simpler version of `has_e`, let's write a more general function called `uses_any` that takes a second parameter that is a string of letters.\n", - "If returns `True` if the word uses any of the letters and `False` otherwise." + "Basándonos en esta versión más sencilla de `has_e`, escribamos una función más general llamada `uses_any` que recibe un segundo parámetro que es una cadena de letras.\n", + "Devuelve `True` si la palabra usa cualquiera de las letras y `False` en caso contrario." ] }, { @@ -691,7 +691,7 @@ "id": "dc2d6290", "metadata": {}, "source": [ - "Here's an example where the result is `True`." + "Aquí tienes un ejemplo donde el resultado es `True`." ] }, { @@ -707,7 +707,7 @@ "id": "2c3c1553", "metadata": {}, "source": [ - "And another where it is `False`." + "Y otro donde es `False`." ] }, { @@ -723,7 +723,7 @@ "id": "b2acc611", "metadata": {}, "source": [ - "`uses_any` converts `word` and `letters` to lowercase, so it works with any combination of cases. " + "`uses_any` convierte `word` y `letters` a minúsculas, así que funciona con cualquier combinación de mayúsculas y minúsculas." ] }, { @@ -739,13 +739,13 @@ "id": "673786a5", "metadata": {}, "source": [ - "The structure of `uses_any` is similar to `has_e`.\n", - "It loops through the letters in `word` and checks them one at a time.\n", - "If it finds one that appears in `letters`, it returns `True` immediately.\n", - "If it gets all the way through the loop without finding any, it returns `False`.\n", + "La estructura de `uses_any` es similar a la de `has_e`.\n", + "Recorre las letras de `word` y las comprueba una por una.\n", + "Si encuentra una que aparece en `letters`, devuelve `True` inmediatamente.\n", + "Si llega hasta el final del bucle sin encontrar ninguna, devuelve `False`.\n", "\n", - "This pattern is called a **linear search**.\n", - "In the exercises at the end of this chapter, you'll write more functions that use this pattern." + "Este patrón se llama **búsqueda lineal**.\n", + "En los ejercicios al final de este capítulo, escribirás más funciones que usan este patrón." ] }, { @@ -755,9 +755,9 @@ "source": [ "## Doctest\n", "\n", - "In [Chapter 4](section_docstring) we used a docstring to document a function -- that is, to explain what it does.\n", - "It is also possible to use a docstring to *test* a function.\n", - "Here's a version of `uses_any` with a docstring that includes tests." + "En el [capítulo 4](section_docstring) usamos un docstring para documentar una función -- es decir, para explicar qué hace.\n", + "También es posible usar un docstring para *probar* una función.\n", + "Aquí tienes una versión de `uses_any` con un docstring que incluye pruebas." ] }, { @@ -773,15 +773,15 @@ "id": "2871d018", "metadata": {}, "source": [ - "Each test begins with `>>>`, which is used as a prompt in some Python environments to indicate where the user can type code.\n", - "In a doctest, the prompt is followed by an expression, usually a function call.\n", - "The following line indicates the value the expression should have if the function works correctly.\n", + "Cada prueba empieza con `>>>`, que se usa como indicador en algunos entornos de Python para indicar dónde el usuario puede escribir código.\n", + "En un doctest, al indicador le sigue una expresión, normalmente una llamada a función.\n", + "La línea siguiente indica el valor que debería tener la expresión si la función funciona correctamente.\n", "\n", - "In the first example, `'banana'` uses `'a'`, so the result should be `True`.\n", - "In the second example, `'apple'` does not use any of `'xyz'`, so the result should be `False`.\n", + "En el primer ejemplo, `'banana'` usa `'a'`, así que el resultado debería ser `True`.\n", + "En el segundo ejemplo, `'apple'` no usa ninguna de `'xyz'`, así que el resultado debería ser `False`.\n", "\n", - "To run these tests, we have to import the `doctest` module and run a function called `run_docstring_examples`.\n", - "To make this function easier to use, I wrote the following function, which takes a function object as an argument." + "Para ejecutar estas pruebas, tenemos que importar el módulo `doctest` y ejecutar una función llamada `run_docstring_examples`.\n", + "Para que esta función sea más fácil de usar, escribí la siguiente función, que toma un objeto que representa una función como argumento." ] }, { @@ -797,8 +797,8 @@ "id": "79e3de21", "metadata": {}, "source": [ - "We haven't learned about `globals` and `__name__` yet -- you can ignore them.\n", - "Now we can test `uses_any` like this." + "Todavía no hemos aprendido sobre `globals` y `__name__` -- puedes ignorarlos.\n", + "Ahora podemos probar `uses_any` así." ] }, { @@ -814,12 +814,11 @@ "id": "432d8c31", "metadata": {}, "source": [ - "`run_doctests` finds the expressions in the docstring and evaluates them.\n", - "If the result is the expected value, the test **passes**.\n", - "Otherwise it **fails**.\n", - "\n", - "If all tests pass, `run_doctests` displays no output -- in that case, no news is good news.\n", - "To see what happens when a test fails, here's an incorrect version of `uses_any`." + "`run_doctests` encuentra las expresiones en el docstring y las evalúa.\n", + "Si el resultado es el valor esperado, la prueba **pasa**.\n", + "En caso contrario, **falla**.\n", + "Si todas las pruebas pasan, `run_doctests` no muestra ninguna salida -- en ese caso, no tener noticias es buena señal.\n", + "Para ver qué ocurre cuando una prueba falla, aquí tienes una versión incorrecta de `uses_any`." ] }, { @@ -835,7 +834,7 @@ "id": "34b78be4", "metadata": {}, "source": [ - "And here's what happens when we test it." + "Y esto es lo que ocurre cuando la probamos." ] }, { @@ -851,9 +850,9 @@ "id": "473aa6ec", "metadata": {}, "source": [ - "The output includes the example that failed, the value the function was expected to produce, and the value the function actually produced.\n", + "La salida incluye el ejemplo que falló, el valor que se esperaba que devolviera la función y el valor que produjo realmente.\n", "\n", - "If you are not sure why this test failed, you'll have a chance to debug it as an exercise." + "Si no tienes claro por qué falló esta prueba, tendrás la oportunidad de depurarla como ejercicio." ] }, { @@ -861,40 +860,40 @@ "id": "382c134e", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**loop variable:**\n", - "A variable defined in the header of a `for` loop.\n", + "**variable de bucle:**\n", + "Una variable definida en la cabecera de un bucle `for`.\n", "\n", - "**file object:**\n", - "An object that represents an open file and keeps track of which parts of the file have been read or written.\n", + "**objeto de archivo:**\n", + "Un objeto que representa un archivo abierto y lleva la cuenta de qué partes del archivo se han leído o escrito.\n", "\n", - "**method:**\n", - " A function that is associated with an object and called using the dot operator.\n", + "**método:**\n", + " Una función asociada a un objeto que se llama usando el operador punto.\n", "\n", - "**update:**\n", - "An assignment statement that give a new value to a variable that already exists, rather than creating a new variables.\n", + "**actualización:**\n", + "Una sentencia de asignación que da un valor nuevo a una variable que ya existe, en lugar de crear una variable nueva.\n", "\n", - "**initialize:**\n", - "Create a new variable and give it a value.\n", + "**inicializar:**\n", + "Crear una variable nueva y darle un valor.\n", "\n", - "**increment:**\n", - "Increase the value of a variable.\n", + "**incremento:**\n", + "Aumentar el valor de una variable.\n", "\n", - "**decrement:**\n", - "Decrease the value of a variable.\n", + "**decremento:**\n", + "Disminuir el valor de una variable.\n", "\n", - "**counter:**\n", - " A variable used to count something, usually initialized to zero and then incremented.\n", + "**contador:**\n", + " Una variable usada para contar algo, normalmente inicializada a cero y luego incrementada.\n", "\n", - "**linear search:**\n", - "A computational pattern that searches through a sequence of elements and stops what it finds what it is looking for.\n", + "**búsqueda lineal:**\n", + "Un patrón computacional que busca en una secuencia de elementos y se detiene cuando encuentra lo que está buscando.\n", "\n", - "**pass:**\n", - "If a test runs and the result is as expected, the test passes.\n", + "**pasar:**\n", + "Si una prueba se ejecuta y el resultado es el esperado, la prueba pasa.\n", "\n", - "**fail:**\n", - "If a test runs and the result is not as expected, the test fails." + "**fallar:**\n", + "Si una prueba se ejecuta y el resultado no es el esperado, la prueba falla." ] }, { @@ -902,7 +901,7 @@ "id": "0a2b3510-e8d3-439b-a771-a4a58db6ac59", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -920,9 +919,9 @@ "id": "8e8606b8-9a48-4cbd-a0b0-ea848666c77d", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "In `uses_any`, you might have noticed that the first `return` statement is inside the loop and the second is outside." + "En `uses_any`, quizá hayas notado que la primera sentencia `return` está dentro del bucle y la segunda está fuera." ] }, { @@ -938,7 +937,7 @@ "id": "e1920737-b485-4823-ac20-c1e35aa93e7f", "metadata": {}, "source": [ - "When people first write functions like this, it is a common error to put both `return` statements inside the loop, like this." + "Cuando la gente escribe por primera vez funciones como esta, es un error común poner ambas sentencias `return` dentro del bucle, así." ] }, { @@ -954,7 +953,7 @@ "id": "d9b46591-6c80-4ff8-9378-e9318ce5e429", "metadata": {}, "source": [ - "Ask a virtual assistant what's wrong with this version." + "Pregunta a un asistente virtual qué está mal en esta versión." ] }, { @@ -962,12 +961,12 @@ "id": "99eff99e", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function named `uses_none` that takes a word and a string of forbidden letters, and returns `True` if the word does not use any of the forbidden letters.\n", + "Escribe una función llamada `uses_none` que reciba una palabra y una cadena de letras prohibidas, y devuelva `True` si la palabra no usa ninguna de las letras prohibidas.\n", "\n", - "Here's an outline of the function that includes two doctests.\n", - "Fill in the function so it passes these tests, and add at least one more doctest." + "Aquí tienes un esquema de la función que incluye dos doctests.\n", + "Completa la función para que pase estas pruebas, y añade al menos un doctest más." ] }, { @@ -1001,12 +1000,12 @@ "id": "9465b09f-0c62-49f6-bbe2-365ecf1717ef", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `uses_only` that takes a word and a string of letters, and that returns `True` if the word contains only letters in the string.\n", + "Escribe una función llamada `uses_only` que reciba una palabra y una cadena de letras, y que devuelva `True` si la palabra contiene solo letras de la cadena.\n", "\n", - "Here's an outline of the function that includes two doctests.\n", - "Fill in the function so it passes these tests, and add at least one more doctest." + "Aquí tienes un esquema de la función que incluye dos doctests.\n", + "Completa la función para que pase estas pruebas, y añade al menos un doctest más." ] }, { @@ -1040,12 +1039,12 @@ "id": "74259f36", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `uses_all` that takes a word and a string of letters, and that returns `True` if the word contains all of the letters in the string at least once.\n", + "Escribe una función llamada `uses_all` que reciba una palabra y una cadena de letras, y que devuelva `True` si la palabra contiene todas las letras de la cadena al menos una vez.\n", "\n", - "Here's an outline of the function that includes two doctests.\n", - "Fill in the function so it passes these tests, and add at least one more doctest." + "Aquí tienes un esquema de la función que incluye dos doctests.\n", + "Completa la función para que pase estas pruebas, y añade al menos un doctest más." ] }, { @@ -1079,21 +1078,21 @@ "id": "7210adfa", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "*The New York Times* publishes a daily puzzle called \"Spelling Bee\" that challenges readers to spell as many words as possible using only seven letters, where one of the letters is required.\n", - "The words must have at least four letters.\n", + "*The New York Times* publica un juego diario llamado \"Spelling Bee\" que reta a los lectores a formar tantas palabras como sea posible usando solo siete letras, donde una de las letras es obligatoria.\n", + "Las palabras deben tener al menos cuatro letras.\n", "\n", - "For example, on the day I wrote this, the letters were `ACDLORT`, with `R` as the required letter.\n", - "So \"color\" is an acceptable word, but \"told\" is not, because it does not use `R`, and \"rat\" is not because it has only three letters.\n", - "Letters can be repeated, so \"ratatat\" is acceptable.\n", + "Por ejemplo, el día que escribí esto, las letras eran `ACDLORT`, con `R` como letra obligatoria.\n", + "Así que \"color\" es una palabra aceptable, pero \"told\" no, porque no usa `R`, y \"rat\" tampoco porque solo tiene tres letras.\n", + "Las letras se pueden repetir, así que \"ratatat\" es aceptable.\n", "\n", - "Write a function called `check_word` that checks whether a given word is acceptable.\n", - "It should take as parameters the word to check, a string of seven available letters, and a string containing the single required letter.\n", - "You can use the functions you wrote in previous exercises.\n", + "Escribe una función llamada `check_word` que compruebe si una palabra dada es aceptable.\n", + "Debe recibir como parámetros la palabra que se va a comprobar, una cadena de siete letras disponibles y una cadena que contiene la única letra obligatoria.\n", + "Puedes usar las funciones que escribiste en ejercicios anteriores.\n", "\n", - "Here's an outline of the function that includes doctests.\n", - "Fill in the function and then check that all tests pass." + "Aquí tienes un esquema de la función que incluye doctests.\n", + "Completa la función y luego comprueba que todas las pruebas pasan." ] }, { @@ -1127,18 +1126,18 @@ "id": "0b9589fc", "metadata": {}, "source": [ - "According to the \"Spelling Bee\" rules,\n", + "Según las reglas de \"Spelling Bee\",\n", "\n", - "* Four-letter words are worth 1 point each.\n", + "* Las palabras de cuatro letras valen 1 punto cada una.\n", "\n", - "* Longer words earn 1 point per letter.\n", + "* Las palabras más largas obtienen 1 punto por letra.\n", "\n", - "* Each puzzle includes at least one \"pangram\" which uses every letter. These are worth 7 extra points!\n", + "* Cada juego incluye al menos un \"pangram\" que usa todas las letras. ¡Estos valen 7 puntos extra!\n", "\n", - "Write a function called `score_word` that takes a word and a string of available letters and returns its score.\n", - "You can assume that the word is acceptable.\n", + "Escribe una función llamada `score_word` que reciba una palabra y una cadena de letras disponibles y devuelva su puntuación.\n", + "Puedes asumir que la palabra es aceptable.\n", "\n", - "Again, here's an outline of the function with doctests." + "De nuevo, aquí tienes un esquema de la función con doctests." ] }, { @@ -1174,7 +1173,7 @@ "tags": [] }, "source": [ - "When all of your functions pass their tests, use the following loop to search the word list for acceptable words and add up their scores." + "Cuando todas tus funciones pasen sus pruebas, usa el siguiente bucle para buscar palabras aceptables en la lista de palabras y sumar sus puntuaciones." ] }, { @@ -1194,9 +1193,9 @@ "tags": [] }, "source": [ - "Visit the \"Spelling Bee\" page at and type in the available letters for the day. The letter in the middle is required.\n", + "Visita la página de \"Spelling Bee\" en y escribe las letras disponibles del día. La letra del centro es obligatoria.\n", "\n", - "I found a set of letters that spells words with a total score of 5820. Can you beat that? Finding the best set of letters might be too hard -- you have to be a realist." + "Encontré un conjunto de letras que forma palabras con una puntuación total de 5820. ¿Puedes superarlo? Encontrar el mejor conjunto de letras podría ser demasiado difícil -- hay que ser realista." ] }, { @@ -1204,12 +1203,12 @@ "id": "9ae466ed", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "You might have noticed that the functions you wrote in the previous exercises had a lot in common.\n", - "In fact, they are so similar you can often use one function to write another.\n", + "Quizá hayas notado que las funciones que escribiste en los ejercicios anteriores tenían mucho en común.\n", + "De hecho, son tan parecidas que a menudo puedes usar una función para escribir otra.\n", "\n", - "For example, if a word uses none of a set forbidden letters, that means it doesn't use any. So we can write a version of `uses_none` like this." + "Por ejemplo, si una palabra no usa ninguna letra de un conjunto de letras prohibidas, eso significa que no usa ninguna. Así que podemos escribir una versión de `uses_none` así." ] }, { @@ -1235,8 +1234,8 @@ "id": "32aa2c09", "metadata": {}, "source": [ - "There is also a similarity between `uses_only` and `uses_all` that you can take advantage of.\n", - "If you have a working version of `uses_only`, see if you can write a version of `uses_all` that calls `uses_only`." + "También hay una similitud entre `uses_only` y `uses_all` que puedes aprovechar.\n", + "Si tienes una versión funcional de `uses_only`, mira si puedes escribir una versión de `uses_all` que llame a `uses_only`." ] }, { @@ -1244,11 +1243,11 @@ "id": "fa758462", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "If you got stuck on the previous question, try asking a virtual assistant, \"Given a function, `uses_only`, which takes two strings and checks that the first uses only the letters in the second, use it to write `uses_all`, which takes two strings and checks whether the first uses all the letters in the second, allowing repeats.\"\n", + "Si te atascaste en la pregunta anterior, prueba a preguntar a un asistente virtual: \"Dada una función, `uses_only`, que recibe dos cadenas y comprueba que la primera usa solo las letras del segundo, úsala para escribir `uses_all`, que recibe dos cadenas y comprueba si la primera usa todas las letras del segundo, permitiendo repeticiones.\"\n", "\n", - "Use `run_doctests` to check the answer." + "Usa `run_doctests` para comprobar la respuesta." ] }, { @@ -1274,13 +1273,13 @@ "id": "18f407b3", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Now let's see if we can write `uses_all` based on `uses_any`.\n", + "Ahora veamos si podemos escribir `uses_all` basándonos en `uses_any`.\n", "\n", - "Ask a virtual assistant, \"Given a function, `uses_any`, which takes two strings and checks whether the first uses any of the letters in the second, can you use it to write `uses_all`, which takes two strings and checks whether the first uses all the letters in the second, allowing repeats.\"\n", + "Pregunta a un asistente virtual: \"Dada una función, `uses_any`, que recibe dos cadenas y comprueba si la primera usa cualquiera de las letras del segundo, ¿puedes usarla para escribir `uses_all`, que recibe dos cadenas y comprueba si la primera usa todas las letras del segundo, permitiendo repeticiones?\"\n", "\n", - "If it says it can, be sure to test the result!" + "Si dice que puede, ¡asegúrate de probar el resultado!" ] }, { @@ -1318,9 +1317,11 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", + "\n", + "Licencia del código: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del texto: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/blank/chap08.ipynb b/blank/chap08.ipynb index 00a2a91..317c410 100644 --- a/blank/chap08.ipynb +++ b/blank/chap08.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes comprar versiones impresas y libro electrónico de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -25,14 +25,14 @@ "id": "9d97603b", "metadata": {}, "source": [ - "# Strings and Regular Expressions\n", + "# Cadenas y expresiones regulares\n", "\n", - "Strings are not like integers, floats, and booleans. A string is a **sequence**, which means it contains multiple values in a particular order.\n", - "In this chapter we'll see how to access the values that make up a string, and we'll use functions that process strings.\n", + "Las cadenas no son como los enteros, los flotantes y los booleanos. Una cadena es una **secuencia**, lo que significa que contiene múltiples valores en un orden particular.\n", + "En este capítulo veremos cómo acceder a los valores que componen una cadena, y usaremos funciones que procesan cadenas.\n", "\n", - "We'll also use regular expressions, which are a powerful tool for finding patterns in a string and performing operations like search and replace.\n", + "También usaremos expresiones regulares, que son una herramienta poderosa para encontrar patrones en una cadena y realizar operaciones como búsqueda y reemplazo.\n", "\n", - "As an exercise, you'll have a chance to apply these tools to a word game called Wordle." + "Como ejercicio, tendrás la oportunidad de aplicar estas herramientas a un juego de palabras llamado Wordle." ] }, { @@ -40,13 +40,13 @@ "id": "1280dd83", "metadata": {}, "source": [ - "## A string is a sequence\n", + "## Una cadena es una secuencia\n", "\n", - "A string is a sequence of characters. A **character** can be a letter (in almost any alphabet), a digit, a punctuation mark, or white space.\n", + "Una cadena es una secuencia de caracteres. Un **carácter** puede ser una letra (en casi cualquier alfabeto), un dígito, un signo de puntuación o un espacio en blanco.\n", "\n", - "You can select a character from a string with the bracket operator.\n", - "This example statement selects character number 1 from `fruit` and\n", - "assigns it to `letter`:" + "Puedes seleccionar un carácter de una cadena con el operador de corchetes.\n", + "Esta sentencia de ejemplo selecciona el carácter número 1 de `fruit` y\n", + "lo asigna a `letter`:" ] }, { @@ -62,8 +62,8 @@ "id": "a307e429", "metadata": {}, "source": [ - "The expression in brackets is an **index**, so called because it *indicates* which character in the sequence to select.\n", - "But the result might not be what you expect." + "La expresión entre corchetes es un **índice**, llamado así porque *indica* qué carácter de la secuencia seleccionar.\n", + "Pero el resultado quizá no sea lo que esperas." ] }, { @@ -79,8 +79,8 @@ "id": "57c13319", "metadata": {}, "source": [ - "The letter with index `1` is actually the second letter of the string.\n", - "An index is an offset from the beginning of the string, so the offset of the first letter is `0`." + "La letra con índice `1` es en realidad la segunda letra de la cadena.\n", + "Un índice es un desplazamiento desde el principio de la cadena, así que el desplazamiento de la primera letra es `0`." ] }, { @@ -96,9 +96,9 @@ "id": "57d8e54c", "metadata": {}, "source": [ - "You can think of `'b'` as the 0th letter of `'banana'` -- pronounced \"zero-eth\".\n", + "Puedes pensar en `'b'` como la letra 0 de `'banana'` -- pronunciada \"ceroésima\".\n", "\n", - "The index in brackets can be a variable." + "El índice entre corchetes puede ser una variable." ] }, { @@ -114,7 +114,7 @@ "id": "9630e2e7", "metadata": {}, "source": [ - "Or an expression that contains variables and operators." + "O una expresión que contiene variables y operadores." ] }, { @@ -130,7 +130,7 @@ "id": "939b602d", "metadata": {}, "source": [ - "But the value of the index has to be an integer -- otherwise you get a `TypeError`." + "Pero el valor del índice tiene que ser un entero -- de lo contrario obtienes un `TypeError`." ] }, { @@ -148,7 +148,7 @@ "id": "3f0f7e3a", "metadata": {}, "source": [ - "As we saw in Chapter 1, we can use the built-in function `len` to get the length of a string." + "Como vimos en el capítulo 1, podemos usar la función integrada `len` para obtener la longitud de una cadena." ] }, { @@ -164,7 +164,7 @@ "id": "29013c47", "metadata": {}, "source": [ - "To get the last letter of a string, you might be tempted to write this:" + "Para obtener la última letra de una cadena, podrías sentir la tentación de escribir esto:" ] }, { @@ -182,7 +182,7 @@ "id": "b87e09bd", "metadata": {}, "source": [ - "But that causes an `IndexError` because there is no letter in `'banana'` with the index 6. Because we started counting at `0`, the six letters are numbered `0` to `5`. To get the last character, you have to subtract `1` from `n`:" + "Pero eso causa un `IndexError` porque no hay ninguna letra en `'banana'` con el índice 6. Como empezamos a contar en `0`, las seis letras están numeradas de `0` a `5`. Para obtener el último carácter, tienes que restar `1` a `n`:" ] }, { @@ -198,8 +198,8 @@ "id": "3c79dcec", "metadata": {}, "source": [ - "But there's an easier way.\n", - "To get the last letter in a string, you can use a negative index, which counts backward from the end. " + "Pero hay una forma más sencilla.\n", + "Para obtener la última letra de una cadena, puedes usar un índice negativo, que cuenta hacia atrás desde el final." ] }, { @@ -215,7 +215,7 @@ "id": "5677b727", "metadata": {}, "source": [ - "The index `-1` selects the last letter, `-2` selects the second to last, and so on." + "El índice `-1` selecciona la última letra, `-2` selecciona la penúltima, y así sucesivamente." ] }, { @@ -223,10 +223,10 @@ "id": "8392a12a", "metadata": {}, "source": [ - "## String slices\n", + "## Segmentos de cadenas\n", "\n", - "A segment of a string is called a **slice**.\n", - "Selecting a slice is similar to selecting a character." + "Un segmento de una cadena se llama **segmento**.\n", + "Seleccionar un segmento es similar a seleccionar un carácter." ] }, { @@ -242,9 +242,9 @@ "id": "5cc12531", "metadata": {}, "source": [ - "The operator `[n:m]` returns the part of the string from the `n`th\n", - "character to the `m`th character, including the first but excluding the second.\n", - "This behavior is counterintuitive, but it might help to imagine the indices pointing *between* the characters, as in this figure:" + "El operador `[n:m]` devuelve la parte de la cadena desde el carácter `n`-ésimo\n", + "hasta el carácter `m`-ésimo, incluyendo el primero pero excluyendo el segundo.\n", + "Este comportamiento es contraintuitivo, pero puede ayudar imaginar que los índices apuntan *entre* los caracteres, como en esta figura:" ] }, { @@ -272,10 +272,10 @@ "id": "c391abbf", "metadata": {}, "source": [ - "For example, the slice `[3:6]` selects the letters `ana`, which means that `6` is legal as part of a slice, but not legal as an index.\n", + "Por ejemplo, el segmento `[3:6]` selecciona las letras `ana`, lo que significa que `6` es legal como parte de un segmento, pero no como índice.\n", "\n", "\n", - "If you omit the first index, the slice starts at the beginning of the string." + "Si omites el primer índice, el segmento empieza al principio de la cadena." ] }, { @@ -291,7 +291,7 @@ "id": "1bd7dcb1", "metadata": {}, "source": [ - "If you omit the second index, the slice goes to the end of the string:" + "Si omites el segundo índice, el segmento va hasta el final de la cadena:" ] }, { @@ -307,7 +307,7 @@ "id": "4701123b", "metadata": {}, "source": [ - "If the first index is greater than or equal to the second, the result is an **empty string**, represented by two quotation marks:" + "Si el primer índice es mayor o igual que el segundo, el resultado es una **cadena vacía**, representado por dos comillas:" ] }, { @@ -323,10 +323,10 @@ "id": "d12735ab", "metadata": {}, "source": [ - "An empty string contains no characters and has length 0.\n", + "Una cadena vacío no contiene caracteres y tiene longitud 0.\n", "\n", - "Continuing this example, what do you think `fruit[:]` means? Try it and\n", - "see." + "Continuando con este ejemplo, ¿qué crees que significa `fruit[:]`? Pruébalo y\n", + "mira." ] }, { @@ -344,10 +344,10 @@ "id": "918d3dd0", "metadata": {}, "source": [ - "## Strings are immutable\n", + "## Las cadenas son inmutables\n", "\n", - "It is tempting to use the `[]` operator on the left side of an\n", - "assignment, with the intention of changing a character in a string, like this:" + "Es tentador usar el operador `[]` en el lado izquierdo de una\n", + "asignación, con la intención de cambiar un carácter en una cadena, así:" ] }, { @@ -365,13 +365,13 @@ "id": "df3dd7d1", "metadata": {}, "source": [ - "The result is a `TypeError`.\n", - "In the error message, the \"object\" is the string and the \"item\" is the character\n", - "we tried to assign.\n", - "For now, an **object** is the same thing as a value, but we will refine that definition later.\n", + "El resultado es un `TypeError`.\n", + "En el mensaje de error, el \"objeto\" es la cadena y el \"item\" es el carácter\n", + "que intentamos asignar.\n", + "Por ahora, un **objeto** es lo mismo que un valor, pero refinaremos esa definición más adelante.\n", "\n", - "The reason for this error is that strings are **immutable**, which means you can't change an existing string.\n", - "The best you can do is create a new string that is a variation of the original." + "La razón de este error es que las cadenas son **inmutables**, lo que significa que no puedes cambiar una cadena existente.\n", + "Lo máximo que puedes hacer es crear una cadena nueva que sea una variación del original." ] }, { @@ -387,8 +387,8 @@ "id": "2848546f", "metadata": {}, "source": [ - "This example concatenates a new first letter onto a slice of `greeting`.\n", - "It has no effect on the original string." + "Este ejemplo concatena una nueva primera letra con un segmento de `greeting`.\n", + "No tiene ningún efecto sobre la cadena original." ] }, { @@ -404,10 +404,10 @@ "id": "49e4da57", "metadata": {}, "source": [ - "## String comparison\n", + "## Comparación de cadenas\n", "\n", - "The relational operators work on strings. To see if two strings are\n", - "equal, we can use the `==` operator." + "Los operadores relacionales funcionan con cadenas. Para ver si dos cadenas son\n", + "iguales, podemos usar el operador `==`." ] }, { @@ -423,8 +423,7 @@ "id": "e9be6097", "metadata": {}, "source": [ - "Other relational operations are useful for putting words in alphabetical\n", - "order:" + "Otras operaciones relacionales son útiles para poner palabras en orden alfabético:" ] }, { @@ -448,9 +447,9 @@ "id": "b66f449a", "metadata": {}, "source": [ - "Python does not handle uppercase and lowercase letters the same way\n", - "people do. All the uppercase letters come before all the lowercase\n", - "letters, so:" + "Python no trata las letras mayúsculas y minúsculas de la misma manera que\n", + "lo hacen las personas. Todas las letras mayúsculas van antes que todas las\n", + "minúsculas, así que:" ] }, { @@ -466,8 +465,8 @@ "id": "f9b916c9", "metadata": {}, "source": [ - "To solve this problem, we can convert strings to a standard format, such as all lowercase, before performing the comparison.\n", - "Keep that in mind if you have to defend yourself against a man armed with a Pineapple." + "Para resolver este problema, podemos convertir las cadenas a un formato estándar, como todo en minúsculas, antes de realizar la comparación.\n", + "Tenlo en cuenta si tienes que defenderte de un hombre armado con una piña." ] }, { @@ -475,13 +474,13 @@ "id": "531069f1", "metadata": {}, "source": [ - "## String methods\n", + "## Métodos de cadenas\n", "\n", - "Strings provide methods that perform a variety of useful operations. \n", - "A method is similar to a function -- it takes arguments and returns a value -- but the syntax is different.\n", - "For example, the method `upper` takes a string and returns a new string with all uppercase letters.\n", + "Las cadenas proporcionan métodos que realizan una variedad de operaciones útiles.\n", + "Un método es similar a una función -- recibe argumentos y devuelve un valor -- pero la sintaxis es diferente.\n", + "Por ejemplo, el método `upper` recibe una cadena y devuelve una cadena nueva con todas las letras en mayúsculas.\n", "\n", - "Instead of the function syntax `upper(word)`, it uses the method syntax `word.upper()`." + "En lugar de la sintaxis de función `upper(word)`, usa la sintaxis de método `word.upper()`." ] }, { @@ -497,10 +496,10 @@ "id": "1ac41744", "metadata": {}, "source": [ - "This use of the dot operator specifies the name of the method, `upper`, and the name of the string to apply the method to, `word`.\n", - "The empty parentheses indicate that this method takes no arguments.\n", + "Este uso del operador punto especifica el nombre del método, `upper`, y el nombre de la cadena al que aplicar el método, `word`.\n", + "Los paréntesis vacíos indican que este método no toma argumentos.\n", "\n", - "A method call is called an **invocation**; in this case, we would say that we are invoking `upper` on `word`." + "Una llamada a método se llama **invocación**; en este caso, diríamos que estamos invocando `upper` sobre `word`." ] }, { @@ -510,10 +509,10 @@ "tags": [] }, "source": [ - "## Writing files\n", + "## Escribir archivos\n", "\n", - "String operators and methods are useful for reading and writing text files.\n", - "As an example, we'll work with the text of *Dracula*, a novel by Bram Stoker that is available from Project Gutenberg ()." + "Los operadores y métodos de cadena son útiles para leer y escribir archivos de texto.\n", + "Como ejemplo, trabajaremos con el texto de *Dracula*, una novela de Bram Stoker que está disponible en Project Gutenberg ()." ] }, { @@ -531,7 +530,7 @@ "id": "963dda79", "metadata": {}, "source": [ - "I've downloaded the book in a plain text file called `pg345.txt`, which we can open for reading like this:" + "He descargado el libro en un archivo de texto plano llamado `pg345.txt`, que podemos abrir para lectura así:" ] }, { @@ -547,11 +546,11 @@ "id": "b5d99e8c", "metadata": {}, "source": [ - "In addition to the text of the book, this file contains a section at the beginning with information about the book and a section at the end with information about the license.\n", - "Before we process the text, we can remove this extra material by finding the special lines at the beginning and end that begin with `'***'`.\n", + "Además del texto del libro, este archivo contiene una sección al principio con información sobre el libro y una sección al final con información sobre la licencia.\n", + "Antes de procesar el texto, podemos eliminar este material extra encontrando las líneas especiales al principio y al final que empiezan con `'***'`.\n", "\n", - "The following function takes a line and checks whether it is one of the special lines.\n", - "It uses the `startswith` method, which checks whether a string starts with a given sequence of characters." + "La siguiente función recibe una línea y comprueba si es una de las líneas especiales.\n", + "Usa el método `startswith`, que comprueba si una cadena empieza con una secuencia determinada de caracteres." ] }, { @@ -567,7 +566,7 @@ "id": "2efdfe35", "metadata": {}, "source": [ - "We can use this function to loop through the lines in the file and print only the special lines." + "Podemos usar esta función para recorrer las líneas del archivo e imprimir solo las líneas especiales." ] }, { @@ -583,9 +582,9 @@ "id": "07fb5992", "metadata": {}, "source": [ - "Now let's create a new file, called `pg345_cleaned.txt`, that contains only the text of the book.\n", - "In order to loop through the book again, we have to open it again for reading.\n", - "And, to write a new file, we can open it for writing." + "Ahora creemos un archivo nuevo, llamado `pg345_cleaned.txt`, que contenga solo el texto del libro.\n", + "Para recorrer el libro de nuevo, tenemos que abrirlo otra vez para lectura.\n", + "Y, para escribir un archivo nuevo, podemos abrirlo para escritura." ] }, { @@ -601,10 +600,10 @@ "id": "96d881aa", "metadata": {}, "source": [ - "`open` takes an optional parameters that specifies the \"mode\" -- in this example, `'w'` indicates that we're opening the file for writing.\n", - "If the file doesn't exist, it will be created; if it already exists, the contents will be replaced.\n", + "`open` recibe un parámetro opcional que especifica el \"modo\" -- en este ejemplo, `'w'` indica que estamos abriendo el archivo para escritura.\n", + "Si el archivo no existe, se creará; si ya existe, el contenido será reemplazado.\n", "\n", - "As a first step, we'll loop through the file until we find the first special line." + "Como primer paso, recorreremos el archivo hasta encontrar la primera línea especial." ] }, { @@ -620,9 +619,9 @@ "id": "1989d5a1", "metadata": {}, "source": [ - "The `break` statement \"breaks\" out of the loop -- that is, it causes the loop to end immediately, before we get to the end of the file.\n", + "La sentencia `break` \"rompe\" el bucle -- es decir, hace que el bucle termine inmediatamente, antes de llegar al final del archivo.\n", "\n", - "When the loop exits, `line` contains the special line that made the conditional true." + "Cuando el bucle termina, `line` contiene la línea especial que hizo que la condición fuera verdadera." ] }, { @@ -638,11 +637,11 @@ "id": "9f28c3b4", "metadata": {}, "source": [ - "Because `reader` keeps track of where it is in the file, we can use a second loop to pick up where we left off.\n", + "Como `reader` lleva la cuenta de en qué parte del archivo está, podemos usar un segundo bucle para continuar donde lo dejamos.\n", "\n", - "The following loop reads the rest of the file, one line at a time.\n", - "When it finds the special line that indicates the end of the text, it breaks out of the loop.\n", - "Otherwise, it writes the line to the output file." + "El siguiente bucle lee el resto del archivo, una línea cada vez.\n", + "Cuando encuentra la línea especial que indica el final del texto, rompe el bucle.\n", + "En caso contrario, escribe la línea en el archivo de salida." ] }, { @@ -658,7 +657,7 @@ "id": "c07032a4", "metadata": {}, "source": [ - "When this loop exits, `line` contains the second special line." + "Cuando este bucle termina, `line` contiene la segunda línea especial." ] }, { @@ -674,8 +673,8 @@ "id": "0c30b41c", "metadata": {}, "source": [ - "At this point `reader` and `writer` are still open, which means we could keep reading lines from `reader` or writing lines to `writer`.\n", - "To indicate that we're done, we can close both files by invoking the `close` method." + "En este punto `reader` y `writer` siguen abiertos, lo que significa que podríamos seguir leyendo líneas de `reader` o escribiendo líneas en `writer`.\n", + "Para indicar que hemos terminado, podemos cerrar ambos archivos invocando el método `close`." ] }, { @@ -691,7 +690,7 @@ "id": "d5084cdc", "metadata": {}, "source": [ - "To check whether this process was successful, we can read the first few lines from the new file we just created." + "Para comprobar si este proceso tuvo éxito, podemos leer las primeras líneas del archivo nuevo que acabamos de crear." ] }, { @@ -707,7 +706,7 @@ "id": "34c93df3", "metadata": {}, "source": [ - "The `endswidth` method checks whether a string ends with a given sequence of characters." + "El método `endswith` comprueba si una cadena termina con una secuencia determinada de caracteres." ] }, { @@ -715,12 +714,12 @@ "id": "fcdb4bbf", "metadata": {}, "source": [ - "## Find and replace\n", + "## Buscar y reemplazar\n", "\n", - "In the Icelandic translation of *Dracula* from 1901, the name of one of the characters was changed from \"Jonathan\" to \"Thomas\".\n", - "To make this change in the English version, we can loop through the book, use the `replace` method to replace one name with another, and write the result to a new file.\n", + "En la traducción islandesa de *Dracula* de 1901, el nombre de uno de los personajes se cambió de \"Jonathan\" a \"Thomas\".\n", + "Para hacer este cambio en la versión inglesa, podemos recorrer el libro, usar el método `replace` para reemplazar un nombre por otro y escribir el resultado en un archivo nuevo.\n", "\n", - "We'll start by counting the lines in the cleaned version of the file." + "Empezaremos contando las líneas en la versión limpia del archivo." ] }, { @@ -736,7 +735,7 @@ "id": "8ba9b9ca", "metadata": {}, "source": [ - "To see whether a line contains \"Jonathan\", we can use the `in` operator, which checks whether this sequence of characters appears anywhere in the line." + "Para ver si una línea contiene \"Jonathan\", podemos usar el operador `in`, que comprueba si esta secuencia de caracteres aparece en cualquier parte de la línea." ] }, { @@ -752,8 +751,8 @@ "id": "27805245", "metadata": {}, "source": [ - "There are 199 lines that contain the name, but that's not quite the total number of times it appears, because it can appear more than once in a line.\n", - "To get the total, we can use the `count` method, which returns the number of times a sequence appears in a string." + "Hay 199 líneas que contienen el nombre, pero ese no es exactamente el número total de veces que aparece, porque puede aparecer más de una vez en una línea.\n", + "Para obtener el total, podemos usar el método `count`, que devuelve el número de veces que una secuencia aparece en una cadena." ] }, { @@ -769,7 +768,7 @@ "id": "68026797", "metadata": {}, "source": [ - "Now we can replace `'Jonathan'` with `'Thomas'` like this:" + "Ahora podemos reemplazar `'Jonathan'` por `'Thomas'` así:" ] }, { @@ -785,7 +784,7 @@ "id": "57ba56f3", "metadata": {}, "source": [ - "The result is a new file called `pg345_replaced.txt` that contains a version of *Dracula* where Jonathan Harker is called Thomas." + "El resultado es un archivo nuevo llamado `pg345_replaced.txt` que contiene una versión de *Dracula* donde Jonathan Harker se llama Thomas." ] }, { @@ -803,15 +802,15 @@ "id": "cc9af187", "metadata": {}, "source": [ - "## Regular expressions\n", + "## Expresiones regulares\n", "\n", - "If we know exactly what sequence of characters we're looking for, we can use the `in` operator to find it and the `replace` method to replace it.\n", - "But there is another tool, called a **regular expression** that can also perform these operations -- and a lot more.\n", + "Si sabemos exactamente qué secuencia de caracteres estamos buscando, podemos usar el operador `in` para encontrarla y el método `replace` para reemplazarla.\n", + "Pero hay otra herramienta, llamada **expresión regular**, que también puede realizar estas operaciones -- y muchas más.\n", "\n", - "To demonstrate, I'll start with a simple example and we'll work our way up.\n", - "Suppose, again, that we want to find all lines that contain a particular word.\n", - "For a change, let's look for references to the titular character of the book, Count Dracula.\n", - "Here's a line that mentions him." + "Para demostrarlo, empezaré con un ejemplo sencillo y avanzaremos poco a poco.\n", + "Supongamos, otra vez, que queremos encontrar todas las líneas que contienen una palabra concreta.\n", + "Para variar, busquemos referencias al personaje titular del libro, el conde Dracula.\n", + "Aquí tienes una línea que lo menciona." ] }, { @@ -827,7 +826,7 @@ "id": "d4fd6d11", "metadata": {}, "source": [ - "And here's the **pattern** we'll use to search." + "Y aquí está el **patrón** que usaremos para buscar." ] }, { @@ -843,8 +842,8 @@ "id": "268f647c", "metadata": {}, "source": [ - "A module called `re` provides functions related to regular expressions.\n", - "We can import it like this and use the `search` function to check whether the pattern appears in the text." + "Un módulo llamado `re` proporciona funciones relacionadas con expresiones regulares.\n", + "Podemos importarlo así y usar la función `search` para comprobar si el patrón aparece en el texto." ] }, { @@ -860,8 +859,8 @@ "id": "e17f6731", "metadata": {}, "source": [ - "If the pattern appears in the text, `search` returns a `Match` object that contains the results of the search.\n", - "Among other information, it has a variable named `string` that contains the text that was searched." + "Si el patrón aparece en el texto, `search` devuelve un objeto `Match` que contiene los resultados de la búsqueda.\n", + "Entre otra información, tiene una variable llamada `string` que contiene el texto en el que se buscó." ] }, { @@ -877,7 +876,7 @@ "id": "a8eab0f6", "metadata": {}, "source": [ - "It also provides a method called `group` that returns the part of the text that matched the pattern." + "También proporciona un método llamado `group` que devuelve la parte del texto que coincidió con el patrón." ] }, { @@ -893,7 +892,7 @@ "id": "b6962a7d", "metadata": {}, "source": [ - "And it provides a method called `span` that returns the index in the text where the pattern starts and ends." + "Y proporciona un método llamado `span` que devuelve el índice en el texto donde empieza y termina el patrón." ] }, { @@ -909,7 +908,7 @@ "id": "8f1e5261", "metadata": {}, "source": [ - "If the pattern doesn't appear in the text, the return value from `search` is `None`." + "Si el patrón no aparece en el texto, el valor de retorno de `search` es `None`." ] }, { @@ -925,7 +924,7 @@ "id": "d5ed33ff", "metadata": {}, "source": [ - "So we can check whether the search was successful by checking whether the result is `None`." + "Así que podemos comprobar si la búsqueda tuvo éxito comprobando si el resultado es `None`." ] }, { @@ -941,7 +940,7 @@ "id": "a08e38f6", "metadata": {}, "source": [ - "Putting all that together, here's a function that loops through the lines in the book until it finds one that matches the given pattern, and returns the `Match` object." + "Juntando todo eso, aquí tienes una función que recorre las líneas del libro hasta encontrar una que coincida con el patrón dado, y devuelve el objeto `Match`." ] }, { @@ -957,7 +956,7 @@ "id": "96570515", "metadata": {}, "source": [ - "We can use it to find the first mention of a character." + "Podemos usarla para encontrar la primera mención de un personaje." ] }, { @@ -973,12 +972,12 @@ "id": "3f687fdc", "metadata": {}, "source": [ - "For this example, we didn't have to use regular expressions -- we could have done the same thing more easily with the `in` operator.\n", - "But regular expressions can do things the `in` operator cannot.\n", + "Para este ejemplo, no tuvimos que usar expresiones regulares -- podríamos haber hecho lo mismo más fácilmente con el operador `in`.\n", + "Pero las expresiones regulares pueden hacer cosas que el operador `in` no puede.\n", "\n", - "For example, if the pattern includes the vertical bar character, `'|'`, it can match either the sequence on the left or the sequence on the right.\n", - "Suppose we want to find the first mention of Mina Murray in the book, but we are not sure whether she is referred to by first name or last.\n", - "We can use the following pattern, which matches either name." + "Por ejemplo, si el patrón incluye el carácter de barra vertical, `'|'`, puede coincidir con la secuencia de la izquierda o con la secuencia de la derecha.\n", + "Supongamos que queremos encontrar la primera mención de Mina Murray en el libro, pero no estamos seguros de si se la menciona por su nombre o por su apellido.\n", + "Podemos usar el siguiente patrón, que coincide con cualquiera de los dos nombres." ] }, { @@ -994,8 +993,8 @@ "id": "8bea66a6", "metadata": {}, "source": [ - "We can use a pattern like this to see how many times a character is mentioned by either name.\n", - "Here's a function that loops through the book and counts the number of lines that match the given pattern." + "Podemos usar un patrón como este para ver cuántas veces se menciona a un personaje por cualquiera de los dos nombres.\n", + "Aquí tienes una función que recorre el libro y cuenta el número de líneas que coinciden con el patrón dado." ] }, { @@ -1011,7 +1010,7 @@ "id": "0e753a5b", "metadata": {}, "source": [ - "Now let's see how many times Mina is mentioned." + "Ahora veamos cuántas veces se menciona a Mina." ] }, { @@ -1027,7 +1026,7 @@ "id": "780c9fab", "metadata": {}, "source": [ - "The special character `'^'` matches the beginning of a string, so we can find a line that starts with a given pattern." + "El carácter especial `'^'` coincide con el principio de una cadena, así que podemos encontrar una línea que empieza con un patrón dado." ] }, { @@ -1043,7 +1042,7 @@ "id": "332bad2e", "metadata": {}, "source": [ - "And the special character `'$'` matches the end of a string, so we can find a line that ends with a given pattern (ignoring the newline at the end)." + "Y el carácter especial `'$'` coincide con el final de una cadena, así que podemos encontrar una línea que termina con un patrón dado (ignorando el salto de línea del final)." ] }, { @@ -1059,11 +1058,11 @@ "id": "d4b22b6e", "metadata": {}, "source": [ - "## String substitution\n", + "## Sustitución de cadenas\n", "\n", - "Bram Stoker was born in Ireland, and when *Dracula* was published in 1897, he was living in England.\n", - "So we would expect him to use the British spelling of words like \"centre\" and \"colour\".\n", - "To check, we can use the following pattern, which matches either \"centre\" or the American spelling \"center\"." + "Bram Stoker nació en Irlanda, y cuando *Dracula* se publicó en 1897, vivía en Inglaterra.\n", + "Así que esperaríamos que usara la ortografía británica de palabras como \"centre\" y \"colour\".\n", + "Para comprobarlo, podemos usar el siguiente patrón, que coincide con \"centre\" o con la ortografía estadounidense \"center\"." ] }, { @@ -1079,8 +1078,8 @@ "id": "35abfd7d", "metadata": {}, "source": [ - "In this pattern, the parentheses enclose the part of the pattern the vertical bar applies to.\n", - "So this pattern matches a sequence that starts with `'cent'` and ends with either `'er'` or `'re'`." + "En este patrón, los paréntesis encierran la parte del patrón a la que se aplica la barra vertical.\n", + "Así que este patrón coincide con una secuencia que empieza con `'cent'` y termina con `'er'` o con `'re'`." ] }, { @@ -1096,10 +1095,10 @@ "id": "e5703c18", "metadata": {}, "source": [ - "As expected, he used the British spelling.\n", + "Como esperábamos, usó la ortografía británica.\n", "\n", - "We can also check whether he used the British spelling of \"colour\".\n", - "The following pattern uses the special character `'?'`, which means that the previous character is optional." + "También podemos comprobar si usó la ortografía británica de \"colour\".\n", + "El siguiente patrón usa el carácter especial `'?'`, que significa que el carácter anterior es opcional." ] }, { @@ -1115,7 +1114,7 @@ "id": "beed9a7b", "metadata": {}, "source": [ - "This pattern matches either \"colour\" with the `'u'` or \"color\" without it." + "Este patrón coincide con \"colour\" con la `'u'` o con \"color\" sin ella." ] }, { @@ -1131,10 +1130,10 @@ "id": "1a31f179", "metadata": {}, "source": [ - "Again, as expected, he used the British spelling.\n", + "De nuevo, como esperábamos, usó la ortografía británica.\n", "\n", - "Now suppose we want to produce an edition of the book with American spellings.\n", - "We can use the `sub` function in the `re` module, which does **string substitution**." + "Ahora supongamos que queremos producir una edición del libro con ortografía estadounidense.\n", + "Podemos usar la función `sub` del módulo `re`, que hace **sustitución de cadenas**." ] }, { @@ -1150,8 +1149,8 @@ "id": "04a80fc6", "metadata": {}, "source": [ - "The first argument is the pattern we want to find and replace, the second is what we want to replace it with, and the third is the string we want to search.\n", - "In the result, you can see that \"colour\" has been replaced with \"color\"." + "El primer argumento es el patrón que queremos encontrar y reemplazar, el segundo es aquello con lo que queremos reemplazarlo, y el tercero es la cadena en el que queremos buscar.\n", + "En el resultado, puedes ver que \"colour\" ha sido reemplazado por \"color\"." ] }, { @@ -1179,11 +1178,11 @@ "id": "0318507d", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "When you are reading and writing files, debugging can be tricky.\n", - "If you are working in a Jupyter notebook, you can use **shell commands** to help.\n", - "For example, to display the first few lines of a file, you can use the command `!head`, like this:" + "Cuando lees y escribes archivos, depurar puede ser complicado.\n", + "Si trabajas en un Jupyter notebook, puedes usar **comandos de shell** para ayudar.\n", + "Por ejemplo, para mostrar las primeras líneas de un archivo, puedes usar el comando `!head`, así:" ] }, { @@ -1201,8 +1200,8 @@ "id": "1d480c02", "metadata": {}, "source": [ - "The initial exclamation point, `!`, indicates that this is a shell command, which is not part of Python.\n", - "To display the last few lines, you can use `!tail`." + "El signo de exclamación inicial, `!`, indica que esto es un comando de shell, que no forma parte de Python.\n", + "Para mostrar las últimas líneas, puedes usar `!tail`." ] }, { @@ -1220,10 +1219,10 @@ "id": "6874023a", "metadata": {}, "source": [ - "When you are working with large files, debugging can be difficult because there might be too much output to check by hand.\n", - "A good debugging strategy is to start with just part of the file, get the program working, and then run it with the whole file.\n", + "Cuando trabajas con archivos grandes, depurar puede ser difícil porque puede haber demasiada salida para revisarla a mano.\n", + "Una buena estrategia de depuración es empezar con solo una parte del archivo, hacer que el programa funcione, y luego ejecutarlo con el archivo completo.\n", "\n", - "To make a small file that contains part of a larger file, we can use `!head` again with the redirect operator, `>`, which indicates that the results should be written to a file rather than displayed." + "Para crear un archivo pequeño que contenga parte de un archivo más grande, podemos usar `!head` de nuevo con el operador de redirección, `>`, que indica que los resultados deben escribirse en un archivo en lugar de mostrarse." ] }, { @@ -1239,7 +1238,7 @@ "id": "3fc851f8", "metadata": {}, "source": [ - "By default, `!head` reads the first 10 lines, but it takes an optional argument that indicates the number of lines to read." + "Por defecto, `!head` lee las primeras 10 líneas, pero recibe un argumento opcional que indica el número de líneas a leer." ] }, { @@ -1255,11 +1254,11 @@ "id": "24871c78", "metadata": {}, "source": [ - "This shell command reads the first 100 lines from `pg345_cleaned.txt` and writes them to a file called `pg345_cleaned_100_lines.txt`.\n", + "Este comando de shell lee las primeras 100 líneas de `pg345_cleaned.txt` y las escribe en un archivo llamado `pg345_cleaned_100_lines.txt`.\n", "\n", - "Note: The shell commands `!head` and `!tail` are not available on all operating systems.\n", - "If they don't work for you, we can write similar functions in Python.\n", - "See the first exercise at the end of this chapter for suggestions." + "Nota: Los comandos de shell `!head` y `!tail` no están disponibles en todos los sistemas operativos.\n", + "Si no te funcionan, podemos escribir funciones similares en Python.\n", + "Consulta el primer ejercicio al final de este capítulo para ver sugerencias." ] }, { @@ -1267,43 +1266,43 @@ "id": "c842524d", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**sequence:**\n", - " An ordered collection of values where each value is identified by an integer index.\n", + "**secuencia:**\n", + " Una colección ordenada de valores donde cada valor se identifica mediante un índice entero.\n", "\n", - "**character:**\n", - "An element of a string, including letters, numbers, and symbols.\n", + "**carácter:**\n", + "Un elemento de una cadena, incluidas letras, números y símbolos.\n", "\n", - "**index:**\n", - " An integer value used to select an item in a sequence, such as a character in a string. In Python indices start from `0`.\n", + "**índice:**\n", + " Un valor entero usado para seleccionar un elemento en una secuencia, como un carácter en una cadena. En Python los índices empiezan desde `0`.\n", "\n", - "**slice:**\n", - " A part of a string specified by a range of indices.\n", + "**segmento:**\n", + " Una parte de una cadena especificada por un rango de índices.\n", "\n", - "**empty string:**\n", - "A string that contains no characters and has length `0`.\n", + "**cadena vacía:**\n", + "Una cadena que no contiene caracteres y tiene longitud `0`.\n", "\n", - "**object:**\n", - " Something a variable can refer to. An object has a type and a value.\n", + "**objeto:**\n", + " Algo a lo que una variable puede referirse. Un objeto tiene un tipo y un valor.\n", "\n", - "**immutable:**\n", - "If the elements of an object cannot be changed, the object is immutable.\n", + "**inmutable:**\n", + "Si los elementos de un objeto no se pueden cambiar, el objeto es inmutable.\n", "\n", - "**invocation:**\n", - " An expression -- or part of an expression -- that calls a method.\n", + "**invocación:**\n", + " Una expresión -- o parte de una expresión -- que llama a un método.\n", "\n", - "**regular expression:**\n", - "A sequence of characters that defines a search pattern.\n", + "**expresión regular:**\n", + "Una secuencia de caracteres que define un patrón de búsqueda.\n", "\n", - "**pattern:**\n", - "A rule that specifies the requirements a string has to meet to constitute a match.\n", + "**patrón:**\n", + "Una regla que especifica los requisitos que una cadena debe cumplir para constituir una coincidencia.\n", "\n", - "**string substitution:**\n", - "Replacement of a string, or part of a string, with another string.\n", + "**sustitución de cadenas:**\n", + "Reemplazo de una cadena, o parte de una cadena, por otra cadena.\n", "\n", - "**shell command:**\n", - "A statement in a shell language, which is a language used to interact with an operating system." + "**comando de shell:**\n", + "Una sentencia en un lenguaje de shell, que es un lenguaje usado para interactuar con un sistema operativo." ] }, { @@ -1311,7 +1310,7 @@ "id": "4306e765", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1339,24 +1338,24 @@ "id": "5be97ddc", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "In this chapter, we only scratched the surface of what regular expressions can do.\n", - "To get an idea of what's possible, ask a virtual assistant, \"What are the most common special characters used in Python regular expressions?\"\n", + "En este capítulo, apenas hemos arañado la superficie de lo que pueden hacer las expresiones regulares.\n", + "Para hacerte una idea de lo que es posible, pregunta a un asistente virtual: \"¿Cuáles son los caracteres especiales más comunes que se usan en las expresiones regulares de Python?\"\n", "\n", - "You can also ask for a pattern that matches particular kinds of strings.\n", - "For example, try asking:\n", + "También puedes pedir un patrón que coincida con tipos concretos de cadenas.\n", + "Por ejemplo, prueba a preguntar:\n", "\n", - "* Write a Python regular expression that matches a 10-digit phone number with hyphens.\n", + "* Escribe una expresión regular de Python que coincida con un número de teléfono de 10 dígitos con guiones.\n", "\n", - "* Write a Python regular expression that matches a street address with a number and a street name, followed by `ST` or `AVE`.\n", + "* Escribe una expresión regular de Python que coincida con una dirección con un número y un nombre de calle, seguida de `ST` o `AVE`.\n", "\n", - "* Write a Python regular expression that matches a full name with any common title like `Mr` or `Mrs` followed by any number of names beginning with capital letters, possibly with hyphens between some names.\n", + "* Escribe una expresión regular de Python que coincida con un nombre completo con cualquier título común como `Mr` o `Mrs`, seguido de cualquier número de nombres que empiecen con mayúsculas, posiblemente con guiones entre algunos nombres.\n", "\n", - "And if you want to see something more complicated, try asking for a regular expression that matches any legal URL.\n", + "Y si quieres ver algo más complicado, prueba a pedir una expresión regular que coincida con cualquier URL legal.\n", "\n", - "A regular expression often has the letter `r` before the quotation mark, which indicates that it is a \"raw string\".\n", - "For more information, ask a virtual assistant, \"What is a raw string in Python?\"" + "Una expresión regular a menudo tiene la letra `r` antes de la comilla, lo que indica que es una \"cadena sin procesar\".\n", + "Para más información, pregunta a un asistente virtual: \"¿Qué es una cadena sin procesar en Python?\"" ] }, { @@ -1374,13 +1373,13 @@ "id": "20dcbbb3", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "See if you can write a function that does the same thing as the shell command `!head`.\n", - "It should take as arguments the name of a file to read, the number of lines to read, and the name of the file to write the lines into.\n", - "If the third parameter is `None`, it should display the lines rather than write them to a file.\n", + "Mira si puedes escribir una función que haga lo mismo que el comando de shell `!head`.\n", + "Debe recibir como argumentos el nombre de un archivo que leer, el número de líneas que leer y el nombre del archivo donde escribir las líneas.\n", + "Si el tercer parámetro es `None`, debe mostrar las líneas en lugar de escribirlas en un archivo.\n", "\n", - "Consider asking a virtual assistant for help, but if you do, tell it not to use a `with` statement or a `try` statement." + "Considera pedir ayuda a un asistente virtual, pero si lo haces, dile que no use una sentencia `with` ni una sentencia `try`." ] }, { @@ -1398,7 +1397,7 @@ "tags": [] }, "source": [ - "You can use the following examples to test your function." + "Puedes usar los siguientes ejemplos para probar tu función." ] }, { @@ -1436,18 +1435,18 @@ "id": "adb78357", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "\"Wordle\" is an online word game where the objective is to guess a five-letter word in six or fewer attempts.\n", - "Each attempt has to be recognized as a word, not including proper nouns.\n", - "After each attempt, you get information about which of the letters you guessed appear in the target word, and which ones are in the correct position.\n", + "\"Wordle\" es un juego de palabras online donde el objetivo es adivinar una palabra de cinco letras en seis intentos o menos.\n", + "Cada intento tiene que ser reconocido como una palabra, sin incluir nombres propios.\n", + "Después de cada intento, obtienes información sobre cuáles de las letras que adivinaste aparecen en la palabra objetivo, y cuáles están en la posición correcta.\n", "\n", - "For example, suppose the target word is `MOWER` and you guess `TRIED`.\n", - "You would learn that `E` is in the word and in the correct position, `R` is in the word but not in the correct position, and `T`, `I`, and `D` are not in the word.\n", + "Por ejemplo, supongamos que la palabra objetivo es `MOWER` y que intentas `TRIED`.\n", + "Aprenderías que `E` está en la palabra y en la posición correcta, `R` está en la palabra pero no en la posición correcta, y `T`, `I` y `D` no están en la palabra.\n", "\n", - "As a different example, suppose you have guessed the words `SPADE` and `CLERK`, and you've learned that `E` is in the word, but not in either of those positions, and none of the other letters appear in the word.\n", - "Of the words in the word list, how many could be the target word?\n", - "Write a function called `check_word` that takes a five-letter word and checks whether it could be the target word, given these guesses." + "Como ejemplo distinto, supongamos que has intentado las palabras `SPADE` y `CLERK`, y has aprendido que `E` está en la palabra, pero no en ninguna de esas posiciones, y que ninguna de las otras letras aparece en la palabra.\n", + "De las palabras de la lista, ¿cuántas podrían ser la palabra objetivo?\n", + "Escribe una función llamada `check_word` que reciba una palabra de cinco letras y compruebe si podría ser la palabra objetivo, dadas estas conjeturas." ] }, { @@ -1463,7 +1462,7 @@ "id": "87fdf676", "metadata": {}, "source": [ - "You can use any of the functions from the previous chapter, like `uses_any`." + "Puedes usar cualquiera de las funciones del capítulo anterior, como `uses_any`." ] }, { @@ -1483,7 +1482,7 @@ "tags": [] }, "source": [ - "You can use the following loop to test your function." + "Puedes usar el siguiente bucle para probar tu función." ] }, { @@ -1501,9 +1500,9 @@ "id": "d009cb52", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Continuing the previous exercise, suppose you guess the work `TOTEM` and learn that the `E` is *still* not in the right place, but the `M` is. How many words are left?" + "Continuando con el ejercicio anterior, supongamos que intentas la palabra `TOTEM` y aprendes que la `E` *todavía* no está en el lugar correcto, pero la `M` sí. ¿Cuántas palabras quedan?" ] }, { @@ -1527,16 +1526,16 @@ "id": "c1d0f892", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "*The Count of Monte Cristo* is a novel by Alexandre Dumas that is considered a classic.\n", - "Nevertheless, in the introduction of an English translation of the book, the writer Umberto Eco confesses that he found the book to be \"one of the most badly written novels of all time\".\n", + "*The Count of Monte Cristo* es una novela de Alexandre Dumas que se considera un clásico.\n", + "Sin embargo, en la introducción de una traducción inglesa del libro, el escritor Umberto Eco confiesa que le pareció \"una de las novelas peor escritas de todos los tiempos\".\n", "\n", - "In particular, he says it is \"shameless in its repetition of the same adjective,\" and mentions in particular the number of times \"its characters either shudder or turn pale.\"\n", + "En particular, dice que es \"desvergonzada en su repetición del mismo adjetivo\", y menciona en particular el número de veces que \"sus personajes se estremecen o palidecen\".\n", "\n", - "To see whether his objection is valid, let's count the number number of lines that contain the word `pale` in any form, including `pale`, `pales`, `paled`, and `paleness`, as well as the related word `pallor`. \n", - "Use a single regular expression that matches any of these words.\n", - "As an additional challenge, make sure that it doesn't match any other words, like `impale` -- you might want to ask a virtual assistant for help." + "Para ver si su objeción es válida, contemos el número de líneas que contienen la palabra `pale` en cualquier forma, incluidas `pale`, `pales`, `paled` y `paleness`, así como la palabra relacionada `pallor`.\n", + "Usa una sola expresión regular que coincida con cualquiera de estas palabras.\n", + "Como desafío adicional, asegúrate de que no coincida con otras palabras, como `impale` -- quizá quieras pedir ayuda a un asistente virtual." ] }, { @@ -1546,7 +1545,7 @@ "tags": [] }, "source": [ - "The following cell downloads the book from Project Gutenberg ." + "La siguiente celda descarga el libro de Project Gutenberg ." ] }, { @@ -1566,7 +1565,7 @@ "tags": [] }, "source": [ - "The following cell runs a function that reads the file from Project Gutenberg and writes a file that contains only the text of the book, not the added information about the book." + "La siguiente celda ejecuta una función que lee el archivo de Project Gutenberg y escribe un archivo que contiene solo el texto del libro, no la información añadida sobre el libro." ] }, { @@ -1610,7 +1609,7 @@ "tags": [] }, "source": [ - "By this count, these words appear on `223` lines of the book, so Mr. Eco might have a point." + "Según este recuento, estas palabras aparecen en `223` líneas del libro, así que el señor Eco quizá tenga razón." ] }, { @@ -1624,9 +1623,11 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/blank/chap09.ipynb b/blank/chap09.ipynb index c4cae84..f460356 100644 --- a/blank/chap09.ipynb +++ b/blank/chap09.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -25,12 +25,12 @@ "id": "3c25ca7e", "metadata": {}, "source": [ - "# Lists\n", + "# Listas\n", "\n", - "This chapter presents one of Python's most useful built-in types, lists.\n", - "You will also learn more about objects and what can happen when multiple variables refer to the same object.\n", + "Este capítulo presenta uno de los tipos integrados más útiles de Python: las listas.\n", + "También aprenderás más sobre objetos y lo que puede ocurrir cuando varias variables se refieren al mismo objeto.\n", "\n", - "In the exercises at the end of the chapter, we'll make a word list and use it to search for special words like palindromes and anagrams." + "En los ejercicios al final del capítulo, construiremos una lista de palabras y la usaremos para buscar palabras especiales como palíndromos y anagramas." ] }, { @@ -38,14 +38,14 @@ "id": "4d32b3e2", "metadata": {}, "source": [ - "## A list is a sequence\n", + "## Una lista es una secuencia\n", "\n", - "Like a string, a **list** is a sequence of values. In a string, the\n", - "values are characters; in a list, they can be any type.\n", - "The values in a list are called **elements**.\n", + "Como un string, una **lista** es una secuencia de valores. En un string, los\n", + "valores son caracteres; en una lista, pueden ser de cualquier tipo.\n", + "Los valores en una lista se llaman **elementos**.\n", "\n", - "There are several ways to create a new list; the simplest is to enclose the elements in square brackets (`[` and `]`).\n", - "For example, here is a list of two integers. " + "Hay varias formas de crear una nueva lista; la más simple es encerrar los elementos entre corchetes (`[` y `]`).\n", + "Por ejemplo, aquí tienes una lista de dos enteros." ] }, { @@ -61,7 +61,7 @@ "id": "b5d6112c", "metadata": {}, "source": [ - "And here's a list of three strings." + "Y aquí tienes una lista de tres strings." ] }, { @@ -77,8 +77,8 @@ "id": "dda58c67", "metadata": {}, "source": [ - "The elements of a list don't have to be the same type.\n", - "The following list contains a string, a float, an integer, and even another list." + "Los elementos de una lista no tienen que ser del mismo tipo.\n", + "La siguiente lista contiene un string, un float, un entero e incluso otra lista." ] }, { @@ -94,10 +94,10 @@ "id": "147fa217", "metadata": {}, "source": [ - "A list within another list is **nested**.\n", + "Una lista dentro de otra lista está **anidada**.\n", "\n", - "A list that contains no elements is called an empty list; you can create\n", - "one with empty brackets, `[]`." + "Una lista que no contiene elementos se llama lista vacía; puedes crear\n", + "una con corchetes vacíos, `[]`." ] }, { @@ -113,7 +113,7 @@ "id": "f95381bc", "metadata": {}, "source": [ - "The `len` function returns the length of a list." + "La función `len` devuelve la longitud de una lista." ] }, { @@ -129,7 +129,7 @@ "id": "371403a3", "metadata": {}, "source": [ - "The length of an empty list is `0`." + "La longitud de una lista vacía es `0`." ] }, { @@ -147,7 +147,7 @@ "id": "d3589a5d", "metadata": {}, "source": [ - "The following figure shows the state diagram for `cheeses`, `numbers` and `empty`." + "La siguiente figura muestra el diagrama de estado de `cheeses`, `numbers` y `empty`." ] }, { @@ -175,7 +175,7 @@ "id": "503f25d8", "metadata": {}, "source": [ - "Lists are represented by boxes with the word \"list\" outside and the numbered elements of the list inside." + "Las listas se representan con cajas con la palabra \"lista\" fuera y los elementos numerados de la lista dentro." ] }, { @@ -183,10 +183,10 @@ "id": "e0b8ff01", "metadata": {}, "source": [ - "## Lists are mutable\n", + "## Las listas son mutables\n", "\n", - "To read an element of a list, we can use the bracket operator.\n", - "The index of the first element is `0`." + "Para leer un elemento de una lista, podemos usar el operador de corchetes.\n", + "El índice del primer elemento es `0`." ] }, { @@ -202,9 +202,9 @@ "id": "9747e951", "metadata": {}, "source": [ - "Unlike strings, lists are mutable. When the bracket operator appears on\n", - "the left side of an assignment, it identifies the element of the list\n", - "that will be assigned." + "A diferencia de los strings, las listas son mutables. Cuando el operador de corchetes aparece en\n", + "el lado izquierdo de una asignación, identifica el elemento de la lista\n", + "al que se asignará el valor." ] }, { @@ -220,19 +220,19 @@ "id": "5097a517", "metadata": {}, "source": [ - "The second element of `numbers`, which used to be `123`, is now `17`.\n", + "El segundo elemento de `numbers`, que antes era `123`, ahora es `17`.\n", "\n", - "List indices work the same way as string indices:\n", + "Los índices de lista funcionan igual que los índices de string:\n", "\n", - "- Any integer expression can be used as an index.\n", + "- Cualquier expresión entera puede usarse como índice.\n", "\n", - "- If you try to read or write an element that does not exist, you get\n", - " an `IndexError`.\n", + "- Si intentas leer o escribir un elemento que no existe, obtienes\n", + " un `IndexError`.\n", "\n", - "- If an index has a negative value, it counts backward from the end of\n", - " the list.\n", + "- Si un índice tiene un valor negativo, cuenta hacia atrás desde el final de\n", + " la lista.\n", "\n", - "The `in` operator works on lists -- it checks whether a given element appears anywhere in the list." + "El operador `in` funciona con listas: comprueba si un elemento dado aparece en algún lugar de la lista." ] }, { @@ -256,7 +256,7 @@ "id": "89d01ebf", "metadata": {}, "source": [ - "Although a list can contain another list, the nested list still counts as a single element -- so in the following list, there are only four elements." + "Aunque una lista puede contener otra lista, la lista anidada sigue contando como un solo elemento; por eso, en la siguiente lista, solo hay cuatro elementos." ] }, { @@ -272,7 +272,7 @@ "id": "4e0ea41d", "metadata": {}, "source": [ - "And `10` is not considered to be an element of `t` because it is an element of a nested list, not `t`." + "Y `10` no se considera un elemento de `t` porque es un elemento de una lista anidada, no de `t`." ] }, { @@ -288,10 +288,10 @@ "id": "1ee7a4d9", "metadata": {}, "source": [ - "## List slices\n", + "## Porciones de lista\n", "\n", - "The slice operator works on lists the same way it works on strings.\n", - "The following example selects the second and third elements from a list of four letters." + "El operador de porción funciona con listas igual que con strings.\n", + "El siguiente ejemplo selecciona el segundo y el tercer elemento de una lista de cuatro letras." ] }, { @@ -307,7 +307,7 @@ "id": "bc59d952", "metadata": {}, "source": [ - "If you omit the first index, the slice starts at the beginning. " + "Si omites el primer índice, la porción empieza al principio." ] }, { @@ -323,7 +323,7 @@ "id": "1aaaae86", "metadata": {}, "source": [ - "If you omit the second, the slice goes to the end. " + "Si omites el segundo, la porción llega hasta el final." ] }, { @@ -339,7 +339,7 @@ "id": "67ad02e8", "metadata": {}, "source": [ - "So if you omit both, the slice is a copy of the whole list." + "Así que, si omites ambos, la porción es una copia de toda la lista." ] }, { @@ -355,7 +355,7 @@ "id": "9232c1ef", "metadata": {}, "source": [ - "Another way to copy a list is to use the `list` function." + "Otra forma de copiar una lista es usar la función `list`." ] }, { @@ -371,7 +371,7 @@ "id": "50e4b182", "metadata": {}, "source": [ - "Because `list` is the name of a built-in function, you should avoid using it as a variable name.\n" + "Como `list` es el nombre de una función integrada, deberías evitar usarlo como nombre de variable.\n" ] }, { @@ -379,9 +379,9 @@ "id": "1b057c0c", "metadata": {}, "source": [ - "## List operations\n", + "## Operaciones con listas\n", "\n", - "The `+` operator concatenates lists." + "El operador `+` concatena listas." ] }, { @@ -397,7 +397,7 @@ "id": "474a5c40", "metadata": {}, "source": [ - "The `*` operator repeats a list a given number of times." + "El operador `*` repite una lista un número determinado de veces." ] }, { @@ -413,7 +413,7 @@ "id": "5b33bc51", "metadata": {}, "source": [ - "No other mathematical operators work with lists, but the built-in function `sum` adds up the elements." + "Ningún otro operador matemático funciona con listas, pero la función integrada `sum` suma los elementos." ] }, { @@ -429,7 +429,7 @@ "id": "f216a14d", "metadata": {}, "source": [ - "And `min` and `max` find the smallest and largest elements." + "Y `min` y `max` encuentran el elemento más pequeño y el más grande." ] }, { @@ -453,10 +453,10 @@ "id": "533a2009", "metadata": {}, "source": [ - "## List methods\n", + "## Métodos de lista\n", "\n", - "Python provides methods that operate on lists. For example, `append`\n", - "adds a new element to the end of a list:" + "Python proporciona métodos que operan sobre listas. Por ejemplo, `append`\n", + "añade un nuevo elemento al final de una lista:" ] }, { @@ -472,7 +472,7 @@ "id": "ccc57f77", "metadata": {}, "source": [ - "`extend` takes a list as an argument and appends all of the elements:" + "`extend` toma una lista como argumento y añade todos sus elementos:" ] }, { @@ -488,8 +488,8 @@ "id": "0f39d9f6", "metadata": {}, "source": [ - "There are two methods that remove elements from a list.\n", - "If you know the index of the element you want, you can use `pop`." + "Hay dos métodos que eliminan elementos de una lista.\n", + "Si conoces el índice del elemento que quieres, puedes usar `pop`." ] }, { @@ -505,8 +505,8 @@ "id": "6729415a", "metadata": {}, "source": [ - "The return value is the element that was removed.\n", - "And we can confirm that the list has been modified." + "El valor de retorno es el elemento que se eliminó.\n", + "Y podemos confirmar que la lista se ha modificado." ] }, { @@ -522,7 +522,7 @@ "id": "1e97ee7d", "metadata": {}, "source": [ - "If you know the element you want to remove (but not the index), you can use `remove`:" + "Si conoces el elemento que quieres eliminar (pero no el índice), puedes usar `remove`:" ] }, { @@ -538,8 +538,8 @@ "id": "60e710fe", "metadata": {}, "source": [ - "The return value from `remove` is `None`.\n", - "But we can confirm that the list has been modified." + "El valor de retorno de `remove` es `None`.\n", + "Pero podemos confirmar que la lista se ha modificado." ] }, { @@ -555,7 +555,7 @@ "id": "2a9448a8", "metadata": {}, "source": [ - "If the element you ask for is not in the list, that's a ValueError." + "Si el elemento que pides no está en la lista, eso es un ValueError." ] }, { @@ -573,11 +573,11 @@ "id": "18305f96", "metadata": {}, "source": [ - "## Lists and strings\n", + "## Listas y strings\n", "\n", - "A string is a sequence of characters and a list is a sequence of values,\n", - "but a list of characters is not the same as a string. \n", - "To convert from a string to a list of characters, you can use the `list` function." + "Un string es una secuencia de caracteres y una lista es una secuencia de valores,\n", + "pero una lista de caracteres no es lo mismo que un string.\n", + "Para convertir un string en una lista de caracteres, puedes usar la función `list`." ] }, { @@ -593,8 +593,8 @@ "id": "0291ef69", "metadata": {}, "source": [ - "The `list` function breaks a string into individual letters.\n", - "If you want to break a string into words, you can use the `split` method:" + "La función `list` divide un string en letras individuales.\n", + "Si quieres dividir un string en palabras, puedes usar el método `split`:" ] }, { @@ -610,7 +610,7 @@ "id": "0e16909d", "metadata": {}, "source": [ - "An optional argument called a **delimiter** specifies which characters to use as word boundaries. The following example uses a hyphen as a delimiter." + "Un argumento opcional llamado **delimitador** especifica qué caracteres se usan como límites entre palabras. El siguiente ejemplo usa un guion como delimitador." ] }, { @@ -626,8 +626,8 @@ "id": "7c61f916", "metadata": {}, "source": [ - "If you have a list of strings, you can concatenate them into a single string using `join`.\n", - "`join` is a string method, so you have to invoke it on the delimiter and pass the list as an argument." + "Si tienes una lista de strings, puedes concatenarlos en un solo string usando `join`.\n", + "`join` es un método de string, así que tienes que invocarlo sobre el delimitador y pasar la lista como argumento." ] }, { @@ -643,9 +643,9 @@ "id": "bedd842b", "metadata": {}, "source": [ - "In this case the delimiter is a space character, so `join` puts a space\n", - "between words.\n", - "To join strings without spaces, you can use the empty string, `''`, as a delimiter." + "En este caso el delimitador es un carácter de espacio, así que `join` pone un espacio\n", + "entre las palabras.\n", + "Para unir strings sin espacios, puedes usar el string vacío, `''`, como delimitador." ] }, { @@ -653,9 +653,9 @@ "id": "181215ce", "metadata": {}, "source": [ - "## Looping through a list\n", + "## Recorrer una lista con un bucle\n", "\n", - "You can use a `for` statement to loop through the elements of a list." + "Puedes usar una sentencia `for` para recorrer los elementos de una lista." ] }, { @@ -671,7 +671,7 @@ "id": "c0e53a09", "metadata": {}, "source": [ - "For example, after using `split` to make a list of words, we can use `for` to loop through them." + "Por ejemplo, después de usar `split` para crear una lista de palabras, podemos usar `for` para recorrerlas." ] }, { @@ -687,7 +687,7 @@ "id": "0857b55b", "metadata": {}, "source": [ - "A `for` loop over an empty list never runs the indented statements." + "Un bucle `for` sobre una lista vacía nunca ejecuta las sentencias indentadas." ] }, { @@ -703,9 +703,9 @@ "id": "6e5f55c9", "metadata": {}, "source": [ - "## Sorting lists\n", + "## Ordenar listas\n", "\n", - "Python provides a built-in function called `sorted` that sorts the elements of a list." + "Python proporciona una función integrada llamada `sorted` que ordena los elementos de una lista." ] }, { @@ -721,7 +721,7 @@ "id": "44e028cf", "metadata": {}, "source": [ - "The original list is unchanged." + "La lista original no cambia." ] }, { @@ -737,7 +737,7 @@ "id": "530146af", "metadata": {}, "source": [ - "`sorted` works with any kind of sequence, not just lists. So we can sort the letters in a string like this." + "`sorted` funciona con cualquier tipo de secuencia, no solo con listas. Así que podemos ordenar las letras de un string así." ] }, { @@ -753,8 +753,8 @@ "id": "f90bd9ea", "metadata": {}, "source": [ - "The result it a list.\n", - "To convert the list to a string, we can use `join`." + "El resultado es una lista.\n", + "Para convertir la lista en un string, podemos usar `join`." ] }, { @@ -770,7 +770,7 @@ "id": "a57084e2", "metadata": {}, "source": [ - "With an empty string as the delimiter, the elements of the list are joined with nothing between them." + "Con un string vacío como delimitador, los elementos de la lista se unen sin nada entre ellos." ] }, { @@ -778,9 +778,9 @@ "id": "ce98b3d5", "metadata": {}, "source": [ - "## Objects and values\n", + "## Objetos y valores\n", "\n", - "If we run these assignment statements:" + "Si ejecutamos estas sentencias de asignación:" ] }, { @@ -796,8 +796,8 @@ "id": "33d020aa", "metadata": {}, "source": [ - "We know that `a` and `b` both refer to a string, but we don't know whether they refer to the *same* string. \n", - "There are two possible states, shown in the following figure." + "Sabemos que `a` y `b` se refieren ambos a un string, pero no sabemos si se refieren al *mismo* string.\n", + "Hay dos estados posibles, mostrados en la siguiente figura." ] }, { @@ -825,9 +825,9 @@ "id": "2f0b0431", "metadata": {}, "source": [ - "In the diagram on the left, `a` and `b` refer to two different objects that have the\n", - "same value. In the diagram on the right, they refer to the same object.\n", - "To check whether two variables refer to the same object, you can use the `is` operator." + "En el diagrama de la izquierda, `a` y `b` se refieren a dos objetos diferentes que tienen el\n", + "mismo valor. En el diagrama de la derecha, se refieren al mismo objeto.\n", + "Para comprobar si dos variables se refieren al mismo objeto, puedes usar el operador `is`." ] }, { @@ -843,9 +843,9 @@ "id": "d1eb0e36", "metadata": {}, "source": [ - "In this example, Python only created one string object, and both `a`\n", - "and `b` refer to it.\n", - "But when you create two lists, you get two objects." + "En este ejemplo, Python solo creó un objeto string, y tanto `a`\n", + "como `b` se refieren a él.\n", + "Pero cuando creas dos listas, obtienes dos objetos." ] }, { @@ -861,7 +861,7 @@ "id": "a8d4c3d4", "metadata": {}, "source": [ - "So the state diagram looks like this." + "Así que el diagrama de estado se ve así." ] }, { @@ -889,8 +889,8 @@ "id": "cc115a9f", "metadata": {}, "source": [ - "In this case we would say that the two lists are **equivalent**, because they have the same elements, but not **identical**, because they are not the same object. \n", - "If two objects are identical, they are also equivalent, but if they are equivalent, they are not necessarily identical." + "En este caso diríamos que las dos listas son **equivalentes**, porque tienen los mismos elementos, pero no **idénticos**, porque no son el mismo objeto.\n", + "Si dos objetos son idénticos, también son equivalentes, pero si son equivalentes, no necesariamente son idénticos." ] }, { @@ -900,7 +900,7 @@ "source": [ "## Aliasing\n", "\n", - "If `a` refers to an object and you assign `b = a`, then both variables refer to the same object." + "Si `a` se refiere a un objeto y asignas `b = a`, entonces ambas variables se refieren al mismo objeto." ] }, { @@ -916,7 +916,7 @@ "id": "f6ab3262", "metadata": {}, "source": [ - "So the state diagram looks like this." + "Así que el diagrama de estado se ve así." ] }, { @@ -944,12 +944,12 @@ "id": "c676fde9", "metadata": {}, "source": [ - "The association of a variable with an object is called a **reference**.\n", - "In this example, there are two references to the same object.\n", + "La asociación de una variable con un objeto se llama **referencia**.\n", + "En este ejemplo, hay dos referencias al mismo objeto.\n", "\n", - "An object with more than one reference has more than one name, so we say the object is **aliased**.\n", - "If the aliased object is mutable, changes made with one name affect the other.\n", - "In this example, if we change the object `b` refers to, we are also changing the object `a` refers to." + "Un objeto con más de una referencia tiene más de un nombre, así que decimos que el objeto está **aliased**.\n", + "Si el aliased objeto es mutable, los cambios hechos con un nombre afectan al otro.\n", + "En este ejemplo, si cambiamos el objeto al que se refiere `b`, también estamos cambiando el objeto al que se refiere `a`." ] }, { @@ -965,12 +965,12 @@ "id": "e3ef0537", "metadata": {}, "source": [ - "So we would say that `a` \"sees\" this change.\n", - "Although this behavior can be useful, it is error-prone.\n", - "In general, it is safer to avoid aliasing when you are working with mutable objects.\n", + "Así que diríamos que `a` \"ve\" este cambio.\n", + "Aunque este comportamiento puede ser útil, es propenso a errores.\n", + "En general, es más seguro evitar el aliasing cuando trabajas con objetos mutables.\n", "\n", - "For immutable objects like strings, aliasing is not as much of a problem.\n", - "In this example:" + "Para objetos inmutables como strings, el aliasing no supone tanto problema.\n", + "En este ejemplo:" ] }, { @@ -986,8 +986,8 @@ "id": "952bbf60", "metadata": {}, "source": [ - "It almost never makes a difference whether `a` and `b` refer to the same\n", - "string or not." + "Casi nunca importa si `a` y `b` se refieren al mismo\n", + "string o no." ] }, { @@ -995,11 +995,11 @@ "id": "35045bef", "metadata": {}, "source": [ - "## List arguments\n", + "## Listas como argumentos\n", "\n", - "When you pass a list to a function, the function gets a reference to the\n", - "list. If the function modifies the list, the caller sees the change. For\n", - "example, `pop_first` uses the list method `pop` to remove the first element from a list." + "Cuando pasas una lista a una función, la función recibe una referencia a la\n", + "lista. Si la función modifica la lista, el código que llama ve el cambio. Por\n", + "ejemplo, `pop_first` usa el método de lista `pop` para eliminar el primer elemento de una lista." ] }, { @@ -1015,7 +1015,7 @@ "id": "4953b0f9", "metadata": {}, "source": [ - "We can use it like this." + "Podemos usarla así." ] }, { @@ -1031,7 +1031,7 @@ "id": "ef5d3c1e", "metadata": {}, "source": [ - "The return value is the first element, which has been removed from the list -- as we can see by displaying the modified list." + "El valor de retorno es el primer elemento, que se ha eliminado de la lista, como podemos ver al mostrar la lista modificada." ] }, { @@ -1047,7 +1047,7 @@ "id": "e5288e08", "metadata": {}, "source": [ - "In this example, the parameter `lst` and the variable `letters` are aliases for the same object, so the state diagram looks like this:" + "En este ejemplo, el parameter `lst` y la variable `letters` son aliases del mismo objeto, así que el diagrama de estado se ve así:" ] }, { @@ -1075,8 +1075,8 @@ "id": "c1a093d2", "metadata": {}, "source": [ - "Passing a reference to an object as an argument to a function creates a form of aliasing.\n", - "If the function modifies the object, those changes persist after the function is done." + "Pasar una referencia a un objeto como argumento a una función crea una forma de aliasing.\n", + "Si la función modifica el objeto, esos cambios persisten después de que la función termine." ] }, { @@ -1086,12 +1086,12 @@ "tags": [] }, "source": [ - "## Making a word list\n", + "## Crear una lista de palabras\n", "\n", - "In the previous chapter, we read the file `words.txt` and searched for words with certain properties, like using the letter `e`.\n", - "But we read the entire file many times, which is not efficient.\n", - "It is better to read the file once and put the words in a list.\n", - "The following loop shows how." + "En el capítulo anterior, leímos el archivo `words.txt` y buscamos palabras con ciertas propiedades, como usar la letra `e`.\n", + "Pero leímos el archivo completo muchas veces, lo cual no es eficiente.\n", + "Es mejor leer el archivo una vez y poner las palabras en una lista.\n", + "El siguiente bucle muestra cómo hacerlo." ] }, { @@ -1117,11 +1117,11 @@ "id": "44450ffa", "metadata": {}, "source": [ - "Before the loop, `word_list` is initialized with an empty list.\n", - "Each time through the loop, the `append` method adds a word to the end.\n", - "When the loop is done, there are more than 113,000 words in the list.\n", + "Antes del bucle, `word_list` se inicializa con una lista vacía.\n", + "Cada vez que pasa por el bucle, el método `append` añade una palabra al final.\n", + "Cuando termina el bucle, hay más de 113 000 palabras en la lista.\n", "\n", - "Another way to do the same thing is to use `read` to read the entire file into a string." + "Otra forma de hacer lo mismo es usar `read` para leer todo el archivo en un string." ] }, { @@ -1137,8 +1137,8 @@ "id": "65718c7f", "metadata": {}, "source": [ - "The result is a single string with more than a million characters.\n", - "We can use the `split` method to split it into a list of words." + "El resultado es un único string con más de un millón de caracteres.\n", + "Podemos usar el método `split` para dividirlo en una lista de palabras." ] }, { @@ -1154,8 +1154,8 @@ "id": "1b5b25a3", "metadata": {}, "source": [ - "Now, to check whether a string appears in the list, we can use the `in` operator.\n", - "For example, `'demotic'` is in the list." + "Ahora, para comprobar si un string aparece en la lista, podemos usar el operador `in`.\n", + "Por ejemplo, `'demotic'` está en la lista." ] }, { @@ -1171,7 +1171,7 @@ "id": "9df6674d", "metadata": {}, "source": [ - "But `'contrafibularities'` is not." + "Pero `'contrafibularities'` no está." ] }, { @@ -1187,7 +1187,7 @@ "id": "243c25b6", "metadata": {}, "source": [ - "And I have to say, I'm anaspeptic about it." + "Y tengo que decir que eso me deja anaspeptic." ] }, { @@ -1195,12 +1195,12 @@ "id": "ce9ffd79", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "Note that most list methods modify the argument and return `None`.\n", - "This is the opposite of the string methods, which return a new string and leave the original alone.\n", + "Ten en cuenta que la mayoría de métodos de lista modifican el argumento y devuelven `None`.\n", + "Esto es lo contrario de los métodos de string, que devuelven un nuevo string y dejan el original intacto.\n", "\n", - "If you are used to writing string code like this:" + "Si estás acostumbrado a escribir código con strings así:" ] }, { @@ -1216,7 +1216,7 @@ "id": "d2117582", "metadata": {}, "source": [ - "It is tempting to write list code like this:" + "Es tentador escribir código con listas así:" ] }, { @@ -1232,7 +1232,7 @@ "id": "991c439d", "metadata": {}, "source": [ - "`remove` modifies the list and returns `None`, so next operation you perform with `t` is likely to fail." + "`remove` modifica la lista y devuelve `None`, así que la siguiente operación que realices con `t` probablemente fallará." ] }, { @@ -1250,11 +1250,11 @@ "id": "c500e2d8", "metadata": {}, "source": [ - "This error message takes some explaining.\n", - "An **attribute** of an object is a variable or method associated with it.\n", - "In this case, the value of `t` is `None`, which is a `NoneType` object, which does not have a attribute named `remove`, so the result is an `AttributeError`.\n", + "Este mensaje de error requiere algo de explicación.\n", + "Un **atributo** de un objeto es una variable o método asociado con él.\n", + "En este caso, el valor de `t` es `None`, que es un objeto `NoneType`, que no tiene un atributo llamado `remove`, así que el resultado es un `AttributeError`.\n", "\n", - "If you see an error message like this, you should look backward through the program and see if you might have called a list method incorrectly." + "Si ves un mensaje de error como este, deberías mirar hacia atrás en el programa y ver si podrías haber llamado incorrectamente a un método de lista." ] }, { @@ -1262,34 +1262,34 @@ "id": "f90db780", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**list:**\n", - " An object that contains a sequence of values.\n", + "**lista:**\n", + " Un objeto que contiene una secuencia de valores.\n", "\n", - "**element:**\n", - " One of the values in a list or other sequence.\n", + "**elemento:**\n", + " Uno de los valores de una lista u otra secuencia.\n", "\n", - "**nested list:**\n", - "A list that is an element of another list.\n", + "**lista anidada:**\n", + "Una lista que es un elemento de otra lista.\n", "\n", - "**delimiter:**\n", - " A character or string used to indicate where a string should be split.\n", + "**delimitador:**\n", + " Un carácter o string usado para indicar dónde debe dividirse un string.\n", "\n", - "**equivalent:**\n", - " Having the same value.\n", + "**equivalentes:**\n", + " Tener el mismo valor.\n", "\n", - "**identical:**\n", - " Being the same object (which implies equivalence).\n", + "**idénticos:**\n", + " Ser el mismo objeto (lo que implica equivalencia).\n", "\n", - "**reference:**\n", - " The association between a variable and its value.\n", + "**referencia:**\n", + " La asociación entre una variable y su valor.\n", "\n", "**aliased:**\n", - "If there is more than one variable that refers to an object, the object is aliased.\n", + "Si hay más de una variable que se refiere a un objeto, el objeto está aliased.\n", "\n", - "**attribute:**\n", - " One of the named values associated with an object." + "**atributo:**\n", + " Uno de los valores con nombre asociados con un objeto." ] }, { @@ -1297,7 +1297,7 @@ "id": "e67864e5", "metadata": {}, "source": [ - "## Exercises\n", + "## Ejercicios\n", "\n" ] }, @@ -1316,24 +1316,24 @@ "id": "ae9c42da", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "In this chapter, I used the words \"contrafibularities\" and \"anaspeptic\", but they are not actually English words.\n", - "They were used in the British television show *Black Adder*, Season 3, Episode 2, \"Ink and Incapability\".\n", + "En este capítulo, usé las palabras \"contrafibularities\" y \"anaspeptic\", pero en realidad no son palabras en inglés.\n", + "Se usaron en la serie de televisión británica *Black Adder*, temporada 3, episodio 2, \"Ink and Incapability\".\n", "\n", - "However, when I asked ChatGPT 3.5 (August 3, 2023 version) where those words came from, it initially claimed they are from Monty Python, and later claimed they are from the Tom Stoppard play *Rosencrantz and Guildenstern Are Dead*.\n", + "Sin embargo, cuando pregunté a ChatGPT 3.5 (versión del 3 de agosto de 2023) de dónde venían esas palabras, al principio afirmó que eran de Monty Python, y después afirmó que eran de la obra de Tom Stoppard *Rosencrantz and Guildenstern Are Dead*.\n", "\n", - "If you ask now, you might get different results.\n", - "But this example is a reminder that virtual assistants are not always accurate, so you should check whether the results are correct.\n", - "As you gain experience, you will get a sense of which questions virtual assistants can answer reliably.\n", - "In this example, a conventional web search can identify the source of these words quickly.\n", + "Si preguntas ahora, podrías obtener resultados diferentes.\n", + "Pero este ejemplo es un recordatorio de que los asistentes virtuales no siempre son precisos, así que deberías comprobar si los resultados son correctos.\n", + "A medida que ganes experiencia, desarrollarás intuición sobre qué preguntas pueden responder de forma fiable los asistentes virtuales.\n", + "En este ejemplo, una búsqueda web convencional puede identificar rápidamente el origen de estas palabras.\n", "\n", - "If you get stuck on any of the exercises in this chapter, consider asking a virtual assistant for help.\n", - "If you get a result that uses features we haven't learned yet, you can assign the VA a \"role\".\n", + "Si te quedas atascado en alguno de los ejercicios de este capítulo, considera pedir ayuda a un asistente virtual.\n", + "Si obtienes un resultado que usa características que todavía no hemos aprendido, puedes asignar un \"role\" al asistente virtual.\n", "\n", - "For example, before you ask a question try typing \"Role: Basic Python Programming Instructor\".\n", - "After that, the responses you get should use only basic features.\n", - "If you still see features we you haven't learned, you can follow up with \"Can you write that using only basic Python features?\"" + "Por ejemplo, antes de hacer una pregunta prueba a escribir \"Role: Basic Python Programming Instructor\".\n", + "Después de eso, las respuestas que obtengas deberían usar solo características básicas.\n", + "Si todavía ves características que no hemos aprendido, puedes continuar con \"Can you write that using only basic Python features?\"" ] }, { @@ -1341,15 +1341,15 @@ "id": "31d5b304", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Two words are anagrams if you can rearrange the letters from one to spell the other.\n", - "For example, `tops` is an anagram of `stop`.\n", + "Dos palabras son anagramas si puedes reordenar las letras de una para escribir la otra.\n", + "Por ejemplo, `tops` es un anagrama de `stop`.\n", "\n", - "One way to check whether two words are anagrams is to sort the letters in both words.\n", - "If the lists of sorted letters are the same, the words are anagrams.\n", + "Una forma de comprobar si dos palabras son anagramas es ordenar las letras de ambas palabras.\n", + "Si las listas de letras ordenadas son iguales, las palabras son anagramas.\n", "\n", - "Write a function called `is_anagram` that takes two strings and returns `True` if they are anagrams." + "Escribe una función llamada `is_anagram` que tome dos strings y devuelva `True` si son anagramas." ] }, { @@ -1359,7 +1359,7 @@ "tags": [] }, "source": [ - "To get you started, here's an outline of the function with doctests." + "Para empezar, aquí tienes un esquema de la función con doctests." ] }, { @@ -1387,7 +1387,7 @@ "tags": [] }, "source": [ - "You can use `doctest` to test your function." + "Puedes usar `doctest` para probar tu función." ] }, { @@ -1405,7 +1405,7 @@ "id": "8501f3ba", "metadata": {}, "source": [ - "Using your function and the word list, find all the anagrams of `takes`." + "Usando tu función y la lista de palabras, encuentra todos los anagramas de `takes`." ] }, { @@ -1421,9 +1421,9 @@ "id": "7f279f2f", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Python provides a built-in function called `reversed` that takes as an argument a sequence of elements -- like a list or string -- and returns a `reversed` object that contains the elements in reverse order." + "Python proporciona una función integrada llamada `reversed` que toma como argumento una secuencia de elementos, como una lista o un string, y devuelve un objeto `reversed` que contiene los elementos en orden inverso." ] }, { @@ -1439,7 +1439,7 @@ "id": "0f95c76f", "metadata": {}, "source": [ - "If you want the reversed elements in a list, you can use the `list` function." + "Si quieres los elementos invertidos en una lista, puedes usar la función `list`." ] }, { @@ -1455,7 +1455,7 @@ "id": "8fc79a2f", "metadata": {}, "source": [ - "Of if you want them in a string, you can use the `join` method." + "O si los quieres en un string, puedes usar el método `join`." ] }, { @@ -1471,7 +1471,7 @@ "id": "ec4ce196", "metadata": {}, "source": [ - "So we can write a function that reverses a word like this." + "Así podemos escribir una función que invierte una palabra así." ] }, { @@ -1487,8 +1487,8 @@ "id": "21550b5f", "metadata": {}, "source": [ - "A palindrome is a word that is spelled the same backward and forward, like \"noon\" and \"rotator\".\n", - "Write a function called `is_palindrome` that takes a string argument and returns `True` if it is a palindrome and `False` otherwise." + "Un palíndromo es una palabra que se escribe igual hacia atrás y hacia adelante, como \"noon\" y \"rotator\".\n", + "Escribe una función llamada `is_palindrome` que tome un string argumento y devuelva `True` si es un palíndromo y `False` en caso contrario." ] }, { @@ -1498,7 +1498,7 @@ "tags": [] }, "source": [ - "Here's an outline of the function with doctests you can use to check your function." + "Aquí tienes un esquema de la función con doctests que puedes usar para comprobar tu función." ] }, { @@ -1534,7 +1534,7 @@ "id": "ad857abf", "metadata": {}, "source": [ - "You can use the following loop to find all of the palindromes in the word list with at least 7 letters." + "Puedes usar el siguiente bucle para encontrar todos los palíndromos en la lista de palabras con al menos 7 letras." ] }, { @@ -1552,13 +1552,13 @@ "id": "11386f70", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `reverse_sentence` that takes as an argument a string that contains any number of words separated by spaces.\n", - "It should return a new string that contains the same words in reverse order.\n", - "For example, if the argument is \"Reverse this sentence\", the result should be \"Sentence this reverse\".\n", + "Escribe una función llamada `reverse_sentence` que tome como argumento un string que contiene cualquier número de palabras separadas por espacios.\n", + "Debe devolver un nuevo string que contiene las mismas palabras en orden inverso.\n", + "Por ejemplo, si el argumento es \"Reverse this sentence\", el resultado debería ser \"Sentence this reverse\".\n", "\n", - "Hint: You can use the `capitalize` methods to capitalize the first word and convert the other words to lowercase. " + "Pista: Puedes usar los métodos `capitalize` para poner en mayúscula la primera palabra y convertir las demás palabras a minúsculas." ] }, { @@ -1568,7 +1568,7 @@ "tags": [] }, "source": [ - "To get you started, here's an outline of the function with doctests." + "Para empezar, aquí tienes un esquema de la función con doctests." ] }, { @@ -1604,10 +1604,10 @@ "id": "fb5f24b1", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `total_length` that takes a list of strings and returns the total length of the strings.\n", - "The total length of the words in `word_list` should be $902{,}728$." + "Escribe una función llamada `total_length` que tome una lista de strings y devuelva la longitud total de los strings.\n", + "La longitud total de las palabras en `word_list` debería ser $902{,}728$." ] }, { @@ -1645,7 +1645,9 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", + "\n", + "Código license: [MIT License](https://mit-license.org/)\n", "\n", "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] diff --git a/blank/chap10.ipynb b/blank/chap10.ipynb index 56d77c9..52d9baa 100644 --- a/blank/chap10.ipynb +++ b/blank/chap10.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -25,13 +25,13 @@ "id": "737e79eb", "metadata": {}, "source": [ - "# Dictionaries\n", + "# Diccionarios\n", "\n", - "This chapter presents a built-in type called a dictionary.\n", - "It is one of Python's best features -- and the building block of many efficient and elegant algorithms.\n", + "Este capítulo presenta un tipo integrado llamado diccionario.\n", + "Es una de las mejores características de Python, y el bloque de construcción de muchos algoritmos eficientes y elegantes.\n", "\n", - "We'll use dictionaries to compute the number of unique words in a book and the number of times each one appears.\n", - "And in the exercises, we'll use dictionaries to solve word puzzles." + "Usaremos diccionarios para calcular el número de palabras únicas en un libro y el número de veces que aparece cada una.\n", + "Y en los ejercicios, usaremos diccionarios para resolver juegos de palabras." ] }, { @@ -39,11 +39,11 @@ "id": "be7467bb", "metadata": {}, "source": [ - "## A dictionary is a mapping\n", + "## Un diccionario es un mapeo\n", "\n", - "A **dictionary** is like a list, but more general.\n", - "In a list, the indices have to be integers; in a dictionary they can be (almost) any type.\n", - "For example, suppose we make a list of number words, like this." + "Un **diccionario** es como una lista, pero más general.\n", + "En una lista, los índices tienen que ser enteros; en un diccionario pueden ser de (casi) cualquier tipo.\n", + "Por ejemplo, supongamos que hacemos una lista de palabras numéricas, así." ] }, { @@ -59,7 +59,7 @@ "id": "aa626f88", "metadata": {}, "source": [ - "We can use an integer as an index to get the corresponding word." + "Podemos usar un entero como índice para obtener la palabra correspondiente." ] }, { @@ -75,9 +75,9 @@ "id": "c38e143b", "metadata": {}, "source": [ - "But suppose we want to go in the other direction, and look up a word to get the corresponding integer.\n", - "We can't do that with a list, but we can with a dictionary.\n", - "We'll start by creating an empty dictionary and assigning it to `numbers`." + "Pero supongamos que queremos ir en la otra dirección, y buscar una palabra para obtener el entero correspondiente.\n", + "No podemos hacerlo con una lista, pero sí con un diccionario.\n", + "Empezaremos creando un diccionario vacío y asignándolo a `numbers`." ] }, { @@ -93,8 +93,8 @@ "id": "3acce992", "metadata": {}, "source": [ - "The curly braces, `{}`, represent an empty dictionary.\n", - "To add items to the dictionary, we'll use square brackets." + "Las llaves, `{}`, representan un diccionario vacío.\n", + "Para añadir elementos al diccionario, usaremos corchetes." ] }, { @@ -110,9 +110,9 @@ "id": "1dbe12c3", "metadata": {}, "source": [ - "This assignment adds to the dictionary an **item**, which represents the association of a **key** and a **value**.\n", - "In this example, the key is the string `'zero'` and the value is the integer `0`.\n", - "If we display the dictionary, we see that it contains one item, which contains a key and a value separated by a colon, `:`." + "Esta asignación añade al diccionario un **elemento**, que representa la asociación de una **clave** y un **valor**.\n", + "En este ejemplo, la clave es el string `'zero'` y el valor es el entero `0`.\n", + "Si mostramos el diccionario, vemos que contiene un elemento, que contiene una clave y un valor separados por dos puntos, `:`." ] }, { @@ -128,7 +128,7 @@ "id": "ad32c23d", "metadata": {}, "source": [ - "We can add more items like this." + "Podemos añadir más elementos así." ] }, { @@ -144,9 +144,9 @@ "id": "278901e5", "metadata": {}, "source": [ - "Now the dictionary contains three items.\n", + "Ahora el diccionario contiene tres elementos.\n", "\n", - "To look up a key and get the corresponding value, we use the bracket operator." + "Para buscar una clave y obtener el valor correspondiente, usamos el operador de corchetes." ] }, { @@ -162,7 +162,7 @@ "id": "df5724e6", "metadata": {}, "source": [ - "If the key isn't in the dictionary, we get a `KeyError`." + "Si la clave no está en el diccionario, obtenemos un `KeyError`." ] }, { @@ -180,7 +180,7 @@ "id": "2a027a6b", "metadata": {}, "source": [ - "The `len` function works on dictionaries; it returns the number of items." + "La función `len` funciona con diccionarios; devuelve el número de elementos." ] }, { @@ -196,10 +196,10 @@ "id": "58221e96", "metadata": {}, "source": [ - "In mathematical language, a dictionary represents a **mapping** from keys to values, so you can also say that each key \"maps to\" a value.\n", - "In this example, each number word maps to the corresponding integer.\n", + "En lenguaje matemático, un diccionario representa un **mapeo** de claves a valores, así que también puedes decir que cada clave \"mapea a\" un valor.\n", + "En este ejemplo, cada palabra numérica mapea al entero correspondiente.\n", "\n", - "The following figure shows the state diagram for `numbers`." + "La siguiente figura muestra el diagrama de estado de `numbers`." ] }, { @@ -227,9 +227,9 @@ "id": "b092aa61", "metadata": {}, "source": [ - "A dictionary is represented by a box with the word \"dict\" outside and the items inside.\n", - "Each item is represented by a key and an arrow pointing to a value.\n", - "The quotation marks indicate that the keys here are strings, not variable names." + "Un diccionario se representa con una caja con la palabra \"dict\" fuera y los elementos dentro.\n", + "Cada elemento se representa con una clave y una flecha que apunta a un valor.\n", + "Las comillas indican que las claves aquí son strings, no nombres de variables." ] }, { @@ -237,10 +237,10 @@ "id": "2a0a128a", "metadata": {}, "source": [ - "## Creating dictionaries\n", + "## Crear diccionarios\n", "\n", - "In the previous section we created an empty dictionary and added items one at a time using the bracket operator.\n", - "Instead, we could have created the dictionary all at once like this." + "En la sección anterior creamos un diccionario vacío y añadimos elementos uno por uno usando el operador de corchetes.\n", + "En su lugar, podríamos haber creado el diccionario de una vez así." ] }, { @@ -256,11 +256,11 @@ "id": "31ded5b2", "metadata": {}, "source": [ - "Each item consists of a key and a value separated by a colon.\n", - "The items are separated by commas and enclosed in curly braces.\n", + "Cada elemento consiste en una clave y un valor separados por dos puntos.\n", + "Los elementos se separan con comas y se encierran entre llaves.\n", "\n", - "Another way to create a dictionary is to use the `dict` function.\n", - "We can make an empty dictionary like this." + "Otra forma de crear un diccionario es usar la función `dict`.\n", + "Podemos crear un diccionario vacío así." ] }, { @@ -276,7 +276,7 @@ "id": "bfb215c9", "metadata": {}, "source": [ - "And we can make a copy of a dictionary like this." + "Y podemos hacer una copia de un diccionario así." ] }, { @@ -292,7 +292,7 @@ "id": "966c5539", "metadata": {}, "source": [ - "It is often useful to make a copy before performing operations that modify dictionaries." + "A menudo es útil hacer una copia antes de realizar operaciones que modifican diccionarios." ] }, { @@ -302,9 +302,9 @@ "tags": [] }, "source": [ - "## The in operator\n", + "## El operador in\n", "\n", - "The `in` operator works on dictionaries, too; it tells you whether something appears as a *key* in the dictionary." + "El operador `in` también funciona con diccionarios; te dice si algo aparece como *clave* en el diccionario." ] }, { @@ -320,7 +320,7 @@ "id": "80f6b264", "metadata": {}, "source": [ - "The `in` operator does *not* check whether something appears as a value." + "El operador `in` *no* comprueba si algo aparece como valor." ] }, { @@ -336,7 +336,7 @@ "id": "84856c8b", "metadata": {}, "source": [ - "To see whether something appears as a value in a dictionary, you can use the method `values`, which returns a sequence of values, and then use the `in` operator." + "Para ver si algo aparece como valor en un diccionario, puedes usar el método `values`, que devuelve una secuencia de valores, y luego usar el operador `in`." ] }, { @@ -352,8 +352,8 @@ "id": "45dc3d16", "metadata": {}, "source": [ - "The items in a Python dictionary are stored in a **hash table**, which is a way of organizing data that has a remarkable property: the `in` operator takes about the same amount of time no matter how many items are in the dictionary.\n", - "That makes it possible to write some remarkably efficient algorithms." + "Los elementos de un diccionario de Python se almacenan en una **hash table**, que es una forma de organizar datos con una propiedad notable: el operador `in` tarda aproximadamente la misma cantidad de tiempo sin importar cuántos elementos haya en el diccionario.\n", + "Eso hace posible escribir algunos algoritmos notablemente eficientes." ] }, { @@ -371,8 +371,8 @@ "id": "bba0522c", "metadata": {}, "source": [ - "To demonstrate, we'll compare two algorithms for finding pairs of words where one is the reverse of another -- like `stressed` and `desserts`.\n", - "We'll start by reading the word list." + "Para demostrarlo, compararemos dos algoritmos para encontrar pares de palabras donde una es la inversa de la otra, como `stressed` y `desserts`.\n", + "Empezaremos leyendo la lista de palabras." ] }, { @@ -388,7 +388,7 @@ "id": "ab29fb8a", "metadata": {}, "source": [ - "And here's `reverse_word` from the previous chapter." + "Y aquí está `reverse_word` del capítulo anterior." ] }, { @@ -404,8 +404,8 @@ "id": "93f7ac1b", "metadata": {}, "source": [ - "The following function loops through the words in the list.\n", - "For each one, it reverses the letters and then checks whether the reversed word in the word list." + "La siguiente función recorre las palabras de la lista.\n", + "Para cada una, invierte las letras y luego comprueba si la palabra invertida está en la palabra lista." ] }, { @@ -421,9 +421,9 @@ "id": "d4ebb84d", "metadata": {}, "source": [ - "This function takes more than a minute to run.\n", - "The problem is that the `in` operator checks the words in the list one at a time, starting at the beginning.\n", - "If it doesn't find what it's looking for -- which happens most of the time -- it has to search all the way to the end." + "Esta función tarda más de un minuto en ejecutarse.\n", + "El problema es que el operador `in` comprueba las palabras de la lista una por una, empezando por el principio.\n", + "Si no encuentra lo que busca, que ocurre la mayor parte del tiempo, tiene que buscar hasta el final." ] }, { @@ -441,8 +441,8 @@ "id": "2acb6c50", "metadata": {}, "source": [ - "And the `in` operator is inside the loop, so it runs once for each word.\n", - "Since there are more than 100,000 words in the list, and for each one we check more than 100,000 words, the total number of comparisons is the number of words squared -- roughly -- which is almost 13 billion. " + "Y el operador `in` está dentro del bucle, así que se ejecuta una vez por cada palabra.\n", + "Como hay más de 100 000 palabras en la lista, y para cada una comprobamos más de 100 000 palabras, el número total de comparaciones es el número de palabras al cuadrado -- aproximadamente --, que es casi 13 mil millones." ] }, { @@ -458,8 +458,8 @@ "id": "5dbf01b7", "metadata": {}, "source": [ - "We can make this function much faster with a dictionary.\n", - "The following loop creates a dictionary that contains the words as keys." + "Podemos hacer que esta función sea mucho más rápida con un diccionario.\n", + "El siguiente bucle crea un diccionario que contiene las palabras como claves." ] }, { @@ -475,9 +475,9 @@ "id": "b7f6a1b7", "metadata": {}, "source": [ - "The values in `word_dict` are all `1`, but they could be anything, because we won't ever look them up -- we will only use this dictionary to check whether a key exists.\n", + "Los valores en `word_dict` son todos `1`, pero podrían ser cualquier cosa, porque nunca los vamos a buscar; solo usaremos este diccionario para comprobar si existe una clave.\n", "\n", - "Now here's a version of the previous function that replaces `word_list` with `word_dict`." + "Ahora aquí tienes una versión de la función anterior que reemplaza `word_list` por `word_dict`." ] }, { @@ -493,7 +493,7 @@ "id": "5f41e54c", "metadata": {}, "source": [ - "This function takes less than one hundredth of a second, so it's about 10,000 times faster than the previous version." + "Esta función tarda menos de una centésima de segundo, así que es unas 10 000 veces más rápida que la versión anterior." ] }, { @@ -511,8 +511,8 @@ "id": "4cd91c99", "metadata": {}, "source": [ - "In general, the time it takes to find an element in a list is proportional to the length of the list.\n", - "The time it takes to find a key in a dictionary is almost constant -- regardless of the number of items." + "En general, el tiempo que se tarda en encontrar un elemento en una lista es proporcional a la longitud de la lista.\n", + "El tiempo que se tarda en encontrar una clave en un diccionario es casi constante, independientemente del número de elementos." ] }, { @@ -528,11 +528,11 @@ "id": "b3bfa8a5", "metadata": {}, "source": [ - "## A collection of counters\n", + "## Una colección de contadores\n", "\n", - "Suppose you are given a string and you want to count how many times each letter appears.\n", - "A dictionary is a good tool for this job.\n", - "We'll start with an empty dictionary." + "Supongamos que recibes un string y quieres contar cuántas veces aparece cada letra.\n", + "Un diccionario es una buena herramienta para este trabajo.\n", + "Empezaremos con un diccionario vacío." ] }, { @@ -548,8 +548,8 @@ "id": "34a9498a", "metadata": {}, "source": [ - "As we loop through the letters in the string, suppose we see the letter `'a'` for the first time.\n", - "We can add it to the dictionary like this." + "Mientras recorremos las letras del string, supongamos que vemos la letra `'a'` por primera vez.\n", + "Podemos añadirla al diccionario así." ] }, { @@ -565,8 +565,8 @@ "id": "bca9fa11", "metadata": {}, "source": [ - "The value `1` indicates that we have seen the letter once.\n", - "Later, if we see the same letter again, we can increment the counter like this." + "El valor `1` indica que hemos visto la letra una vez.\n", + "Más tarde, si volvemos a ver la misma letra, podemos incrementar el contador así." ] }, { @@ -582,7 +582,7 @@ "id": "274ea014", "metadata": {}, "source": [ - "Now the value associated with `'a'` is `2`, because we've seen the letter twice." + "Ahora el valor asociado con `'a'` es `2`, porque hemos visto la letra dos veces." ] }, { @@ -598,7 +598,7 @@ "id": "2ca8f99d", "metadata": {}, "source": [ - "The following function uses these features to count the number of times each letter appears in a string." + "La siguiente función usa estas características para contar el número de veces que aparece cada letra en un string." ] }, { @@ -614,10 +614,10 @@ "id": "735c758b", "metadata": {}, "source": [ - "Each time through the loop, if `letter` is not in the dictionary, we create a new item with key `letter` and value `1`.\n", - "If `letter` is already in the dictionary we increment the value associated with `letter`.\n", + "Cada vez que pasa por el bucle, si `letter` no está en el diccionario, creamos un nuevo elemento con clave `letter` y valor `1`.\n", + "Si `letter` ya está en el diccionario, incrementamos el valor asociado con `letter`.\n", "\n", - "Here's an example." + "Aquí tienes un ejemplo." ] }, { @@ -633,7 +633,7 @@ "id": "8ac1fea4", "metadata": {}, "source": [ - "The items in `counter` show that the letter `'b'` appears once, `'r'` appears twice, and so on." + "Los elementos de `counter` muestran que la letra `'b'` aparece una vez, `'r'` aparece dos veces, y así sucesivamente." ] }, { @@ -641,10 +641,10 @@ "id": "912bdf5d", "metadata": {}, "source": [ - "## Looping and dictionaries\n", + "## Looping y diccionarios\n", "\n", - "If you use a dictionary in a `for` statement, it traverses the keys of the dictionary.\n", - "To demonstrate, let's make a dictionary that counts the letters in `'banana'`." + "Si usas un diccionario en una sentencia `for`, recorre las claves del diccionario.\n", + "Para demostrarlo, hagamos un diccionario que cuente las letras de `'banana'`." ] }, { @@ -660,7 +660,7 @@ "id": "fe263f3d", "metadata": {}, "source": [ - "The following loop prints the keys, which are the letters." + "El siguiente bucle imprime las claves, que son las letras." ] }, { @@ -676,7 +676,7 @@ "id": "bf1b7824", "metadata": {}, "source": [ - "To print the values, we can use the `values` method." + "Para imprimir los valores, podemos usar el método `values`." ] }, { @@ -692,7 +692,7 @@ "id": "721135be", "metadata": {}, "source": [ - "To print the keys and values, we can loop through the keys and look up the corresponding values." + "Para imprimir las claves y los valores, podemos recorrer las claves y buscar los valores correspondientes." ] }, { @@ -708,7 +708,7 @@ "id": "efa1bce5", "metadata": {}, "source": [ - "In the next chapter, we'll see a more concise way to do the same thing." + "En el próximo capítulo, veremos una forma más concisa de hacer lo mismo." ] }, { @@ -716,10 +716,10 @@ "id": "a160c0ef", "metadata": {}, "source": [ - "## Lists and dictionaries\n", + "## Listas y diccionarios\n", "\n", - "You can put a list in a dictionary as a value.\n", - "For example, here's a dictionary that maps from the number `4` to a list of four letters." + "Puedes poner una lista en un diccionario como valor.\n", + "Por ejemplo, aquí tienes un diccionario que mapea el número `4` a una lista de cuatro letras." ] }, { @@ -735,8 +735,8 @@ "id": "815a829f", "metadata": {}, "source": [ - "But you can't put a list in a dictionary as a key.\n", - "Here's what happens if we try." + "Pero no puedes poner una lista en un diccionario como clave.\n", + "Esto es lo que ocurre si lo intentamos." ] }, { @@ -754,17 +754,17 @@ "id": "2469b08a", "metadata": {}, "source": [ - "I mentioned earlier that dictionaries use hash tables, and that means that the keys have to be **hashable**.\n", + "Mencioné antes que los diccionarios usan hash tables, y eso significa que las claves tienen que ser **hasheable**.\n", "\n", - "A **hash** is a function that takes a value (of any kind) and returns an integer.\n", - "Dictionaries use these integers, called hash values, to store and look up keys.\n", + "Un **hash** es una función que toma un valor (de cualquier tipo) y devuelve un entero.\n", + "Los diccionarios usan estos enteros, llamados hash valores, para almacenar y buscar claves.\n", "\n", - "This system only works if a key is immutable, so its hash value is always the same.\n", - "But if a key is mutable, its hash value could change, and the dictionary would not work.\n", - "That's why keys have to be hashable, and why mutable types like lists aren't.\n", + "Este sistema solo funciona si una clave es inmutable, de modo que su hash valor siempre sea el mismo.\n", + "Pero si una clave es mutable, su hash valor podría cambiar, y el diccionario no funcionaría.\n", + "Por eso las claves tienen que ser hasheables, y por eso tipos mutables como las listas no lo son.\n", "\n", - "Since dictionaries are mutable, they can't be used as keys, either.\n", - "But they *can* be used as values." + "Como los diccionarios son mutables, tampoco pueden usarse como claves.\n", + "Pero *sí* pueden usarse como valores." ] }, { @@ -774,13 +774,13 @@ "tags": [] }, "source": [ - "## Accumulating a list\n", + "## Acumular una lista\n", "\n", - "For many programming tasks, it is useful to loop through one list or dictionary while building another.\n", - "As an example, we'll loop through the words in `word_dict` and make a list of palindromes -- that is, words that are spelled the same backward and forward, like \"noon\" and \"rotator\".\n", + "Para muchas tareas de programación, es útil recorrer una lista o diccionario mientras se construye otro.\n", + "Como ejemplo, recorreremos las palabras en `word_dict` y haremos una lista de palíndromos, es decir, palabras que se escriben igual hacia atrás y hacia adelante, como \"noon\" y \"rotator\".\n", "\n", - "In the previous chapter, one of the exercises asked you to write a function that checks whether a word is a palindrome.\n", - "Here's a solution that uses `reverse_word`." + "En el capítulo anterior, uno de los ejercicios te pidió escribir una función que comprueba si una palabra es un palíndromo.\n", + "Aquí tienes una solución que usa `reverse_word`." ] }, { @@ -796,7 +796,7 @@ "id": "af545fcd", "metadata": {}, "source": [ - "If we loop through the words in `word_dict`, we can count the number of palindromes like this." + "Si recorremos las palabras en `word_dict`, podemos contar el número de palíndromos así." ] }, { @@ -812,15 +812,15 @@ "id": "73c1ce1e", "metadata": {}, "source": [ - "By now, this pattern is familiar.\n", + "A estas alturas, este patrón resulta familiar.\n", "\n", - "* Before the loop, `count` is initialized to `0`.\n", + "* Antes del bucle, `count` se inicializa a `0`.\n", "\n", - "* Inside the loop, if `word` is a palindrome, we increment `count`.\n", + "* Dentro del bucle, si `word` es un palíndromo, incrementamos `count`.\n", "\n", - "* When the loop ends, `count` contains the total number of palindromes.\n", + "* Cuando termina el bucle, `count` contiene el número total de palíndromos.\n", "\n", - "We can use a similar pattern to make a list of palindromes." + "Podemos usar un patrón similar para hacer una lista de palíndromos." ] }, { @@ -836,18 +836,18 @@ "id": "be909f3b", "metadata": {}, "source": [ - "Here's how it works:\n", + "Así es como funciona:\n", "\n", - "* Before the loop, `palindromes` is initialized with an empty list.\n", + "* Antes del bucle, `palindromes` se inicializa con una lista vacía.\n", "\n", - "* Inside the loop, if `word` is a palindrome, we append it to the end of `palindromes`.\n", + "* Dentro del bucle, si `word` es un palíndromo, lo añadimos al final de `palindromes`.\n", "\n", - "* When the loop ends, `palindromes` is a list of palindromes.\n", + "* Cuando termina el bucle, `palindromes` es una lista de palíndromos.\n", "\n", - "In this loop, `palindromes` is used as an **accumulator**, which is a variable that collects or accumulates data during a computation.\n", + "En este bucle, `palindromes` se usa como **accumulator**, que es una variable que recoge o acumula datos durante una computación.\n", "\n", - "Now suppose we want to select only palindromes with seven or more letters.\n", - "We can loop through `palindromes` and make a new list that contains only long palindromes." + "Ahora supongamos que queremos seleccionar solo palíndromos con siete o más letras.\n", + "Podemos recorrer `palindromes` y hacer una nueva lista que contenga solo palíndromos largos." ] }, { @@ -863,7 +863,7 @@ "id": "fa8ed275", "metadata": {}, "source": [ - "Looping through a list like this, selecting some elements and omitting others, is called **filtering**." + "Recorrer una lista así, seleccionando algunos elementos y omitiendo otros, se llama **filtrado**." ] }, { @@ -875,7 +875,7 @@ "source": [ "## Memos\n", "\n", - "If you ran the `fibonacci` function from [Chapter 6](section_fibonacci), maybe you noticed that the bigger the argument you provide, the longer the function takes to run." + "Si ejecutaste la función `fibonacci` del [Capítulo 6](section_fibonacci), quizá notaste que cuanto mayor es el argumento que proporcionas, más tarda la función en ejecutarse." ] }, { @@ -891,9 +891,9 @@ "id": "1b5203c2", "metadata": {}, "source": [ - "Furthermore, the run time increases quickly.\n", - "To understand why, consider the following figure, which shows the **call graph** for\n", - "`fibonacci` with `n=4`:" + "Además, el tiempo de ejecución aumenta rápidamente.\n", + "Para entender por qué, considera la siguiente figura, que muestra el **call graph** de\n", + "`fibonacci` con `n=4`:" ] }, { @@ -931,16 +931,16 @@ "id": "4ee2a87c", "metadata": {}, "source": [ - "A call graph shows a set of function frames, with lines connecting each frame to the frames of the functions it calls.\n", - "At the top of the graph, `fibonacci` with `n=4` calls `fibonacci` with ` n=3` and `n=2`.\n", - "In turn, `fibonacci` with `n=3` calls `fibonacci` with `n=2` and `n=1`. And so on.\n", + "Un call graph muestra un conjunto de función frames, con líneas que conectan cada frame con los frames de las funciones que llama.\n", + "En la parte superior del graph, `fibonacci` con `n=4` llama a `fibonacci` con ` n=3` y `n=2`.\n", + "A su vez, `fibonacci` con `n=3` llama a `fibonacci` con `n=2` y `n=1`. Y así sucesivamente.\n", "\n", - "Count how many times `fibonacci(0)` and `fibonacci(1)` are called. \n", - "This is an inefficient solution to the problem, and it gets worse as the argument gets bigger.\n", + "Cuenta cuántas veces se llama a `fibonacci(0)` y `fibonacci(1)`.\n", + "Esta es una solución ineficiente al problema, y empeora a medida que el argumento crece.\n", "\n", - "One solution is to keep track of values that have already been computed by storing them in a dictionary.\n", - "A previously computed value that is stored for later use is called a **memo**.\n", - "Here is a \"memoized\" version of `fibonacci`:" + "Una solución es llevar un registro de los valores que ya se han calculado almacenándolos en un diccionario.\n", + "Un valor calculado previamente que se almacena para usarlo más tarde se llama **memo**.\n", + "Aquí tienes una versión \"memoized\" de `fibonacci`:" ] }, { @@ -956,16 +956,16 @@ "id": "d2ac4dd7", "metadata": {}, "source": [ - "`known` is a dictionary that keeps track of the Fibonacci numbers we already know\n", - "It starts with two items: `0` maps to `0` and `1` maps to `1`.\n", + "`known` es un diccionario que lleva el registro de los números de Fibonacci que ya conocemos.\n", + "Empieza con dos elementos: `0` mapea a `0` y `1` mapea a `1`.\n", "\n", - "Whenever `fibonacci_memo` is called, it checks `known`.\n", - "If the result is already there, it can return immediately.\n", - "Otherwise it has to compute the new value, add it to the dictionary, and return it.\n", + "Cada vez que se llama a `fibonacci_memo`, comprueba `known`.\n", + "Si el resultado ya está ahí, puede devolverlo inmediatamente.\n", + "De lo contrario, tiene que calcular el nuevo valor, añadirlo al diccionario y devolverlo.\n", "\n", - "Comparing the two functions, `fibonacci(40)` takes about 30 seconds to run.\n", - "`fibonacci_memo(40)` takes about 30 microseconds, so it's a million times faster.\n", - "In the notebook for this chapter, you'll see where these measurements come from." + "Comparando las dos funciones, `fibonacci(40)` tarda unos 30 segundos en ejecutarse.\n", + "`fibonacci_memo(40)` tarda unos 30 microsegundos, así que es un millón de veces más rápida.\n", + "En el notebook de este capítulo, verás de dónde vienen estas mediciones." ] }, { @@ -975,8 +975,8 @@ "tags": [] }, "source": [ - "To measure how long a function takes, we can use `%time` which is one of Jupyter's \"built-in magic commands\".\n", - "These commands are not part of the Python language, so they might not work in other development environments." + "Para medir cuánto tarda una función, podemos usar `%time`, que es uno de los \"built-in magic commands\" de Jupyter.\n", + "Estos comandos no forman parte del lenguaje Python, así que puede que no funcionen en otros entornos de desarrollo." ] }, { @@ -1004,18 +1004,18 @@ "id": "ec969e51", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "As you work with bigger datasets it can become unwieldy to debug by printing and checking the output by hand. Here are some suggestions for debugging large datasets:\n", + "A medida que trabajas con datasets más grandes, puede volverse inmanejable depurar imprimiendo y comprobando la salida a mano. Aquí tienes algunas sugerencias para depurar datasets grandes:\n", "\n", - "1. Scale down the input: If possible, reduce the size of the dataset. For example if the\n", - " program reads a text file, start with just the first 10 lines, or\n", - " with the smallest example you can find. You can either edit the\n", - " files themselves, or (better) modify the program so it reads only\n", - " the first `n` lines.\n", + "1. Reduce el tamaño de la entrada: Si es posible, reduce el tamaño del dataset. Por ejemplo, si el\n", + " programa lee un archivo de texto, empieza solo con las primeras 10 líneas, o\n", + " con el ejemplo más pequeño que puedas encontrar. Puedes editar los\n", + " archivos directamente o, mejor, modificar el programa para que lea solo\n", + " las primeras `n` líneas.\n", "\n", - " If there is an error, you can reduce `n` to the smallest value where the error occurs.\n", - " As you find and correct errors, you can increase `n` gradually." + " Si hay un error, puedes reducir `n` al valor más pequeño donde ocurre el error.\n", + " A medida que encuentres y corrijas errores, puedes aumentar `n` gradualmente." ] }, { @@ -1023,11 +1023,11 @@ "id": "1a62288b", "metadata": {}, "source": [ - "2. Check summaries and types: Instead of printing and checking the entire dataset, consider\n", - " printing summaries of the data -- for example, the number of items in\n", - " a dictionary or the total of a list of numbers.\n", + "2. Comprueba resúmenes y tipos: En lugar de imprimir y comprobar el dataset completo, considera\n", + " imprimir resúmenes de los datos; por ejemplo, el número de elementos en\n", + " un diccionario o el total de una lista de números.\n", "\n", - " A common cause of runtime errors is a value that is not the right type. For debugging this kind of error, it is often enough to print the type of a value." + " Una causa común de errores en tiempo de ejecución es un valor que no tiene el tipo correcto. Para depurar de este tipo de error, a menudo basta con imprimir el tipo de un valor." ] }, { @@ -1035,13 +1035,13 @@ "id": "c749ea3c", "metadata": {}, "source": [ - "3. Write self-checks: Sometimes you can write code to check for errors automatically. For\n", - " example, if you are computing the average of a list of numbers, you\n", - " could check that the result is not greater than the largest element\n", - " in the list or less than the smallest. This is called a \"sanity\n", - " check\" because it detects results that are \"insane\".\n", + "3. Escribe autocomprobaciones: A veces puedes escribir código para comprobar errores automáticamente. Por\n", + " ejemplo, si estás calculando la media de una lista de números, podrías\n", + " comprobar que el resultado no sea mayor que el elemento más grande\n", + " de la lista ni menor que el más pequeño. Esto se llama una \"sanity\n", + " check\" porque detecta resultados que son \"insane\".\n", "\n", - " Another kind of check compares the results of two different computations to see if they are consistent. This is called a \"consistency check\"." + " Otro tipo de comprobación compara los resultados de dos computaciones diferentes para ver si son consistentes. Esto se llama una \"consistency check\"." ] }, { @@ -1049,9 +1049,9 @@ "id": "749b91e9", "metadata": {}, "source": [ - "4. Format the output: Formatting debugging output can make it easier to spot an error. We saw an example in [Chapter 6](section_debugging_factorial). Another tool you might find useful is the `pprint` module, which provides a `pprint` function that displays built-in types in a more human-readable format (`pprint` stands for \"pretty print\").\n", + "4. Formatea la salida: Formatear la salida de depuración puede facilitar detectar un error. Vimos un ejemplo en [Capítulo 6](section_depuración_factorial). Otra herramienta que puede resultarte útil es el módulo `pprint`, que proporciona una función `pprint` que muestra tipos integrados en un formato más legible para humanos (`pprint` significa \"pretty print\").\n", "\n", - " Again, time you spend building scaffolding can reduce the time you spend debugging." + " De nuevo, el tiempo que dediques a construir código de apoyo puede reducir el tiempo que dedicas a depurar." ] }, { @@ -1059,44 +1059,44 @@ "id": "9820175f", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**dictionary:**\n", - " An object that contains key-value pairs, also called items.\n", + "**diccionario:**\n", + " Un objeto que contiene pares clave-valor, también llamados elementos.\n", "\n", - "**item:**\n", - " In a dictionary, another name for a key-value pair.\n", + "**elemento:**\n", + " En un diccionario, otro nombre para un par clave-valor.\n", "\n", - "**key:**\n", - " An object that appears in a dictionary as the first part of a key-value pair.\n", + "**clave:**\n", + " Un objeto que aparece en un diccionario como la primera parte de un par clave-valor.\n", "\n", - "**value:**\n", - " An object that appears in a dictionary as the second part of a key-value pair. This is more specific than our previous use of the word \"value\".\n", + "**valor:**\n", + " Un objeto que aparece en un diccionario como la segunda parte de un par clave-valor. Esto es más específico que nuestro uso anterior de la palabra \"valor\".\n", "\n", - "**mapping:**\n", - " A relationship in which each element of one set corresponds to an element of another set.\n", + "**mapeo:**\n", + " Una relación en la que cada elemento de un conjunto corresponde a un elemento de otro conjunto.\n", "\n", "**hash table:**\n", - "A collection of key-value pairs organized so that we can look up a key and find its value efficiently.\n", + "Una colección de pares clave-valor organizada para que podamos buscar una clave y encontrar su valor de forma eficiente.\n", "\n", - "**hashable:**\n", - " Immutable types like integers, floats and strings are hashable.\n", - " Mutable types like lists and dictionaries are not.\n", + "**hasheable:**\n", + "Tipos inmutables como enteros, floats y strings son hasheable.\n", + "Tipos mutables como listas y diccionarios no lo son.\n", "\n", - "**hash function:**\n", - "A function that takes an object and computes an integer that is used to locate a key in a hash table.\n", + "**función hash:**\n", + "Una función que toma un objeto y calcula un entero que se usa para localizar una clave en una hash table.\n", "\n", "**accumulator:**\n", - " A variable used in a loop to add up or accumulate a result.\n", + " Una variable usada en un bucle para sumar o acumular un resultado.\n", "\n", - "**filtering:**\n", - "Looping through a sequence and selecting or omitting elements.\n", + "**filtrado:**\n", + "Recorrer una secuencia y seleccionar u omitir elementos.\n", "\n", "**call graph:**\n", - "A diagram that shows every frame created during the execution of a program, with an arrow from each caller to each callee.\n", + "Un diagrama que muestra cada frame creado durante la ejecución de un programa, con una flecha desde cada código que llama hacia cada callee.\n", "\n", "**memo:**\n", - " A computed value stored to avoid unnecessary future computation." + " Un valor calculado almacenado para evitar computación futura innecesaria." ] }, { @@ -1104,7 +1104,7 @@ "id": "906c1236", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1122,13 +1122,13 @@ "id": "170f1deb", "metadata": {}, "source": [ - "### Ask an assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "In this chapter, I said the keys in a dictionary have to be hashable and I gave a short explanation. If you would like more details, ask a virtual assistant, \"Why do keys in Python dictionaries have to be hashable?\"\n", + "En este capítulo, dije que las claves de un diccionario tienen que ser hasheabless y di una explicación breve. Si quieres más detalles, pregunta a un asistente virtual: \"¿Por qué las claves de los diccionarios de Python tienen que ser hasheabless?\"\n", "\n", - "In [a previous section](section_dictionary_in_operator), we stored a list of words as keys in a dictionary so that we could use an efficient version of the `in` operator.\n", - "We could have done the same thing using a `set`, which is another built-in data type.\n", - "Ask a virtual assistant, \"How do I make a Python set from a list of strings and check whether a string is an element of the set?\"" + "En [una sección anterior](section_dictionary_in_operator), almacenamos una lista de palabras como claves en un diccionario para poder usar una versión eficiente del operador `in`.\n", + "Podríamos haber hecho lo mismo usando un `set`, que es otro tipo de dato integrado.\n", + "Pregunta a un asistente virtual: \"How do I make a Python set from a lista of strings and check whether a string is an elemento of the set?\"" ] }, { @@ -1136,11 +1136,11 @@ "id": "badf7d65", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Dictionaries have a method called `get` that takes a key and a default value. \n", - "If the key appears in the dictionary, `get` returns the corresponding value; otherwise it returns the default value.\n", - "For example, here's a dictionary that maps from the letters in a string to the number of times they appear." + "Los diccionarios tienen un método llamado `get` que toma una clave y un valor por defecto.\n", + "Si la clave aparece en el diccionario, `get` devuelve el valor correspondiente; de lo contrario devuelve el valor por defecto.\n", + "Por ejemplo, aquí tienes un diccionario que mapea las letras de un string al número de veces que aparecen." ] }, { @@ -1156,7 +1156,7 @@ "id": "c3f6458d", "metadata": {}, "source": [ - "If we look up a letter that appears in the word, `get` returns the number of times it appears." + "Si buscamos una letra que aparece en la palabra, `get` devuelve el número de veces que aparece." ] }, { @@ -1172,7 +1172,7 @@ "id": "49bbff3e", "metadata": {}, "source": [ - "If we look up a letter that doesn't appear, we get the default value, `0`." + "Si buscamos una letra que no aparece, obtenemos el valor por defecto, `0`." ] }, { @@ -1188,8 +1188,8 @@ "id": "4ac3210f", "metadata": {}, "source": [ - "Use `get` to write a more concise version of `value_counts`.\n", - "You should be able to eliminate the `if` statement." + "Usa `get` para escribir una versión más concisa de `value_counts`.\n", + "Deberías poder eliminar la sentencia `if`." ] }, { @@ -1197,12 +1197,12 @@ "id": "5413af6e", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "What is the longest word you can think of where each letter appears only once?\n", - "Let's see if we can find one longer than `unpredictably`.\n", + "¿Cuál es la palabra más larga que se te ocurre donde cada letra aparece solo una vez?\n", + "Veamos si podemos encontrar una más larga que `unpredictably`.\n", "\n", - "Write a function named `has_duplicates` that takes a sequence -- like a list or string -- as a parameter and returns `True` if there is any element that appears in the sequence more than once." + "Escribe una función llamada `has_duplicates` que tome una secuencia, como una lista o string, como parameter y devuelva `True` si hay algún elemento que aparece en la secuencia más de una vez." ] }, { @@ -1212,7 +1212,7 @@ "tags": [] }, "source": [ - "To get you started, here's an outline of the function with doctests." + "Para empezar, aquí tienes un esquema de la función con doctests." ] }, { @@ -1240,7 +1240,7 @@ "tags": [] }, "source": [ - "You can use `doctest` to test your function." + "Puedes usar `doctest` para probar tu función." ] }, { @@ -1260,7 +1260,7 @@ "tags": [] }, "source": [ - "You can use this loop to find the longest words with no repeated letters." + "Puedes usar este bucle para encontrar las palabras más largas sin letras repetidas." ] }, { @@ -1278,11 +1278,11 @@ "id": "afd5f3b6", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write function called `find_repeats` that takes a dictionary that maps from each key to a counter, like the result from `value_counts`.\n", - "It should loop through the dictionary and return a list of keys that have counts greater than `1`.\n", - "You can use the following outline to get started." + "Escribe una función llamada `find_repeats` que tome un diccionario que mapea cada clave a un contador, como el resultado de `value_counts`.\n", + "Debe recorrer el diccionario y devolver una lista de claves que tengan recuentos mayores que `1`.\n", + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1308,8 +1308,8 @@ "tags": [] }, "source": [ - "You can use the following examples to test your code.\n", - "First, we'll make a dictionary that maps from letters to counts." + "Puedes usar los siguientes ejemplos para probar tu código.\n", + "Primero, haremos un diccionario que mapea letras a recuentos." ] }, { @@ -1329,7 +1329,7 @@ "tags": [] }, "source": [ - "The result from `find_repeats` should be `['a', 'n']`." + "El resultado de `find_repeats` debería ser `['a', 'n']`." ] }, { @@ -1349,8 +1349,8 @@ "tags": [] }, "source": [ - "Here's another example that starts with a list of numbers.\n", - "The result should be `[1, 2]`." + "Aquí tienes otro ejemplo que empieza con una lista de números.\n", + "El resultado debería ser `[1, 2]`." ] }, { @@ -1368,9 +1368,9 @@ "id": "1c700d84", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Suppose you run `value_counts` with two different words and save the results in two dictionaries." + "Supongamos que ejecutas `value_counts` con dos palabras diferentes y guardas los resultados en dos diccionarios." ] }, { @@ -1386,11 +1386,11 @@ "id": "deb14c7a", "metadata": {}, "source": [ - "Each dictionary maps from a set of letters to the number of times they appear.\n", - "Write a function called `add_counters` that takes two dictionaries like this and returns a new dictionary that contains all of the letters and the total number of times they appear in either word.\n", + "Cada diccionario mapea un conjunto de letras al número de veces que aparecen.\n", + "Escribe una función llamada `add_counters` que tome dos diccionarios como estos y devuelva un nuevo diccionario que contenga todas las letras y el número total de veces que aparecen en cualquiera de las dos palabras.\n", "\n", - "There are many ways to solve this problem.\n", - "Once you have a working solution, consider asking a virtual assistant for different solutions." + "Hay muchas formas de resolver este problema.\n", + "Cuando tengas una solución que funcione, considera pedir a un asistente virtual soluciones diferentes." ] }, { @@ -1414,16 +1414,16 @@ "id": "f88110a9", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "A word is \"interlocking\" if we can split it into two words by taking alternating letters.\n", - "For example, \"schooled\" is an interlocking word because it can be split into \"shoe\" and \"cold\".\n", + "Una palabra es \"interlocking\" si podemos dividirla en dos palabras tomando letras alternas.\n", + "Por ejemplo, \"schooled\" es una palabra interlocking porque puede dividirse en \"shoe\" y \"cold\".\n", "\n", - "To select alternating letters from a string, you can use a slice operator with three components that indicate where to start, where to stop, and the \"step size\" between the letters.\n", + "Para seleccionar letras alternas de un string, puedes usar un operador de porción con tres componentes que indican dónde empezar, dónde detenerse y el \"step size\" entre las letras.\n", "\n", - "In the following slice, the first component is `0`, so we start with the first letter.\n", - "The second component is `None`, which means we should go all the way to the end of the string.\n", - "And the third component is `2`, so there are two steps between the letters we select." + "En el siguiente porción, el primer componente es `0`, así que empezamos con la primera letra.\n", + "El segundo componente es `None`, lo que significa que debemos llegar hasta el final del string.\n", + "Y el tercer componente es `2`, así que hay dos pasos entre las letras que seleccionamos." ] }, { @@ -1439,8 +1439,8 @@ "id": "d432332d", "metadata": {}, "source": [ - "Instead of providing `None` as the second component, we can get the same effect by leaving it out altogether.\n", - "For example, the following slice selects alternating letters, starting with the second letter." + "En lugar de proporcionar `None` como segundo componente, podemos obtener el mismo efecto omitiéndolo por completo.\n", + "Por ejemplo, el siguiente porción selecciona letras alternas, empezando por la segunda letra." ] }, { @@ -1456,7 +1456,7 @@ "id": "c8c4e3ba", "metadata": {}, "source": [ - "Write a function called `is_interlocking` that takes a word as an argument and returns `True` if it can be split into two interlocking words." + "Escribe una función llamada `is_interlocking` que tome una palabra como argumento y devuelva `True` si puede dividirse en dos palabras interlocking." ] }, { @@ -1474,7 +1474,7 @@ "tags": [] }, "source": [ - "You can use the following loop to find the interlocking words in the word list." + "Puedes usar el siguiente bucle para encontrar las palabras interlocking en la palabra lista." ] }, { @@ -1504,7 +1504,9 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", + "\n", + "Código license: [MIT License](https://mit-license.org/)\n", "\n", "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] diff --git a/blank/chap11.ipynb b/blank/chap11.ipynb index d80bc23..ca39877 100644 --- a/blank/chap11.ipynb +++ b/blank/chap11.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -27,16 +27,16 @@ "tags": [] }, "source": [ - "# Tuples\n", + "# Tuplas\n", "\n", - "This chapter introduces one more built-in type, the tuple, and then shows how lists, dictionaries, and tuples work together.\n", - "It also presents tuple assignment and a useful feature for functions with variable-length argument lists: the packing and unpacking operators.\n", + "Este capítulo presenta un tipo integrado más, la tupla, y luego muestra cómo listas, diccionarios y tuplas trabajan juntos.\n", + "También presenta la asignación de tuplas y una característica útil para funciones con listas de argumentos de longitud variable: los operadores de empaquetado y desempaquetado.\n", "\n", - "In the exercises, we'll use tuples, along with lists and dictionaries, to solve more word puzzles and implement efficient algorithms.\n", + "En los ejercicios, usaremos tuplas, junto con listas y diccionarios, para resolver más puzles de palabras e implementar algoritmos eficientes.\n", "\n", - "One note: There are two ways to pronounce \"tuple\".\n", - "Some people say \"tuh-ple\", which rhymes with \"supple\".\n", - "But in the context of programming, most people say \"too-ple\", which rhymes with \"quadruple\"." + "Una nota: hay dos maneras de pronunciar \"tupla\".\n", + "Algunas personas dicen \"tuh-ple\", que rima con \"supple\".\n", + "Pero en el contexto de la programación, la mayoría dice \"too-ple\", que rima con \"quadruple\"." ] }, { @@ -44,12 +44,12 @@ "id": "19474596", "metadata": {}, "source": [ - "## Tuples are like lists\n", + "## Las tuplas son como listas\n", "\n", - "A tuple is a sequence of values. The values can be any type, and they are indexed by integers, so tuples are a lot like lists.\n", - "The important difference is that tuples are immutable.\n", + "Una tupla es una secuencia de valores. Los valores pueden ser de cualquier tipo, y se indexan con enteros, así que las tuplas se parecen mucho a las listas.\n", + "La diferencia importante es que las tuplas son inmutables.\n", "\n", - "To create a tuple, you can write a comma-separated list of values." + "Para crear una tupla, puedes escribir una lista de valores separados por comas." ] }, { @@ -65,7 +65,7 @@ "id": "a2ec15d8", "metadata": {}, "source": [ - "Although it is not necessary, it is common to enclose tuples in parentheses." + "Aunque no es necesario, es común encerrar las tuplas entre paréntesis." ] }, { @@ -81,7 +81,7 @@ "id": "9194a159", "metadata": {}, "source": [ - "To create a tuple with a single element, you have to include a final comma." + "Para crear una tupla con un solo elemento, tienes que incluir una coma final." ] }, { @@ -97,7 +97,7 @@ "id": "e39b95a5", "metadata": {}, "source": [ - "A single value in parentheses is not a tuple." + "Un único valor entre paréntesis no es una tupla." ] }, { @@ -113,8 +113,7 @@ "id": "a64bfb64", "metadata": {}, "source": [ - "Another way to create a tuple is the built-in function `tuple`. With no\n", - "argument, it creates an empty tuple." + "Otra forma de crear una tupla es la función integrada `tuple`. Sin argumentos, crea una tupla vacío." ] }, { @@ -130,8 +129,7 @@ "id": "f3447831", "metadata": {}, "source": [ - "If the argument is a sequence (string, list or tuple), the result is a\n", - "tuple with the elements of the sequence." + "Si el argumento es una secuencia (string, lista o tupla), el resultado es una tupla con los elementos de la secuencia." ] }, { @@ -147,10 +145,10 @@ "id": "2e48b980", "metadata": {}, "source": [ - "Because `tuple` is the name of a built-in function, you should avoid using it as a variable name.\n", + "Como `tuple` es el nombre de una función integrada, deberías evitar usarlo como nombre de variable.\n", "\n", - "Most list operators also work with tuples.\n", - "For example, the bracket operator indexes an element." + "La mayoría de los operadores de lista también funcionan con tuplas.\n", + "Por ejemplo, el operador de corchetes indexa un elemento." ] }, { @@ -166,7 +164,7 @@ "id": "2f702785", "metadata": {}, "source": [ - "And the slice operator selects a range of elements." + "Y el operador de porción selecciona un rango de elementos." ] }, { @@ -182,7 +180,7 @@ "id": "c9ed9af2", "metadata": {}, "source": [ - "The `+` operator concatenates tuples." + "El operador `+` concatena tuplas." ] }, { @@ -198,7 +196,7 @@ "id": "1d7dcd6d", "metadata": {}, "source": [ - "And the `*` operator duplicates a tuple a given number of times." + "Y el operador `*` duplica una tupla un número dado de veces." ] }, { @@ -214,7 +212,7 @@ "id": "a53ce8bd", "metadata": {}, "source": [ - "The `sorted` function works with tuples -- but the result is a list, not a tuple." + "La función `sorted` funciona con tuplas -- pero el resultado es una lista, no una tupla." ] }, { @@ -230,7 +228,7 @@ "id": "50e5cadc", "metadata": {}, "source": [ - "The `reversed` function also works with tuples." + "La función `reversed` también funciona con tuplas." ] }, { @@ -246,7 +244,7 @@ "id": "f6d973c5", "metadata": {}, "source": [ - "The result is a `reversed` object, which we can convert to a list or tuple." + "El resultado es un objeto `reversed`, que podemos convertir en una lista o en una tupla." ] }, { @@ -262,7 +260,7 @@ "id": "a7cb9ee6", "metadata": {}, "source": [ - "Based on the examples so far, it might seem like tuples are the same as lists." + "Según los ejemplos hasta ahora, podría parecer que las tuplas son iguales que las listas." ] }, { @@ -270,9 +268,9 @@ "id": "8c3f381e", "metadata": {}, "source": [ - "## But tuples are immutable\n", + "## Pero las tuplas son inmutables\n", "\n", - "If you try to modify a tuple with the bracket operator, you get a `TypeError`." + "Si intentas modificar una tupla con el operador de corchetes, obtienes un `TypeError`." ] }, { @@ -290,7 +288,7 @@ "id": "592ce99c", "metadata": {}, "source": [ - "And tuples don't have any of the methods that modify lists, like `append` and `remove`." + "Y las tuplas no tienen ninguno de los métodos que modifican listas, como `append` y `remove`." ] }, { @@ -308,10 +306,10 @@ "id": "70772ba2", "metadata": {}, "source": [ - "Recall that an \"attribute\" is a variable or method associated with an object -- this error message means that tuples don't have a method named `remove`.\n", + "Recuerda que un \"atributo\" es una variable o método asociado con un objeto -- este mensaje de error significa que las tuplas no tienen un método llamado `remove`.\n", "\n", - "Because tuples are immutable, they are hashable, which means they can be used as keys in a dictionary.\n", - "For example, the following dictionary contains two tuples as keys that map to integers." + "Como las tuplas son inmutables, son hasheables, lo que significa que pueden usarse como claves en un diccionario.\n", + "Por ejemplo, el siguiente diccionario contiene dos tuplas como claves que se asocian con enteros." ] }, { @@ -327,7 +325,7 @@ "id": "47ba17ab", "metadata": {}, "source": [ - "We can look up a tuple in a dictionary like this:" + "Podemos buscar una tupla en un diccionario así:" ] }, { @@ -343,7 +341,7 @@ "id": "f2c0a354", "metadata": {}, "source": [ - "Or if we have a variable that refers to a tuple, we can use it as a key." + "O, si tenemos una variable que se refiere a una tupla, podemos usarla como clave." ] }, { @@ -359,7 +357,7 @@ "id": "2ea8fc3c", "metadata": {}, "source": [ - "Tuples can also appear as values in a dictionary." + "Las tuplas también pueden aparecer como valores en un diccionario." ] }, { @@ -375,9 +373,9 @@ "id": "25655ab3", "metadata": {}, "source": [ - "## Tuple assignment\n", + "## Asignación de tupla\n", "\n", - "You can put a tuple of variables on the left side of an assignment, and a tuple of values on the right." + "Puedes poner una tupla de variables en el lado izquierdo de una asignación, y una tupla de valores en el lado derecho." ] }, { @@ -393,8 +391,8 @@ "id": "92c00ceb", "metadata": {}, "source": [ - "The values are assigned to the variables from left to right -- in this example, `a` gets the value `1` and `b` gets the value `2`.\n", - "We can display the results like this:" + "Los valores se asignan a las variables de izquierda a derecha -- en este ejemplo, `a` recibe el valor `1` y `b` recibe el valor `2`.\n", + "Podemos mostrar los resultados así:" ] }, { @@ -410,8 +408,8 @@ "id": "6362b36e", "metadata": {}, "source": [ - "More generally, if the left side of an assignment is a tuple, the right side can be any kind of sequence -- string, list or tuple. \n", - "For example, to split an email address into a user name and a domain, you could write:" + "De forma más general, si el lado izquierdo de una asignación es una tupla, el lado derecho puede ser cualquier tipo de secuencia -- string, lista o tupla. \n", + "Por ejemplo, para dividir una dirección de email en un nombre de usuario y un dominio, podrías escribir:" ] }, { @@ -427,7 +425,7 @@ "id": "d134a94c", "metadata": {}, "source": [ - "The return value from `split` is a list with two elements -- the first element is assigned to `username`, the second to `domain`." + "El valor de retorno de `split` es una lista con dos elementos -- el primer elemento se asigna a `username`, el segundo a `domain`." ] }, { @@ -443,8 +441,7 @@ "id": "5a7e3c62", "metadata": {}, "source": [ - "The number of variables on the left and the number of values on the\n", - "right have to be the same -- otherwise you get a `ValueError`." + "El número de variables a la izquierda y el número de valores a la derecha tienen que ser iguales -- de lo contrario obtienes un `ValueError`." ] }, { @@ -462,8 +459,8 @@ "id": "808c2928", "metadata": {}, "source": [ - "Tuple assignment is useful if you want to swap the values of two variables.\n", - "With conventional assignments, you have to use a temporary variable, like this:" + "La asignación de tupla es útil si quieres intercambiar los valores de dos variables.\n", + "Con asignaciones convencionales, tienes que usar una variable temporal, así:" ] }, { @@ -479,7 +476,7 @@ "id": "98496d02", "metadata": {}, "source": [ - "That works, but with tuple assignment we can do the same thing without a temporary variable." + "Eso funciona, pero con la asignación de tupla podemos hacer lo mismo sin una variable temporal." ] }, { @@ -495,10 +492,10 @@ "id": "a66a87bc", "metadata": {}, "source": [ - "This works because all of the expressions on the right side are evaluated before any of the assignments.\n", + "Esto funciona porque todas las expresiones del lado derecho se evalúan antes de hacer cualquiera de las asignaciones.\n", "\n", - "We can also use tuple assignment in a `for` statement.\n", - "For example, to loop through the items in a dictionary, we can use the `items` method." + "También podemos usar asignación de tupla en una sentencia `for`.\n", + "Por ejemplo, para hacer un bucle por los elementos de un diccionario, podemos usar el método `items`." ] }, { @@ -514,9 +511,9 @@ "id": "dd0d4feb", "metadata": {}, "source": [ - "Each time through the loop, `item` is assigned a tuple that contains a key and the corresponding value.\n", + "Cada vez que pasa por el bucle, `item` se asigna a una tupla que contiene una clave y el valor correspondiente.\n", "\n", - "We can write this loop more concisely, like this:" + "Podemos escribir este bucle de forma más concisa, así:" ] }, { @@ -532,7 +529,7 @@ "id": "f0513578", "metadata": {}, "source": [ - "Each time through the loop, a key and the corresponding value are assigned directly to `key` and `value`." + "Cada vez que pasa por el bucle, una clave y el valor correspondiente se asignan directamente a `key` y `value`." ] }, { @@ -540,16 +537,12 @@ "id": "efedeb37", "metadata": {}, "source": [ - "## Tuples as return values\n", + "## Tuplas como valores de retorno\n", "\n", - "Strictly speaking, a function can only return one value, but if the\n", - "value is a tuple, the effect is the same as returning multiple values.\n", - "For example, if you want to divide two integers and compute the quotient\n", - "and remainder, it is inefficient to compute `x//y` and then `x%y`. It is\n", - "better to compute them both at the same time.\n", + "Estrictamente hablando, una función solo puede devolver un valor, pero si el valor es una tupla, el efecto es el mismo que devolver múltiples valores.\n", + "Por ejemplo, si quieres dividir dos enteros y calcular el cociente y el resto, es ineficiente calcular `x//y` y luego `x%y`. Es mejor calcular ambos al mismo tiempo.\n", "\n", - "The built-in function `divmod` takes two arguments and returns a tuple\n", - "of two values, the quotient and remainder." + "La función integrada `divmod` toma dos argumentos y devuelve una tupla de dos valores, el cociente y el resto." ] }, { @@ -565,7 +558,7 @@ "id": "33f3c57d", "metadata": {}, "source": [ - "We can use tuple assignment to store the elements of the tuple in two variables. " + "Podemos usar asignación de tupla para guardar los elementos dla tupla en dos variables. " ] }, { @@ -589,7 +582,7 @@ "id": "15079805", "metadata": {}, "source": [ - "Here is an example of a function that returns a tuple." + "Aquí tienes un ejemplo de una función que devuelve una tupla." ] }, { @@ -605,8 +598,8 @@ "id": "43c4e1e0", "metadata": {}, "source": [ - "`max` and `min` are built-in functions that find the largest and smallest elements of a sequence. \n", - "`min_max` computes both and returns a tuple of two values." + "`max` y `min` son funciones integradas que encuentran los elementos mayor y menor de una secuencia. \n", + "`min_max` calcula ambos y devuelve una tupla de dos valores." ] }, { @@ -622,7 +615,7 @@ "id": "86b60e71", "metadata": {}, "source": [ - "We can assign the results to variables like this:" + "Podemos asignar los resultados a variables así:" ] }, { @@ -640,11 +633,11 @@ "tags": [] }, "source": [ - "## Argument packing\n", + "## Empaquetado de argumentos\n", "\n", - "Functions can take a variable number of arguments. \n", - "A parameter name that begins with the `*` operator **packs** arguments into a tuple.\n", - "For example, the following function takes any number of arguments and computes their arithmetic mean -- that is, their sum divided by the number of arguments. " + "Las funciones pueden tomar un número variable de argumentos. \n", + "Un nombre de parámetro que empieza con el operador `*` **empaqueta** argumentos en una tupla.\n", + "Por ejemplo, la siguiente función toma cualquier número de argumentos y calcula su media aritmética -- es decir, su suma dividida por el número de argumentos. " ] }, { @@ -660,8 +653,8 @@ "id": "6044fc1b", "metadata": {}, "source": [ - "The parameter can have any name you like, but `args` is conventional.\n", - "We can call the function like this:" + "El parámetro puede tener cualquier nombre que quieras, pero `args` es convencional.\n", + "Podemos llamar a la función así:" ] }, { @@ -677,8 +670,8 @@ "id": "a5e8b158", "metadata": {}, "source": [ - "If you have a sequence of values and you want to pass them to a function as multiple arguments, you can use the `*` operator to **unpack** the tuple.\n", - "For example, `divmod` takes exactly two arguments -- if you pass a tuple as a parameter, you get an error." + "Si tienes una secuencia de valores y quieres pasarlos a una función como múltiples argumentos, puedes usar el operador `*` para **desempaquetar** la tupla.\n", + "Por ejemplo, `divmod` toma exactamente dos argumentos -- si pasas una tupla como parámetro, obtienes un error." ] }, { @@ -696,8 +689,8 @@ "id": "5a9110db", "metadata": {}, "source": [ - "Even though the tuple contains two elements, it counts as a single argument.\n", - "But if you unpack the tuple, it is treated as two arguments." + "Aunque la tupla contiene dos elementos, cuenta como un único argumento.\n", + "Pero si desempaquetas la tupla, se trata como dos argumentos." ] }, { @@ -713,8 +706,8 @@ "id": "da554863", "metadata": {}, "source": [ - "Packing and unpacking can be useful if you want to adapt the behavior of an existing function.\n", - "For example, this function takes any number of arguments, removes the lowest and highest, and computes the mean of the rest." + "Empaquetado y desempaquetado pueden ser útiles si quieres adaptar el comportamiento de una función existente.\n", + "Por ejemplo, esta función toma cualquier número de argumentos, elimina el menor y el mayor, y calcula la media del resto." ] }, { @@ -730,11 +723,11 @@ "id": "d1e05e49", "metadata": {}, "source": [ - "First it uses `min_max` to find the lowest and highest elements.\n", - "Then it converts `args` to a list so it can use the `remove` method.\n", - "Finally it unpacks the list so the elements are passed to `mean` as separate arguments, rather than as a single list.\n", + "Primero usa `min_max` para encontrar los elementos menor y mayor.\n", + "Luego convierte `args` en una lista para poder usar el método `remove`.\n", + "Finalmente desempaqueta la lista para que los elementos se pasen a `mean` como argumentos separados, en lugar de como una única lista.\n", "\n", - "Here's an example that shows the effect." + "Aquí tienes un ejemplo que muestra el efecto." ] }, { @@ -758,7 +751,7 @@ "id": "35e04996", "metadata": {}, "source": [ - "This kind of \"trimmed\" mean is used in some sports with subjective judging -- like diving and gymnastics -- to reduce the effect of a judge whose score deviates from the others. " + "Este tipo de media \"recortada\" se usa en algunos deportes con puntuación subjetiva -- como saltos y gimnasia -- para reducir el efecto de un juez cuya puntuación se desvía de las demás. " ] }, { @@ -768,8 +761,8 @@ "source": [ "## Zip\n", "\n", - "Tuples are useful for looping through the elements of two sequences and performing operations on corresponding elements.\n", - "For example, suppose two teams play a series of seven games, and we record their scores in two lists, one for each team." + "Las tuplas son útiles para hacer un bucle por los elementos de dos secuencias y realizar operaciones sobre elementos correspondientes.\n", + "Por ejemplo, supongamos que dos equipos juegan una serie de siete partidos, y registramos sus puntuaciones en dos listas, una para cada equipo." ] }, { @@ -785,8 +778,8 @@ "id": "b44f228b", "metadata": {}, "source": [ - "Let's see how many games each team won.\n", - "We'll use `zip`, which is a built-in function that takes two or more sequences and returns a **zip object**, so-called because it pairs up the elements of the sequences like the teeth of a zipper." + "Veamos cuántos partidos ganó cada equipo.\n", + "Usaremos `zip`, que es una función integrada que toma dos o más secuencias y devuelve un **zip objeto**, llamado así porque empareja los elementos de las secuencias como los dientes de una cremallera." ] }, { @@ -802,7 +795,7 @@ "id": "9adcf8f9", "metadata": {}, "source": [ - "We can use the zip object to loop through the values in the sequences pairwise." + "Podemos usar el zip objeto para hacer un bucle por los valores de las secuencias por pares." ] }, { @@ -818,8 +811,8 @@ "id": "51d1dabb", "metadata": {}, "source": [ - "Each time through the loop, `pair` gets assigned a tuple of scores.\n", - "So we can assign the scores to variables, and count the victories for the first team, like this:" + "Cada vez que pasa por el bucle, `pair` recibe una tupla de puntuaciones.\n", + "Así que podemos asignar las puntuaciones a variables y contar las victorias del primer equipo, así:" ] }, { @@ -835,9 +828,9 @@ "id": "ad740fcd", "metadata": {}, "source": [ - "Sadly, the first team won only three games and lost the series.\n", + "Tristemente, el primer equipo ganó solo tres partidos y perdió la serie.\n", "\n", - "If you have two lists and you want a list of pairs, you can use `zip` and `list`." + "Si tienes dos listas y quieres una lista de pares, puedes usar `zip` y `list`." ] }, { @@ -853,7 +846,7 @@ "id": "ec4249fa", "metadata": {}, "source": [ - "The result is a list of tuples, so we can get the result of the last game like this:" + "El resultado es una lista de tuplas, así que podemos obtener el resultado del último partido así:" ] }, { @@ -869,8 +862,8 @@ "id": "436486b9", "metadata": {}, "source": [ - "If you have a list of keys and a list of values, you can use `zip` and `dict` to make a dictionary.\n", - "For example, here's how we can make a dictionary that maps from each letter to its position in the alphabet." + "Si tienes una lista de claves y una lista de valores, puedes usar `zip` y `dict` para crear un diccionario.\n", + "Por ejemplo, así podemos crear un diccionario que asocia cada letra con su posición en el alfabeto." ] }, { @@ -886,7 +879,7 @@ "id": "b4de6974", "metadata": {}, "source": [ - "Now we can look up a letter and get its index in the alphabet." + "Ahora podemos buscar una letra y obtener su índice en el alfabeto." ] }, { @@ -902,9 +895,9 @@ "id": "cc632542", "metadata": {}, "source": [ - "In this mapping, the index of `'a'` is `0` and the index of `'z'` is `25`.\n", + "En este mapeo, el índice de `'a'` es `0` y el índice de `'z'` es `25`.\n", "\n", - "If you need to loop through the elements of a sequence and their indices, you can use the built-in function `enumerate`." + "Si necesitas hacer un bucle por los elementos de una secuencia y sus índices, puedes usar la función integrada `enumerate`." ] }, { @@ -920,7 +913,7 @@ "id": "92ad45bb", "metadata": {}, "source": [ - "The result is an **enumerate object** that loops through a sequence of pairs, where each pair contains an index (starting from 0) and an element from the given sequence." + "El resultado es un **enumerate objeto** que hace un bucle por una secuencia de pares, donde cada par contiene un índice (empezando en 0) y un elemento de la secuencia dada." ] }, { @@ -936,11 +929,11 @@ "id": "cf0b55d7", "metadata": {}, "source": [ - "## Comparing and Sorting\n", + "## Comparación y ordenación\n", "\n", - "The relational operators work with tuples and other sequences.\n", - "For example, if you use the `<` operator with tuples, it starts by comparing the first element from each sequence.\n", - "If they are equal, it goes on to the next pair of elements, and so on, until it finds a pair that differ. " + "Los operadores relacionales funcionan con tuplas y otras secuencias.\n", + "Por ejemplo, si usas el operador `<` con tuplas, empieza comparando el primer elemento de cada secuencia.\n", + "Si son iguales, continúa con el siguiente par de elementos, y así sucesivamente, hasta que encuentra un par que difiere. " ] }, { @@ -956,7 +949,7 @@ "id": "65ceea86", "metadata": {}, "source": [ - "Subsequent elements are not considered -- even if they are really big." + "Los elementos posteriores no se tienen en cuenta -- aunque sean realmente grandes." ] }, { @@ -972,9 +965,9 @@ "id": "55e4a35e", "metadata": {}, "source": [ - "This way of comparing tuples is useful for sorting a list of tuples, or finding the minimum or maximum.\n", - "As an example, let's find the most common letter in a word.\n", - "In the previous chapter, we wrote `value_counts`, which takes a string and returns a dictionary that maps from each letter to the number of times it appears." + "Esta forma de comparar tuplas es útil para ordenar una lista de tuplas, o para encontrar el mínimo o el máximo.\n", + "Como ejemplo, encontremos la letra más común en una palabra.\n", + "En el capítulo anterior, escribimos `value_counts`, que toma un string y devuelve un diccionario que asocia cada letra con el número de veces que aparece." ] }, { @@ -990,7 +983,7 @@ "id": "a80012c1", "metadata": {}, "source": [ - "Here is the result for the string `'banana'`." + "Aquí está el resultado para el string `'banana'`." ] }, { @@ -1006,10 +999,10 @@ "id": "cc1ea4a7", "metadata": {}, "source": [ - "With only three items, we can easily see that the most frequent letter is `'a'`, which appears three times.\n", - "But if there were more items, it would be useful to sort them automatically.\n", + "Con solo tres elementos, podemos ver fácilmente que la letra más frecuente es `'a'`, que aparece tres veces.\n", + "Pero si hubiera más elementos, sería útil ordenarlos automáticamente.\n", "\n", - "We can get the items from `counter` like this." + "Podemos obtener los elementos de `counter` así." ] }, { @@ -1025,7 +1018,7 @@ "id": "ac8dea7a", "metadata": {}, "source": [ - "The result is a `dict_items` object that behaves like a list of tuples, so we can sort it like this." + "El resultado es un objeto `dict_items` que se comporta como una lista de tuplas, así que podemos ordenarlo así." ] }, { @@ -1041,10 +1034,10 @@ "id": "b690d17a", "metadata": {}, "source": [ - "The default behavior is to use the first element from each tuple to sort the list, and use the second element to break ties.\n", + "El comportamiento por defecto es usar el primer elemento de cada tupla para ordenar la lista, y usar el segundo elemento para desempatar.\n", "\n", - "However, to find the items with the highest counts, we want to use the second element to sort the list.\n", - "We can do that by writing a function that takes a tuple and returns the second element." + "Sin embargo, para encontrar los elementos con los conteos más altos, queremos usar el segundo elemento para ordenar la lista.\n", + "Podemos hacerlo escribiendo una función que toma una tupla y devuelve el segundo elemento." ] }, { @@ -1060,7 +1053,7 @@ "id": "b964aa14", "metadata": {}, "source": [ - "Then we can pass that function to `sorted` as an optional argument called `key`, which indicates that this function should be used to compute the **sort key** for each item." + "Luego podemos pasar esa función a `sorted` como un argumento opcional llamado `key`, que indica que esta función debe usarse para calcular la **sort clave** de cada elemento." ] }, { @@ -1076,9 +1069,9 @@ "id": "4dc96848", "metadata": {}, "source": [ - "The sort key determines the order of the items in the list.\n", - "The letter with the lowest count appears first, and the letter with the highest count appears last.\n", - "So we can find the most common letter like this." + "La sort clave determina el orden de los elementos en la lista.\n", + "La letra con el conteo más bajo aparece primero, y la letra con el conteo más alto aparece al final.\n", + "Así podemos encontrar la letra más común." ] }, { @@ -1094,8 +1087,8 @@ "id": "d0d8b999", "metadata": {}, "source": [ - "If we only want the maximum, we don't have to sort the list.\n", - "We can use `max`, which also takes `key` as an optional argument." + "Si solo queremos el máximo, no tenemos que ordenar la lista.\n", + "Podemos usar `max`, que también toma `key` como argumento opcional." ] }, { @@ -1111,7 +1104,7 @@ "id": "8a8327df", "metadata": {}, "source": [ - "To find the letter with the lowest count, we could use `min` the same way." + "Para encontrar la letra con el conteo más bajo, podríamos usar `min` de la misma manera." ] }, { @@ -1119,15 +1112,15 @@ "id": "a62394a5", "metadata": {}, "source": [ - "## Inverting a dictionary\n", + "## Invertir un diccionario\n", "\n", - "Suppose you want to invert a dictionary so you can look up a value and get the corresponding key.\n", - "For example, if you have a word counter that maps from each word to the number of times it appears, you could make a dictionary that maps from integers to the words that appear that number of times.\n", + "Supongamos que quieres invertir un diccionario para poder buscar un valor y obtener la clave correspondiente.\n", + "Por ejemplo, si tienes un contador de palabras que asocia cada palabra con el número de veces que aparece, podrías crear un diccionario que asocia enteros con las palabras que aparecen ese número de veces.\n", "\n", - "But there's a problem -- the keys in a dictionary have to be unique, but the values don't. For example, in a word counter, there could be many words with the same count.\n", + "Pero hay un problema -- las claves de un diccionario tienen que ser únicas, pero los valores no. Por ejemplo, en un contador de palabras, podría haber muchas palabras con el mismo conteo.\n", "\n", - "So one way to invert a dictionary is to create a new dictionary where the values are lists of keys from the original.\n", - "As an example, let's count the letters in `parrot`." + "Así que una forma de invertir un diccionario es crear un nuevo diccionario donde los valores son listas de claves del original.\n", + "Como ejemplo, contemos las letras en `parrot`." ] }, { @@ -1143,9 +1136,9 @@ "id": "f4570eae", "metadata": {}, "source": [ - "If we invert this dictionary, the result should be `{1: ['p', 'a', 'o', 't'], 2: ['r']}`, which indicates that the letters that appear once are `'p'`, `'a'`, `'o'`, and `'t'`, and the letter than appears twice is `'r'`.\n", + "Si invertimos este diccionario, el resultado debería ser `{1: ['p', 'a', 'o', 't'], 2: ['r']}`, lo que indica que las letras que aparecen una vez son `'p'`, `'a'`, `'o'` y `'t'`, y la letra que aparece dos veces es `'r'`.\n", "\n", - "The following function takes a dictionary and returns its inverse as a new dictionary." + "La siguiente función toma un diccionario y devuelve su inverso como un nuevo diccionario." ] }, { @@ -1161,11 +1154,11 @@ "id": "ca5fa025", "metadata": {}, "source": [ - "The `for` statement loops through the keys and values in `d`.\n", - "If the value is not already in the new dictionary, it is added and associated with a list that contains a single element.\n", - "Otherwise it is appended to the existing list.\n", + "La sentencia `for` hace un bucle por las claves y los valores de `d`.\n", + "Si el valor todavía no está en el nuevo diccionario, se añade y se asocia con una lista que contiene un único elemento.\n", + "De lo contrario, se añade a la lista existente.\n", "\n", - "We can test it like this:" + "Podemos probarlo así:" ] }, { @@ -1181,10 +1174,10 @@ "id": "4cfb1693", "metadata": {}, "source": [ - "And we get the result we expected.\n", + "Y obtenemos el resultado que esperábamos.\n", "\n", - "This is the first example we've seen where the values in the dictionary are lists.\n", - "We will see more!" + "Este es el primer ejemplo que hemos visto donde los valores en el diccionario son listas.\n", + "¡Veremos más!" ] }, { @@ -1194,16 +1187,15 @@ "tags": [] }, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "Lists, dictionaries and tuples are **data structures**.\n", - "In this chapter we are starting to see compound data structures, like lists of tuples, or dictionaries that contain tuples as keys and lists as values.\n", - "Compound data structures are useful, but they are prone to errors caused when a data structure has the wrong type, size, or structure.\n", - "For example, if a function expects a list of integers and you give it a plain old integer\n", - "(not in a list), it probably won't work.\n", + "Listas, diccionarios y tuplas son **estructuras de datos**.\n", + "En este capítulo estamos empezando a ver estructuras de datos compuestas, como listas de tuplas, o diccionarios que contienen tuplas como claves y listas como valores.\n", + "Las estructuras de datos compuestas son útiles, pero son propensas a errores cuando una estructura de datos tiene el tipo, tamaño o estructura equivocados.\n", + "Por ejemplo, si una función espera una lista de enteros y le das un entero sin más (no dentro de una lista), probablemente no funcionará.\n", "\n", - "To help debug these kinds of errors, I wrote a module called `structshape` that provides a function, also called `structshape`, that takes any kind of data structure as an argument and returns a string that summarizes its structure.\n", - "You can download it from\n", + "Para ayudar a depurar este tipo de errores, escribí un módulo llamado `structshape` que proporciona una función, también llamada `structshape`, que toma cualquier tipo de estructura de datos como argumento y devuelve un string que resume su estructura.\n", + "Puedes descargarlo desde\n", "." ] }, @@ -1222,7 +1214,7 @@ "id": "646f4d55", "metadata": {}, "source": [ - "We can import it like this." + "Podemos importarlo así." ] }, { @@ -1238,7 +1230,7 @@ "id": "86cc6ccc", "metadata": {}, "source": [ - "Here's an example with a simple list." + "Aquí tienes un ejemplo con una lista simple." ] }, { @@ -1254,7 +1246,7 @@ "id": "9de4f6ec", "metadata": {}, "source": [ - "Here's a list of lists." + "Aquí tienes una lista de listas." ] }, { @@ -1270,8 +1262,7 @@ "id": "aced9984", "metadata": {}, "source": [ - "If the elements of the list are not the same type, `structshape` groups\n", - "them by type." + "Si los elementos de la lista no son del mismo tipo, `structshape` los agrupa por tipo." ] }, { @@ -1287,7 +1278,7 @@ "id": "f63ff690", "metadata": {}, "source": [ - "Here's a list of tuples." + "Aquí tienes una lista de tuplas." ] }, { @@ -1303,7 +1294,7 @@ "id": "c9ec67eb", "metadata": {}, "source": [ - "And here's a dictionary with three items that map integers to strings." + "Y aquí tienes un diccionario con tres elementos que asocian enteros con strings." ] }, { @@ -1319,8 +1310,7 @@ "id": "f29bb82b", "metadata": {}, "source": [ - "If you are having trouble keeping track of your data structures,\n", - "`structshape` can help." + "Si tienes problemas para seguir la pista de tus estructuras de datos, `structshape` puede ayudar." ] }, { @@ -1328,25 +1318,25 @@ "id": "79d93082", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", "**pack:**\n", - "Collect multiple arguments into a tuple.\n", + "Reunir múltiples argumentos en una tupla.\n", "\n", "**unpack:**\n", - "Treat a tuple (or other sequence) as multiple arguments.\n", + "Tratar una tupla (u otra secuencia) como múltiples argumentos.\n", "\n", - "**zip object:**\n", - "The result of calling the built-in function `zip`, can be used to loop through a sequence of tuples.\n", + "**zip objeto:**\n", + "El resultado de llamar a la función integrada `zip`; se puede usar para hacer un bucle por una secuencia de tuplas.\n", "\n", - "**enumerate object:**\n", - "The result of calling the built-in function `enumerate`, can be used to loop through a sequence of tuples.\n", + "**enumerate objeto:**\n", + "El resultado de llamar a la función integrada `enumerate`; se puede usar para hacer un bucle por una secuencia de tuplas.\n", "\n", - "**sort key:**\n", - "A value, or function that computes a value, used to sort the elements of a collection.\n", + "**sort clave:**\n", + "Un valor, o una función que calcula un valor, usado para ordenar los elementos de una colección.\n", "\n", - "**data structure:**\n", - "A collection of values, organized to perform certain operations efficiently." + "**estructura de datos:**\n", + "Una colección de valores, organizada para realizar ciertas operaciones de manera eficiente." ] }, { @@ -1354,7 +1344,7 @@ "id": "1471b3c0", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1372,17 +1362,17 @@ "id": "97a0352d", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "The exercises in this chapter might be more difficult than exercises in previous chapters, so I encourage you to get help from a virtual assistant.\n", - "When you pose more difficult questions, you might find that the answers are not correct on the first attempt, so this is a chance to practice crafting good prompts and following up with good refinements.\n", + "Los ejercicios de este capítulo pueden ser más difíciles que los de capítulos anteriores, así que te animo a pedir ayuda a un asistente virtual.\n", + "Cuando planteas preguntas más difíciles, puede que las respuestas no sean correctas al primer intento, así que esta es una oportunidad para practicar cómo crear buenos prompts y hacer buenos refinamientos.\n", "\n", - "One strategy you might consider is to break a big problems into pieces that can be solved with simple functions.\n", - "Ask the virtual assistant to write the functions and test them.\n", - "Then, once they are working, ask for a solution to the original problem.\n", + "Una estrategia que podrías considerar es dividir un problema grande en piezas que puedan resolverse con funciones simples.\n", + "Pide al asistente virtual que escriba las funciones y las pruebe.\n", + "Luego, cuando funcionen, pide una solución al problema original.\n", "\n", - "For some of the exercises below, I make suggestions about which data structures and algorithms to use.\n", - "You might find these suggestions useful when you work on the problems, but they are also good prompts to pass along to a virtual assistant." + "Para algunos de los ejercicios siguientes, sugiero qué estructuras de datos y algoritmos usar.\n", + "Puede que estas sugerencias te resulten útiles cuando trabajes en los problemas, pero también son buenos prompts para pasárselos a un asistente virtual." ] }, { @@ -1390,12 +1380,12 @@ "id": "f90e011f", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In this chapter I said that tuples can be used as keys in dictionaries because they are hashable, and they are hashable because they are immutable.\n", - "But that is not always true.\n", + "En este capítulo dije que las tuplas pueden usarse como claves en diccionarios porque son hasheables, y son hasheables porque son inmutables.\n", + "Pero eso no siempre es cierto.\n", "\n", - "If a tuple contains a mutable value, like a list or a dictionary, the tuple is no longer hashable because it contains elements that are not hashable. As an example, here's a tuple that contains two lists of integers." + "Si una tupla contiene un valor mutable, como una lista o un diccionario, la tupla ya no es hasheable porque contiene elementos que no son hasheablesss. Como ejemplo, aquí tienes una tupla que contiene dos listas de enteros." ] }, { @@ -1411,7 +1401,7 @@ "id": "02799077", "metadata": {}, "source": [ - "Write a line of code that appends the value `6` to the end of the second list in `t`. If you display `t`, the result should be `([1, 2, 3], [4, 5, 6])`." + "Escribe una línea de código que añada el valor `6` al final de la segunda lista en `t`. Si muestras `t`, el resultado debería ser `([1, 2, 3], [4, 5, 6])`." ] }, { @@ -1429,7 +1419,7 @@ "id": "644b1dfb", "metadata": {}, "source": [ - "Try to create a dictionary that maps from `t` to a string, and confirm that you get a `TypeError`." + "Intenta crear un diccionario que asocie `t` con un string, y confirma que obtienes un `TypeError`." ] }, { @@ -1447,7 +1437,7 @@ "id": "fb77a352", "metadata": {}, "source": [ - "For more on this topic, ask a virtual assistant, \"Are Python tuples always hashable?\"" + "Para saber más sobre este tema, pregunta a un asistente virtual: \"Are Python tuplas always hasheable?" ] }, { @@ -1457,9 +1447,9 @@ "tags": [] }, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In this chapter we made a dictionary that maps from each letter to its index in the alphabet." + "En este capítulo hicimos un diccionario que asocia cada letra con su índice en el alfabeto." ] }, { @@ -1475,7 +1465,7 @@ "id": "a8cd720b", "metadata": {}, "source": [ - "For example, the index of `'a'` is `0`." + "Por ejemplo, el índice de `'a'` es `0`." ] }, { @@ -1491,8 +1481,8 @@ "id": "a04c25db", "metadata": {}, "source": [ - "To go in the other direction, we can use list indexing.\n", - "For example, the letter at index `1` is `'b'`." + "Para ir en la otra dirección, podemos usar indexación de lista.\n", + "Por ejemplo, la letra en el índice `1` es `'b'`." ] }, { @@ -1508,18 +1498,17 @@ "id": "165ab770", "metadata": {}, "source": [ - "We can use `letter_map` and `letters` to encode and decode words using a Caesar cipher.\n", + "Podemos usar `letter_map` y `letters` para codificar y decodificar palabras usando un cifrado César.\n", "\n", - "A Caesar cipher is a weak form of encryption that involves shifting each letter\n", - "by a fixed number of places in the alphabet, wrapping around to the beginning if necessary. For example, `'a'` shifted by 2 is `'c'` and `'z'` shifted by 1 is `'a'`.\n", + "Un cifrado César es una forma débil de cifrado que consiste en desplazar cada letra un número fijo de posiciones en el alfabeto, volviendo al principio si es necesario. Por ejemplo, `'a'` desplazada 2 posiciones es `'c'` y `'z'` desplazada 1 posición es `'a'`.\n", "\n", - "Write a function called `shift_word` that takes as parameters a string and an integer, and returns a new string that contains the letters from the string shifted by the given number of places.\n", + "Escribe una función llamada `shift_word` que tome como parámetros un string y un entero, y devuelva un nuevo string que contiene las letras del string desplazadas el número de posiciones dado.\n", "\n", - "To test your function, confirm that \"cheer\" shifted by 7 is \"jolly\" and \"melon\" shifted by 16 is \"cubed\".\n", + "Para probar tu función, confirma que \"cheer\" desplazada 7 posiciones es \"jolly\" y \"melon\" desplazada 16 posiciones es \"cubed\".\n", "\n", - "Hints: Use the modulus operator to wrap around from `'z'` back to `'a'`. \n", - "Loop through the letters of the word, shift each one, and append the result to a list of letters.\n", - "Then use `join` to concatenate the letters into a string." + "Pistas: usa el operador módulo para volver de `'z'` a `'a'`. \n", + "Haz un bucle por las letras de la palabra, desplaza cada una y añade el resultado a una lista de letras.\n", + "Luego usa `join` para concatenar las letras en un string." ] }, { @@ -1529,7 +1518,7 @@ "tags": [] }, "source": [ - "You can use this outline to get started." + "Puedes usar este esquema para empezar." ] }, { @@ -1577,7 +1566,7 @@ "tags": [] }, "source": [ - "You can use `doctest` to test your function." + "Puedes usar `doctest` para probar tu función." ] }, { @@ -1595,11 +1584,11 @@ "id": "779f13af", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `most_frequent_letters` that takes a string and prints the letters in decreasing order of frequency.\n", + "Escribe una función llamada `most_frequent_letters` que tome un string e imprima las letras en orden decreciente de frecuencia.\n", "\n", - "To get the items in decreasing order, you can use `reversed` along with `sorted` or you can pass `reverse=True` as a keyword parameter to `sorted`." + "Para obtener los elementos en orden decreciente, puedes usar `reversed` junto con `sorted` o puedes pasar `reverse=True` como keyword parameter a `sorted`." ] }, { @@ -1609,7 +1598,7 @@ "tags": [] }, "source": [ - "You can use this outline of the function to get started." + "Puedes usar este esquema de la función para empezar." ] }, { @@ -1637,7 +1626,7 @@ "tags": [] }, "source": [ - "And this example to test your function." + "Y este ejemplo para probar tu función." ] }, { @@ -1657,7 +1646,7 @@ "tags": [] }, "source": [ - "Once your function is working, you can use the following code to print the most common letters in *Dracula*, which we can download from Project Gutenberg." + "Cuando tu función funcione, puedes usar el siguiente código para imprimir las letras más comunes en *Dracula*, que podemos descargar de Project Gutenberg." ] }, { @@ -1687,8 +1676,8 @@ "tags": [] }, "source": [ - "According to Zim's \"Codes and Secret Writing\", the sequence of letters in decreasing order of frequency in English starts with \"ETAONRISH\".\n", - "How does this sequence compare with the results from *Dracula*?" + "Según *Codes and Secret Writing* de Zim, la secuencia de letras en orden decreciente de frecuencia en inglés empieza con \"ETAONRISH\".\n", + "¿Cómo se compara esta secuencia con los resultados de *Dracula*?" ] }, { @@ -1696,20 +1685,20 @@ "id": "cbe9933e", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In a previous exercise, we tested whether two strings are anagrams by sorting the letters in both words and checking whether the sorted letters are the same.\n", - "Now let's make the problem a little more challenging.\n", + "En un ejercicio anterior, probamos si dos strings son anagramas ordenando las letras de ambas palabras y comprobando si las letras ordenadas son iguales.\n", + "Ahora hagamos el problema un poco más desafiante.\n", "\n", - "We'll write a program that takes a list of words and prints all the sets of words that are anagrams.\n", - "Here is an example of what the output might look like:\n", + "Escribiremos un programa que toma una lista de palabras e imprime todos los conjuntos de palabras que son anagramas.\n", + "Aquí tienes un ejemplo de cómo podría verse la salida:\n", "\n", " ['deltas', 'desalt', 'lasted', 'salted', 'slated', 'staled']\n", " ['retainers', 'ternaries']\n", " ['generating', 'greatening']\n", " ['resmelts', 'smelters', 'termless']\n", "\n", - "Hint: For each word in the word list, sort the letters and join them back into a string. Make a dictionary that maps from this sorted string to a list of words that are anagrams of it." + "Pista: para cada palabra de la lista de palabras, ordena las letras y vuelve a unirlas en un string. Crea un diccionario que asocie este string ordenado con una lista de palabras que son anagramas de él." ] }, { @@ -1719,7 +1708,7 @@ "tags": [] }, "source": [ - "The following cells download `words.txt` and read the words into a list." + "Las siguientes celdas descargan `words.txt` y leen las palabras en una lista." ] }, { @@ -1749,7 +1738,7 @@ "tags": [] }, "source": [ - "Here's the `sort_word` function we've used before." + "Aquí está la función `sort_word` que hemos usado antes." ] }, { @@ -1777,8 +1766,8 @@ "tags": [] }, "source": [ - "To find the longest list of anagrams, you can use the following function, which takes a key-value pair where the key is a string and the value is a list of words.\n", - "It returns the length of the list." + "Para encontrar la lista más larga de anagramas, puedes usar la siguiente función, que toma un par clave-valor donde la clave es un string y el valor es una lista de palabras.\n", + "Devuelve la longitud de la lista." ] }, { @@ -1798,7 +1787,7 @@ "tags": [] }, "source": [ - "We can use this function as a sort key to find the longest lists of anagrams." + "Podemos usar esta función como sort clave para encontrar las listas más largas de anagramas." ] }, { @@ -1818,7 +1807,7 @@ "tags": [] }, "source": [ - "If you want to know the longest words that have anagrams, you can use the following loop to print some of them." + "Si quieres saber cuáles son las palabras más largas que tienen anagramas, puedes usar el siguiente bucle para imprimir algunas." ] }, { @@ -1836,11 +1825,11 @@ "id": "4fbe939e", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `word_distance` that takes two words with the same length and returns the number of places where the two words differ.\n", + "Escribe una función llamada `word_distance` que tome dos palabras con la misma longitud y devuelva el número de posiciones donde las dos palabras difieren.\n", "\n", - "Hint: Use `zip` to loop through the corresponding letters of the words." + "Pista: usa `zip` para hacer un bucle por las letras correspondientes de las palabras." ] }, { @@ -1850,7 +1839,7 @@ "tags": [] }, "source": [ - "Here's an outline of the function with doctests you can use to check your function." + "Aquí tienes un esquema de la función con doctests que puedes usar para comprobar tu función." ] }, { @@ -1886,15 +1875,15 @@ "id": "066eec59", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "\"Metathesis\" is the transposition of letters in a word.\n", - "Two words form a \"metathesis pair\" if you can transform one into the other by swapping two letters, like `converse` and `conserve`.\n", - "Write a program that finds all of the metathesis pairs in the word list. \n", + "\"Metathesis\" es la transposición de letras en una palabra.\n", + "Dos palabras forman una \"metathesis pair\" si puedes transformar una en la otra intercambiando dos letras, como `converse` y `conserve`.\n", + "Escribe un programa que encuentre todos los pares de metathesis en la lista de palabras. \n", "\n", - "Hint: The words in a metathesis pair must be anagrams of each other.\n", + "Pista: las palabras de un par de metathesis deben ser anagramas entre sí.\n", "\n", - "Credit: This exercise is inspired by an example at ." + "Crédito: este ejercicio está inspirado en un ejemplo de ." ] }, { @@ -1912,49 +1901,47 @@ "tags": [] }, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "This is a bonus exercise that is not in the book.\n", - "It is more challenging than the other exercises in this chapter, so you might want to ask a virtual assistant for help, or come back to it after you've read a few more chapters.\n", + "Este es un ejercicio extra que no está en el libro.\n", + "Es más desafiante que los otros ejercicios de este capítulo, así que quizá quieras pedir ayuda a un asistente virtual, o volver a él después de leer algunos capítulos más.\n", "\n", - "Here's another Car Talk Puzzler\n", + "Aquí tienes otro Car Talk Puzzler\n", "():\n", "\n", - "> What is the longest English word, that remains a valid English word,\n", - "> as you remove its letters one at a time?\n", + "> ¿Cuál es la palabra inglesa más larga que sigue siendo una palabra inglesa válida\n", + "> mientras le quitas letras una a una?\n", ">\n", - "> Now, letters can be removed from either end, or the middle, but you\n", - "> can't rearrange any of the letters. Every time you drop a letter, you\n", - "> wind up with another English word. If you do that, you're eventually\n", - "> going to wind up with one letter and that too is going to be an\n", - "> English word---one that's found in the dictionary. I want to know\n", - "> what's the longest word and how many letters does it have?\n", + "> Ahora, las letras se pueden quitar de cualquiera de los extremos o del medio, pero\n", + "> no puedes reordenar ninguna de las letras. Cada vez que quitas una letra,\n", + "> terminas con otra palabra inglesa. Si haces eso, al final\n", + "> terminarás con una letra, y esa también será una palabra inglesa -- una que\n", + "> aparece en el diccionario. Quiero saber cuál es la palabra más larga\n", + "> y cuántas letras tiene.\n", ">\n", - "> I'm going to give you a little modest example: Sprite. Ok? You start\n", - "> off with sprite, you take a letter off, one from the interior of the\n", - "> word, take the r away, and we're left with the word spite, then we\n", - "> take the e off the end, we're left with spit, we take the s off, we're\n", - "> left with pit, it, and I.\n", + "> Te voy a dar un ejemplo pequeño: Sprite. ¿Ok? Empiezas\n", + "> con sprite, le quitas una letra, una del interior de la\n", + "> palabra, quitas la r, y nos queda la palabra spite; luego\n", + "> quitamos la e del final, nos queda spit; quitamos la s,\n", + "> nos queda pit, it e I.\n", "\n", - "Write a program to find all words that can be reduced in this way, and\n", - "then find the longest one.\n", + "Escribe un programa para encontrar todas las palabras que pueden reducirse de esta manera, y luego encuentra la más larga.\n", "\n", - "This exercise is a little more challenging than most, so here are some\n", - "suggestions:\n", + "Este ejercicio es un poco más desafiante que la mayoría, así que aquí tienes algunas sugerencias:\n", "\n", - "1. You might want to write a function that takes a word and computes a\n", - " list of all the words that can be formed by removing one letter.\n", - " These are the \"children\" of the word.\n", + "1. Quizá quieras escribir una función que tome una palabra y calcule una\n", + " lista de todas las palabras que pueden formarse quitando una letra.\n", + " Estas son las \"children\" de la palabra.\n", "\n", - "2. Recursively, a word is reducible if any of its children are\n", - " reducible. As a base case, you can consider the empty string\n", + "2. Recursivamente, una palabra es reducible si cualquiera de sus children es\n", + " reducible. Como caso base, puedes considerar que el string vacío es\n", " reducible.\n", "\n", - "3. The word list we've been using doesn't contain single letter\n", - " words. So you might have to add \"I\" and \"a\".\n", + "3. La lista de palabras que hemos estado usando no contiene palabras de una sola letra.\n", + " Así que quizá tengas que añadir \"I\" y \"a\".\n", "\n", - "4. To improve the performance of your program, you might want to\n", - " memoize the words that are known to be reducible." + "4. Para mejorar el rendimiento de tu programa, quizá quieras\n", + " memoizar las palabras que se sabe que son reducibles." ] }, { @@ -2008,7 +1995,9 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", + "\n", + "Código license: [MIT License](https://mit-license.org/)\n", "\n", "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] diff --git a/blank/chap12.ipynb b/blank/chap12.ipynb index 220b664..4d3cadf 100644 --- a/blank/chap12.ipynb +++ b/blank/chap12.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -25,20 +25,20 @@ "id": "59a8621b", "metadata": {}, "source": [ - "# Text Analysis and Generation\n", + "# Análisis y generación de texto\n", "\n", - "At this point we have covered Python's core data structures -- lists, dictionaries, and tuples -- and some algorithms that use them.\n", - "In this chapter, we'll use them to explore text analysis and Markov generation:\n", + "A estas alturas hemos cubierto las estructuras de datos principales de Python -- listas, diccionarios y tuplas -- y algunos algoritmos que las usan.\n", + "En este capítulo, las usaremos para explorar el análisis de texto y la generación de Markov:\n", "\n", - "* Text analysis is a way to describe the statistical relationships between the words in a document, like the probability that one word is followed by another, and\n", + "* El análisis de texto es una forma de describir las relaciones estadísticas entre las palabras de un documento, como la probabilidad de que una palabra vaya seguida de otra, y\n", "\n", - "* Markov generation is a way to generate new text with words and phrases similar to the original text.\n", + "* La generación de Markov es una forma de generar texto nuevo con palabras y frases similares a las del texto original.\n", "\n", - "These algorithms are similar to parts of a Large Language Model (LLM), which is the key component of a chatbot.\n", + "Estos algoritmos son similares a partes de un Large Language Model (LLM), que es el componente clave de un chatbot.\n", "\n", - "We'll start by counting the number of times each word appears in a book.\n", - "Then we'll look at pairs of words, and make a list of the words that can follow each word.\n", - "We'll make a simple version of a Markov generator, and as an exercise, you'll have a chance to make a more general version." + "Empezaremos contando el número de veces que aparece cada palabra en un libro.\n", + "Luego veremos pares de palabras y haremos una lista de las palabras que pueden seguir a cada palabra.\n", + "Haremos una versión simple de un generador de Markov y, como ejercicio, tendrás la oportunidad de hacer una versión más general." ] }, { @@ -46,10 +46,10 @@ "id": "0e3811b8", "metadata": {}, "source": [ - "## Unique words\n", + "## Palabras únicas\n", "\n", - "As a first step toward text analysis, let's read a book -- *The Strange Case Of Dr. Jekyll And Mr. Hyde* by Robert Louis Stevenson -- and count the number of unique words.\n", - "Instructions for downloading the book are in the notebook for this chapter." + "Como primer paso hacia el análisis de texto, leamos un libro -- *The Strange Case Of Dr. Jekyll And Mr. Hyde* de Robert Louis Stevenson -- y contemos el número de palabras únicas.\n", + "Las instrucciones para descargar el libro están en el notebook de este capítulo." ] }, { @@ -59,7 +59,7 @@ "tags": [] }, "source": [ - "The following cell downloads the book from Project Gutenberg." + "La siguiente celda descarga el libro desde Project Gutenberg." ] }, { @@ -79,8 +79,8 @@ "tags": [] }, "source": [ - "The version available from Project Gutenberg includes information about the book at the beginning and license information at the end.\n", - "We'll use `clean_file` from Chapter 8 to remove this material and write a \"clean\" file that contains only the text of the book." + "La versión disponible en Project Gutenberg incluye información sobre el libro al principio e información de licencia al final.\n", + "Usaremos `clean_file` del Capítulo 8 para eliminar este material y escribir un archivo \"limpio\" que contiene solo el texto del libro." ] }, { @@ -126,8 +126,8 @@ "id": "bc66d7e2", "metadata": {}, "source": [ - "We'll use a `for` loop to read lines from the file and `split` to divide the lines into words.\n", - "Then, to keep track of unique words, we'll store each word as a key in a dictionary." + "Usaremos un bucle `for` para leer líneas del archivo y `split` para dividir las líneas en palabras.\n", + "Luego, para llevar la cuenta de las palabras únicas, guardaremos cada palabra como una clave en un diccionario." ] }, { @@ -143,11 +143,11 @@ "id": "85171a3a", "metadata": {}, "source": [ - "The length of the dictionary is the number of unique words -- about `6000` by this way of counting.\n", - "But if we inspect them, we'll see that some are not valid words.\n", + "La longitud del diccionario es el número de palabras únicas -- unas `6000` con esta forma de contar.\n", + "Pero si las inspeccionamos, veremos que algunas no son palabras válidas.\n", "\n", - "For example, let's look at the longest words in `unique_words`.\n", - "We can use `sorted` to sort the words, passing the `len` function as a keyword argument so the words are sorted by length." + "Por ejemplo, veamos las palabras más largas en `unique_words`.\n", + "Podemos usar `sorted` para ordenar las palabras, pasando la función `len` como keyword argumento para que las palabras se ordenen por longitud." ] }, { @@ -163,13 +163,13 @@ "id": "795f5327", "metadata": {}, "source": [ - "The slice index, `[-5:]`, selects the last `5` elements of the sorted list, which are the longest words. \n", + "El índice de porción, `[-5:]`, selecciona los últimos `5` elementos de la lista ordenada, que son las palabras más largas. \n", "\n", - "The list includes some legitimately long words, like \"circumscription\", and some hyphenated words, like \"chocolate-coloured\".\n", - "But some of the longest \"words\" are actually two words separated by a dash.\n", - "And other words include punctuation like periods, exclamation points, and quotation marks.\n", + "La lista incluye algunas palabras legítimamente largas, como \"circumscription\", y algunas palabras con guion, como \"chocolate-coloured\".\n", + "Pero algunas de las \"palabras\" más largas son en realidad dos palabras separadas por una raya.\n", + "Y otras palabras incluyen puntuación como puntos, signos de exclamación y comillas.\n", "\n", - "So, before we move on, let's deal with dashes and other punctuation." + "Así que, antes de seguir, ocupémonos de las rayas y otros signos de puntuación." ] }, { @@ -177,15 +177,15 @@ "id": "bf89fafa", "metadata": {}, "source": [ - "## Punctuation\n", + "## Puntuación\n", "\n", - "To identify the words in the text, we need to deal with two issues:\n", + "Para identificar las palabras del texto, tenemos que resolver dos cuestiones:\n", "\n", - "* When a dash appears in a line, we should replace it with a space -- then when we use `split`, the words will be separated.\n", + "* Cuando aparece una raya en una línea, deberíamos reemplazarla por un espacio -- así, cuando usemos `split`, las palabras quedarán separadas.\n", "\n", - "* After splitting the words, we can use `strip` to remove punctuation.\n", + "* Después de separar las palabras, podemos usar `strip` para eliminar la puntuación.\n", "\n", - "To handle the first issue, we can use the following function, which takes a string, replaces dashes with spaces, splits the string, and returns the resulting list." + "Para manejar la primera cuestión, podemos usar la siguiente función, que toma un string, reemplaza las rayas por espacios, divide el string y devuelve la lista resultante." ] }, { @@ -201,8 +201,8 @@ "id": "d5decdec", "metadata": {}, "source": [ - "Notice that `split_line` only replaces dashes, not hyphens.\n", - "Here's an example." + "Observa que `split_line` solo reemplaza rayas, no guiones.\n", + "Aquí tienes un ejemplo." ] }, { @@ -218,11 +218,11 @@ "id": "0d9eb318", "metadata": {}, "source": [ - "Now, to remove punctuation from the beginning and end of each word, we can use `strip`, but we need a list of characters that are considered punctuation.\n", + "Ahora, para eliminar la puntuación del principio y del final de cada palabra, podemos usar `strip`, pero necesitamos una lista de caracteres que se consideran puntuación.\n", "\n", - "Characters in Python strings are in Unicode, which is an international standard used to represent letters in nearly every alphabet, numbers, symbols, punctuation marks, and more.\n", - "The `unicodedata` module provides a `category` function we can use to tell which characters are punctuation.\n", - "Given a letter, it returns a string with information about what category the letter is in." + "Los caracteres en los strings de Python están en Unicode, que es un estándar internacional usado para representar letras de casi todos los alfabetos, números, símbolos, signos de puntuación y más.\n", + "El módulo `unicodedata` proporciona una función `category` que podemos usar para saber qué caracteres son puntuación.\n", + "Dada una letra, devuelve un string con información sobre la categoría a la que pertenece." ] }, { @@ -238,9 +238,9 @@ "id": "994835ea", "metadata": {}, "source": [ - "The category string of `'A'` is `'Lu'` -- the `'L'` means it is a letter and the `'u'` means it is uppercase.\n", + "El string de categoría de `'A'` es `'Lu'` -- la `'L'` significa que es una letra y la `'u'` significa que es mayúscula.\n", "\n", - "The category string of `'.'` is `'Po'` -- the `'P'` means it is punctuation and the `'o'` means its subcategory is \"other\"." + "El string de categoría de `'.'` es `'Po'` -- la `'P'` significa que es puntuación y la `'o'` significa que su subcategoría es \"other\"." ] }, { @@ -256,8 +256,8 @@ "id": "03773b9b", "metadata": {}, "source": [ - "We can find the punctuation marks in the book by checking for characters with categories that begin with `'P'`.\n", - "The following loop stores the unique punctuation marks in a dictionary." + "Podemos encontrar los signos de puntuación del libro comprobando los caracteres con categorías que empiezan por `'P'`.\n", + "El siguiente bucle guarda los signos de puntuación únicos en un diccionario." ] }, { @@ -273,7 +273,7 @@ "id": "e6741dfa", "metadata": {}, "source": [ - "To make a list of punctuation marks, we can join the keys of the dictionary into a string." + "Para crear una lista de signos de puntuación, podemos unir las claves del diccionario en un string." ] }, { @@ -289,7 +289,7 @@ "id": "6af8d5a2", "metadata": {}, "source": [ - "Now that we know which characters in the book are punctuation, we can write a function that takes a word, strips punctuation from the beginning and end, and converts it to lower case." + "Ahora que sabemos qué caracteres del libro son puntuación, podemos escribir una función que toma una palabra, elimina la puntuación del principio y del final, y la convierte a minúsculas." ] }, { @@ -305,7 +305,7 @@ "id": "58a78cb1", "metadata": {}, "source": [ - "Here's an example." + "Aquí tienes un ejemplo." ] }, { @@ -321,7 +321,7 @@ "id": "314e4fbd", "metadata": {}, "source": [ - "Because `strip` removes characters from the beginning and end, it leaves hyphenated words alone." + "Como `strip` elimina caracteres del principio y del final, deja intactas las palabras con guion." ] }, { @@ -337,7 +337,7 @@ "id": "99050f8a", "metadata": {}, "source": [ - "Now here's a loop that uses `split_line` and `clean_word` to identify the unique words in the book." + "Ahora aquí tienes un bucle que usa `split_line` y `clean_word` para identificar las palabras únicas del libro." ] }, { @@ -353,8 +353,8 @@ "id": "992e5466", "metadata": {}, "source": [ - "With this stricter definition of what a word is, there are about 4000 unique words.\n", - "And we can confirm that the list of longest words has been cleaned up." + "Con esta definición más estricta de lo que es una palabra, hay unas 4000 palabras únicas.\n", + "Y podemos confirmar que la lista de palabras más largas se ha limpiado." ] }, { @@ -370,7 +370,7 @@ "id": "8014c330", "metadata": {}, "source": [ - "Now let's see how many times each word is used." + "Ahora veamos cuántas veces se usa cada palabra." ] }, { @@ -378,9 +378,9 @@ "id": "7ef40180", "metadata": {}, "source": [ - "## Word frequencies\n", + "## Frecuencias de palabras\n", "\n", - "The following loop computes the frequency of each unique word." + "El siguiente bucle calcula la frecuencia de cada palabra única." ] }, { @@ -396,10 +396,10 @@ "id": "bd680b81", "metadata": {}, "source": [ - "The first time we see a word, we initialize its frequency to `1`. If we see the same word again later, we increment its frequency.\n", + "La primera vez que vemos una palabra, inicializamos su frecuencia a `1`. Si volvemos a ver la misma palabra más adelante, incrementamos su frecuencia.\n", "\n", - "To see which words appear most often, we can use `items` to get the key-value pairs from `word_counter`, and sort them by the second element of the pair, which is the frequency.\n", - "First we'll define a function that selects the second element." + "Para ver qué palabras aparecen con más frecuencia, podemos usar `items` para obtener los pares clave-valor de `word_counter`, y ordenarlos por el segundo elemento del par, que es la frecuencia.\n", + "Primero definiremos una función que selecciona el segundo elemento." ] }, { @@ -415,11 +415,11 @@ "id": "b15a5bd6", "metadata": {}, "source": [ - "Now we can use `sorted` with two keyword arguments:\n", + "Ahora podemos usar `sorted` con dos keyword argumentos:\n", "\n", - "* `key=second_element` means the items will be sorted according to the frequencies of the words.\n", + "* `key=second_element` significa que los elementos se ordenarán según las frecuencias de las palabras.\n", "\n", - "* `reverse=True` means they items will be sorted in reverse order, with the most frequent words first." + "* `reverse=True` significa que los elementos se ordenarán en orden inverso, con las palabras más frecuentes primero." ] }, { @@ -435,7 +435,7 @@ "id": "db6812e2", "metadata": {}, "source": [ - "Here are the five most frequent words." + "Aquí están las cinco palabras más frecuentes." ] }, { @@ -451,8 +451,8 @@ "id": "551e81bb", "metadata": {}, "source": [ - "In the next section, we'll encapsulate this loop in a function.\n", - "And we'll use it to demonstrate a new feature -- optional parameters." + "En la siguiente sección, encapsularemos este bucle en una función.\n", + "Y la usaremos para demostrar una nueva característica -- parámetros opcionales." ] }, { @@ -460,10 +460,10 @@ "id": "45243ccc", "metadata": {}, "source": [ - "## Optional parameters\n", + "## Parámetros opcionales\n", "\n", - "We've used built-in functions that take optional parameters.\n", - "For example, `round` takes an optional parameters called `ndigits` that indicates how many decimal places to keep." + "Hemos usado funciones integradas que toman parámetros opcionales.\n", + "Por ejemplo, `round` toma un parámetro opcional llamado `ndigits` que indica cuántos decimales conservar." ] }, { @@ -479,8 +479,8 @@ "id": "6ae60945", "metadata": {}, "source": [ - "But it's not just built-in functions -- we can write functions with optional parameters, too.\n", - "For example, the following function takes two parameters, `word_counter` and `num`." + "Pero no son solo las funciones integradas -- también podemos escribir funciones con parámetros opcionales.\n", + "Por ejemplo, la siguiente función toma dos parámetros, `word_counter` y `num`." ] }, { @@ -496,9 +496,9 @@ "id": "78cb1531", "metadata": {}, "source": [ - "The second parameter looks like an assignment statement, but it's not -- it's an optional parameter.\n", + "El segundo parámetro parece una sentencia de asignación, pero no lo es -- es un parámetro opcional.\n", "\n", - "If you call this function with one argument, `num` gets the **default value**, which is `5`." + "Si llamas a esta función con un argumento, `num` recibe el **valor por defecto**, que es `5`." ] }, { @@ -514,7 +514,7 @@ "id": "29753ad6", "metadata": {}, "source": [ - "If you call this function with two arguments, the second argument gets assigned to `num` instead of the default value." + "Si llamas a esta función con dos argumentos, el segundo argumento se asigna a `num` en lugar del valor por defecto." ] }, { @@ -530,9 +530,9 @@ "id": "e9bf907b", "metadata": {}, "source": [ - "In that case, we would say the optional argument **overrides** the default value.\n", + "En ese caso, diríamos que el argumento opcional **override** el valor por defecto.\n", "\n", - "If a function has both required and optional parameters, all of the required parameters have to come first, followed by the optional ones." + "Si una función tiene parámetros requeridos y opcionales, todos los parámetros requeridos tienen que ir primero, seguidos por los opcionales." ] }, { @@ -552,14 +552,14 @@ "tags": [] }, "source": [ - "## Dictionary subtraction\n", + "## Resta de diccionarios\n", "\n", - "Suppose we want to spell-check a book -- that is, find a list of words that might be misspelled.\n", - "One way to do that is to find words in the book that don't appear in a list of valid words.\n", - "In previous chapters, we've used a list of words that are considered valid in word games like Scrabble.\n", - "Now we'll use this list to spell-check Robert Louis Stevenson.\n", + "Supongamos que queremos revisar la ortografía de un libro -- es decir, encontrar una lista de palabras que podrían estar mal escritas.\n", + "Una forma de hacerlo es encontrar palabras del libro que no aparecen en una lista de palabras válidas.\n", + "En capítulos anteriores, hemos usado una lista de palabras que se consideran válidas en juegos de palabras como Scrabble.\n", + "Ahora usaremos esta lista para revisar la ortografía de Robert Louis Stevenson.\n", "\n", - "We can think of this problem as set subtraction -- that is, we want to find all the words from one set (the words in the book) that are not in the other (the words in the list)." + "Podemos pensar en este problema como una resta de conjuntos -- es decir, queremos encontrar todas las palabras de un conjunto (las palabras del libro) que no están en el otro (las palabras de la lista)." ] }, { @@ -569,7 +569,7 @@ "tags": [] }, "source": [ - "The following cell downloads the word list." + "La siguiente celda descarga la lista de palabras." ] }, { @@ -587,7 +587,7 @@ "id": "2a46556c", "metadata": {}, "source": [ - "As we've done before, we can read the contents of `words.txt` and split it into a list of strings." + "Como hemos hecho antes, podemos leer el contenido de `words.txt` y dividirlo en una lista de strings." ] }, { @@ -603,7 +603,7 @@ "id": "22becbab", "metadata": {}, "source": [ - "The we'll store the words as keys in a dictionary so we can use the `in` operator to check quickly whether a word is valid." + "Luego guardaremos las palabras como claves en un diccionario para poder usar el operador `in` y comprobar rápidamente si una palabra es válida." ] }, { @@ -619,7 +619,7 @@ "id": "94cc7c61", "metadata": {}, "source": [ - "Now, to identify words that appear in the book but not in the word list, we'll use `subtract`, which takes two dictionaries as parameters and returns a new dictionary that contains all the keys from one that are not in the other." + "Ahora, para identificar palabras que aparecen en el libro pero no en la lista de palabras, usaremos `subtract`, que toma dos diccionarios como parámetros y devuelve un nuevo diccionario que contiene todas las claves de uno que no están en el otro." ] }, { @@ -635,7 +635,7 @@ "id": "e70c63b4", "metadata": {}, "source": [ - "Here's how we use it." + "Así es como lo usamos." ] }, { @@ -651,7 +651,7 @@ "id": "f8ada7bd", "metadata": {}, "source": [ - "To get a sample of words that might be misspelled, we can print the most common words in `diff`." + "Para obtener una muestra de palabras que podrían estar mal escritas, podemos imprimir las palabras más comunes en `diff`." ] }, { @@ -667,10 +667,10 @@ "id": "deeec418", "metadata": {}, "source": [ - "The most common \"misspelled\" words are mostly names and a few single-letter words (Mr. Utterson is Dr. Jekyll's friend and lawyer).\n", + "Las \"palabras mal escritas\" más comunes son en su mayoría nombres y algunas palabras de una sola letra (Mr. Utterson es el amigo y abogado del Dr. Jekyll).\n", "\n", - "If we select words that only appear once, they are more likely to be actual misspellings.\n", - "We can do that by looping through the items and making a list of words with frequency `1`." + "Si seleccionamos palabras que solo aparecen una vez, es más probable que sean errores ortográficos reales.\n", + "Podemos hacerlo haciendo un bucle por los elementos y creando una lista de palabras con frecuencia `1`." ] }, { @@ -686,7 +686,7 @@ "id": "98ae9281", "metadata": {}, "source": [ - "Here are the last few elements of the list." + "Aquí están los últimos elementos de la lista." ] }, { @@ -702,8 +702,8 @@ "id": "c5040834", "metadata": {}, "source": [ - "Most of them are valid words that are not in the word list.\n", - "But `'reindue'` appears to be a misspelling of `'reinduce'`, so at least we found one legitimate error." + "La mayoría son palabras válidas que no están en la lista de palabras.\n", + "Pero `'reindue'` parece ser un error ortográfico de `'reinduce'`, así que al menos encontramos un error legítimo." ] }, { @@ -711,22 +711,22 @@ "id": "afcbbe19", "metadata": {}, "source": [ - "## Random numbers\n", + "## Números aleatorios\n", "\n", - "As a step toward Markov text generation, next we'll choose a random sequence of words from `word_counter`.\n", - "But first let's talk about randomness.\n", + "Como paso hacia la generación de texto de Markov, a continuación elegiremos una secuencia aleatoria de palabras de `word_counter`.\n", + "Pero primero hablemos de aleatoriedad.\n", "\n", - "Given the same inputs, most computer programs are **deterministic**, which means they generate the same outputs every time.\n", - "Determinism is usually a good thing, since we expect the same calculation to yield the same result.\n", - "For some applications, though, we want the computer to be unpredictable.\n", - "Games are one example, but there are more.\n", + "Dados los mismos inputs, la mayoría de los programas de computadora son **determinista**, lo que significa que generan los mismos outputs cada vez.\n", + "El determinismo suele ser algo bueno, ya que esperamos que el mismo cálculo produzca el mismo resultado.\n", + "Para algunas aplicaciones, sin embargo, queremos que la computadora sea impredecible.\n", + "Los juegos son un ejemplo, pero hay más.\n", "\n", - "Making a program truly nondeterministic turns out to be difficult, but there are ways to fake it.\n", - "One is to use algorithms that generate **pseudorandom** numbers.\n", - "Pseudorandom numbers are not truly random because they are generated by a deterministic computation, but just by looking at the numbers it is all but impossible to distinguish them from random.\n", + "Hacer que un programa sea verdaderamente no determinista resulta ser difícil, pero hay formas de simularlo.\n", + "Una es usar algoritmos que generan números **pseudorandom**.\n", + "Los números pseudorandom no son verdaderamente aleatorios porque se generan mediante un cálculo determinista, pero con solo mirar los números es prácticamente imposible distinguirlos de números aleatorios.\n", "\n", - "The `random` module provides functions that generate pseudorandom numbers -- which I will simply call \"random\" from here on.\n", - "We can import it like this." + "El módulo `random` proporciona funciones que generan números pseudorandom -- a los que de aquí en adelante simplemente llamaré \"random\".\n", + "Podemos importarlo así." ] }, { @@ -752,7 +752,7 @@ "id": "8cbbd7f8", "metadata": {}, "source": [ - "The `random` module provides a function called `choice` that chooses an element from a list at random, with every element having the same probability of being chosen." + "El módulo `random` proporciona una función llamada `choice` que elige un elemento de una lista al azar, con la misma probabilidad de elegir cada elemento." ] }, { @@ -768,7 +768,7 @@ "id": "57c15af2", "metadata": {}, "source": [ - "If you call the function again, you might get the same element again, or a different one." + "Si llamas a la función otra vez, podrías obtener el mismo elemento de nuevo, o uno diferente." ] }, { @@ -784,9 +784,9 @@ "id": "6f0c2572", "metadata": {}, "source": [ - "In the long run, we expect to get every element about the same number of times.\n", + "A largo plazo, esperamos obtener cada elemento aproximadamente el mismo número de veces.\n", "\n", - "If you use `choice` with a dictionary, you get a `KeyError`." + "Si usas `choice` con un diccionario, obtienes un `KeyError`." ] }, { @@ -804,7 +804,7 @@ "id": "592722f3", "metadata": {}, "source": [ - "To choose a random key, you have to put the keys in a list and then call `choice`." + "Para elegir una clave aleatoria, tienes que poner las claves en una lista y luego llamar a `choice`." ] }, { @@ -820,7 +820,7 @@ "id": "172d72f6", "metadata": {}, "source": [ - "If we generate a random sequence of words, it doesn't make much sense." + "Si generamos una secuencia aleatoria de palabras, no tiene mucho sentido." ] }, { @@ -836,10 +836,10 @@ "id": "e0e2fbc4", "metadata": {}, "source": [ - "Part of the problem is that we are not taking into account that some words are more common than others.\n", - "The results will be better if we choose words with different \"weights\", so that some are chosen more often than others.\n", + "Parte del problema es que no estamos teniendo en cuenta que algunas palabras son más comunes que otras.\n", + "Los resultados serán mejores si elegimos palabras con distintos \"weights\", de modo que algunas se elijan más a menudo que otras.\n", "\n", - "If we use the values from `word_counter` as weights, each word is chosen with a probability that depends on its frequency." + "Si usamos los valores de `word_counter` como weights, cada palabra se elige con una probabilidad que depende de su frecuencia." ] }, { @@ -855,7 +855,7 @@ "id": "5098bf93", "metadata": {}, "source": [ - "The `random` module provides another function called `choices` that takes weights as an optional argument." + "El módulo `random` proporciona otra función llamada `choices` que toma weights como argumento opcional." ] }, { @@ -871,7 +871,7 @@ "id": "a3341e84", "metadata": {}, "source": [ - "And it takes another optional argument, `k`, that specifies the number of words to select." + "Y toma otro argumento opcional, `k`, que especifica el número de palabras a seleccionar." ] }, { @@ -887,7 +887,7 @@ "id": "e57e6f3d", "metadata": {}, "source": [ - "The result is a list of strings that we can join into something that's looks more like a sentence." + "El resultado es una lista de strings que podemos unir en algo que se parece más a una oración." ] }, { @@ -903,9 +903,9 @@ "id": "c7a35dff", "metadata": {}, "source": [ - "If you choose words from the book at random, you get a sense of the vocabulary, but a series of random words seldom makes sense because there is no relationship between successive words.\n", - "For example, in a real sentence you expect an article like \"the\" to be followed by an adjective or a noun, and probably not a verb or adverb.\n", - "So the next step is to look at these relationships between words." + "Si eliges palabras del libro al azar, obtienes una idea del vocabulario, pero una serie de palabras aleatorias rara vez tiene sentido porque no hay relación entre palabras sucesivas.\n", + "Por ejemplo, en una oración real esperas que un artículo como \"the\" vaya seguido de un adjetivo o un sustantivo, y probablemente no de un verbo o adverbio.\n", + "Así que el siguiente paso es observar estas relaciones entre palabras." ] }, { @@ -913,19 +913,19 @@ "id": "0921dd53", "metadata": {}, "source": [ - "## Bigrams\n", + "## Bigramas\n", "\n", - "Instead of looking at one word at a time, now we'll look at sequences of two words, which are called **bigrams**.\n", - "A sequence of three words is called a **trigram**, and a sequence with some unspecified number of words is called an **n-gram**.\n", + "En lugar de mirar una palabra cada vez, ahora miraremos secuencias de dos palabras, que se llaman **bigramas**.\n", + "Una secuencia de tres palabras se llama **trigram**, y una secuencia con un número no especificado de palabras se llama **n-gram**.\n", "\n", - "Let's write a program that finds all of the bigrams in the book and the number of times each one appears.\n", - "To store the results, we'll use a dictionary where\n", + "Escribamos un programa que encuentre todos los bigramas del libro y el número de veces que aparece cada uno.\n", + "Para guardar los resultados, usaremos un diccionario donde\n", "\n", - "* The keys are tuples of strings that represent bigrams, and \n", + "* Las claves son tuplas de strings que representan bigramas, y \n", "\n", - "* The values are integers that represent frequencies.\n", + "* Los valores son enteros que representan frecuencias.\n", "\n", - "Let's call it `bigram_counter`." + "Llamémoslo `bigram_counter`." ] }, { @@ -941,9 +941,9 @@ "id": "33f97a2a", "metadata": {}, "source": [ - "The following function takes a list of two strings as a parameter.\n", - "First it makes a tuple of the two strings, which can be used as a key in a dictionary.\n", - "Then it adds the key to `bigram_counter`, if it doesn't exist, or increments the frequency if it does." + "La siguiente función toma una lista de dos strings como parámetro.\n", + "Primero crea una tupla con los dos strings, que puede usarse como clave en un diccionario.\n", + "Luego añade la clave a `bigram_counter`, si no existe, o incrementa la frecuencia si existe." ] }, { @@ -959,11 +959,11 @@ "id": "5c30f429", "metadata": {}, "source": [ - "As we go through the book, we have to keep track of each pair of consecutive words.\n", - "So if we see the sequence \"man is not truly one\", we would add the bigrams \"man is\", \"is not\", \"not truly\", and so on.\n", + "A medida que recorremos el libro, tenemos que llevar la cuenta de cada par de palabras consecutivas.\n", + "Así que si vemos la secuencia \"man is not truly one\", añadiríamos los bigramas \"man is\", \"is not\", \"not truly\", y así sucesivamente.\n", "\n", - "To keep track of these bigrams, we'll use a list called `window`, because it is like a window that slides over the pages of the book, showing only two words at a time.\n", - "Initially, `window` is empty." + "Para llevar la cuenta de estos bigramas, usaremos una lista llamada `window`, porque es como una ventana que se desliza sobre las páginas del libro, mostrando solo dos palabras a la vez.\n", + "Inicialmente, `window` está vacía." ] }, { @@ -979,7 +979,7 @@ "id": "9376558c", "metadata": {}, "source": [ - "We'll use the following function to process the words one at a time." + "Usaremos la siguiente función para procesar las palabras una por una." ] }, { @@ -995,14 +995,14 @@ "id": "56895591", "metadata": {}, "source": [ - "The first time this function is called, it appends the given word to `window`.\n", - "Since there is only one word in the window, we don't have a bigram yet, so the function ends.\n", + "La primera vez que se llama a esta función, añade la palabra dada a `window`.\n", + "Como solo hay una palabra en la window, todavía no tenemos un bigrama, así que la función termina.\n", "\n", - "The second time it's called -- and every time thereafter -- it appends a second word to `window`.\n", - "Since there are two words in the window, it calls `count_bigram` to keep track of how many times each bigram appears.\n", - "Then it uses `pop` to remove the first word from the window.\n", + "La segunda vez que se llama -- y todas las veces después -- añade una segunda palabra a `window`.\n", + "Como hay dos palabras en la window, llama a `count_bigram` para llevar la cuenta de cuántas veces aparece cada bigrama.\n", + "Luego usa `pop` para eliminar la primera palabra de la window.\n", "\n", - "The following program loops through the words in the book and processes them one at a time." + "El siguiente programa hace un bucle por las palabras del libro y las procesa una a una." ] }, { @@ -1018,8 +1018,8 @@ "id": "20c4627a", "metadata": {}, "source": [ - "The result is a dictionary that maps from each bigram to the number of times it appears.\n", - "We can use `print_most_common` to see the most common bigrams." + "El resultado es un diccionario que asocia cada bigrama con el número de veces que aparece.\n", + "Podemos usar `print_most_common` para ver los bigramas más comunes." ] }, { @@ -1035,8 +1035,8 @@ "id": "757bd309", "metadata": {}, "source": [ - "Looking at these results, we can get a sense of which pairs of words are most likely to appear together.\n", - "We can also use the results to generate random text, like this." + "Al mirar estos resultados, podemos hacernos una idea de qué pares de palabras tienen más probabilidad de aparecer juntos.\n", + "También podemos usar los resultados para generar texto aleatorio, así." ] }, { @@ -1062,10 +1062,10 @@ "id": "eda80407", "metadata": {}, "source": [ - "`bigrams` is a list of the bigrams that appear in the books.\n", - "`weights` is a list of their frequencies, so `random_bigrams` is a sample where the probability a bigram is selected is proportional to its frequency. \n", + "`bigrams` es una lista de los bigramas que aparecen en los libros.\n", + "`weights` es una lista de sus frecuencias, así que `random_bigrams` es una muestra donde la probabilidad de que se seleccione un bigrama es proporcional a su frecuencia. \n", "\n", - "Here are the results." + "Aquí están los resultados." ] }, { @@ -1081,7 +1081,7 @@ "id": "5f24c3b6", "metadata": {}, "source": [ - "This way of generating text is better than choosing random words, but still doesn't make a lot of sense." + "Esta forma de generar texto es mejor que elegir palabras aleatorias, pero todavía no tiene mucho sentido." ] }, { @@ -1089,10 +1089,10 @@ "id": "a13d93b5", "metadata": {}, "source": [ - "## Markov analysis\n", + "## Análisis de Markov\n", "\n", - "We can do better with Markov chain text analysis, which computes, for each word in a text, the list of words that come next.\n", - "As an example, we'll analyze these lyrics from the Monty Python song *Eric, the Half a Bee*:" + "Podemos hacerlo mejor con el análisis de texto mediante cadenas de Markov, que calcula, para cada palabra de un texto, la lista de palabras que vienen después.\n", + "Como ejemplo, analizaremos esta letra de la canción de Monty Python *Eric, the Half a Bee*:" ] }, { @@ -1108,7 +1108,7 @@ "id": "583ab9f0", "metadata": {}, "source": [ - "To store the results, we'll use a dictionary that maps from each word to the list of words that follow it." + "Para guardar los resultados, usaremos un diccionario que asocia cada palabra con la lista de palabras que la siguen." ] }, { @@ -1124,7 +1124,7 @@ "id": "d5d85b09", "metadata": {}, "source": [ - "As an example, let's start with the first two words of the song." + "Como ejemplo, empecemos con las dos primeras palabras de la canción." ] }, { @@ -1140,7 +1140,7 @@ "id": "0349fe78", "metadata": {}, "source": [ - "If the first word is not in `successor_map`, we have to add a new item that maps from the first word to a list containing the second word." + "Si la primera palabra no está en `successor_map`, tenemos que añadir un nuevo elemento que asocie la primera palabra con una lista que contiene la segunda palabra." ] }, { @@ -1156,7 +1156,7 @@ "id": "55bb8df9", "metadata": {}, "source": [ - "If the first word is already in the dictionary, we can look it up to get the list of successors we've seen so far, and append the new one." + "Si la primera palabra ya está en el diccionario, podemos buscarla para obtener la lista de sucesores que hemos visto hasta ahora, y añadir el nuevo." ] }, { @@ -1172,7 +1172,7 @@ "id": "6289cc32", "metadata": {}, "source": [ - "The following function encapsulates these steps." + "La siguiente función encapsula estos pasos." ] }, { @@ -1188,11 +1188,11 @@ "id": "74a51700", "metadata": {}, "source": [ - "If the same bigram appears more that once, the second word is added to the list more than once.\n", - "In this way, `successor_map` keeps track of how many times each successor appears.\n", + "Si el mismo bigrama aparece más de una vez, la segunda palabra se añade a la lista más de una vez.\n", + "De esta manera, `successor_map` lleva la cuenta de cuántas veces aparece cada sucesor.\n", "\n", - "As we did in the previous section, we'll use a list called `window` to store pairs of consecutive words.\n", - "And we'll use the following function to process the words one at a time." + "Como hicimos en la sección anterior, usaremos una lista llamada `window` para guardar pares de palabras consecutivas.\n", + "Y usaremos la siguiente función para procesar las palabras una por una." ] }, { @@ -1208,7 +1208,7 @@ "id": "861a60d9", "metadata": {}, "source": [ - "Here's how we use it to process the words in the song." + "Así es como la usamos para procesar las palabras de la canción." ] }, { @@ -1224,7 +1224,7 @@ "id": "bf490d67", "metadata": {}, "source": [ - "And here are the results." + "Y aquí están los resultados." ] }, { @@ -1240,11 +1240,11 @@ "id": "ff7bad74", "metadata": {}, "source": [ - "The word `'half'` can be followed by `'a'`, `'not'`, or `'the'`.\n", - "The word `'a'` can be followed by `'bee'` or `'vis'`.\n", - "Most of the other words appear only once, so they are followed by only a single word.\n", + "La palabra `'half'` puede ir seguida de `'a'`, `'not'` o `'the'`.\n", + "La palabra `'a'` puede ir seguida de `'bee'` o `'vis'`.\n", + "La mayoría de las demás palabras aparecen solo una vez, así que van seguidas de una única palabra.\n", "\n", - "Now let's analyze the book." + "Ahora analicemos el libro." ] }, { @@ -1260,7 +1260,7 @@ "id": "2676e2fb", "metadata": {}, "source": [ - "We can look up any word and find the words that can follow it." + "Podemos buscar cualquier palabra y encontrar las palabras que pueden seguirla." ] }, { @@ -1286,7 +1286,7 @@ "id": "7b777a9c", "metadata": {}, "source": [ - "In this list of successors, notice that the word `'to'` appears three times -- the other successors only appear once." + "En esta lista de sucesores, observa que la palabra `'to'` aparece tres veces -- los demás sucesores aparecen solo una vez." ] }, { @@ -1294,18 +1294,18 @@ "id": "e8bf85fc", "metadata": {}, "source": [ - "## Generating text\n", + "## Generar texto\n", "\n", - "We can use the results from the previous section to generate new text with the same relationships between consecutive words as in the original.\n", - "Here's how it works:\n", + "Podemos usar los resultados de la sección anterior para generar texto nuevo con las mismas relaciones entre palabras consecutivas que en el original.\n", + "Así funciona:\n", "\n", - "* Starting with any word that appears in the text, we look up its possible successors and choose one at random.\n", + "* Empezando con cualquier palabra que aparezca en el texto, buscamos sus posibles sucesores y elegimos uno al azar.\n", "\n", - "* Then, using the chosen word, we look up its possible successors, and choose one at random.\n", + "* Luego, usando la palabra elegida, buscamos sus posibles sucesores y elegimos uno al azar.\n", "\n", - "We can repeat this process to generate as many words as we want.\n", - "As an example, let's start with the word `'although'`.\n", - "Here are the words that can follow it." + "Podemos repetir este proceso para generar tantas palabras como queramos.\n", + "Como ejemplo, empecemos con la palabra `'although'`.\n", + "Estas son las palabras que pueden seguirla." ] }, { @@ -1331,7 +1331,7 @@ "id": "b26a2ead", "metadata": {}, "source": [ - "We can use `choice` to choose from the list with equal probability." + "Podemos usar `choice` para elegir de la lista con la misma probabilidad." ] }, { @@ -1347,9 +1347,9 @@ "id": "9741beca", "metadata": {}, "source": [ - "If the same word appears more than once in the list, it is more likely to be selected.\n", + "Si la misma palabra aparece más de una vez en la lista, es más probable que sea seleccionada.\n", "\n", - "Repeating these steps, we can use the following loop to generate a longer series." + "Repitiendo estos pasos, podemos usar el siguiente bucle para generar una serie más larga." ] }, { @@ -1365,11 +1365,11 @@ "id": "38a2d79a", "metadata": {}, "source": [ - "The result sounds more like a real sentence, but it still doesn't make much sense.\n", + "El resultado suena más como una oración real, pero todavía no tiene mucho sentido.\n", "\n", - "We can do better using more than one word as a key in `successor_map`.\n", - "For example, we can make a dictionary that maps from each bigram -- or trigram -- to the list of words that come next.\n", - "As an exercise, you'll have a chance to implement this analysis and see what the results look like." + "Podemos hacerlo mejor usando más de una palabra como clave en `successor_map`.\n", + "Por ejemplo, podemos crear un diccionario que asocie cada bigrama -- o trigram -- con la lista de palabras que vienen después.\n", + "Como ejercicio, tendrás la oportunidad de implementar este análisis y ver cómo son los resultados." ] }, { @@ -1379,32 +1379,32 @@ "tags": [] }, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "At this point we are writing more substantial programs, and you might find that you are spending more time debugging.\n", - "If you are stuck on a difficult bug, here are a few things to try:\n", + "A estas alturas estamos escribiendo programas más sustanciales, y puede que descubras que pasas más tiempo depurando.\n", + "Si estás atascado con un bug difícil, aquí tienes algunas cosas que puedes probar:\n", "\n", - "* Reading: Examine your code, read it back to yourself, and check that it says what you meant to say.\n", + "* Leer: examina tu código, léelo en voz alta para ti y comprueba que dice lo que querías decir.\n", "\n", - "* Running: Experiment by making changes and running different versions. Often if you display the right thing at the right place in the program, the problem becomes obvious, but sometimes you have to build scaffolding.\n", + "* Ejecutar: experimenta haciendo cambios y ejecutando versiones diferentes. A menudo, si muestras lo correcto en el lugar correcto del programa, el problema se vuelve obvio, pero a veces tienes que construir código de apoyo.\n", "\n", - "* Ruminating: Take some time to think! What kind of error is it: syntax, runtime,\n", - " or semantic? What information can you get from the error messages,\n", - " or from the output of the program? What kind of error could cause\n", - " the problem you're seeing? What did you change last, before the\n", - " problem appeared?\n", + "* Rumiar: ¡tómate tiempo para pensar! ¿Qué tipo de error es: de sintaxis, de runtime,\n", + " o semántico? ¿Qué información puedes obtener de los mensajes de error,\n", + " o del output del programa? ¿Qué tipo de error podría causar\n", + " el problema que estás viendo? ¿Qué cambiaste por última vez, antes de que\n", + " apareciera el problema?\n", "\n", - "* Rubberducking: If you explain the problem to someone else, you sometimes find the\n", - " answer before you finish asking the question. Often you don't need\n", - " the other person; you could just talk to a rubber duck. And that's\n", - " the origin of the well-known strategy called **rubber duck\n", - " debugging**. I am not making this up -- see\n", - " .\n", + "* Rubberducking: si explicas el problema a otra persona, a veces encuentras la\n", + " respuesta antes de terminar de hacer la pregunta. A menudo no necesitas\n", + " a la otra persona; podrías hablarle a un patito de goma. Y ese es\n", + " el origen de la estrategia conocida como **rubber duck\n", + " depuración**. No me lo estoy inventando -- ver\n", + " .\n", "\n", - "* Retreating: At some point, the best thing to do is back up -- undoing recent\n", - " changes -- until you get to a program that works. Then you can start rebuilding.\n", + "* Retirarse: en algún momento, lo mejor es retroceder -- deshacer cambios\n", + " recientes -- hasta llegar a un programa que funcione. Luego puedes empezar a reconstruir.\n", " \n", - "* Resting: If you give your brain a break, sometime it will find the problem for you." + "* Descansar: si le das un respiro a tu cerebro, a veces encontrará el problema por ti." ] }, { @@ -1412,15 +1412,15 @@ "id": "12c2cd32", "metadata": {}, "source": [ - "Beginning programmers sometimes get stuck on one of these activities and forget the others. Each activity comes with its own failure mode.\n", + "Los programadores principiantes a veces se quedan atascados en una de estas actividades y olvidan las demás. Cada actividad tiene su propio modo de fallo.\n", "\n", - "For example, reading your code works if the problem is a typographical error, but not if the problem is a conceptual misunderstanding.\n", - "If you don't understand what your program does, you can read it 100 times and never see the error, because the error is in your head.\n", + "Por ejemplo, leer tu código funciona si el problema es un error tipográfico, pero no si el problema es un malentendido conceptual.\n", + "Si no entiendes lo que hace tu programa, puedes leerlo 100 veces y nunca ver el error, porque el error está en tu cabeza.\n", "\n", - "Running experiments can work, especially if you run small, simple tests.\n", - "But if you run experiments without thinking or reading your code, it can take a long time to figure out what's happening.\n", + "Ejecutar experimentos puede funcionar, especialmente si ejecutas tests pequeños y simples.\n", + "Pero si haces experimentos sin pensar ni leer tu código, puede llevar mucho tiempo averiguar qué está pasando.\n", "\n", - "You have to take time to think. Debugging is like an experimental science. You should have at least one hypothesis about what the problem is. If there are two or more possibilities, try to think of a test that would eliminate one of them." + "Tienes que tomarte tiempo para pensar. Depurar es como una ciencia experimental. Deberías tener al menos una hipótesis sobre cuál es el problema. Si hay dos o más posibilidades, intenta pensar en un test que elimine una de ellas." ] }, { @@ -1428,18 +1428,13 @@ "id": "a55036e1", "metadata": {}, "source": [ - "But even the best debugging techniques will fail if there are too many\n", - "errors, or if the code you are trying to fix is too big and complicated.\n", - "Sometimes the best option is to retreat, simplifying the program until\n", - "you get back to something that works.\n", + "Pero incluso las mejores técnicas de depuración fallarán si hay demasiados errores, o si el código que intentas arreglar es demasiado grande y complicado.\n", + "A veces la mejor opción es retirarse, simplificando el programa hasta volver a algo que funcione.\n", "\n", - "Beginning programmers are often reluctant to retreat because they can't\n", - "stand to delete a line of code (even if it's wrong). If it makes you\n", - "feel better, copy your program into another file before you start\n", - "stripping it down. Then you can copy the pieces back one at a time.\n", + "Los programadores principiantes a menudo se resisten a retirarse porque no soportan borrar una línea de código (aunque esté mal). Si te hace sentir mejor, copia tu programa en otro archivo antes de empezar a recortarlo. Luego puedes copiar las piezas de vuelta una por una.\n", "\n", - "Finding a hard bug requires reading, running, ruminating, retreating, and sometimes resting.\n", - "If you get stuck on one of these activities, try the others." + "Encontrar un bug difícil requiere leer, ejecutar, rumiar, retirarse y a veces descansar.\n", + "Si te atascas en una de estas actividades, prueba las otras." ] }, { @@ -1447,31 +1442,31 @@ "id": "25d091af", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**default value:**\n", - "The value assigned to a parameter if no argument is provided.\n", + "**valor por defecto:**\n", + "El valor asignado a un parámetro si no se proporciona ningún argumento.\n", "\n", "**override:**\n", - " To replace a default value with an argument.\n", + " Reemplazar un valor por defecto por un argumento.\n", "\n", - "**deterministic:**\n", - " A deterministic program does the same thing each time it runs, given the same inputs.\n", + "**determinista:**\n", + " Un programa determinista hace lo mismo cada vez que se ejecuta, dados los mismos inputs.\n", "\n", "**pseudorandom:**\n", - " A pseudorandom sequence of numbers appears to be random, but is generated by a deterministic program.\n", + " Una secuencia pseudorandom de números parece aleatoria, pero es generada por un programa determinista.\n", "\n", - "**bigram:**\n", - "A sequence of two elements, often words.\n", + "**bigrama:**\n", + "Una secuencia de dos elementos, a menudo palabras.\n", "\n", "**trigram:**\n", - "A sequence of three elements.\n", + "Una secuencia de tres elementos.\n", "\n", "**n-gram:**\n", - "A sequence of an unspecified number of elements.\n", + "Una secuencia de un número no especificado de elementos.\n", "\n", - "**rubber duck debugging:**\n", - "A way of debugging by explaining a problem aloud to an inanimate object." + "**rubber duck depuración:**\n", + "Una forma de depurar explicando un problema en voz alta a un objeto inanimado." ] }, { @@ -1479,7 +1474,7 @@ "id": "cde18229", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1497,9 +1492,9 @@ "id": "9b0efab8", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "In `add_bigram`, the `if` statement creates a new list or appends an element to an existing list, depending on whether the key is already in the dictionary." + "En `add_bigram`, la sentencia `if` crea una nueva lista o añade un elemento a una lista existente, dependiendo de si la clave ya está en el diccionario." ] }, { @@ -1515,13 +1510,13 @@ "id": "30d9e549", "metadata": {}, "source": [ - "Dictionaries provide a method called `setdefault` that we can use to do the same thing more concisely.\n", - "Ask a virtual assistant how it works, or copy `add_word` into a virtual assistant and ask \"Can you rewrite this using `setdefault`?\"\n", + "Diccionarios proporcionan un método llamado `setdefault` que podemos usar para hacer lo mismo de forma más concisa.\n", + "Pregunta a un asistente virtual cómo funciona, o copia `add_word` en un asistente virtual y pregunta \"Can you rewrite this using `setdefault`?\"\n", "\n", - "In this chapter we implemented Markov chain text analysis and generation.\n", - "If you are curious, you can ask a virtual assistant for more information on the topic.\n", - "One of the things you might learn is that virtual assistants use algorithms that are similar in many ways -- but also different in important ways.\n", - "Ask a VA, \"What are the differences between large language models like GPT and Markov chain text analysis?\"" + "En este capítulo implementamos análisis y generación de texto con cadenas de Markov.\n", + "Si tienes curiosidad, puedes pedirle a un asistente virtual más información sobre el tema.\n", + "Una de las cosas que podrías aprender es que los asistentes virtuales usan algoritmos que son similares en muchos aspectos -- pero también diferentes en aspectos importantes.\n", + "Pregunta a un VA: \"What are the differences between large language models like GPT and Markov chain text analysis?" ] }, { @@ -1529,12 +1524,12 @@ "id": "060c9ef6", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function that counts the number of times each trigram (sequence of three words) appears. \n", - "If you test your function with the text of _Dr. Jekyll and Mr. Hyde_, you should find that the most common trigram is \"said the lawyer\".\n", + "Escribe una función que cuente el número de veces que aparece cada trigram (secuencia de tres palabras). \n", + "Si pruebas tu función con el texto de _Dr. Jekyll and Mr. Hyde_, deberías encontrar que el trigram más común es \"said the lawyer\".\n", "\n", - "Hint: Write a function called `count_trigram` that is similar to `count_bigram`. Then write a function called `process_word_trigram` that is similar to `process_word_bigram`." + "Pista: escribe una función llamada `count_trigram` que sea similar a `count_bigram`. Luego escribe una función llamada `process_word_trigram` que sea similar a `process_word_bigram`." ] }, { @@ -1560,7 +1555,7 @@ "tags": [] }, "source": [ - "You can use the following loop to read the book and process the words." + "Puedes usar el siguiente bucle para leer el libro y procesar las palabras." ] }, { @@ -1580,7 +1575,7 @@ "tags": [] }, "source": [ - "Then use `print_most_common` to find the most common trigrams in the book." + "Luego usa `print_most_common` para encontrar los trigrams más comunes del libro." ] }, { @@ -1598,11 +1593,11 @@ "id": "4bd07bb7", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Now let's implement Markov chain text analysis with a mapping from each bigram to a list of possible successors.\n", + "Ahora implementemos análisis de texto con cadenas de Markov usando un mapeo de cada bigrama a una lista de posibles sucesores.\n", "\n", - "Starting with `add_bigram`, write a function called `add_trigram` that takes a list of three words and either adds or updates an item in `successor_map`, using the first two words as the key and the third word as a possible successor." + "Empezando con `add_bigram`, escribe una función llamada `add_trigram` que tome una lista de tres palabras y añada o actualice un elemento en `successor_map`, usando las dos primeras palabras como clave y la tercera palabra como posible sucesor." ] }, { @@ -1618,7 +1613,7 @@ "id": "94d683fe", "metadata": {}, "source": [ - "Here's a version of `process_word_trigram` that calls `add_trigram`." + "Aquí tienes una versión de `process_word_trigram` que llama a `add_trigram`." ] }, { @@ -1636,7 +1631,7 @@ "tags": [] }, "source": [ - "You can use the following loop to test your function with the lyrics of \"Eric, the Half a Bee\"." + "Puedes usar el siguiente bucle para probar tu función con la letra de \"Eric, the Half a Bee\"." ] }, { @@ -1656,8 +1651,8 @@ "tags": [] }, "source": [ - "If your function works as intended, the predecessor `('half', 'a')` should map to a list with the single element `'bee'`.\n", - "In fact, as it happens, each bigram in this song appear only once, so all of the values in `successor_map` have a single element." + "Si tu función funciona como se espera, el predecesor `('half', 'a')` debería asociarse con una lista cuyo único elemento es `'bee'`.\n", + "De hecho, resulta que cada bigrama de esta canción aparece solo una vez, así que todos los valores de `successor_map` tienen un único elemento." ] }, { @@ -1675,7 +1670,7 @@ "id": "886212b5", "metadata": {}, "source": [ - "You can use the following loop to test your function with the words from the book." + "Puedes usar el siguiente bucle para probar tu función con las palabras del libro." ] }, { @@ -1691,7 +1686,7 @@ "id": "3e1d073e", "metadata": {}, "source": [ - "In the next exercise, you'll use the results to generate new random text." + "En el siguiente ejercicio, usarás los resultados para generar nuevo texto aleatorio." ] }, { @@ -1699,9 +1694,9 @@ "id": "04d7a6ee", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "For this exercise, we'll assume that `successor_map` is a dictionary that maps from each bigram to the list of words that follow it." + "Para este ejercicio, asumiremos que `successor_map` es un diccionario que asocia cada bigrama con la lista de palabras que lo siguen." ] }, { @@ -1719,7 +1714,7 @@ "id": "fb0f8f7d", "metadata": {}, "source": [ - "To generate random text, we'll start by choosing a random key from `successor_map`." + "Para generar texto aleatorio, empezaremos eligiendo una clave aleatoria de `successor_map`." ] }, { @@ -1735,15 +1730,15 @@ "id": "83ed6c7e", "metadata": {}, "source": [ - "Now write a loop that generates 50 more words following these steps:\n", + "Ahora escribe un bucle que genere 50 palabras más siguiendo estos pasos:\n", "\n", - "1. In `successor_map`, look up the list of words that can follow `bigram`.\n", + "1. En `successor_map`, busca la lista de palabras que pueden seguir a `bigram`.\n", "\n", - "2. Choose one of them at random and print it.\n", + "2. Elige una de ellas al azar e imprímela.\n", "\n", - "3. For the next iteration, make a new bigram that contains the second word from `bigram` and the chosen successor.\n", + "3. Para la siguiente iteración, crea un nuevo bigrama que contenga la segunda palabra de `bigram` y el sucesor elegido.\n", "\n", - "For example, if we start with the bigram `('doubted', 'if')` and choose `'from'` as its successor, the next bigram is `('if', 'from')`." + "Por ejemplo, si empezamos con el bigrama `('doubted', 'if')` y elegimos `'from'` como sucesor, el siguiente bigrama es `('if', 'from')`." ] }, { @@ -1759,9 +1754,9 @@ "id": "c71d8a89", "metadata": {}, "source": [ - "If everything is working, you should find that the generated text is recognizably similar in style to the original, and some phrases make sense, but the text might wander from one topic to another.\n", + "Si todo funciona, deberías encontrar que el texto generado es reconociblemente similar en estilo al original, y algunas frases tienen sentido, pero el texto podría saltar de un tema a otro.\n", "\n", - "As a bonus exercise, modify your solution to the last two exercises to use trigrams as keys in `successor_map`, and see what effect it has on the results." + "Como ejercicio extra, modifica tu solución a los dos últimos ejercicios para usar trigrams como claves en `successor_map`, y mira qué efecto tiene en los resultados." ] }, { @@ -1783,7 +1778,9 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", + "\n", + "Código license: [MIT License](https://mit-license.org/)\n", "\n", "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] diff --git a/blank/chap13.ipynb b/blank/chap13.ipynb index 69616a9..2c8a646 100644 --- a/blank/chap13.ipynb +++ b/blank/chap13.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -27,8 +27,8 @@ "tags": [] }, "source": [ - "Credit: Photos downloaded from [Lorem Picsum](https://picsum.photos/), a service that provides placeholder images.\n", - "The name is a reference to \"lorem ipsum\", which is a name for placeholder text.\n" + "Crédito: las fotos se descargaron de [Lorem Picsum](https://picsum.photos/), un servicio que proporciona imágenes de marcador de posición.\n", + "El nombre es una referencia a \"lorem ipsum\", que es un nombre para texto de marcador de posición.\n" ] }, { @@ -66,19 +66,19 @@ "id": "92934cb0", "metadata": {}, "source": [ - "# Files and Databases\n", + "# Archivos y bases de datos\n", "\n", - "Most of the programs we have seen so far are **ephemeral** in the sense that they run for a short time and produce output, but when they end, their data disappears.\n", - "Each time you run an ephemeral program, it starts with a clean slate.\n", + "La mayoría de los programas que hemos visto hasta ahora son **efímeros** en el sentido de que se ejecutan durante poco tiempo y producen output, pero cuando terminan, sus datos desaparecen.\n", + "Cada vez que ejecutas un programa efímero, empieza desde cero.\n", "\n", - "Other programs are **persistent**: they run for a long time (or all the time); they keep at least some of their data in long-term storage; and if they shut down and restart, they pick up where they left off.\n", + "Otros programas son **persistentes**: se ejecutan durante mucho tiempo (o todo el tiempo); mantienen al menos parte de sus datos en almacenamiento a largo plazo; y, si se cierran y se reinician, continúan donde lo dejaron.\n", "\n", - "A simple way for programs to maintain their data is by reading and writing text files.\n", - "A more versatile alternative is to store data in a database.\n", - "Databases are specialized files that can be read and written more efficiently than text files, and they provide additional capabilities.\n", + "Una forma sencilla de que los programas mantengan sus datos es leer y escribir archivos de texto.\n", + "Una alternativa más versátil es almacenar datos en una base de datos.\n", + "Las bases de datos son archivos especializados que se pueden leer y escribir de forma más eficiente que los archivos de texto, y proporcionan capacidades adicionales.\n", "\n", - "In this chapter, we'll write programs that read and write text files and databases, and as an exercise you'll write a program that searches a collection of photos for duplicates.\n", - "But before you can work with a file, you have to find it, so we'll start with file names, paths, and directories." + "En este capítulo escribiremos programas que leen y escriben archivos de texto y bases de datos, y como ejercicio escribirás un programa que busca duplicados en una colección de fotos.\n", + "Pero antes de poder trabajar con un archivo, tienes que encontrarlo, así que empezaremos con nombres de archivo, rutas y directorios." ] }, { @@ -86,14 +86,14 @@ "id": "75cec7ca", "metadata": {}, "source": [ - "## Filenames and paths\n", + "## Nombres de archivo y rutas\n", "\n", - "Files are organized into **directories**, also called \"folders\".\n", - "Every running program has a **current working directory**, which is the default directory for most operations.\n", - "For example, when you open a file, Python looks for it in the current working directory.\n", + "Los archivos se organizan en **directorios**, también llamados \"carpetas\".\n", + "Todo programa en ejecución tiene un **directorio de trabajo actual**, que es el directorio por defecto para la mayoría de operaciones.\n", + "Por ejemplo, cuando abres un archivo, Python lo busca en el directorio de trabajo actual.\n", "\n", - "The `os` module provides functions for working with files and directories (\"os\" stands for \"operating system\"). \n", - "It provides a function called `getcwd` that gets the name of the current working directory." + "El módulo `os` proporciona funciones para trabajar con archivos y directorios (\"os\" significa \"operating system\"). \n", + "Proporciona una función llamada `getcwd` que obtiene el nombre del directorio de trabajo actual." ] }, { @@ -119,14 +119,14 @@ "id": "6c55575f", "metadata": {}, "source": [ - "The result in this example is the home directory of a user named `dinsdale`.\n", - "A string like `'/home/dinsdale'` that identifies a file or directory is called a **path**.\n", + "El resultado en este ejemplo es el directorio personal de un usuario llamado `dinsdale`.\n", + "Una string como `'/home/dinsdale'` que identifica un archivo o directorio se llama **ruta**.\n", "\n", - "A simple filename like `'memo.txt'` is also considered a path, but it is a **relative path** because it specifies a file name relative to the current directory.\n", - "In this example, the current directory is `/home/dinsdale`, so `'memo.txt'` is equivalent to the complete path `'/home/dinsdale/memo.txt'`.\n", + "Un nombre de archivo sencillo como `'memo.txt'` también se considera una ruta, pero es un **ruta relativa** porque especifica un nombre de archivo relativo al directorio actual.\n", + "En este ejemplo, el directorio actual es `/home/dinsdale`, así que `'memo.txt'` equivale a la ruta completa `'/home/dinsdale/memo.txt'`.\n", "\n", - "A path that begins with `/` does not depend on the current directory -- it is called an **absolute path**. \n", - "To find the absolute path to a file, you can use `abspath`." + "Un ruta que empieza con `/` no depende del directorio actual -- se llama **ruta absoluta**. \n", + "Para encontrar la ruta absoluta de un archivo, puedes usar `abspath`." ] }, { @@ -142,9 +142,9 @@ "id": "f1a0cf04", "metadata": {}, "source": [ - "The `os` module provides other functions for working with filenames and paths.\n", - "`listdir` returns a list of the contents of the given directory, including files and other directories.\n", - "Here's an example that lists the contents of a directory named `photos`." + "El módulo `os` proporciona otras funciones para trabajar con nombres de archivo y rutas.\n", + "`listdir` devuelve una lista con el contenido del directorio indicado, incluyendo archivos y otros directorios.\n", + "Aquí tienes un ejemplo que lista el contenido de un directorio llamado `photos`." ] }, { @@ -160,8 +160,8 @@ "id": "ab160f29", "metadata": {}, "source": [ - "This directory contains a text file named `notes.txt` and three directories.\n", - "The directories contain image files in the JPEG format." + "Este directorio contiene un archivo de texto llamado `notes.txt` y tres directorios.\n", + "Los directorios contienen archivos de imagen en formato JPEG." ] }, { @@ -177,7 +177,7 @@ "id": "06b27c85", "metadata": {}, "source": [ - "To check whether a file or directory exists, we can use `os.path.exists`." + "Para comprobar si existe un archivo o directorio, podemos usar `os.path.exists`." ] }, { @@ -201,7 +201,7 @@ "id": "d41f235c", "metadata": {}, "source": [ - "To check whether a path refers to a file or directory, we can use `isdir`, which return `True` if a path refers to a directory." + "Para comprobar si una ruta se refiere a un archivo o a un directorio, podemos usar `isdir`, que devuelve `True` si una ruta se refiere a un directorio." ] }, { @@ -217,7 +217,7 @@ "id": "4bd70cc9", "metadata": {}, "source": [ - "And `isfile` which returns `True` if a path refers to a file." + "Y `isfile`, que devuelve `True` si una ruta se refiere a un archivo." ] }, { @@ -233,12 +233,12 @@ "id": "c6933c18", "metadata": {}, "source": [ - "One challenge of working with paths is that they look different on different operating systems.\n", - "On macOS and UNIX systems like Linux, the directory and file names in a path are separated by a forward slash, `/`.\n", - "Windows uses a backward slash, `\\`.\n", - "So, if you you run these examples on Windows, you will see backward slashes in the paths, and you'll have to replace the forward slashes in the examples.\n", + "Un desafío al trabajar con rutas es que se ven distintos en diferentes sistemas operativos.\n", + "En macOS y sistemas UNIX como Linux, los nombres de directorios y archivos en una ruta se separan con una barra inclinada, `/`.\n", + "Windows usa una barra invertida, `\\`.\n", + "Así que, si ejecutas estos ejemplos en Windows, verás barras invertidas en los rutas y tendrás que reemplazar las barras inclinadas de los ejemplos.\n", "\n", - "Or, to write code that works on both systems, you can use `os.path.join`, which joins directory and filenames into a path using a forward or backward slash, depending on which operating system you are using." + "O, para escribir código que funcione en ambos sistemas, puedes usar `os.path.join`, que une nombres de directorio y de archivo en una ruta usando una barra inclinada o invertida, según el sistema operativo que estés usando." ] }, { @@ -254,7 +254,7 @@ "id": "0a665cf9", "metadata": {}, "source": [ - "Later in this chapter we'll use these functions to search a set of directories and find all of the image files." + "Más adelante en este capítulo usaremos estas funciones para buscar en un conjunto de directorios y encontrar todos los archivos de imagen." ] }, { @@ -264,10 +264,10 @@ "source": [ "## f-strings\n", "\n", - "One way for programs to store data is to write it to a text file.\n", - "For example, suppose you are a camel spotter, and you want to record the number of camels you have seen during a period of observation.\n", - "And suppose that in one and a half years, you have spotted `23` camels.\n", - "The data in your camel-spotting book might look like this." + "Una forma en que los programas almacenan datos es escribirlos en un archivo de texto.\n", + "Por ejemplo, supón que observas camellos y quieres registrar el número de camellos que has visto durante un periodo de observación.\n", + "Y supón que en un año y medio has visto `23` camellos.\n", + "Los datos de tu cuaderno de observación de camellos podrían verse así." ] }, { @@ -283,11 +283,11 @@ "id": "f652aaac", "metadata": {}, "source": [ - "To write this data to a file, you can use the `write` method, which we saw in Chapter 8.\n", - "The argument of `write` has to be a string, so if we want to put other values in a file, we have to convert them to strings.\n", - "The easiest way to do that is with the built-in function `str`.\n", + "Para escribir estos datos en un archivo, puedes usar el método `write`, que vimos en el Capítulo 8.\n", + "El argumento de `write` tiene que ser una string, así que si queremos poner otros valores en un archivo, tenemos que convertirlos a strings.\n", + "La forma más sencilla de hacerlo es con la función integrada `str`.\n", "\n", - "Here's what that looks like:" + "Así es como se ve:" ] }, { @@ -303,8 +303,8 @@ "id": "307c22d2", "metadata": {}, "source": [ - "That works, but `write` doesn't add a space or newline unless you include it explicitly.\n", - "If we read back the file, we see that the two numbers are run together." + "Eso funciona, pero `write` no añade un espacio ni una nueva línea a menos que lo incluyas explícitamente.\n", + "Si volvemos a leer el archivo, vemos que los dos números quedan pegados." ] }, { @@ -320,11 +320,11 @@ "id": "8008ecdc", "metadata": {}, "source": [ - "At the very least, we should add whitespace between the numbers.\n", - "And while we're at it, let's add some explanatory text.\n", + "Como mínimo, deberíamos añadir espacios en blanco entre los números.\n", + "Y ya que estamos, añadamos algo de texto explicativo.\n", "\n", - "To write a combination of strings and other values, we can use an **f-string**, which is a string that has the letter `f` before the opening quotation mark, and contains one or more Python expressions in curly braces.\n", - "The following f-string contains one expression, which is a variable name." + "Para escribir una combinación de strings y otros valores, podemos usar una **f-string**, que es una string que tiene la letra `f` antes de la comilla de apertura y contiene una o más expresiones de Python entre llaves.\n", + "La siguiente f-string contiene una expresión, que es el nombre de una variable." ] }, { @@ -340,8 +340,8 @@ "id": "a3fb0556", "metadata": {}, "source": [ - "The result is a string where the expression has been evaluated and replaced with the result.\n", - "There can be more than one expression." + "El resultado es una string donde la expresión se ha evaluado y se ha reemplazado por el resultado.\n", + "Puede haber más de una expresión." ] }, { @@ -357,7 +357,7 @@ "id": "bace1539", "metadata": {}, "source": [ - "And the expressions can contain operators and function calls." + "Y las expresiones pueden contener operadores y llamadas a función." ] }, { @@ -373,7 +373,7 @@ "id": "bc6fa094", "metadata": {}, "source": [ - "So we could write the data to a text file like this." + "Así que podríamos escribir los datos en un archivo de texto así." ] }, { @@ -389,9 +389,9 @@ "id": "f916d561", "metadata": {}, "source": [ - "Both f-strings end with the sequence `\\n`, which adds a newline character.\n", + "Ambas f-strings terminan con la secuencia `\\n`, que añade un carácter de nueva línea.\n", "\n", - "We can read the file back like this:" + "Podemos volver a leer el archivo así:" ] }, { @@ -407,7 +407,7 @@ "id": "c3bf6913", "metadata": {}, "source": [ - "In an f-string, an expression in curly brace is converted to a string, so you can include lists, dictionaries, and other types." + "En una f-string, una expresión entre llaves se convierte en una string, así que puedes incluir listas, diccionarios y otros tipos." ] }, { @@ -425,7 +425,7 @@ "tags": [] }, "source": [ - "If a f-string contains an invalid expression, the result is an error." + "Si una f-string contiene una expresión no válida, el resultado es un error." ] }, { @@ -445,11 +445,11 @@ "source": [ "## YAML\n", "\n", - "One of the reasons programs read and write files is to store **configuration data**, which is information that specifies what the program should do and how.\n", + "Una de las razones por las que los programas leen y escriben archivos es para almacenar **datos de configuración**, que son información que especifica qué debe hacer el programa y cómo.\n", "\n", - "For example, in a program that searches for duplicate photos, we might have a dictionary called `config` that contains the name of the directory to search, the name of another directory where it should store the results, and a list of file extensions it should use to identify image files.\n", + "Por ejemplo, en un programa que busca fotos duplicadas, podríamos tener un diccionario llamado `config` que contiene el nombre del directorio donde buscar, el nombre de otro directorio donde debería almacenar los resultados y una lista de extensiones de archivo que debería usar para identificar archivos de imagen.\n", "\n", - "Here's what it might look like:" + "Así podría verse:" ] }, { @@ -465,11 +465,11 @@ "id": "1667bb96", "metadata": {}, "source": [ - "To write this data in a text file, we could use f-strings, as in the previous section. But it is easier to use a module called `yaml` that is designed for just this sort of thing.\n", + "Para escribir estos datos en un archivo de texto, podríamos usar f-strings, como en la sección anterior. Pero es más fácil usar un módulo llamado `yaml` que está diseñado justo para este tipo de cosas.\n", "\n", - "The `yaml` module provides functions to work with YAML files, which are text files formatted to be easy for humans *and* programs to read and write.\n", + "El módulo `yaml` proporciona funciones para trabajar con archivos YAML, que son archivos de texto con un formato pensado para que sean fáciles de leer y escribir tanto para humanos *como* para programas.\n", "\n", - "Here's an example that uses the `dump` function to write the `config` dictionary to a YAML file. " + "Aquí tienes un ejemplo que usa la función `dump` para escribir el diccionario `config` en un archivo YAML. " ] }, { @@ -495,7 +495,7 @@ "id": "92d1b7ff", "metadata": {}, "source": [ - "If we read back the contents of the file, we can see what the YAML format looks like." + "Si volvemos a leer el contenido del archivo, podemos ver cómo es el formato YAML." ] }, { @@ -511,7 +511,7 @@ "id": "33cdfd2c", "metadata": {}, "source": [ - "Now, we can use `safe_load` to read back the YAML file." + "Ahora podemos usar `safe_load` para volver a leer el archivo YAML." ] }, { @@ -527,7 +527,7 @@ "id": "ca55764f", "metadata": {}, "source": [ - "The result is new dictionary that contains the same information as the original, but it is not the same dictionary." + "El resultado es un nuevo diccionario que contiene la misma información que el original, pero no es el mismo diccionario." ] }, { @@ -543,9 +543,9 @@ "id": "969ad306", "metadata": {}, "source": [ - "Converting an object like a dictionary to a string is called **serialization**.\n", - "Converting the string back to an object is called **deserialization**.\n", - "If you serialize and then deserialize an object, the result should be equivalent to the original." + "Convertir un objeto como un diccionario en una string se llama **serialización**.\n", + "Convertir la string de vuelta en un objeto se llama **deserialización**.\n", + "Si serializas y luego deserializas un objeto, el resultado debería ser equivalente al original." ] }, { @@ -555,14 +555,14 @@ "source": [ "## Shelve\n", "\n", - "So far we've been reading and writing text files -- now let's consider databases.\n", - "A **database** is a file that is organized for storing data.\n", - "Some databases are organized like a table with rows and columns of information.\n", - "Others are organized like a dictionary that maps from keys to values; they are sometimes called **key-value stores**.\n", + "Hasta ahora hemos estado leyendo y escribiendo archivos de texto -- ahora consideremos las bases de datos.\n", + "Una **base de datos** es un archivo organizado para almacenar datos.\n", + "Algunas bases de datos se organizan como una tabla con filas y columnas de información.\n", + "Otras se organizan como un diccionario que mapea claves a valores; a veces se llaman **almacenes clave-valor**.\n", "\n", - "The `shelve` module provides functions for creating and updating a key-value store called a \"shelf\".\n", - "As an example, we'll create a shelf to contain captions for the figures in the `photos` directory.\n", - "We'll use the `config` dictionary to get the name of the directory where we should put the shelf." + "El módulo `shelve` proporciona funciones para crear y actualizar un almacén clave-valor llamado \"shelf\".\n", + "Como ejemplo, crearemos un shelf para contener captions de las figuras del directorio `photos`.\n", + "Usaremos el diccionario `config` para obtener el nombre del directorio donde deberíamos poner el shelf." ] }, { @@ -578,7 +578,7 @@ "id": "3e6cfb65", "metadata": {}, "source": [ - "We can use `os.makedirs` to create this directory, if it doesn't already exist." + "Podemos usar `os.makedirs` para crear este directorio, si todavía no existe." ] }, { @@ -594,7 +594,7 @@ "id": "6352f83f", "metadata": {}, "source": [ - "And `os.path.join` to make a path that includes the name of the directory and the name of the shelf file, `captions`." + "Y `os.path.join` para crear una ruta que incluya el nombre del directorio y el nombre del archivo del shelf, `captions`." ] }, { @@ -610,8 +610,8 @@ "id": "cbb08679", "metadata": {}, "source": [ - "Now we can use `shelve.open` to open the shelf file.\n", - "The argument `c` indicates that the file should be created if necessary." + "Ahora podemos usar `shelve.open` para abrir el archivo del shelf.\n", + "El argumento `c` indica que el archivo debería crearse si es necesario." ] }, { @@ -627,10 +627,10 @@ "id": "0e4a2fb3", "metadata": {}, "source": [ - "The return value is officially a `DbfilenameShelf` object, more casually called a shelf object.\n", + "El valor de retorno es oficialmente un objeto `DbfilenameShelf`, llamado de manera más informal un objeto shelf.\n", "\n", - "The shelf object behaves in many ways like a dictionary.\n", - "For example, we can use the bracket operator to add an item, which is a mapping from a key to a value." + "El objeto shelf se comporta de muchas maneras como un diccionario.\n", + "Por ejemplo, podemos usar el operador de corchetes para añadir un elemento, que es un mapeo de una clave a un valor." ] }, { @@ -646,9 +646,9 @@ "id": "36fd5e3a", "metadata": {}, "source": [ - "In this example, the key is the path to an image file and the value is a string that describes the image.\n", + "En este ejemplo, la clave es la ruta a un archivo de imagen y el valor es una string que describe la imagen.\n", "\n", - "We also use the bracket operator to look up a key and get the corresponding value." + "También usamos el operador de corchetes para buscar una clave y obtener el valor correspondiente." ] }, { @@ -664,7 +664,7 @@ "id": "e9b252a7", "metadata": {}, "source": [ - "If you make another assignment to an existing key, `shelve` replaces the old value." + "Si haces otra asignación a una clave existente, `shelve` reemplaza el valor anterior." ] }, { @@ -680,7 +680,7 @@ "id": "003eacbc", "metadata": {}, "source": [ - "Some dictionary methods, like `keys`, `values` and `items`, also work with shelf objects." + "Algunos métodos de diccionario, como `keys`, `values` e `items`, también funcionan con objetos shelf." ] }, { @@ -704,7 +704,7 @@ "id": "056e0bd9", "metadata": {}, "source": [ - "We can use the `in` operator to check whether a key appears in the shelf." + "Podemos usar el operador `in` para comprobar si una clave aparece en el shelf." ] }, { @@ -720,7 +720,7 @@ "id": "982740b4", "metadata": {}, "source": [ - "And we can use a `for` statement to loop through the keys." + "Y podemos usar una sentencia `for` para iterar sobre las claves." ] }, { @@ -736,7 +736,7 @@ "id": "b67a0ddc", "metadata": {}, "source": [ - "As with other files, you should close the database when you are done." + "Como con otros archivos, deberías cerrar la base de datos cuando termines." ] }, { @@ -752,7 +752,7 @@ "id": "a1e08b41", "metadata": {}, "source": [ - "Now if we list the contents of the data directory, we see two files." + "Ahora, si listamos el contenido del directorio de datos, vemos dos archivos." ] }, { @@ -778,9 +778,9 @@ "id": "97453006", "metadata": {}, "source": [ - "`captions.dat` contains the data we just stored.\n", - "`captions.dir` contains information about the organization of the database that makes it more efficient to access.\n", - "The suffix `dir` stands for \"directory\", but it has nothing to do with the directories we've been working with that contain files." + "`captions.dat` contiene los datos que acabamos de almacenar.\n", + "`captions.dir` contiene información sobre la organización de la base de datos que hace que el acceso sea más eficiente.\n", + "El sufijo `dir` significa \"directorio\", pero no tiene nada que ver con los directorios con los que hemos estado trabajando y que contienen archivos." ] }, { @@ -790,17 +790,17 @@ "tags": [] }, "source": [ - "## Storing data structures\n", + "## Almacenar estructuras de datos\n", "\n", - "In the previous example, the keys and values in the shelf are strings.\n", - "But we can also use a shelf to contain data structures like lists and dictionaries.\n", + "En el ejemplo anterior, las claves y valores del shelf son strings.\n", + "Pero también podemos usar un shelf para contener estructuras de datos como listas y diccionarios.\n", "\n", - "As an example, let's revisit the anagram example from an exercise in [Chapter 11](section_exercise_11).\n", - "Recall that we made a dictionary that maps from a sorted string of letters to the\n", - "list of words that can be spelled with those letters.\n", - "For example, the key `'opst'` maps to the list `['opts', 'post', 'pots', 'spot', 'stop', 'tops']`.\n", + "Como ejemplo, volvamos al ejemplo de anagramas de un ejercicio en el [Capítulo 11](section_exercise_11).\n", + "Recuerda que hicimos un diccionario que mapea una string ordenada de letras a la\n", + "lista de palabras que se pueden formar con esas letras.\n", + "Por ejemplo, la clave `'opst'` mapea a la lista `['opts', 'post', 'pots', 'spot', 'stop', 'tops']`.\n", "\n", - "We'll use the following function to sort the letters in a word." + "Usaremos la siguiente función para ordenar las letras de una palabra." ] }, { @@ -816,7 +816,7 @@ "id": "8c24316c", "metadata": {}, "source": [ - "And here's an example." + "Y aquí tienes un ejemplo." ] }, { @@ -832,8 +832,8 @@ "id": "7c5d7555", "metadata": {}, "source": [ - "Now let's open a shelf called `anagram_map`.\n", - "The argument `'n'` means we should always create a new, empty shelf, even if one already exists." + "Ahora abramos un shelf llamado `anagram_map`.\n", + "El argumento `'n'` significa que siempre deberíamos crear un shelf nuevo y vacío, aunque ya exista uno." ] }, { @@ -849,7 +849,7 @@ "id": "6b495e79", "metadata": {}, "source": [ - "Now we can add an item to the shelf like this." + "Ahora podemos añadir un elemento al shelf así." ] }, { @@ -865,9 +865,9 @@ "id": "f058dff1", "metadata": {}, "source": [ - "In this item, the key is a string and the value is a list of strings.\n", + "En este elemento, la clave es una string y el valor es una lista de strings.\n", "\n", - "Now suppose we find another word that contains the same letters, like `tops`" + "Ahora supón que encontramos otra palabra que contiene las mismas letras, como `tops`" ] }, { @@ -883,8 +883,8 @@ "id": "a215367d", "metadata": {}, "source": [ - "The key is the same as in the previous example, so we want to append a second word to the same list of strings.\n", - "Here's how we would do it if `db` were a dictionary." + "La clave es la misma que en el ejemplo anterior, así que queremos añadir una segunda palabra a la misma lista de strings.\n", + "Así es como lo haríamos si `db` fuera un diccionario." ] }, { @@ -900,7 +900,7 @@ "id": "e1a83f39", "metadata": {}, "source": [ - "But if we run that and then look up the key in the shelf, it looks like it has not been updated." + "Pero si lo ejecutamos y luego buscamos la clave en el shelf, parece que no se ha actualizado." ] }, { @@ -916,8 +916,8 @@ "id": "32a56de9", "metadata": {}, "source": [ - "Here's the problem: when we look up the key, we get a list of strings, but if we modify the list of strings, it does not affect the shelf.\n", - "If we want to update the shelf, we have to read the old value, update it, and then write the new value back to the shelf." + "Este es el problema: cuando buscamos la clave, obtenemos una lista de strings, pero si modificamos la lista de strings, eso no afecta al shelf.\n", + "Si queremos actualizar el shelf, tenemos que leer el valor antiguo, actualizarlo y luego escribir el nuevo valor de vuelta en el shelf." ] }, { @@ -933,7 +933,7 @@ "id": "a054f537", "metadata": {}, "source": [ - "Now the value in the shelf is updated." + "Ahora el valor del shelf está actualizado." ] }, { @@ -949,7 +949,7 @@ "id": "ca02c0d7", "metadata": {}, "source": [ - "As an exercise, you can finish this example by reading the word list and storing all of the anagrams in a shelf." + "Como ejercicio, puedes terminar este ejemplo leyendo la lista de palabras y almacenando todos los anagramas en un shelf." ] }, { @@ -969,15 +969,15 @@ "tags": [] }, "source": [ - "## Checking for equivalent files\n", + "## Comprobar archivos equivalentes\n", "\n", - "Now let's get back to the goal of this chapter: searching for different files that contain the same data.\n", - "One way to check is to read the contents of both files and compare.\n", + "Ahora volvamos al objetivo de este capítulo: buscar archivos diferentes que contienen los mismos datos.\n", + "Una forma de comprobarlo es leer el contenido de ambos archivos y compararlo.\n", "\n", - "If the files contain images, we have to open them with mode `'rb'`, where `'r'` means we want to read the contents and `'b'` indicates **binary mode**.\n", - "In binary mode, the contents are not interpreted as text -- they are treated as a sequence of bytes.\n", + "Si los archivos contienen imágenes, tenemos que abrirlos con el modo `'rb'`, donde `'r'` significa que queremos leer el contenido y `'b'` indica **modo binario**.\n", + "En modo binario, el contenido no se interpreta como texto -- se trata como una secuencia de bytes.\n", "\n", - "Here's an example that opens and reads an image file." + "Aquí tienes un ejemplo que abre y lee un archivo de imagen." ] }, { @@ -993,10 +993,10 @@ "id": "36687da2", "metadata": {}, "source": [ - "The result from `read` is a `bytes` object -- as the name suggests, it contains a sequence of bytes.\n", + "El resultado de `read` es un objeto `bytes` -- como sugiere el nombre, contiene una secuencia de bytes.\n", "\n", - "In general the contents of an image file and not human-readable.\n", - "But if we read the contents from a second file, we can use the `==` operator to compare." + "En general, el contenido de un archivo de imagen no es legible para humanos.\n", + "Pero si leemos el contenido de un segundo archivo, podemos usar el operador `==` para comparar." ] }, { @@ -1012,9 +1012,9 @@ "id": "36006cd4", "metadata": {}, "source": [ - "These two files are not equivalent.\n", + "Estos dos archivos no son equivalentes.\n", "\n", - "Let's encapsulate what we have so far in a function." + "Encapsulemos lo que tenemos hasta ahora en una función." ] }, { @@ -1030,16 +1030,16 @@ "id": "b4e08850", "metadata": {}, "source": [ - "If we have only two files, this function is a good option.\n", - "But suppose we have a large number of files and we want to know whether any two of them contain the same data.\n", - "It would be inefficient to compare every pair of files.\n", + "Si solo tenemos dos archivos, esta función es una buena opción.\n", + "Pero supón que tenemos un gran número de archivos y queremos saber si dos cualesquiera contienen los mismos datos.\n", + "Sería ineficiente comparar cada par de archivos.\n", "\n", - "An alternative is to use a **hash function**, which takes the contents of a file and computes a **digest**, which is usually a large integer.\n", - "If two files contain the same data, they will have the same digest.\n", - "If two files differ, they will *almost always* have different digests.\n", + "Una alternativa es usar una **función hash**, que toma el contenido de un archivo y calcula un **digest**, que normalmente es un entero grande.\n", + "Si dos archivos contienen los mismos datos, tendrán el mismo digest.\n", + "Si dos archivos son diferentes, *casi siempre* tendrán digests diferentes.\n", "\n", - "The `hashlib` module provides several hash functions -- the one we'll use is called `md5`.\n", - "We'll start by using `hashlib.md5` to create a `HASH` object." + "El módulo `hashlib` proporciona varias hash funciones -- la que usaremos se llama `md5`.\n", + "Empezaremos usando `hashlib.md5` para crear un objeto `HASH`." ] }, { @@ -1055,7 +1055,7 @@ "id": "a8e480f0", "metadata": {}, "source": [ - "The `HASH` object provides an `update` method that takes the contents of the file as an argument." + "El objeto `HASH` proporciona un método `update` que toma el contenido del archivo como argumento." ] }, { @@ -1071,7 +1071,7 @@ "id": "86bd6bc0", "metadata": {}, "source": [ - "Now we can use `hexdigest` to get the digest as a string of hexadecimal digits that represent an integer in base 16." + "Ahora podemos usar `hexdigest` para obtener el digest como una string de dígitos hexadecimales que representan un entero en base 16." ] }, { @@ -1087,7 +1087,7 @@ "id": "b9b4b347", "metadata": {}, "source": [ - "The following function encapsulates these steps." + "La siguiente función encapsula estos pasos." ] }, { @@ -1103,7 +1103,7 @@ "id": "914b85b2", "metadata": {}, "source": [ - "If we hash the contents of a different file, we can confirm that we get a different digest." + "Si hacemos hash del contenido de un archivo diferente, podemos confirmar que obtenemos un digest distinto." ] }, { @@ -1119,8 +1119,8 @@ "id": "deeabdde", "metadata": {}, "source": [ - "Now we have almost everything we need to find equivalent files.\n", - "The last step is to search a directory and find all of the images files." + "Ahora tenemos casi todo lo que necesitamos para encontrar archivos equivalentes.\n", + "El último paso es buscar en un directorio y encontrar todos los archivos de imagen." ] }, { @@ -1130,12 +1130,12 @@ "tags": [] }, "source": [ - "## Walking directories\n", + "## Recorrer directorios\n", "\n", - "The following function takes as an argument the directory we want to search.\n", - "It uses `listdir` to loop through the contents of the directory.\n", - "When it finds a file, it prints its complete path.\n", - "When it finds a directory, it calls itself recursively to search the subdirectory." + "La siguiente función toma como argumento el directorio donde queremos buscar.\n", + "Usa `listdir` para iterar sobre el contenido del directorio.\n", + "Cuando encuentra un archivo, imprime su ruta completa.\n", + "Cuando encuentra un directorio, se llama a sí misma recursivamente para buscar en el subdirectorio." ] }, { @@ -1151,7 +1151,7 @@ "id": "faaf5b25", "metadata": {}, "source": [ - "We can use it like this:" + "Podemos usarla así:" ] }, { @@ -1167,7 +1167,7 @@ "id": "897c66bf", "metadata": {}, "source": [ - "The order of the results depends on details of the operating system." + "El orden de los resultados depende de detalles del sistema operativo." ] }, { @@ -1175,12 +1175,12 @@ "id": "c7853f18", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "When you are reading and writing files, you might run into problems with whitespace.\n", - "These errors can be hard to debug because whitespace characters are normally invisible.\n", - "For example, here's a string that contains spaces, a tab represented by the sequence `\\t`, and a newline represented by the sequence `\\n`.\n", - "When we print it, we don't see the whitespace characters." + "Cuando lees y escribes archivos, puedes encontrarte con problemas relacionados con espacios en blanco.\n", + "Estos errores pueden ser difíciles de depurar porque los caracteres de espacio en blanco normalmente son invisibles.\n", + "Por ejemplo, aquí tienes una string que contiene espacios, un tab representado por la secuencia `\\t` y una nueva línea representada por la secuencia `\\n`.\n", + "Cuando la imprimimos, no vemos los caracteres de espacio en blanco." ] }, { @@ -1196,8 +1196,8 @@ "id": "49bbebe6", "metadata": {}, "source": [ - "The built-in function `repr` can help. It takes any object as an argument and returns a string representation of the object.\n", - "For strings, it represents whitespace characters with backslash sequences." + "La función integrada `repr` puede ayudar. Toma cualquier objeto como argumento y devuelve una representación en string del objeto.\n", + "Para strings, representa los caracteres de espacio en blanco con secuencias de barra invertida." ] }, { @@ -1213,15 +1213,15 @@ "id": "790cf8dd", "metadata": {}, "source": [ - "This can be helpful for debugging.\n", + "Esto puede ser útil para depurar.\n", "\n", - "One other problem you might run into is that different systems use different characters to indicate the end of a line. Some systems use a newline, represented `\\n`. Others use a return character, represented `\\r`. \n", - "Some use both. If you move files between different systems, these\n", - "inconsistencies can cause problems.\n", + "Otro problema que puedes encontrar es que distintos sistemas usan distintos caracteres para indicar el final de una línea. Algunos sistemas usan una nueva línea, representada como `\\n`. Otros usan un carácter de retorno, representado como `\\r`. \n", + "Algunos usan ambos. Si mueves archivos entre sistemas diferentes, estas\n", + "inconsistencias pueden causar problemas.\n", "\n", - "File name capitalization is another issue you might encounter if you work with different operating systems.\n", - "In macOS and UNIX, file names can contain lowercase and uppercase letters, digits, and most symbols.\n", - "But many Windows applications ignore the difference between lowercase and uppercase letters, and several symbols that are allowed in macOS and UNIX are not allowed in Windows." + "La capitalización de los nombres de archivo es otro problema que puedes encontrar si trabajas con distintos sistemas operativos.\n", + "En macOS y UNIX, los nombres de archivo pueden contener letras minúsculas y mayúsculas, dígitos y la mayoría de símbolos.\n", + "Pero muchas aplicaciones de Windows ignoran la diferencia entre letras minúsculas y mayúsculas, y varios símbolos que se permiten en macOS y UNIX no se permiten en Windows." ] }, { @@ -1229,55 +1229,55 @@ "id": "cf063639", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**ephemeral:**\n", - "An ephemeral program typically runs for a short time and, when it ends, its data are lost.\n", + "**efímero:**\n", + "Un programa efímero normalmente se ejecuta durante poco tiempo y, cuando termina, sus datos se pierden.\n", "\n", - "**persistent:**\n", - " A persistent program runs indefinitely and keeps at least some of its data in permanent storage.\n", + "**persistente:**\n", + " Un programa persistente se ejecuta indefinidamente y mantiene al menos parte de sus datos en almacenamiento permanente.\n", "\n", - "**directory:**\n", - "A collection of files and other directories.\n", + "**directorio:**\n", + "Una colección de archivos y otros directorios.\n", "\n", - "**current working directory:**\n", - "The default directory used by a program unless another directory is specified.\n", + "**directorio de trabajo actual:**\n", + "El directorio por defecto usado por un programa a menos que se especifique otro directorio.\n", "\n", - "**path:**\n", - " A string that specifies a sequence of directories, often leading to a file.\n", + "**ruta:**\n", + " Una string que especifica una secuencia de directorios, que a menudo conduce a un archivo.\n", "\n", - "**relative path:**\n", - "A path that starts from the current working directory, or some other specified directory.\n", + "**ruta relativa:**\n", + "Un ruta que empieza desde el directorio de trabajo actual, o desde algún otro directorio especificado.\n", "\n", - "**absolute path:**\n", - "A path that does not depend on the current directory.\n", + "**ruta absoluta:**\n", + "Un ruta que no depende del directorio actual.\n", "\n", "**f-string:**\n", - "A string that has the letter `f` before the opening quotation mark, and contains one or more expressions in curly braces.\n", + "Una string que tiene la letra `f` antes de la comilla de apertura y contiene una o más expresiones entre llaves.\n", "\n", - "**configuration data:**\n", - "Data, often stored in a file, that specifies what a program should do and how.\n", + "**datos de configuración:**\n", + "Datos, a menudo almacenados en un archivo, que especifican qué debe hacer un programa y cómo.\n", "\n", - "**serialization:**\n", - "Converting an object to a string.\n", + "**serialización:**\n", + "Convertir un objeto en una string.\n", "\n", - "**deserialization:**\n", - "Converting a string to an object.\n", + "**deserialización:**\n", + "Convertir una string en un objeto.\n", "\n", - "**database:**\n", - " A file whose contents are organized to perform certain operations efficiently.\n", + "**base de datos:**\n", + " Un archivo cuyo contenido está organizado para realizar ciertas operaciones de manera eficiente.\n", "\n", - "**key-value stores:**\n", - "A database whose contents are organized like a dictionary with keys that correspond to values.\n", + "**almacenes clave-valor:**\n", + "Una base de datos cuyo contenido está organizado como un diccionario con claves que corresponden a valores.\n", "\n", - "**binary mode:**\n", - "A way of opening a file so the contents are interpreted as sequence of bytes rather than a sequence of characters.\n", + "**modo binario:**\n", + "Una forma de abrir un archivo para que el contenido se interprete como una secuencia de bytes en lugar de como una secuencia de caracteres.\n", "\n", - "**hash function:**\n", - "A function that takes and object and computes an integer, which is sometimes called a digest.\n", + "**función hash:**\n", + "Una función que toma un objeto y calcula un entero, que a veces se llama digest.\n", "\n", "**digest:**\n", - "The result of a hash function, especially when it is used to check whether two objects are the same." + "El resultado de una función hash, especialmente cuando se usa para comprobar si dos objetos son iguales." ] }, { @@ -1285,7 +1285,7 @@ "id": "67941fdd", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1303,32 +1303,32 @@ "id": "9a537173", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "There are several topics that came up in this chapter that I did not explain in detail.\n", - "Here are some questions you can ask a virtual assistant to get more information. \n", + "Hay varios temas que surgieron en este capítulo que no expliqué en detalle.\n", + "Aquí tienes algunas preguntas que puedes hacerle a un asistente virtual para obtener más información. \n", "\n", - "* \"What are the differences between ephemeral and persistent programs?\"\n", + "* \"¿Cuáles son las diferencias entre programas efímeros y persistentes?\"\n", "\n", - "* \"What are some examples of persistent programs?\"\n", + "* \"¿Cuáles son algunos ejemplos de programas persistentes?\"\n", "\n", - "* \"What's the difference between a relative path and an absolute path?\"\n", + "* \"¿Cuál es la diferencia entre una ruta relativa y una ruta absoluta?\"\n", "\n", - "* \"Why does the `yaml` module have functions called `load` and `safe_load`?\"\n", + "* \"¿Por qué el módulo `yaml` tiene funciones llamadas `load` y `safe_load`?\"\n", "\n", - "* \"When I write a Python shelf, what are the files with suffixes `dat` and `dir`?\"\n", + "* \"Cuando escribo un shelf de Python, ¿qué son los archivos con sufijos `dat` y `dir`?\"\n", "\n", - "* \"Other than key-values stores, what other kinds of databases are there?\"\n", + "* \"Además de los almacenes clave-valor, ¿qué otros tipos de bases de datos existen?\"\n", "\n", - "* \"When I read a file, what's the difference between binary mode and text mode?\"\n", + "* \"Cuando leo un archivo, ¿cuál es la diferencia entre modo binario y modo texto?\"\n", "\n", - "* \"What are the differences between a bytes object and a string?\"\n", + "* \"¿Cuáles son las diferencias entre un objeto bytes y una string?\"\n", "\n", - "* \"What is a hash function?\"\n", + "* \"¿Qué es una función hash?\"\n", "\n", - "* \"What is an MD5 digest?\"\n", + "* \"¿Qué es un digest MD5?\"\n", "\n", - "As always, if you get stuck on any of the following exercises, consider asking a VA for help. Along with your question, you might want to paste in the relevant functions from this chapter." + "Como siempre, si te quedas atascado en alguno de los ejercicios siguientes, considera pedir ayuda a un AV. Junto con tu pregunta, quizá quieras pegar las funciones relevantes de este capítulo." ] }, { @@ -1336,11 +1336,11 @@ "id": "7586e1e9", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `replace_all` that takes as arguments a pattern string, a replacement string, and two filenames.\n", - "It should read the first file and write the contents into the second file (creating it if necessary).\n", - "If the pattern string appears anywhere in the contents, it should be replaced with the replacement string." + "Escribe una función llamada `replace_all` que tome como argumentos una string patrón, una string de reemplazo y dos nombres de archivo.\n", + "Debería leer el primer archivo y escribir el contenido en el segundo archivo (creándolo si es necesario).\n", + "Si la string patrón aparece en cualquier parte del contenido, debería reemplazarse por la string de reemplazo." ] }, { @@ -1350,7 +1350,7 @@ "tags": [] }, "source": [ - "Here's an outline of the function to get you started." + "Aquí tienes un esquema de la función para empezar." ] }, { @@ -1374,7 +1374,7 @@ "id": "7f37245c", "metadata": {}, "source": [ - "To test your function, read the file `photos/notes.txt`, replace `'photos'` with `'images'`, and write the result to the file `photos/new_notes.txt`." + "Para probar tu función, lee el archivo `photos/notes.txt`, reemplaza `'photos'` por `'images'` y escribe el resultado en el archivo `photos/new_notes.txt`." ] }, { @@ -1412,12 +1412,12 @@ "id": "7b2589a4", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In [a previous section](section_storing_data_structure), we used the `shelve` module to make a key-value store that maps from a sorted string of letters to a list of anagrams.\n", - "To finish the example, write a function called `add_word` that takes as arguments a string and a shelf object.\n", + "En [una sección anterior](section_storing_data_structure), usamos el módulo `shelve` para crear un almacén clave-valor que mapea una string ordenada de letras a una lista de anagramas.\n", + "Para terminar el ejemplo, escribe una función llamada `add_word` que tome como argumentos una string y un objeto shelf.\n", "\n", - "It should sort the letters of the word to make a key, then check whether the key is already in the shelf. If not, it should make a list that contains the new word and add it to the shelf. If so, it should append the new word to the existing value. " + "Debería ordenar las letras de la palabra para crear una clave, y luego comprobar si la clave ya está en el shelf. Si no, debería crear una lista que contenga la nueva palabra y añadirla al shelf. Si sí, debería añadir la nueva palabra al valor existente. " ] }, { @@ -1435,7 +1435,7 @@ "tags": [] }, "source": [ - "You can use this loop to test your function." + "Puedes usar este bucle para probar tu función." ] }, { @@ -1465,7 +1465,7 @@ "tags": [] }, "source": [ - "If everything is working, you should be able to look up a key like `'opst'` and get a list of words that can be spelled with those letters." + "Si todo funciona, deberías poder buscar una clave como `'opst'` y obtener una lista de palabras que se pueden formar con esas letras." ] }, { @@ -1503,23 +1503,23 @@ "id": "228e977c", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In a large collection of files, there may be more than one copy of the same file, stored in different directories or with different file names.\n", - "The goal of this exercise is to search for duplicates.\n", - "As an example, we'll work with image files in the `photos` directory.\n", + "En una colección grande de archivos, puede haber más de una copia del mismo archivo, almacenada en distintos directorios o con distintos nombres de archivo.\n", + "El objetivo de este ejercicio es buscar duplicados.\n", + "Como ejemplo, trabajaremos con archivos de imagen en el directorio `photos`.\n", "\n", - "Here's how it will work:\n", + "Así es como funcionará:\n", "\n", - "* We'll use the `walk` function from [](section_walking_directories) to search this directory for files that end with one of the extensions in `config['extensions']`.\n", + "* Usaremos la función `walk` de [](section_walking_directories) para buscar en este directorio archivos que terminen con una de las extensiones en `config['extensions']`.\n", "\n", - "* For each file, we'll use `md5_digest` from [](section_md5_digest) to compute a digest of the contents.\n", + "* Para cada archivo, usaremos `md5_digest` de [](section_md5_digest) para calcular un digest del contenido.\n", "\n", - "* Using a shelf, we'll make a mapping from each digest to a list of paths with that digest.\n", + "* Usando un shelf, haremos un mapeo de cada digest a una lista de rutas con ese digest.\n", "\n", - "* Finally, we'll search the shelf for any digests that map to multiple files.\n", + "* Finalmente, buscaremos en el shelf cualquier digest que mapee a múltiples archivos.\n", "\n", - "* If we find any, we'll use `same_contents` to confirm that the files contain the same data." + "* Si encontramos alguno, usaremos `same_contents` para confirmar que los archivos contienen los mismos datos." ] }, { @@ -1527,9 +1527,9 @@ "id": "8f5365da", "metadata": {}, "source": [ - "I'll suggest some functions to write first, then we'll bring it all together.\n", + "Voy a sugerir algunas funciones para escribir primero, y luego lo juntaremos todo.\n", "\n", - "1. To identify image files, write a function called `is_image` that takes a path and a list of file extensions, and returns `True` if the path ends with one of the extensions in the list. Hint: Use `os.path.splitext` -- or ask a virtual assistant to write this function for you." + "1. Para identificar archivos de imagen, escribe una función llamada `is_image` que tome una ruta y una lista de extensiones de archivo, y devuelva `True` si la ruta termina con una de las extensiones de la lista. Pista: usa `os.path.splitext` -- o pide a un asistente virtual que escriba esta función por ti." ] }, { @@ -1547,7 +1547,7 @@ "tags": [] }, "source": [ - "You can use `doctest` to test your function." + "Puedes usar `doctest` para probar tu función." ] }, { @@ -1565,7 +1565,7 @@ "id": "1a7c8f49", "metadata": {}, "source": [ - "2. Write a function called `add_path` that takes as arguments a path and a shelf. It should use `md5_digest` to compute a digest of the file contents. Then it should update the shelf, either creating a new item that maps from the digest to a list containing the path, or appending the path to the list if it exists." + "2. Escribe una función llamada `add_path` que tome como argumentos una ruta y un shelf. Debería usar `md5_digest` para calcular un digest del contenido del archivo. Luego debería actualizar el shelf, ya sea creando un nuevo elemento que mapee el digest a una lista que contenga la ruta, o añadiendo la ruta a la lista si ya existe." ] }, { @@ -1581,7 +1581,7 @@ "id": "08223a21", "metadata": {}, "source": [ - "3. Write a version of `walk` called `walk_images` that takes a directory and walks through the files in the directory and its subdirectories. For each file, it should use `is_image` to check whether it's an image file and `add_path` to add it to the shelf." + "3. Escribe una versión de `walk` llamada `walk_images` que tome un directorio y recorra los archivos del directorio y sus subdirectorios. Para cada archivo, debería usar `is_image` para comprobar si es un archivo de imagen y `add_path` para añadirlo al shelf." ] }, { @@ -1597,7 +1597,7 @@ "id": "1ea76a52", "metadata": {}, "source": [ - "When everything is working, you can use the following program to create the shelf, search the `photos` directory and add paths to the shelf, and then check whether there are multiple files with the same digest." + "Cuando todo funcione, puedes usar el siguiente programa para crear el shelf, buscar en el directorio `photos` y añadir rutas al shelf, y luego comprobar si hay múltiples archivos con el mismo digest." ] }, { @@ -1615,8 +1615,8 @@ "id": "102d4d10", "metadata": {}, "source": [ - "You should find one pair of files that have the same digest.\n", - "Use `same_contents` to check whether they contain the same data." + "Deberías encontrar un par de archivos que tienen el mismo digest.\n", + "Usa `same_contents` para comprobar si contienen los mismos datos." ] }, { @@ -1646,9 +1646,11 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Código license: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] } ], diff --git a/blank/chap14.ipynb b/blank/chap14.ipynb index 38aaffc..ad2d4cd 100644 --- a/blank/chap14.ipynb +++ b/blank/chap14.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -25,14 +25,14 @@ "id": "e826e661", "metadata": {}, "source": [ - "# Classes and Functions\n", + "# Clases y funciones\n", "\n", - "At this point you know how to use functions to organize code and how to use built-in types to organize data.\n", - "The next step is **object-oriented programming**, which uses programmer-defined types to organize both code and data.\n", + "A estas alturas sabes cómo usar funciones para organizar código y cómo usar tipos integrados para organizar datos.\n", + "El siguiente paso es la **programación orientada a objetos**, que usa tipos definidos por el programador para organizar tanto código como datos.\n", "\n", - "Object-oriented programming is a big topic, so we will proceed gradually.\n", - "In this chapter, we'll start with code that is not idiomatic -- that is, it is not the kind of code experienced programmers write -- but it is a good place to start.\n", - "In the next two chapters, we will use additional features to write more idiomatic code." + "La programación orientada a objetos es un tema amplio, así que avanzaremos gradualmente.\n", + "En este capítulo, empezaremos con código que no es idiomático -- es decir, no es el tipo de código que escriben los programadores con experiencia -- pero es un buen punto de partida.\n", + "En los dos capítulos siguientes, usaremos características adicionales para escribir código más idiomático." ] }, { @@ -40,12 +40,12 @@ "id": "6b414d4a", "metadata": {}, "source": [ - "## Programmer-defined types\n", + "## Tipos definidos por el programador\n", "\n", - "We have used many of Python's built-in types -- now we will define a new type.\n", - "As a first example, we'll create a type called `Time` that represents a time of day.\n", - "A programmer-defined type is also called a **class**.\n", - "A class definition looks like this:" + "Hemos usado muchos de los tipos integrados de Python -- ahora definiremos un tipo nuevo.\n", + "Como primer ejemplo, crearemos un tipo llamado `Time` que representa una hora del día.\n", + "Un tipo definido por el programador también se llama **clase**.\n", + "Una definición de clase se ve así:" ] }, { @@ -61,12 +61,12 @@ "id": "e2414cd2", "metadata": {}, "source": [ - "The header indicates that the new class is called `Time`.\n", - "The body is a docstring that explains what the class is for.\n", - "Defining a class creates a **class object**.\n", + "La cabecera indica que la nueva clase se llama `Time`.\n", + "El cuerpo es un docstring que explica para qué sirve la clase.\n", + "Definir una clase crea un **objeto de clase**.\n", "\n", - "The class object is like a factory for creating objects.\n", - "To create a `Time` object, you call `Time` as if it were a function." + "El objeto de clase es como una fábrica para crear objetos.\n", + "Para crear un objeto `Time`, llamas a `Time` como si fuera una función." ] }, { @@ -82,7 +82,7 @@ "id": "f63247d4", "metadata": {}, "source": [ - "The result is a new object whose type is `__main__.Time`, where `__main__` is the name of the module where `Time` is defined." + "El resultado es un objeto nuevo cuyo tipo es `__main__.Time`, donde `__main__` es el nombre del módulo donde se define `Time`." ] }, { @@ -98,7 +98,7 @@ "id": "14d0c96a", "metadata": {}, "source": [ - "When you print an object, Python tells you what type it is and where it is stored in memory (the prefix `0x` means that the following number is in hexadecimal)." + "Cuando imprimes un objeto, Python te dice de qué tipo es y dónde está almacenado en memoria (el prefijo `0x` significa que el número siguiente está en hexadecimal)." ] }, { @@ -114,7 +114,7 @@ "id": "b6445414", "metadata": {}, "source": [ - "Creating a new object is called **instantiation**, and the object is an **instance** of the class." + "Crear un objeto nuevo se llama **instanciación**, y el objeto es una **instancia** de la clase." ] }, { @@ -122,10 +122,10 @@ "id": "4c3768ec", "metadata": {}, "source": [ - "## Attributes\n", + "## Atributos\n", "\n", - "An object can contain variables, which are called **attributes** and pronounced with the emphasis on the first syllable, like \"AT-trib-ute\", rather than the second syllable, like \"a-TRIB-ute\".\n", - "We can create attributes using dot notation." + "Un objeto puede contener variables, que se llaman **atributos**.\n", + "Podemos crear atributos usando notación de punto." ] }, { @@ -141,9 +141,9 @@ "id": "b3fd8858", "metadata": {}, "source": [ - "This example creates attributes called `hour`, `minute`, and `second`, which contain the hours, minutes, and seconds of the time `11:59:01`, which is lunch time as far as I am concerned.\n", + "Este ejemplo crea atributos llamados `hour`, `minute` y `second`, que contienen las horas, minutos y segundos de la hora `11:59:01`, que es la hora de comer por lo que a mí respecta.\n", "\n", - "The following diagram shows the state of `lunch` and its attributes after these assignments. " + "El siguiente diagrama muestra el estado de `lunch` y sus atributos después de estas asignaciones. " ] }, { @@ -171,11 +171,11 @@ "id": "d9df5b48", "metadata": {}, "source": [ - "The variable `lunch` refers to a `Time` object, which contains three attributes. \n", - "Each attribute refers to an integer.\n", - "A state diagram like this -- which shows an object and its attributes -- is called an **object diagram**.\n", + "La variable `lunch` se refiere a un objeto `Time`, que contiene tres atributos. \n", + "Cada atributo se refiere a un entero.\n", + "Un diagrama de estado como este -- que muestra un objeto y sus atributos -- se llama **diagrama de objeto**.\n", "\n", - "You can read the value of an attribute using the dot operator." + "Puedes leer el valor de un atributo usando el operador de punto." ] }, { @@ -191,7 +191,7 @@ "id": "5ccfaea0", "metadata": {}, "source": [ - "You can use an attribute as part of any expression." + "Puedes usar un atributo como parte de cualquier expresión." ] }, { @@ -207,7 +207,7 @@ "id": "c5e6725b", "metadata": {}, "source": [ - "And you can use the dot operator in an expression in an f-string." + "Y puedes usar el operador de punto en una expresión dentro de una f-string." ] }, { @@ -223,10 +223,10 @@ "id": "e70671d2", "metadata": {}, "source": [ - "But notice that the previous example is not in the standard format.\n", - "To fix it, we have to print the `minute` and `second` attributes with a leading zero.\n", - "We can do that by extending the expressions in curly braces with a **format specifier**.\n", - "In the following example, the format specifiers indicate that `minute` and `second` should be displayed with at least two digits and a leading zero if needed." + "Pero observa que el ejemplo anterior no está en el formato estándar.\n", + "Para arreglarlo, tenemos que imprimir los atributos `minute` y `second` con un cero inicial.\n", + "Podemos hacerlo extendiendo las expresiones entre llaves con un **especificador de formato**.\n", + "En el siguiente ejemplo, los especificadores de formato indican que `minute` y `second` deberían mostrarse con al menos dos dígitos y un cero inicial si hace falta." ] }, { @@ -242,9 +242,9 @@ "id": "bcbea13a", "metadata": {}, "source": [ - "We'll use this f-string to write a function that displays the value of a `Time`object.\n", - "You can pass an object as an argument in the usual way.\n", - "For example, the following function takes a `Time` object as an argument. " + "Usaremos esta f-string para escribir una función que muestra el valor de un objeto `Time`.\n", + "Puedes pasar un objeto como argumento de la forma habitual.\n", + "Por ejemplo, la siguiente función toma un objeto `Time` como argumento. " ] }, { @@ -260,7 +260,7 @@ "id": "3b8ccbed", "metadata": {}, "source": [ - "When we call it, we can pass `lunch` as an argument." + "Cuando la llamamos, podemos pasar `lunch` como argumento." ] }, { @@ -276,9 +276,9 @@ "id": "18826e53", "metadata": {}, "source": [ - "## Objects as return values\n", + "## Objetos como valores de retorno\n", "\n", - "Functions can return objects. For example, `make_time` takes parameters called `hour`, `minute`, and `second`, stores them as attributes in a `Time` object, and returns the new object." + "Las funciones pueden devolver objetos. Por ejemplo, `make_time` toma parámetros llamados `hour`, `minute` y `second`, los almacena como atributos en un objeto `Time` y devuelve el objeto nuevo." ] }, { @@ -294,8 +294,8 @@ "id": "d8a6acca", "metadata": {}, "source": [ - "It might be surprising that the parameters have the same names as the attributes, but that's a common way to write a function like this.\n", - "Here's how we use `make_time` to create a `Time` object.`" + "Puede sorprender que los parámetros tengan los mismos nombres que los atributos, pero esa es una forma habitual de escribir una función como esta.\n", + "Así usamos `make_time` para crear un objeto `Time`." ] }, { @@ -311,12 +311,12 @@ "id": "05720bcb", "metadata": {}, "source": [ - "## Objects are mutable\n", + "## Los objetos son mutables\n", "\n", - "Suppose you are going to a screening of a movie, like *Monty Python and the Holy Grail*, which starts at `9:20 PM` and runs for `92` minutes, which is one hour `32` minutes.\n", - "What time will the movie end?\n", + "Supón que vas a una proyección de una película, como *Monty Python and the Holy Grail*, que empieza a las `9:20 PM` y dura `92` minutos, que es una hora y `32` minutos.\n", + "¿A qué hora terminará la película?\n", "\n", - "First, we'll create a `Time` object that represents the start time." + "Primero, crearemos un objeto `Time` que representa la hora de inicio." ] }, { @@ -332,7 +332,7 @@ "id": "001bcda9", "metadata": {}, "source": [ - "To find the end time, we can modify the attributes of the `Time` object, adding the duration of the movie." + "Para encontrar la hora de fin, podemos modificar los atributos del objeto `Time`, añadiendo la duración de la película." ] }, { @@ -348,9 +348,9 @@ "id": "7007ab61", "metadata": {}, "source": [ - "The movie will be over at 10:52 PM.\n", + "La película terminará a las 10:52 PM.\n", "\n", - "Let's encapsulate this computation in a function and generalize it to take the duration of the movie in three parameters: `hours`, `minutes`, and `seconds`." + "Encapsulemos este cálculo en una función y generalicémoslo para que tome la duración de la película en tres parámetros: `hours`, `minutes` y `seconds`." ] }, { @@ -366,7 +366,7 @@ "id": "a51913e2", "metadata": {}, "source": [ - "Here is an example that demonstrates the effect." + "Aquí tienes un ejemplo que demuestra el efecto." ] }, { @@ -382,7 +382,7 @@ "id": "42d7de02", "metadata": {}, "source": [ - "The following stack diagram shows the state of the program just before `increment_time` modifies the object." + "El siguiente stack diagram muestra el estado del programa justo antes de que `increment_time` modifique el objeto." ] }, { @@ -410,11 +410,11 @@ "id": "d1e27667", "metadata": {}, "source": [ - "Inside the function, `time` is an alias for `start`, so when `time` is modified, `start` changes.\n", + "Dentro de la función, `time` es un alias de `start`, así que cuando se modifica `time`, cambia `start`.\n", "\n", - "This function works, but after it runs, we're left with a variable named `start` that refers to an object that represents the *end* time, and we no longer have an object that represents the start time.\n", - "It would be better to leave `start` unchanged and make a new object to represent the end time.\n", - "We can do that by copying `start` and modifying the copy." + "Esta función funciona, pero después de ejecutarse nos quedamos con una variable llamada `start` que se refiere a un objeto que representa la hora de *fin*, y ya no tenemos un objeto que represente la hora de inicio.\n", + "Sería mejor dejar `start` sin cambios y crear un objeto nuevo para representar la hora de fin.\n", + "Podemos hacerlo copiando `start` y modificando la copia." ] }, { @@ -422,10 +422,10 @@ "id": "0128f850", "metadata": {}, "source": [ - "## Copying\n", + "## Copiar\n", "\n", - "The `copy` module provides a function called `copy` that can duplicate any object.\n", - "We can import it like this." + "El módulo `copy` proporciona una función llamada `copy` que puede duplicar cualquier objeto.\n", + "Podemos importarla así." ] }, { @@ -441,7 +441,7 @@ "id": "940adbeb", "metadata": {}, "source": [ - "To see how it works, let's start with a new `Time` object that represents the start time of the movie." + "Para ver cómo funciona, empecemos con un objeto `Time` nuevo que representa la hora de inicio de la película." ] }, { @@ -457,7 +457,7 @@ "id": "514f05b9", "metadata": {}, "source": [ - "And make a copy." + "Y hagamos una copia." ] }, { @@ -473,7 +473,7 @@ "id": "87d8956b", "metadata": {}, "source": [ - "Now `start` and `end` contain the same data." + "Ahora `start` y `end` contienen los mismos datos." ] }, { @@ -489,7 +489,7 @@ "id": "e75c1e09", "metadata": {}, "source": [ - "But the `is` operator confirms that they are not the same object." + "Pero el operador `is` confirma que no son el mismo objeto." ] }, { @@ -505,7 +505,7 @@ "id": "22b68a3f", "metadata": {}, "source": [ - "Let's see what the `==` operator does." + "Veamos qué hace el operador `==`." ] }, { @@ -521,8 +521,8 @@ "id": "78ebf931", "metadata": {}, "source": [ - "You might expect `==` to yield `True` because the objects contain the same data.\n", - "But for programmer-defined classes, the default behavior of the `==` operator is the same as the `is` operator -- it checks identity, not equivalence." + "Podrías esperar que `==` produzca `True` porque los objetos contienen los mismos datos.\n", + "Pero para clases definidas por el programador, el comportamiento por defecto del operador `==` es el mismo que el del operador `is` -- comprueba identidad, no equivalencia." ] }, { @@ -530,11 +530,11 @@ "id": "a3934fdd-d4cd-41e0-86e6-5bb78d0886a7", "metadata": {}, "source": [ - "## Pure functions\n", + "## Funciones puras\n", "\n", - "We can use `copy` to write pure functions that don't modify their parameters.\n", - "For example, here's a function that takes a `Time` object and a duration in hours, minutes and seconds.\n", - "It makes a copy of the original object, uses `increment_time` to modify the copy, and returns it." + "Podemos usar `copy` para escribir funciones puras que no modifican sus parámetros.\n", + "Por ejemplo, aquí tienes una función que toma un objeto `Time` y una duración en horas, minutos y segundos.\n", + "Hace una copia del objeto original, usa `increment_time` para modificar la copia y la devuelve." ] }, { @@ -550,7 +550,7 @@ "id": "c181af12", "metadata": {}, "source": [ - "Here's how we use it." + "Así la usamos." ] }, { @@ -566,8 +566,8 @@ "id": "54b1ca4a", "metadata": {}, "source": [ - "The return value is a new object representing the end time of the movie.\n", - "And we can confirm that `start` is unchanged." + "El valor de retorno es un objeto nuevo que representa la hora de fin de la película.\n", + "Y podemos confirmar que `start` no ha cambiado." ] }, { @@ -583,14 +583,14 @@ "id": "1233b2db", "metadata": {}, "source": [ - "`add_time` is a **pure function** because it does not modify any of the objects passed to it as arguments and its only effect is to return a value.\n", + "`add_time` es una **función pura** porque no modifica ninguno de los objetos que se le pasan como argumentos y su único efecto es devolver un valor.\n", "\n", - "Anything that can be done with impure functions can also be done with pure functions.\n", - "In fact, some programming languages only allow pure functions.\n", - "Programs that use pure functions might be less error-prone, but impure functions are sometimes convenient and can be more efficient.\n", + "Cualquier cosa que se pueda hacer con funciones impuras también se puede hacer con funciones puras.\n", + "De hecho, algunos lenguajes de programación solo permiten funciones puras.\n", + "Los programas que usan funciones puras pueden ser menos propensos a errores, pero las funciones impuras a veces son convenientes y pueden ser más eficientes.\n", "\n", - "In general, I suggest you write pure functions whenever it is reasonable and resort to impure functions only if there is a compelling advantage.\n", - "This approach might be called a **functional programming style**." + "En general, te sugiero que escribas funciones puras siempre que sea razonable y recurras a funciones impuras solo si hay una ventaja convincente.\n", + "Este enfoque podría llamarse un **estilo de programación funcional**." ] }, { @@ -600,10 +600,10 @@ "source": [ "## Prototype and patch\n", "\n", - "In the previous example, `increment_time` and `add_time` seem to work, but if we try another example, we'll see that they are not quite correct.\n", + "En el ejemplo anterior, `increment_time` y `add_time` parecen funcionar, pero si probamos otro ejemplo veremos que no son del todo correctas.\n", "\n", - "Suppose you arrive at the theater and discover that the movie starts at `9:40`, not `9:20`.\n", - "Here's what happens when we compute the updated end time." + "Supón que llegas al cine y descubres que la película empieza a las `9:40`, no a las `9:20`.\n", + "Esto es lo que ocurre cuando calculamos la hora de fin actualizada." ] }, { @@ -619,10 +619,10 @@ "id": "c712ebf7-7e52-490e-91d7-5f1c83334de0", "metadata": {}, "source": [ - "The result is not a valid time.\n", - "The problem is that `increment_time` does not deal with cases where the number of seconds or minutes adds up to more than `60`.\n", + "El resultado no es una hora válida.\n", + "El problema es que `increment_time` no trata los casos en los que el número de segundos o minutos suma más de `60`.\n", "\n", - "Here's an improved version that checks whether `second` exceeds or equals `60` -- if so, it increments `minute` -- then checks whether `minute` exceeds or equals `60` -- if so, it increments `hour`." + "Aquí tienes una versión mejorada que comprueba si `second` supera o iguala `60` -- si es así, incrementa `minute` -- y luego comprueba si `minute` supera o iguala `60` -- si es así, incrementa `hour`." ] }, { @@ -638,8 +638,8 @@ "id": "c133c5d8", "metadata": {}, "source": [ - "Fixing `increment_time` also fixes `add_time`, which uses it.\n", - "So now the previous example works correctly." + "Arreglar `increment_time` también arregla `add_time`, que la usa.\n", + "Así que ahora el ejemplo anterior funciona correctamente." ] }, { @@ -655,9 +655,9 @@ "id": "a2f644a6-ca43-494e-af14-6e845b3d7973", "metadata": {}, "source": [ - "But this function is still not correct, because the arguments might be bigger than `60`.\n", - "For example, suppose we are given the run time as `92` minutes, rather than `1` hours and `32` minutes.\n", - "We might call `add_time` like this." + "Pero esta función todavía no es correcta, porque los argumentos podrían ser mayores que `60`.\n", + "Por ejemplo, supón que recibimos la duración como `92` minutos, en lugar de `1` hora y `32` minutos.\n", + "Podríamos llamar a `add_time` así." ] }, { @@ -673,9 +673,9 @@ "id": "72e0a08b", "metadata": {}, "source": [ - "The result is not a valid time.\n", - "So let's try a different approach, using the `divmod` function.\n", - "We'll make a copy of `start` and modify it by incrementing the `minute` attribute." + "El resultado no es una hora válida.\n", + "Así que probemos un enfoque distinto, usando la función `divmod`.\n", + "Haremos una copia de `start` y la modificaremos incrementando el atributo `minute`." ] }, { @@ -691,8 +691,8 @@ "id": "c56355bc", "metadata": {}, "source": [ - "Now `minute` is `132`, which is `2` hours and `12` minutes.\n", - "We can use `divmod` to divide by `60` and return the number of whole hours and the number of minutes left over." + "Ahora `minute` es `132`, que son `2` horas y `12` minutos.\n", + "Podemos usar `divmod` para dividir por `60` y devolver el número de horas completas y el número de minutos sobrantes." ] }, { @@ -708,7 +708,7 @@ "id": "43204703", "metadata": {}, "source": [ - "Now `minute` is correct, and we can add the hours to `hour`." + "Ahora `minute` es correcto, y podemos añadir las horas a `hour`." ] }, { @@ -724,8 +724,8 @@ "id": "a68ae1cd", "metadata": {}, "source": [ - "The result is a valid time.\n", - "We can do the same thing with `hour` and `second`, and encapsulate the whole process in a function." + "El resultado es una hora válida.\n", + "Podemos hacer lo mismo con `hour` y `second`, y encapsular todo el proceso en una función." ] }, { @@ -741,7 +741,7 @@ "id": "7437113a", "metadata": {}, "source": [ - "With this version of `increment_time`, `add_time` works correctly, even if the arguments exceed `60`." + "Con esta versión de `increment_time`, `add_time` funciona correctamente, incluso si los argumentos superan `60`." ] }, { @@ -757,13 +757,13 @@ "id": "7c6329b2", "metadata": {}, "source": [ - "This section demonstrates a program development plan I call **prototype and patch**.\n", - "We started with a simple prototype that worked correctly for the first example.\n", - "Then we tested it with more difficult examples -- when we found an error, we modified the program to fix it, like putting a patch on tire with a puncture.\n", + "Esta sección demuestra un plan de desarrollo de programas que llamo **prototype and patch**.\n", + "Empezamos con un prototipo simple que funcionaba correctamente para el primer ejemplo.\n", + "Luego lo probamos con ejemplos más difíciles -- cuando encontramos un error, modificamos el programa para corregirlo, como poner un parche en un neumático pinchado.\n", "\n", - "This approach can be effective, especially if you don't yet have a deep understanding of the problem.\n", - "But incremental corrections can generate code that is unnecessarily complicated -- since it deals with many special cases -- and unreliable -- since it is hard to know if you have\n", - "found all the errors." + "Este enfoque puede ser efectivo, especialmente si todavía no tienes una comprensión profunda del problema.\n", + "Pero las correcciones incrementales pueden generar código innecesariamente complicado -- porque trata muchos casos especiales -- y poco fiable -- porque es difícil saber si has\n", + "encontrado todos los errores." ] }, { @@ -773,16 +773,16 @@ "source": [ "## Design-first development\n", "\n", - "An alternative plan is **design-first development**, which involves more planning before prototyping. In a design-first process, sometimes a high-level insight into the problem makes the programming much easier.\n", + "Un plan alternativo es **design-first development**, que implica más planificación antes de prototipar. En un proceso design-first, a veces una idea de alto nivel sobre el problema hace que la programación sea mucho más sencilla.\n", "\n", - "In this case, the insight is that we can think of a `Time` object as a three-digit number in base 60 -- also known as sexagesimal.\n", - "The `second` attribute is the \"ones column\", the `minute` attribute is the \"sixties column\",\n", - "and the `hour` attribute is the \"thirty-six hundreds column\".\n", - "When we wrote `increment_time`, we were effectively doing addition in base 60, which is why we had to carry from one column to the next.\n", + "En este caso, la idea es que podemos pensar en un objeto `Time` como un número de tres dígitos en base 60 -- también conocida como sexagesimal.\n", + "El atributo `second` es la \"columna de las unidades\", el atributo `minute` es la \"columna de los sesenta\",\n", + "y el atributo `hour` es la \"columna de los treinta y seis cientos\".\n", + "Cuando escribimos `increment_time`, en realidad estábamos haciendo suma en base 60, por eso teníamos que llevar de una columna a la siguiente.\n", "\n", - "This observation suggests another approach to the whole problem -- we can convert `Time` objects to integers and take advantage of the fact that Python knows how to do integer arithmetic.\n", + "Esta observación sugiere otro enfoque para todo el problema -- podemos convertir objetos `Time` en enteros y aprovechar que Python sabe hacer aritmética de enteros.\n", "\n", - "Here is a function that converts from a `Time` to an integer." + "Aquí tienes una función que convierte de un `Time` a un entero." ] }, { @@ -798,8 +798,8 @@ "id": "c7e7789e", "metadata": {}, "source": [ - "The result is the number of seconds since the beginning of the day.\n", - "For example, `01:01:01` is `1` hour, `1` minute and `1` second from the beginning of the day, with is the sum of `3600` seconds, `60` seconds, and `1` second." + "El resultado es el número de segundos desde el comienzo del día.\n", + "Por ejemplo, `01:01:01` es `1` hora, `1` minuto y `1` segundo desde el comienzo del día, que es la suma de `3600` segundos, `60` segundos y `1` segundo." ] }, { @@ -815,7 +815,7 @@ "id": "6ea525c8-4547-4bde-91c3-17f45add1bf8", "metadata": {}, "source": [ - "And here's a function that goes in the other direction -- converting an integer to a `Time` object -- using the `divmod` function." + "Y aquí tienes una función que va en la otra dirección -- convierte un entero en un objeto `Time` -- usando la función `divmod`." ] }, { @@ -831,7 +831,7 @@ "id": "4706b5df", "metadata": {}, "source": [ - "We can test it by converting the previous example back to a `Time`." + "Podemos probarla convirtiendo el ejemplo anterior de vuelta a un `Time`." ] }, { @@ -847,7 +847,7 @@ "id": "0c2b8469-d4a7-46f9-a0a1-f2a6c1595183", "metadata": {}, "source": [ - "Using these functions, we can write a more concise version of `add_time`." + "Usando estas funciones, podemos escribir una versión más concisa de `add_time`." ] }, { @@ -863,11 +863,11 @@ "id": "cb560257", "metadata": {}, "source": [ - "The first line converts the arguments to a `Time` object called `duration`.\n", - "The second line converts `time` and `duration` to seconds and adds them.\n", - "The third line converts the sum to a `Time` object and returns it.\n", + "La primera línea convierte los argumentos en un objeto `Time` llamado `duration`.\n", + "La segunda línea convierte `time` y `duration` a segundos y los suma.\n", + "La tercera línea convierte la suma en un objeto `Time` y lo devuelve.\n", "\n", - "Here's how it works." + "Así funciona." ] }, { @@ -883,17 +883,17 @@ "id": "db762aa8-4aab-4c17-a88d-72c5048f18c0", "metadata": {}, "source": [ - "In some ways, converting from base 60 to base 10 and back is harder than\n", - "just dealing with times. Base conversion is more abstract; our intuition\n", - "for dealing with time values is better.\n", + "En cierto sentido, convertir de base 60 a base 10 y de vuelta es más difícil que\n", + "simplemente tratar con horas. La conversión de base es más abstracta; nuestra intuición\n", + "para trabajar con valores de tiempo es mejor.\n", "\n", - "But if we have the insight to treat times as base 60 numbers -- and invest the effort to write the conversion functions `time_to_int` and `int_to_time` -- we get a program that is shorter, easier to read and debug, and more reliable.\n", + "Pero si tenemos la idea de tratar las horas como números en base 60 -- e invertimos el esfuerzo de escribir las funciones de conversión `time_to_int` e `int_to_time` -- obtenemos un programa más corto, más fácil de leer y depurar, y más fiable.\n", "\n", - "It is also easier to add features later. For example, imagine subtracting two `Time` objects to find the duration between them.\n", - "The naive approach is to implement subtraction with borrowing.\n", - "Using the conversion functions is easier and more likely to be correct.\n", + "También es más fácil añadir características más adelante. Por ejemplo, imagina restar dos objetos `Time` para encontrar la duración entre ellos.\n", + "El enfoque ingenuo es implementar la resta con préstamo.\n", + "Usar las funciones de conversión es más fácil y tiene más probabilidades de ser correcto.\n", "\n", - "Ironically, sometimes making a problem harder -- or more general -- makes it easier, because there are fewer special cases and fewer opportunities for error." + "Irónicamente, a veces hacer un problema más difícil -- o más general -- lo hace más fácil, porque hay menos casos especiales y menos oportunidades de error." ] }, { @@ -903,10 +903,10 @@ "tags": [] }, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "Python provides several built-in functions that are useful for testing and debugging programs that work with objects.\n", - "For example, if you are not sure what type an object is, you can ask." + "Python proporciona varias funciones integradas que son útiles para probar y depurar programas que trabajan con objetos.\n", + "Por ejemplo, si no estás seguro de qué tipo es un objeto, puedes preguntarlo." ] }, { @@ -922,7 +922,7 @@ "id": "7ec0eabf", "metadata": {}, "source": [ - "You can also use `isinstance` to check whether an object is an instance of a particular class." + "También puedes usar `isinstance` para comprobar si un objeto es una instancia de una clase concreta." ] }, { @@ -938,8 +938,7 @@ "id": "4f453fe9", "metadata": {}, "source": [ - "If you are not sure whether an object has a particular attribute, you\n", - "can use the built-in function `hasattr`." + "Si no estás seguro de si un objeto tiene un atributo concreto, puedes usar la función integrada `hasattr`." ] }, { @@ -955,7 +954,7 @@ "id": "a0131d84", "metadata": {}, "source": [ - "To get all of the attributes, and their values, in a dictionary, you can use `vars`." + "Para obtener todos los atributos, y sus valores, en un diccionario, puedes usar `vars`." ] }, { @@ -971,7 +970,7 @@ "id": "f1a443c8", "metadata": {}, "source": [ - "The `structshape` module, which we saw in [Chapter 11](section_debugging_11), also works with programmer-defined types." + "El módulo `structshape`, que vimos en el [Capítulo 11](section_depuración_11), también funciona con tipos definidos por el programador." ] }, { @@ -997,43 +996,43 @@ "id": "501436c0-6634-415f-be84-2d130232b2b8", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**object-oriented programming:**\n", - "A style of programming that uses objects to organize code and data.\n", + "**programación orientada a objetos:**\n", + "Un estilo de programación que usa objetos para organizar código y datos.\n", "\n", - "**class:**\n", - " A programmer-defined type. A class definition creates a new class object.\n", + "**clase:**\n", + " Un tipo definido por el programador. Una definición de clase crea un nuevo objeto de clase.\n", "\n", - "**class object:**\n", - "An object that represents a class -- it is the result of a class definition.\n", + "**objeto de clase:**\n", + "Un objeto que representa una clase -- es el resultado de una definición de clase.\n", "\n", - "**instantiation:**\n", - "The process of creating an object that belongs to a class.\n", + "**instanciación:**\n", + "El proceso de crear un objeto que pertenece a una clase.\n", "\n", - "**instance:**\n", - " An object that belongs to a class.\n", + "**instancia:**\n", + " Un objeto que pertenece a una clase.\n", "\n", - "**attribute:**\n", - " A variable associated with an object, also called an instance variable.\n", + "**atributo:**\n", + " Una variable asociada con un objeto, también llamada variable de instancia.\n", "\n", - "**object diagram:**\n", - "A graphical representation of an object, its attributes, and their values.\n", + "**diagrama de objeto:**\n", + "Una representación gráfica de un objeto, sus atributos y sus valores.\n", "\n", - "**format specifier:**\n", - "In an f-string, a format specifier determines how a value is converted to a string.\n", + "**especificador de formato:**\n", + "En una f-string, un especificador de formato determina cómo se convierte un valor en una string.\n", "\n", - "**pure function:**\n", - "A function that does not modify its parameters or have any effect other than returning a value.\n", + "**función pura:**\n", + "Una función que no modifica sus parámetros ni tiene ningún efecto aparte de devolver un valor.\n", "\n", - "**functional programming style:**\n", - "A way of programming that uses pure functions whenever possible.\n", + "**estilo de programación funcional:**\n", + "Una forma de programar que usa funciones puras siempre que sea posible.\n", "\n", "**prototype and patch:**\n", - "A way of developing programs by starting with a rough draft and gradually adding features and fixing bugs.\n", + "Una forma de desarrollar programas empezando con un borrador aproximado y añadiendo características y corrigiendo bugs gradualmente.\n", "\n", "**design-first development:**\n", - "A way of developing programs with more careful planning that prototype and patch." + "Una forma de desarrollar programas con una planificación más cuidadosa que prototype and patch." ] }, { @@ -1041,7 +1040,7 @@ "id": "09dd41c1", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1059,29 +1058,29 @@ "id": "da0aea86", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "There is a lot of new vocabulary in this chapter.\n", - "A conversation with a virtual assistant can help solidify your understanding.\n", - "Consider asking:\n", + "Hay mucho vocabulario nuevo en este capítulo.\n", + "Una conversación con un asistente virtual puede ayudarte a consolidar tu comprensión.\n", + "Considera preguntar:\n", "\n", - "* \"What is the difference between a class and a type?\"\n", + "* \"¿Cuál es la diferencia entre una clase y un tipo?\"\n", "\n", - "* \"What is the difference between an object and an instance?\"\n", + "* \"¿Cuál es la diferencia entre un objeto y una instancia?\"\n", "\n", - "* \"What is the difference between a variable and an attribute?\"\n", + "* \"¿Cuál es la diferencia entre una variable y un atributo?\"\n", "\n", - "* \"What are the pros and cons of pure functions compared to impure functions?\"\n", + "* \"¿Cuáles son los pros y los contras de funciones puras comparadas con funciones impuras?\"\n", "\n", - "Because we are just getting started with object oriented programming, the code in this chapter is not idiomatic -- it is not the kind of code experienced programmers write.\n", - "If you ask a virtual assistant for help with the exercises, you will probably see features we have not covered yet.\n", - "In particular, you are likely to see a method called `__init__` used to initialize the attributes of an instance.\n", + "Como apenas estamos empezando con la programación orientada a objetos, el código de este capítulo no es idiomático -- no es el tipo de código que escriben los programadores con experiencia.\n", + "Si pides ayuda a un asistente virtual con los ejercicios, probablemente verás características que todavía no hemos cubierto.\n", + "En particular, es probable que veas un método llamado `__init__` usado para inicializar los atributos de una instancia.\n", "\n", - "If these features make sense to you, go ahead and use them.\n", - "But if not, be patient -- we will get there soon.\n", - "In the meantime, see if you can solve the following exercises using only the features we have covered so far.\n", + "Si estas características tienen sentido para ti, adelante, úsalas.\n", + "Pero si no, ten paciencia -- llegaremos pronto.\n", + "Mientras tanto, mira si puedes resolver los siguientes ejercicios usando solo las características que hemos cubierto hasta ahora.\n", "\n", - "Also, in this chapter we saw one example of a format specifier. For more information, ask \"What format specifiers can be used in a Python f-string?\"" + "Además, en este capítulo vimos un ejemplo de especificador de formato. Para más información, pregunta \"¿Qué especificadores de formato se pueden usar en una f-string de Python?\"" ] }, { @@ -1097,9 +1096,9 @@ "id": "bcdab7d6", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `subtract_time` that takes two `Time` objects and returns the interval between them in seconds -- assuming that they are two times during the same day." + "Escribe una función llamada `subtract_time` que tome dos objetos `Time` y devuelva el intervalo entre ellos en segundos -- asumiendo que son dos horas del mismo día." ] }, { @@ -1109,7 +1108,7 @@ "tags": [] }, "source": [ - "Here's an outline of the function to get you started." + "Aquí tienes un esquema de la función para empezar." ] }, { @@ -1137,7 +1136,7 @@ "tags": [] }, "source": [ - "You can use `doctest` to test your function." + "Puedes usar `doctest` para probar tu función." ] }, { @@ -1155,9 +1154,9 @@ "id": "c3189549", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `is_after` that takes two `Time` objects and returns `True` if the first time is later in the day than the second, and `False` otherwise." + "Escribe una función llamada `is_after` que tome dos objetos `Time` y devuelva `True` si la primera hora es más tarde en el día que la segunda, y `False` en caso contrario." ] }, { @@ -1167,7 +1166,7 @@ "tags": [] }, "source": [ - "Here's an outline of the function to get you started." + "Aquí tienes un esquema de la función para empezar." ] }, { @@ -1193,7 +1192,7 @@ "tags": [] }, "source": [ - "You can use `doctest` to test your function." + "Puedes usar `doctest` para probar tu función." ] }, { @@ -1211,9 +1210,9 @@ "id": "16dff862", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Here's a definition for a `Date` class that represents a date -- that is, a year, month, and day of the month." + "Aquí tienes una definición de una clase `Date` que representa una fecha -- es decir, un año, mes y día del mes." ] }, { @@ -1229,13 +1228,13 @@ "id": "3311fa97", "metadata": {}, "source": [ - "1. Write a function called `make_date` that takes `year`, `month`, and `day` as parameters, makes a `Date` object, assigns the parameters to attributes, and returns the result the new object. Create an object that represents June 22, 1933.\n", + "1. Escribe una función llamada `make_date` que tome `year`, `month` y `day` como parámetros, cree un objeto `Date`, asigne los parámetros a atributos y devuelva el objeto nuevo resultante. Crea un objeto que represente el 22 de junio de 1933.\n", "\n", - "2. Write a function called `print_date` that takes a `Date` object, uses an f-string to format the attributes, and prints the result. If you test it with the `Date` you created, the result should be `1933-06-22`.\n", + "2. Escribe una función llamada `print_date` que tome un objeto `Date`, use una f-string para formatear los atributos e imprima el resultado. Si la pruebas con la `Date` que creaste, el resultado debería ser `1933-06-22`.\n", "\n", - "3. Write a function called `is_after` that takes two `Date` objects as parameters and returns `True` if the first comes after the second. Create a second object that represents September 17, 1933, and check whether it comes after the first object.\n", + "3. Escribe una función llamada `is_after` que tome dos objetos `Date` como parámetros y devuelva `True` si la primera viene después de la segunda. Crea un segundo objeto que represente el 17 de septiembre de 1933 y comprueba si viene después del primer objeto.\n", "\n", - "Hint: You might find it useful to write a function called `date_to_tuple` that takes a `Date` object and returns a tuple that contains its attributes in year, month, day order." + "Pista: puede resultarte útil escribir una función llamada `date_to_tuple` que tome un objeto `Date` y devuelva una tupla que contenga sus atributos en orden año, mes, día." ] }, { @@ -1245,7 +1244,7 @@ "tags": [] }, "source": [ - "You can use this function outline to get started." + "Puedes usar este esquema de función para empezar." ] }, { @@ -1273,7 +1272,7 @@ "tags": [] }, "source": [ - "You can use these examples to test `make_date`." + "Puedes usar estos ejemplos para probar `make_date`." ] }, { @@ -1303,7 +1302,7 @@ "tags": [] }, "source": [ - "You can use this function outline to get started." + "Puedes usar este esquema de función para empezar." ] }, { @@ -1331,7 +1330,7 @@ "tags": [] }, "source": [ - "You can use this example to test `print_date`." + "Puedes usar este ejemplo para probar `print_date`." ] }, { @@ -1351,7 +1350,7 @@ "tags": [] }, "source": [ - "You can use this function outline to get started." + "Puedes usar este esquema de función para empezar." ] }, { @@ -1387,7 +1386,7 @@ "tags": [] }, "source": [ - "You can use these examples to test `is_after`." + "Puedes usar estos ejemplos para probar `is_after`." ] }, { @@ -1427,9 +1426,11 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Código license: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] } ], diff --git a/blank/chap15.ipynb b/blank/chap15.ipynb index 2ffde33..66a140c 100644 --- a/blank/chap15.ipynb +++ b/blank/chap15.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir versiones impresas y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -25,19 +25,19 @@ "id": "fa22117f", "metadata": {}, "source": [ - "# Classes and Methods\n", + "# Clases y métodos\n", "\n", - "Python is an **object-oriented language** -- that is, it provides features that support object-oriented programming, which has these defining characteristics:\n", + "Python es un **lenguaje orientado a objetos** -- es decir, proporciona funcionalidades que dan soporte a la programación orientada a objetos, que tiene estas características definitorias:\n", "\n", - "- Most of the computation is expressed in terms of operations on objects.\n", + "- La mayor parte del cálculo se expresa en términos de operaciones sobre objetos.\n", "\n", - "- Objects often represent things in the real world, and methods often correspond to the ways things in the real world interact.\n", + "- Los objetos a menudo representan cosas del mundo real, y los métodos suelen corresponder a las formas en que las cosas del mundo real interactúan.\n", "\n", - "- Programs include class and method definitions.\n", + "- Los programas incluyen definiciones de clase y método.\n", "\n", - "For example, in the previous chapter we defined a `Time` class that corresponds to the way people record the time of day, and we defined functions that correspond to the kinds of things people do with times.\n", - "But there was no explicit connection between the definition of the `Time` class and the function definitions that follow.\n", - "We can make the connection explicit by rewriting a function as a **method**, which is defined inside a class definition." + "Por ejemplo, en el capítulo anterior definimos una clase `Time` que corresponde a la forma en que las personas registran la hora del día, y definimos funciones que corresponden a los tipos de cosas que las personas hacen con horas.\n", + "Pero no había una conexión explícita entre la definición de la clase `Time` y las definiciones de función que vienen después.\n", + "Podemos hacer explícita la conexión reescribiendo una función como un **método**, que se define dentro de una definición de clase." ] }, { @@ -45,9 +45,9 @@ "id": "9857823a", "metadata": {}, "source": [ - "## Defining methods\n", + "## Definir métodos\n", "\n", - "In the previous chapter we defined a class named `Time` and wrote a function named `print_time` that displays a time of day." + "En el capítulo anterior definimos una clase llamada `Time` y escribimos una función llamada `print_time` que muestra una hora del día." ] }, { @@ -63,12 +63,10 @@ "id": "a89ddf58", "metadata": {}, "source": [ - "To make `print_time` a method, all we have to do is move the function\n", - "definition inside the class definition. Notice the change in\n", - "indentation.\n", + "Para convertir `print_time` en un método, todo lo que tenemos que hacer es mover la definición de la función dentro de la definición de la clase. Fíjate en el cambio de indentación.\n", "\n", - "At the same time, we'll change the name of the parameter from `time` to `self`.\n", - "This change is not necessary, but it is conventional for the first parameter of a method to be named `self`." + "Al mismo tiempo, cambiaremos el nombre del parámetro de `time` a `self`.\n", + "Este cambio no es necesario, pero es convencional que el primer parámetro de un método se llame `self`." ] }, { @@ -84,8 +82,8 @@ "id": "8da4079c", "metadata": {}, "source": [ - "To call this method, you have to pass a `Time` object as an argument.\n", - "Here's the function we'll use to make a `Time` object." + "Para llamar a este método, tienes que pasar un objeto `Time` como argumento.\n", + "Aquí está la función que usaremos para crear un objeto `Time`." ] }, { @@ -101,7 +99,7 @@ "id": "c6ad4e12", "metadata": {}, "source": [ - "And here's a `Time` instance." + "Y aquí hay una instancia de `Time`." ] }, { @@ -117,8 +115,7 @@ "id": "bbbcd333", "metadata": {}, "source": [ - "Now there are two ways to call `print_time`. The first (and less common)\n", - "way is to use function syntax." + "Ahora hay dos formas de llamar a `print_time`. La primera (y menos común) es usar sintaxis de función." ] }, { @@ -134,8 +131,8 @@ "id": "2eb0847e", "metadata": {}, "source": [ - "In this version, `Time` is the name of the class, `print_time` is the name of the method, and `start` is passed as a parameter.\n", - "The second (and more idiomatic) way is to use method syntax:" + "En esta versión, `Time` es el nombre de la clase, `print_time` es el nombre del método, y `start` se pasa como parámetro.\n", + "La segunda forma (y más idiomática) es usar sintaxis de método:" ] }, { @@ -151,10 +148,10 @@ "id": "c80c40f0", "metadata": {}, "source": [ - "In this version, `start` is the object the method is invoked on, which is called the **receiver**, based on the analogy that invoking a method is like sending a message to an object.\n", + "En esta versión, `start` es el objeto sobre el que se invoca el método, que se llama **receptor**, basándonos en la analogía de que invocar un método es como enviar un mensaje a un objeto.\n", "\n", - "Regardless of the syntax, the behavior of the method is the same.\n", - "The receiver is assigned to the first parameter, so inside the method, `self` refers to the same object as `start`." + "Independientemente de la sintaxis, el comportamiento del método es el mismo.\n", + "El receptor se asigna al primer parámetro, así que dentro del método, `self` se refiere al mismo objeto que `start`." ] }, { @@ -162,9 +159,9 @@ "id": "8deb6c34", "metadata": {}, "source": [ - "## Another method\n", + "## Otro método\n", "\n", - "Here's the `time_to_int` function from the previous chapter." + "Aquí está la función `time_to_int` del capítulo anterior." ] }, { @@ -180,7 +177,7 @@ "id": "144e043f", "metadata": {}, "source": [ - "And here's a version rewritten as a method.\n" + "Y aquí hay una versión reescrita como método.\n" ] }, { @@ -196,14 +193,14 @@ "id": "e3a721ab", "metadata": {}, "source": [ - "The first line uses the special command `add_method_to`, which adds a method to a previously-defined class.\n", - "This command works in a Jupyter notebook, but it is not part of Python, so it won't work in other environments.\n", - "Normally, all methods of a class are inside the class definition, so they get defined at the same time as the class.\n", - "But for this book, it is helpful to define one method at a time.\n", + "La primera línea usa el comando especial `add_method_to`, que añade un método a una clase definida previamente.\n", + "Este comando funciona en un Jupyter notebook, pero no forma parte de Python, así que no funcionará en otros entornos.\n", + "Normalmente, todos los métodos de una clase están dentro de la definición de la clase, así que se definen al mismo tiempo que la clase.\n", + "Pero para este libro, es útil definir un método cada vez.\n", "\n", - "As in the previous example, the method definition is indented and the name of the parameter is `self`.\n", - "Other than that, the method is identical to the function.\n", - "Here's how we invoke it." + "Como en el ejemplo anterior, la definición del método está indentada y el nombre del parámetro es `self`.\n", + "Aparte de eso, el método es idéntico a la función.\n", + "Así es como lo invocamos." ] }, { @@ -219,7 +216,7 @@ "id": "14565505", "metadata": {}, "source": [ - "It is common to say that we \"call\" a function and \"invoke\" a method, but they mean the same thing." + "Es común decir que \"llamamos\" a una función e \"invocamos\" un método, pero significan lo mismo." ] }, { @@ -227,10 +224,10 @@ "id": "7bc24683", "metadata": {}, "source": [ - "## Static methods\n", + "## Métodos estáticos\n", "\n", - "As another example, let's consider the `int_to_time` function.\n", - "Here's the version from the previous chapter." + "Como otro ejemplo, consideremos la función `int_to_time`.\n", + "Aquí está la versión del capítulo anterior." ] }, { @@ -246,12 +243,12 @@ "id": "2b77c2a0", "metadata": {}, "source": [ - "This function takes `seconds` as a parameter and returns a new `Time` object.\n", - "If we transform it into a method of the `Time` class, we have to invoke it on a `Time` object.\n", - "But if we're trying to create a new `Time` object, what are we supposed to invoke it on?\n", + "Esta función toma `seconds` como parámetro y devuelve un nuevo objeto `Time`.\n", + "Si la transformamos en un método de la clase `Time`, tenemos que invocarla sobre un objeto `Time`.\n", + "Pero si estamos intentando crear un nuevo objeto `Time`, ¿sobre qué se supone que debemos invocarla?\n", "\n", - "We can solve this chicken-and-egg problem using a **static method**, which is a method that does not require an instance of the class to be invoked.\n", - "Here's how we rewrite this function as a static method." + "Podemos resolver este problema del huevo y la gallina usando un **método estático**, que es un método que no requiere una instancia de la clase para invocarse.\n", + "Así es como reescribimos esta función como un método estático." ] }, { @@ -267,8 +264,8 @@ "id": "a7e2e788", "metadata": {}, "source": [ - "Because it is a static method, it does not have `self` as a parameter.\n", - "To invoke it, we use `Time`, which is the class object." + "Como es un método estático, no tiene `self` como parámetro.\n", + "Para invocarlo, usamos `Time`, que es el objeto de clase." ] }, { @@ -284,7 +281,7 @@ "id": "d2f4fd5a", "metadata": {}, "source": [ - "The result is a new object that represents 9:40." + "El resultado es un nuevo objeto que representa las 9:40." ] }, { @@ -300,8 +297,8 @@ "id": "e6a18c76", "metadata": {}, "source": [ - "Now that we have `Time.from_seconds`, we can use it to write `add_time` as a method.\n", - "Here's the function from the previous chapter." + "Ahora que tenemos `Time.from_seconds`, podemos usarlo para escribir `add_time` como un método.\n", + "Aquí está la función del capítulo anterior." ] }, { @@ -317,7 +314,7 @@ "id": "8e56da48", "metadata": {}, "source": [ - "And here's a version rewritten as a method." + "Y aquí hay una versión reescrita como método." ] }, { @@ -333,9 +330,9 @@ "id": "b784a4ea", "metadata": {}, "source": [ - "`add_time` has `self` as a parameter because it is not a static method.\n", - "It is an ordinary method -- also called an **instance method**.\n", - "To invoke it, we need a `Time` instance." + "`add_time` tiene `self` como parámetro porque no es un método estático.\n", + "Es un método ordinario -- también llamado **método de instancia**.\n", + "Para invocarlo, necesitamos una instancia de `Time`." ] }, { @@ -351,10 +348,10 @@ "id": "f1c806a9", "metadata": {}, "source": [ - "## Comparing Time objects\n", + "## Comparar objetos Time\n", "\n", - "As one more example, let's write `is_after` as a method.\n", - "Here's the `is_after` function, which is a solution to an exercise in the previous chapter." + "Como un ejemplo más, escribamos `is_after` como método.\n", + "Aquí está la función `is_after`, que es una solución a un ejercicio del capítulo anterior." ] }, { @@ -370,7 +367,7 @@ "id": "8e7153e8", "metadata": {}, "source": [ - "And here it is as a method." + "Y aquí está como método." ] }, { @@ -386,9 +383,8 @@ "id": "50815aec", "metadata": {}, "source": [ - "Because we're comparing two objects, and the first parameter is `self`, we'll call the second parameter `other`.\n", - "To use this method, we have to invoke it on one object and pass the\n", - "other as an argument." + "Como estamos comparando dos objetos, y el primer parámetro es `self`, llamaremos al segundo parámetro `other`.\n", + "Para usar este método, tenemos que invocarlo sobre un objeto y pasar el otro como argumento." ] }, { @@ -404,8 +400,8 @@ "id": "cf97e358", "metadata": {}, "source": [ - "One nice thing about this syntax is that it almost reads like a question,\n", - "\"`end` is after `start`?\"" + "Una cosa buena de esta sintaxis es que casi se lee como una pregunta:\n", + "\"¿`end` va después de `start`?\"" ] }, { @@ -413,12 +409,12 @@ "id": "15a17fce", "metadata": {}, "source": [ - "## The `__str__` method\n", + "## El método `__str__`\n", "\n", - "When you write a method, you can choose almost any name you want.\n", - "However, some names have special meanings.\n", - "For example, if an object has a method named `__str__`, Python uses that method to convert the object to a string.\n", - "For example, here is a `__str__` method for a time object." + "Cuando escribes un método, puedes elegir casi cualquier nombre que quieras.\n", + "Sin embargo, algunos nombres tienen significados especiales.\n", + "Por ejemplo, si un objeto tiene un método llamado `__str__`, Python usa ese método para convertir el objeto a string.\n", + "Por ejemplo, aquí hay un método `__str__` para un objeto de hora." ] }, { @@ -434,9 +430,9 @@ "id": "b056b729", "metadata": {}, "source": [ - "This method is similar to `print_time`, from the previous chapter, except that it returns the string rather than printing it.\n", + "Este método es similar a `print_time`, del capítulo anterior, salvo que devuelve el string en lugar de imprimirlo.\n", "\n", - "You can invoke this method in the usual way." + "Puedes invocar este método de la forma habitual." ] }, { @@ -452,8 +448,8 @@ "id": "76092a0c", "metadata": {}, "source": [ - "But Python can also invoke it for you.\n", - "If you use the built-in function `str` to convert a `Time` object to a string, Python uses the `__str__` method in the `Time` class." + "Pero Python también puede invocarlo por ti.\n", + "Si usas la función integrada `str` para convertir un objeto `Time` a string, Python usa el método `__str__` de la clase `Time`." ] }, { @@ -469,7 +465,7 @@ "id": "8a26caa8", "metadata": {}, "source": [ - "And it does the same if you print a `Time` object." + "Y hace lo mismo si imprimes un objeto `Time`." ] }, { @@ -485,8 +481,8 @@ "id": "97eb30c2", "metadata": {}, "source": [ - "Methods like `__str__` are called **special methods**.\n", - "You can identify them because their names begin and end with two underscores." + "Los métodos como `__str__` se llaman **métodos especiales**.\n", + "Puedes identificarlos porque sus nombres empiezan y terminan con dos guiones bajos." ] }, { @@ -494,10 +490,10 @@ "id": "e01e9673", "metadata": {}, "source": [ - "## The __init__ method\n", + "## El método __init__\n", "\n", - "The most special of the special methods is `__init__`, so-called because it initializes the attributes of a new object.\n", - "An `__init__` method for the `Time` class might look like this:" + "El más especial de los métodos especiales es `__init__`, llamado así porque inicializa los atributos de un nuevo objeto.\n", + "Un método `__init__` para la clase `Time` podría tener este aspecto:" ] }, { @@ -513,8 +509,8 @@ "id": "8ba624c3", "metadata": {}, "source": [ - "Now when we instantiate a `Time` object, Python invokes `__init__`, and passes along the arguments.\n", - "So we can create an object and initialize the attributes at the same time." + "Ahora, cuando instanciamos un objeto `Time`, Python invoca `__init__` y pasa los argumentos.\n", + "Así podemos crear un objeto e inicializar los atributos al mismo tiempo." ] }, { @@ -530,8 +526,8 @@ "id": "55e0e296", "metadata": {}, "source": [ - "In this example, the parameters are optional, so if you call `Time` with no arguments,\n", - "you get the default values." + "En este ejemplo, los parámetros son opcionales, así que si llamas a `Time` sin argumentos,\n", + "obtienes los valores por defecto." ] }, { @@ -547,7 +543,7 @@ "id": "bacb036d", "metadata": {}, "source": [ - "If you provide one argument, it overrides `hour`:" + "Si proporcionas un argumento, sobrescribe `hour`:" ] }, { @@ -563,7 +559,7 @@ "id": "37edb221", "metadata": {}, "source": [ - "If you provide two arguments, they override `hour` and `minute`." + "Si proporcionas dos argumentos, sobrescriben `hour` y `minute`." ] }, { @@ -579,10 +575,9 @@ "id": "277de217", "metadata": {}, "source": [ - "And if you provide three arguments, they override all three default\n", - "values.\n", + "Y si proporcionas tres argumentos, sobrescriben los tres valores por defecto.\n", "\n", - "When I write a new class, I almost always start by writing `__init__`, which makes it easier to create objects, and `__str__`, which is useful for debugging." + "Cuando escribo una clase nueva, casi siempre empiezo escribiendo `__init__`, que hace más fácil crear objetos, y `__str__`, que es útil para depurar." ] }, { @@ -590,14 +585,11 @@ "id": "94bbbd7d", "metadata": {}, "source": [ - "## Operator overloading\n", + "## Sobrecarga de operadores\n", "\n", - "By defining other special methods, you can specify the behavior of\n", - "operators on programmer-defined types. For example, if you define a\n", - "method named `__add__` for the `Time` class, you can use the `+`\n", - "operator on Time objects.\n", + "Definiendo otros métodos especiales, puedes especificar el comportamiento de los operadores sobre tipos definidos por el programador. Por ejemplo, si defines un método llamado `__add__` para la clase `Time`, puedes usar el operador `+` con objetos Time.\n", "\n", - "Here is an `__add__` method." + "Aquí hay un método `__add__`." ] }, { @@ -613,7 +605,7 @@ "id": "0221c9ad", "metadata": {}, "source": [ - "We can use it like this." + "Podemos usarlo así." ] }, { @@ -629,16 +621,16 @@ "id": "7cc7866e", "metadata": {}, "source": [ - "There is a lot happening when we run these three lines of code:\n", + "Están pasando muchas cosas cuando ejecutamos estas tres líneas de código:\n", "\n", - "* When we instantiate a `Time` object, the `__init__` method is invoked.\n", + "* Cuando instanciamos un objeto `Time`, se invoca el método `__init__`.\n", "\n", - "* When we use the `+` operator with a `Time` object, its `__add__` method is invoked.\n", + "* Cuando usamos el operador `+` con un objeto `Time`, se invoca su método `__add__`.\n", "\n", - "* And when we print a `Time` object, its `__str__` method is invoked.\n", + "* Y cuando imprimimos un objeto `Time`, se invoca su método `__str__`.\n", "\n", - "Changing the behavior of an operator so that it works with programmer-defined types is called **operator overloading**.\n", - "For every operator, like `+`, there is a corresponding special method, like `__add__`. " + "Cambiar el comportamiento de un operador para que funcione con tipos definidos por el programador se llama **sobrecarga de operadores**.\n", + "Para cada operador, como `+`, hay un método especial correspondiente, como `__add__`. " ] }, { @@ -646,15 +638,15 @@ "id": "b7299e62", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "A `Time` object is valid if the values of `minute` and `second` are between `0` and `60` -- including `0` but not `60` -- and if `hour` is positive.\n", - "Also, `hour` and `minute` should be integer values, but we might allow `second` to have a fraction part.\n", - "Requirements like these are called **invariants** because they should always be true.\n", - "To put it a different way, if they are not true, something has gone wrong.\n", + "Un objeto `Time` es válido si los valores de `minute` y `second` están entre `0` y `60` -- incluyendo `0` pero no `60` -- y si `hour` es positivo.\n", + "Además, `hour` y `minute` deberían ser valores enteros, pero podríamos permitir que `second` tenga una parte fraccionaria.\n", + "Requisitos como estos se llaman **invariantes** porque siempre deberían ser verdaderos.\n", + "Dicho de otra forma, si no son verdaderos, algo ha ido mal.\n", "\n", - "Writing code to check invariants can help detect errors and find their causes.\n", - "For example, you might have a method like `is_valid` that takes a Time object and returns `False` if it violates an invariant." + "Escribir código para comprobar invariantes puede ayudar a detectar errores y encontrar sus causas.\n", + "Por ejemplo, podrías tener un método como `is_valid` que toma un objeto Time y devuelve `False` si viola una invariante." ] }, { @@ -670,7 +662,7 @@ "id": "a10ad3db", "metadata": {}, "source": [ - "Then, at the beginning of each method you can check the arguments to make sure they are valid." + "Entonces, al principio de cada método puedes comprobar los argumentos para asegurarte de que son válidos." ] }, { @@ -686,8 +678,8 @@ "id": "e7c78e9a", "metadata": {}, "source": [ - "The `assert` statement evaluates the expression that follows. If the result is `True`, it does nothing; if the result is `False`, it causes an `AssertionError`.\n", - "Here's an example." + "La sentencia `assert` evalúa la expresión que le sigue. Si el resultado es `True`, no hace nada; si el resultado es `False`, causa un `AssertionError`.\n", + "Aquí hay un ejemplo." ] }, { @@ -713,7 +705,7 @@ "id": "18bd34ad", "metadata": {}, "source": [ - "`assert` statements are useful because they distinguish code that deals with normal conditions from code that checks for errors." + "Las sentencias `assert` son útiles porque distinguen el código que trata con condiciones normales del código que comprueba errores." ] }, { @@ -721,31 +713,31 @@ "id": "58b86fbe", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**object-oriented language:**\n", - "A language that provides features to support object-oriented programming, notably user-defined types.\n", + "**lenguaje orientado a objetos:**\n", + "Un lenguaje que proporciona funcionalidades para dar soporte a la programación orientada a objetos, especialmente tipos definidos por el usuario.\n", "\n", - "**method:**\n", - "A function that is defined inside a class definition and is invoked on instances of that class.\n", + "**método:**\n", + "Una función que se define dentro de una definición de clase y se invoca sobre instancias de esa clase.\n", "\n", - "**receiver:**\n", - "The object a method is invoked on.\n", + "**receptor (receiver):**\n", + "El objeto sobre el que se invoca un método.\n", "\n", - "**static method:**\n", - "A method that can be invoked without an object as receiver.\n", + "**método estático:**\n", + "Un método que puede invocarse sin un objeto como receptor.\n", "\n", - "**instance method:**\n", - "A method that must be invoked with an object as receiver.\n", + "**método de instancia:**\n", + "Un método que debe invocarse con un objeto como receptor.\n", "\n", - "**special method:**\n", - "A method that changes the way operators and some functions work with an object.\n", + "**método especial:**\n", + "Un método que cambia la forma en que los operadores y algunas funciones funcionan con un objeto.\n", "\n", - "**operator overloading:**\n", - "The process of using special methods to change the way operators with with user-defined types.\n", + "**sobrecarga de operadores:**\n", + "El proceso de usar métodos especiales para cambiar la forma en que los operadores funcionan con tipos definidos por el usuario.\n", "\n", - "**invariant:**\n", - " A condition that should always be true during the execution of a program." + "**invariante:**\n", + " Una condición que siempre debería ser verdadera durante la ejecución de un programa." ] }, { @@ -753,7 +745,7 @@ "id": "796adf5c", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -771,20 +763,20 @@ "id": "25cd6888", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "For more information about static methods, ask a virtual assistant:\n", + "Para obtener más información sobre métodos estáticos, pregunta a un asistente virtual:\n", "\n", - "* \"What's the difference between an instance method and a static method?\"\n", + "* \"¿Cuál es la diferencia entre un método de instancia y un método estático?\"\n", "\n", - "* \"Why are static methods called static?\"\n", + "* \"¿Por qué los métodos estáticos se llaman estáticos?\"\n", "\n", - "If you ask a virtual assistant to generate a static method, the result will probably begin with `@staticmethod`, which is a \"decorator\" that indicates that it is a static method.\n", - "Decorators are not covered in this book, but if you are curious, you can ask a VA for more information.\n", + "Si le pides a un asistente virtual que genere un método estático, el resultado probablemente empezará con `@staticmethod`, que es un \"decorator\" que indica que es un método estático.\n", + "Los decorators no se cubren en este libro, pero si tienes curiosidad, puedes pedirle más información a un AV.\n", "\n", - "In this chapter we rewrote several functions as methods.\n", - "Virtual assistants are generally good at this kind of code transformation.\n", - "As an example, paste the following function into a VA and ask it, \"Rewrite this function as a method of the `Time` class.\"" + "En este capítulo reescribimos varias funciones como métodos.\n", + "Los asistentes virtuales suelen ser buenos en este tipo de transformación de código.\n", + "Como ejemplo, pega la siguiente función en un AV y pídele: \"Reescribe esta función como un método de la clase `Time`.\"" ] }, { @@ -800,20 +792,20 @@ "id": "fc9f135b-e242-4ef6-83eb-8e028235c07b", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In the previous chapter, a series of exercises asked you to write a `Date` class and several functions that work with `Date` objects.\n", - "Now let's practice rewriting those functions as methods.\n", + "En el capítulo anterior, una serie de ejercicios te pidió escribir una clase `Date` y varias funciones que trabajan con objetos `Date`.\n", + "Ahora practiquemos reescribir esas funciones como métodos.\n", "\n", - "1. Write a definition for a `Date` class that represents a date -- that is, a year, month, and day of the month.\n", + "1. Escribe una definición para una clase `Date` que represente una fecha -- es decir, un año, un mes y un día del mes.\n", "\n", - "2. Write an `__init__` method that takes `year`, `month`, and `day` as parameters and assigns the parameters to attributes. Create an object that represents June 22, 1933.\n", + "2. Escribe un método `__init__` que tome `year`, `month` y `day` como parámetros y asigne los parámetros a atributos. Crea un objeto que represente el 22 de junio de 1933.\n", "\n", - "2. Write `__str__` method that uses an f-string to format the attributes and returns the result. If you test it with the `Date` you created, the result should be `1933-06-22`.\n", + "2. Escribe un método `__str__` que use un f-string para formatear los atributos y devolver el resultado. Si lo pruebas con el `Date` que creaste, el resultado debería ser `1933-06-22`.\n", "\n", - "3. Write a method called `is_after` that takes two `Date` objects and returns `True` if the first comes after the second. Create a second object that represents September 17, 1933, and check whether it comes after the first object.\n", + "3. Escribe un método llamado `is_after` que tome dos objetos `Date` y devuelva `True` si el primero viene después del segundo. Crea un segundo objeto que represente el 17 de septiembre de 1933 y comprueba si viene después del primer objeto.\n", "\n", - "Hint: You might find it useful write a method called `to_tuple` that returns a tuple that contains the attributes of a `Date` object in year-month-day order." + "Pista: Podría resultarte útil escribir un método llamado `to_tuple` que devuelva una tupla que contiene los atributos de un objeto `Date` en orden año-mes-día." ] }, { @@ -831,7 +823,7 @@ "tags": [] }, "source": [ - "You can use these examples to test your solution." + "Puedes usar estos ejemplos para probar tu solución." ] }, { @@ -889,13 +881,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Licencia del código: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] } ], @@ -921,4 +915,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/blank/chap16.ipynb b/blank/chap16.ipynb index 4309183..5d4deab 100644 --- a/blank/chap16.ipynb +++ b/blank/chap16.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir versiones impresas y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -25,15 +25,15 @@ "id": "e826e661", "metadata": {}, "source": [ - "# Classes and Objects\n", + "# Clases y Objetos\n", "\n", - "At this point we have defined classes and created objects that represent the time of day and the day of the year.\n", - "And we've defined methods that create, modify, and perform computations with these objects.\n", + "Hasta este punto hemos definido clases y creado objetos que representan la hora del día y el día del año.\n", + "Y hemos definido métodos que crean, modifican y realizan cálculos con estos objetos.\n", "\n", - "In this chapter we'll continue our tour of object-oriented programming (OOP) by defining classes that represent geometric objects, including points, lines, rectangles, and circles.\n", - "We'll write methods that create and modify these objects, and we'll use the `jupyturtle` module to draw them.\n", + "En este capítulo continuaremos nuestro recorrido por la programación orientada a objetos (OOP) definiendo clases que representan objetos geométricos, incluidos puntos, líneas, rectángulos y círculos.\n", + "Escribiremos métodos que crean y modifican estos objetos, y usaremos el module `jupyturtle` para dibujarlos.\n", "\n", - "I'll use these classes to demonstrate OOP topics including object identity and equivalence, shallow and deep copying, and polymorphism." + "Usaré estas clases para demostrar temas de OOP, incluida la identidad y equivalencia de objetos, las copias superficiales y profundas, y el polimorfismo." ] }, { @@ -43,22 +43,22 @@ "tags": [] }, "source": [ - "## Creating a Point\n", + "## Crear un Point\n", "\n", - "In computer graphics a location on the screen is often represented using a pair of coordinates in an `x`-`y` plane.\n", - "By convention, the point `(0, 0)` usually represents the upper-left corner of the screen, and `(x, y)` represents the point `x` units to the right and `y` units down from the origin.\n", - "Compared to the Cartesian coordinate system you might have seen in a math class, the `y` axis is upside-down.\n", + "En gráficos por computadora, una ubicación en la pantalla a menudo se representa usando un par de coordenadas en un plano `x`-`y`.\n", + "Por convención, el punto `(0, 0)` suele representar la esquina superior izquierda de la pantalla, y `(x, y)` representa el punto que está `x` unidades a la derecha e `y` unidades hacia abajo desde el origen.\n", + "Comparado con el sistema de coordenadas cartesianas que quizá hayas visto en una clase de matemáticas, el eje `y` está al revés.\n", "\n", - "There are several ways we might represent a point in Python:\n", + "Hay varias formas en que podríamos representar un punto en Python:\n", "\n", - "- We can store the coordinates separately in two variables, `x` and `y`.\n", + "- Podemos almacenar las coordenadas por separado en dos variables, `x` e `y`.\n", "\n", - "- We can store the coordinates as elements in a list or tuple.\n", + "- Podemos almacenar las coordenadas como elementos en una lista o tupla.\n", "\n", - "- We can create a new type to represent points as objects.\n", + "- Podemos crear un nuevo tipo para representar puntos como objetos.\n", "\n", - "In object-oriented programming, it would be most idiomatic to create a new type.\n", - "To do that, we'll start with a class definition for `Point`." + "En programación orientada a objetos, lo más idiomático sería crear un nuevo tipo.\n", + "Para hacerlo, empezaremos con una definición de clase para `Point`." ] }, { @@ -74,10 +74,10 @@ "id": "3d35a095", "metadata": {}, "source": [ - "The `__init__` method takes the coordinates as parameters and assigns them to attributes `x` and `y`.\n", - "The `__str__` method returns a string representation of the `Point`.\n", + "El método `__init__` toma las coordenadas como parámetros y las asigna a los atributos `x` e `y`.\n", + "El método `__str__` devuelve una representación en string del `Point`.\n", "\n", - "Now we can instantiate and display a `Point` object like this." + "Ahora podemos instanciar y mostrar un objeto `Point` así." ] }, { @@ -93,7 +93,7 @@ "id": "b3fd8858", "metadata": {}, "source": [ - "The following diagram shows the state of the new object. " + "El siguiente diagrama muestra el estado del nuevo objeto. " ] }, { @@ -121,9 +121,9 @@ "id": "713b7410", "metadata": {}, "source": [ - "As usual, a programmer-defined type is represented by a box with the name of the type outside and the attributes inside.\n", + "Como de costumbre, un tipo definido por el programador se representa con una caja con el nombre del tipo fuera y los atributos dentro.\n", "\n", - "In general, programmer-defined types are mutable, so we can write a method like `translate` that takes two numbers, `dx` and `dy`, and adds them to the attributes `x` and `y`." + "En general, los tipos definidos por el programador son mutables, así que podemos escribir un método como `translate` que tome dos números, `dx` y `dy`, y los sume a los atributos `x` e `y`." ] }, { @@ -139,8 +139,8 @@ "id": "4d183292", "metadata": {}, "source": [ - "This function translates the `Point` from one location in the plane to another.\n", - "If we don't want to modify an existing `Point`, we can use `copy` to copy the original object and then modify the copy." + "Esta función traslada el `Point` de una ubicación del plano a otra.\n", + "Si no queremos modificar un `Point` existente, podemos usar `copy` para copiar el objeto original y luego modificar la copia." ] }, { @@ -156,7 +156,7 @@ "id": "562567c2", "metadata": {}, "source": [ - "We can encapsulate those steps in another method called `translated`." + "Podemos encapsular esos pasos en otro método llamado `translated`." ] }, { @@ -172,9 +172,9 @@ "id": "a7a635ee", "metadata": {}, "source": [ - "In the same way that the built in function `sort` modifies a list, and the `sorted` function creates a new list, now we have a `translate` method that modifies a `Point` and a `translated` method that creates a new one.\n", + "De la misma manera que la función integrada `sort` modifica una lista, y la función `sorted` crea una lista nueva, ahora tenemos un método `translate` que modifica un `Point` y un método `translated` que crea uno nuevo.\n", "\n", - "Here's an example:" + "Aquí hay un ejemplo:" ] }, { @@ -190,7 +190,7 @@ "id": "923362d2", "metadata": {}, "source": [ - "In the next section, we'll use these points to define and draw a line." + "En la siguiente sección, usaremos estos puntos para definir y dibujar una línea." ] }, { @@ -198,10 +198,10 @@ "id": "837f98fd", "metadata": {}, "source": [ - "## Creating a Line\n", + "## Crear una Line\n", "\n", - "Now let's define a class that represents the line segment between two points.\n", - "As usual, we'll start with an `__init__` method and a `__str__` method." + "Ahora definamos una clase que representa el segmento de línea entre dos puntos.\n", + "Como de costumbre, empezaremos con un método `__init__` y un método `__str__`." ] }, { @@ -217,7 +217,7 @@ "id": "d7dad30e", "metadata": {}, "source": [ - "With those two methods, we can instantiate and display a `Line` object we'll use to represent the `x` axis." + "Con esos dos métodos, podemos instanciar y mostrar un objeto `Line` que usaremos para representar el eje `x`." ] }, { @@ -233,16 +233,16 @@ "id": "e7b5fd9a", "metadata": {}, "source": [ - "When we call `print` and pass `line` as a parameter, `print` invokes `__str__` on `line`.\n", - "The `__str__` method uses an f-string to create a string representation of the `line`. \n", + "Cuando llamamos a `print` y pasamos `line` como parámetro, `print` invoca `__str__` sobre `line`.\n", + "El método `__str__` usa un f-string para crear una representación en string de la `line`. \n", "\n", - "The f-string contains two expressions in curly braces, `self.p1` and `self.p2`.\n", - "When those expressions are evaluated, the results are `Point` objects.\n", - "Then, when they are converted to strings, the `__str__` method from the `Point` class gets invoked.\n", + "El f-string contiene dos expresiones entre llaves, `self.p1` y `self.p2`.\n", + "Cuando se evalúan esas expresiones, los resultados son objetos `Point`.\n", + "Luego, cuando se convierten a strings, se invoca el método `__str__` de la clase `Point`.\n", "\n", - "That's why, when we display a `Line`, the result contains the string representations of the `Point` objects.\n", + "Por eso, cuando mostramos una `Line`, el resultado contiene las representaciones en string de los objetos `Point`.\n", "\n", - "The following object diagram shows the state of this `Line` object." + "El siguiente diagrama de objeto muestra el estado de este objeto `Line`." ] }, { @@ -270,17 +270,17 @@ "id": "079859b5", "metadata": {}, "source": [ - "String representations and object diagrams are useful for debugging, but the point of this example is to generate graphics, not text!\n", - "So we'll use the `jupyturtle` module to draw lines on the screen.\n", + "Las representaciones en string y los diagramas de objeto son útiles para depurar, ¡pero el objetivo de este ejemplo es generar gráficos, no texto!\n", + "Así que usaremos el module `jupyturtle` para dibujar líneas en la pantalla.\n", "\n", - "As we did in [Chapter 4](section_turtle_module), we'll use `make_turtle` to create a `Turtle` object and a small canvas where it can draw.\n", - "To draw lines, we'll use two new functions from the `jupyturtle` module:\n", + "Como hicimos en el [Capítulo 4](section_turtle_module), usaremos `make_turtle` para crear un objeto `Turtle` y un canvas pequeño donde pueda dibujar.\n", + "Para dibujar líneas, usaremos dos funciones nuevas del module `jupyturtle`:\n", "\n", - "* `jumpto`, which takes two coordinates and moves the `Turtle` to the given location without drawing a line, and \n", + "* `jumpto`, que toma dos coordenadas y mueve la `Turtle` a la ubicación dada sin dibujar una línea, y \n", "\n", - "* `moveto`, which moves the `Turtle` from its current location to the given location, and draws a line segment between them.\n", + "* `moveto`, que mueve la `Turtle` desde su ubicación actual a la ubicación dada, y dibuja un segmento de línea entre ellas.\n", "\n", - "Here's how we import them." + "Así es como las importamos." ] }, { @@ -296,7 +296,7 @@ "id": "9d2dd88f", "metadata": {}, "source": [ - "And here's a method that draws a `Line`." + "Y aquí hay un método que dibuja una `Line`." ] }, { @@ -312,7 +312,7 @@ "id": "2341f0e0", "metadata": {}, "source": [ - "To show how it's used, I'll create a second line that represents the `y` axis." + "Para mostrar cómo se usa, crearé una segunda línea que representa el eje `y`." ] }, { @@ -328,7 +328,7 @@ "id": "d7450736", "metadata": {}, "source": [ - "And then draw the axes." + "Y luego dibujamos los ejes." ] }, { @@ -344,8 +344,8 @@ "id": "473c156f", "metadata": {}, "source": [ - "As we define and draw more objects, we'll use these lines again.\n", - "But first let's talk about object equivalence and identity." + "A medida que definamos y dibujemos más objetos, usaremos estas líneas otra vez.\n", + "Pero primero hablemos de equivalencia e identidad de objetos." ] }, { @@ -353,9 +353,9 @@ "id": "950da673", "metadata": {}, "source": [ - "## Equivalence and identity\n", + "## Equivalencia e identidad\n", "\n", - "Suppose we create two points with the same coordinates." + "Supongamos que creamos dos puntos con las mismas coordenadas." ] }, { @@ -371,7 +371,7 @@ "id": "82b14526", "metadata": {}, "source": [ - "If we use the `==` operator to compare them, we get the default behavior for programmer-defined types -- the result is `True` only if they are the same object, which they are not." + "Si usamos el operador `==` para compararlos, obtenemos el comportamiento por defecto para tipos definidos por el programador -- el resultado es `True` solo si son el mismo objeto, y no lo son." ] }, { @@ -387,7 +387,7 @@ "id": "96be0ff8", "metadata": {}, "source": [ - "If we want to change that behavior, we can provide a special method called `__eq__` that defines what it means for two `Point` objects to be equal." + "Si queremos cambiar ese comportamiento, podemos proporcionar un método especial llamado `__eq__` que define qué significa que dos objetos `Point` sean iguales." ] }, { @@ -403,8 +403,8 @@ "id": "7f4409de", "metadata": {}, "source": [ - "This definition considers two `Points` to be equal if their attributes are equal.\n", - "Now when we use the `==` operator, it invokes the `__eq__` method, which indicates that `p1` and `p2` are considered equal." + "Esta definición considera que dos `Points` son iguales si sus atributos son iguales.\n", + "Ahora, cuando usamos el operador `==`, invoca el método `__eq__`, que indica que `p1` y `p2` se consideran iguales." ] }, { @@ -420,7 +420,7 @@ "id": "52662e6a", "metadata": {}, "source": [ - "But the `is` operator still indicates that they are different objects." + "Pero el operador `is` todavía indica que son objetos diferentes." ] }, { @@ -436,9 +436,9 @@ "id": "c008d3dd", "metadata": {}, "source": [ - "It's not possible to override the `is` operator -- it always checks whether the objects are identical.\n", - "But for programmer-defined types, you can override the `==` operator so it checks whether the objects are equivalent.\n", - "And you can define what equivalent means." + "No es posible sobrescribir el operador `is` -- siempre comprueba si los objetos son idénticos.\n", + "Pero para tipos definidos por el programador, puedes sobrescribir el operador `==` para que compruebe si los objetos son equivalentes.\n", + "Y puedes definir qué significa equivalente." ] }, { @@ -446,20 +446,20 @@ "id": "893a8cab", "metadata": {}, "source": [ - "## Creating a Rectangle\n", + "## Crear un Rectangle\n", "\n", - "Now let's define a class that represents and draws rectangles.\n", - "To keep things simple, we'll assume that the rectangles are either vertical or horizontal, not at an angle.\n", - "What attributes do you think we should use to specify the location and size of a rectangle?\n", + "Ahora definamos una clase que representa y dibuja rectángulos.\n", + "Para simplificar las cosas, asumiremos que los rectángulos son verticales u horizontales, no inclinados.\n", + "¿Qué atributos crees que deberíamos usar para especificar la ubicación y el tamaño de un rectángulo?\n", "\n", - "There are at least two possibilities:\n", + "Hay al menos dos posibilidades:\n", "\n", - "- You could specify the width and height of the rectangle and the location of one corner.\n", + "- Podrías especificar el ancho y alto del rectángulo y la ubicación de una esquina.\n", "\n", - "- You could specify two opposing corners.\n", + "- Podrías especificar dos esquinas opuestas.\n", "\n", - "At this point it's hard to say whether either is better than the other, so let's implement the first one.\n", - "Here is the class definition." + "En este punto es difícil decir si una es mejor que la otra, así que implementemos la primera.\n", + "Aquí está la definición de la clase." ] }, { @@ -475,8 +475,8 @@ "id": "df2852f3", "metadata": {}, "source": [ - "As usual, the `__init__` method assigns the parameters to attributes and the `__str__` returns a string representation of the object.\n", - "Now we can instantiate a `Rectangle` object, using a `Point` as the location of the upper-left corner." + "Como de costumbre, el método `__init__` asigna los parámetros a atributos y `__str__` devuelve una representación en string del objeto.\n", + "Ahora podemos instanciar un objeto `Rectangle`, usando un `Point` como ubicación de la esquina superior izquierda." ] }, { @@ -492,7 +492,7 @@ "id": "a9e0b5ec", "metadata": {}, "source": [ - "The following diagram shows the state of this object." + "El siguiente diagrama muestra el estado de este objeto." ] }, { @@ -520,7 +520,7 @@ "id": "bb54e6b5", "metadata": {}, "source": [ - "To draw a rectangle, we'll use the following method to make four `Point` objects to represent the corners." + "Para dibujar un rectángulo, usaremos el siguiente método para crear cuatro objetos `Point` que representen las esquinas." ] }, { @@ -536,7 +536,7 @@ "id": "20dbe0cb", "metadata": {}, "source": [ - "Then we'll make four `Line` objects to represent the sides." + "Luego crearemos cuatro objetos `Line` para representar los lados." ] }, { @@ -552,7 +552,7 @@ "id": "30fe41cc", "metadata": {}, "source": [ - "Then we'll draw the sides." + "Luego dibujaremos los lados." ] }, { @@ -568,7 +568,7 @@ "id": "390ba3e7", "metadata": {}, "source": [ - "Here's an example." + "Aquí hay un ejemplo." ] }, { @@ -584,7 +584,7 @@ "id": "532a4f69", "metadata": {}, "source": [ - "The figure includes two lines to represent the axes." + "La figura incluye dos líneas para representar los ejes." ] }, { @@ -592,13 +592,13 @@ "id": "0e713a90", "metadata": {}, "source": [ - "## Changing rectangles\n", + "## Cambiar rectángulos\n", "\n", - "Now let's consider two methods that modify rectangles, `grow` and `translate`.\n", - "We'll see that `grow` works as expected, but `translate` has a subtle bug.\n", - "See if you can figure it out before I explain.\n", + "Ahora consideremos dos métodos que modifican rectángulos, `grow` y `translate`.\n", + "Veremos que `grow` funciona como se esperaba, pero `translate` tiene un error sutil.\n", + "A ver si puedes descubrirlo antes de que lo explique.\n", "\n", - "`grow` takes two numbers, `dwidth` and `dheight`, and adds them to the `width` and `height` attributes of the rectangle." + "`grow` toma dos números, `dwidth` y `dheight`, y los suma a los atributos `width` y `height` del rectángulo." ] }, { @@ -614,7 +614,7 @@ "id": "a51913e2", "metadata": {}, "source": [ - "Here's an example that demonstrates the effect by making a copy of `box1` and invoking `grow` on the copy." + "Aquí hay un ejemplo que demuestra el efecto creando una copia de `box1` e invocando `grow` sobre la copia." ] }, { @@ -630,7 +630,7 @@ "id": "6d74da62", "metadata": {}, "source": [ - "If we draw `box1` and `box2`, we can confirm that `grow` works as expected." + "Si dibujamos `box1` y `box2`, podemos confirmar que `grow` funciona como se esperaba." ] }, { @@ -646,8 +646,8 @@ "id": "0c940008", "metadata": {}, "source": [ - "Now let's see about `translate`.\n", - "It takes two numbers, `dx` and `dy`, and moves the rectangle the given distances in the `x` and `y` directions. " + "Ahora veamos qué pasa con `translate`.\n", + "Toma dos números, `dx` y `dy`, y mueve el rectángulo las distancias dadas en las direcciones `x` e `y`. " ] }, { @@ -663,7 +663,7 @@ "id": "c27fe91d", "metadata": {}, "source": [ - "To demonstrate the effect, we'll translate `box2` to the right and down." + "Para demostrar el efecto, trasladaremos `box2` a la derecha y hacia abajo." ] }, { @@ -679,7 +679,7 @@ "id": "e01badbc", "metadata": {}, "source": [ - "Now let's see what happens if we draw `box1` and `box2` again." + "Ahora veamos qué pasa si dibujamos `box1` y `box2` otra vez." ] }, { @@ -695,8 +695,8 @@ "id": "5310bdd7", "metadata": {}, "source": [ - "It looks like both rectangles moved, which is not what we intended!\n", - "The next section explains what went wrong." + "Parece que ambos rectángulos se movieron, ¡que no era lo que pretendíamos!\n", + "La siguiente sección explica qué salió mal." ] }, { @@ -704,10 +704,10 @@ "id": "940adbeb", "metadata": {}, "source": [ - "## Deep copy\n", + "## Copia profunda\n", "\n", - "When we use `copy` to duplicate `box1`, it copies the `Rectangle` object but not the `Point` object it contains.\n", - "So `box1` and `box2` are different objects, as intended." + "Cuando usamos `copy` para duplicar `box1`, copia el objeto `Rectangle` pero no el objeto `Point` que contiene.\n", + "Así que `box1` y `box2` son objetos diferentes, como pretendíamos." ] }, { @@ -723,7 +723,7 @@ "id": "eac5309b", "metadata": {}, "source": [ - "But their `corner` attributes refer to the same object." + "Pero sus atributos `corner` se refieren al mismo objeto." ] }, { @@ -739,7 +739,7 @@ "id": "f0cc51b5", "metadata": {}, "source": [ - "The following diagram shows the state of these objects." + "El siguiente diagrama muestra el estado de estos objetos." ] }, { @@ -767,14 +767,14 @@ "id": "35f3e7e1", "metadata": {}, "source": [ - "What `copy` does is called a **shallow copy** because it copies the object but not the objects it contains.\n", - "As a result, changing the `width` or `height` of one `Rectangle` does not affect the other, but changing the attributes of the shared `Point` affects both!\n", - "This behavior is confusing and error-prone.\n", + "Lo que hace `copy` se llama **copia superficial** porque copia el objeto pero no los objetos que contiene.\n", + "Como resultado, cambiar el `width` o `height` de un `Rectangle` no afecta al otro, ¡pero cambiar los atributos del `Point` compartido afecta a ambos!\n", + "Este comportamiento es confuso y propenso a errores.\n", "\n", - "Fortunately, the `copy` module provides another function, called `deepcopy`, that copies not only the object but also the objects it refers to, and the objects *they* refer to, and so on. \n", - "This operation is called a **deep copy**.\n", + "Afortunadamente, el module `copy` proporciona otra función, llamada `deepcopy`, que copia no solo el objeto sino también los objetos a los que se refiere, y los objetos a los que *ellos* se refieren, y así sucesivamente. \n", + "Esta operación se llama **copia profunda**.\n", "\n", - "To demonstrate, let's start with a new `Rectangle` that contains a new `Point`." + "Para demostrarlo, empecemos con un nuevo `Rectangle` que contiene un nuevo `Point`." ] }, { @@ -790,7 +790,7 @@ "id": "ff9ee872", "metadata": {}, "source": [ - "And we'll make a deep copy." + "Y haremos una copia profunda." ] }, { @@ -806,7 +806,7 @@ "id": "7efd0e6a", "metadata": {}, "source": [ - "We can confirm that the two `Rectangle` objects refer to different `Point` objects." + "Podemos confirmar que los dos objetos `Rectangle` se refieren a objetos `Point` diferentes." ] }, { @@ -822,8 +822,8 @@ "id": "ca925206", "metadata": {}, "source": [ - "Because `box3` and `box4` are completely separate objects, we can modify one without affecting the other.\n", - "To demonstrate, we'll move `box3` and grow `box4`." + "Como `box3` y `box4` son objetos completamente separados, podemos modificar uno sin afectar al otro.\n", + "Para demostrarlo, moveremos `box3` y haremos crecer `box4`." ] }, { @@ -839,7 +839,7 @@ "id": "3ff31c7c", "metadata": {}, "source": [ - "And we can confirm that the effect is as expected." + "Y podemos confirmar que el efecto es el esperado." ] }, { @@ -855,10 +855,10 @@ "id": "67051d62", "metadata": {}, "source": [ - "## Polymorphism\n", + "## Polimorfismo\n", "\n", - "In the previous example, we invoked the `draw` method on two `Line` objects and two `Rectangle` objects.\n", - "We can do the same thing more concisely by making a list of objects." + "En el ejemplo anterior, invocamos el método `draw` sobre dos objetos `Line` y dos objetos `Rectangle`.\n", + "Podemos hacer lo mismo de forma más concisa creando una lista de objetos." ] }, { @@ -874,7 +874,7 @@ "id": "773955dd", "metadata": {}, "source": [ - "The elements of this list are different types, but they all provide a `draw` method, so we can loop through the list and invoke `draw` on each one." + "Los elementos de esta lista son de tipos diferentes, pero todos proporcionan un método `draw`, así que podemos recorrer la lista e invocar `draw` sobre cada uno." ] }, { @@ -890,17 +890,17 @@ "id": "a1ae190c", "metadata": {}, "source": [ - "The first and second time through the loop, `shape` refers to a `Line` object, so when `draw` is invoked, the method that runs is the one defined in the `Line` class.\n", + "La primera y segunda vez a través del bucle, `shape` se refiere a un objeto `Line`, así que cuando se invoca `draw`, el método que se ejecuta es el definido en la clase `Line`.\n", "\n", - "The third and fourth time through the loop, `shape` refers to a `Rectangle` object, so when `draw` is invoked, the method that runs is the one defined in the `Rectangle` class.\n", + "La tercera y cuarta vez a través del bucle, `shape` se refiere a un objeto `Rectangle`, así que cuando se invoca `draw`, el método que se ejecuta es el definido en la clase `Rectangle`.\n", "\n", - "In a sense, each object knows how to draw itself.\n", - "This feature is called **polymorphism**.\n", - "The word comes from Greek roots that mean \"many shaped\".\n", - "In object-oriented programming, polymorphism is the ability of different types to provide the same methods, which makes it possible to perform many computations -- like drawing shapes -- by invoking the same method on different types of objects.\n", + "En cierto sentido, cada objeto sabe cómo dibujarse a sí mismo.\n", + "Esta característica se llama **polimorfismo**.\n", + "La palabra viene de raíces griegas que significan \"muchas formas\".\n", + "En programación orientada a objetos, el polimorfismo es la capacidad de diferentes tipos para proporcionar los mismos métodos, lo que hace posible realizar muchos cálculos -- como dibujar formas -- invocando el mismo método sobre objetos de tipos diferentes.\n", "\n", - "As an exercise at the end of this chapter, you'll define a new class that represents a circle and provides a `draw` method.\n", - "Then you can use polymorphism to draw lines, rectangles, and circles." + "Como ejercicio al final de este capítulo, definirás una nueva clase que representa un círculo y proporciona un método `draw`.\n", + "Luego puedes usar polimorfismo para dibujar líneas, rectángulos y círculos." ] }, { @@ -908,15 +908,15 @@ "id": "74d1b48f", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "In this chapter, we ran into a subtle bug that happened because we created a `Point` that was shared by two `Rectangle` objects, and then we modified the `Point`.\n", - "In general, there are two ways to avoid problems like this: you can avoid sharing objects or you can avoid modifying them.\n", + "En este capítulo, nos encontramos con un error sutil que ocurrió porque creamos un `Point` que era compartido por dos objetos `Rectangle`, y luego modificamos el `Point`.\n", + "En general, hay dos formas de evitar problemas como este: puedes evitar compartir objetos o puedes evitar modificarlos.\n", "\n", - "To avoid sharing objects, you can use deep copy, as we did in this chapter.\n", + "Para evitar compartir objetos, puedes usar copia profunda, como hicimos en este capítulo.\n", "\n", - "To avoid modifying objects, consider replacing impure functions like `translate` with pure functions like `translated`.\n", - "For example, here's a version of `translated` that creates a new `Point` and never modifies its attributes." + "Para evitar modificar objetos, considera reemplazar funciones impuras como `translate` por funciones puras como `translated`.\n", + "Por ejemplo, aquí hay una versión de `translated` que crea un nuevo `Point` y nunca modifica sus atributos." ] }, { @@ -932,11 +932,11 @@ "id": "76972167", "metadata": {}, "source": [ - "Python provides features that make it easier to avoid modifying objects.\n", - "They are beyond the scope of this book, but if you are curious, ask a virtual assistant, \"How do I make a Python object immutable?\"\n", + "Python proporciona funcionalidades que hacen más fácil evitar modificar objetos.\n", + "Están fuera del alcance de este libro, pero si tienes curiosidad, pregunta a un asistente virtual: \"¿Cómo hago que un objeto de Python sea inmutable?\"\n", "\n", - "Creating a new object takes more time than modifying an existing one, but the difference seldom matters in practice.\n", - "Programs that avoid shared objects and impure functions are often easier to develop, test, and debug -- and the best kind of debugging is the kind you don't have to do." + "Crear un objeto nuevo toma más tiempo que modificar uno existente, pero la diferencia rara vez importa en la práctica.\n", + "Los programas que evitan objetos compartidos y funciones impuras suelen ser más fáciles de desarrollar, probar y depurar -- y la mejor depuración es el que no tienes que hacer." ] }, { @@ -944,16 +944,16 @@ "id": "02106995", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**shallow copy:**\n", - "A copy operation that does not copy nested objects.\n", + "**copia superficial:**\n", + "Una operación de copia que no copia objetos anidados.\n", "\n", - "**deep copy:**\n", - "A copy operation that also copies nested objects.\n", + "**copia profunda:**\n", + "Una operación de copia que también copia objetos anidados.\n", "\n", - "**polymorphism:**\n", - "The ability of a method or operator to work with multiple types of objects." + "**polimorfismo:**\n", + "La capacidad de un método u operador para funcionar con múltiples tipos de objetos." ] }, { @@ -961,7 +961,7 @@ "id": "09dd41c1", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -979,10 +979,10 @@ "id": "da0aea86", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "For all of the following exercises, consider asking a virtual assistant for help.\n", - "If you do, you'll want include as part of the prompt the class definitions for `Point`, `Line`, and `Rectangle` -- otherwise the VA will make a guess about their attributes and functions, and the code it generates won't work." + "Para todos los ejercicios siguientes, considera pedir ayuda a un asistente virtual.\n", + "Si lo haces, querrás incluir como parte del prompt las definiciones de clase para `Point`, `Line` y `Rectangle` -- de lo contrario el AV hará una suposición sobre sus atributos y funciones, y el código que genere no funcionará." ] }, { @@ -990,9 +990,9 @@ "id": "7721e47b", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write an `__eq__` method for the `Line` class that returns `True` if the `Line` objects refer to `Point` objects that are equivalent, in either order." + "Escribe un método `__eq__` para la clase `Line` que devuelva `True` si los objetos `Line` se refieren a objetos `Point` que son equivalentes, en cualquier orden." ] }, { @@ -1002,7 +1002,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1032,7 +1032,7 @@ "tags": [] }, "source": [ - "You can use these examples to test your code." + "Puedes usar estos ejemplos para probar tu código." ] }, { @@ -1052,7 +1052,7 @@ "tags": [] }, "source": [ - "This example should be `True` because the `Line` objects refer to `Point` objects that are equivalent, in the same order." + "Este ejemplo debería ser `True` porque los objetos `Line` se refieren a objetos `Point` que son equivalentes, en el mismo orden." ] }, { @@ -1072,7 +1072,7 @@ "tags": [] }, "source": [ - "This example should be `True` because the `Line` objects refer to `Point` objects that are equivalent, in reverse order." + "Este ejemplo debería ser `True` porque los objetos `Line` se refieren a objetos `Point` que son equivalentes, en orden inverso." ] }, { @@ -1092,7 +1092,7 @@ "tags": [] }, "source": [ - "Equivalence should always be transitive -- that is, if `line_a` and `line_b` are equivalent, and `line_a` and `line_c` are equivalent, then `line_b` and `line_c` should also be equivalent." + "La equivalencia siempre debería ser transitiva -- es decir, si `line_a` y `line_b` son equivalentes, y `line_a` y `line_c` son equivalentes, entonces `line_b` y `line_c` también deberían ser equivalentes." ] }, { @@ -1112,7 +1112,7 @@ "tags": [] }, "source": [ - "This example should be `False` because the `Line` objects refer to `Point` objects that are not equivalent." + "Este ejemplo debería ser `False` porque los objetos `Line` se refieren a objetos `Point` que no son equivalentes." ] }, { @@ -1130,9 +1130,9 @@ "id": "0e629491", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a `Line` method called `midpoint` that computes the midpoint of a line segment and returns the result as a `Point` object." + "Escribe un método de `Line` llamado `midpoint` que calcule el punto medio de un segmento de línea y devuelva el resultado como un objeto `Point`." ] }, { @@ -1142,7 +1142,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1172,7 +1172,7 @@ "tags": [] }, "source": [ - "You can use the following examples to test your code and draw the result." + "Puedes usar los siguientes ejemplos para probar tu código y dibujar el resultado." ] }, { @@ -1230,9 +1230,9 @@ "id": "0518c200", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a `Rectangle` method called `midpoint` that find the point in the center of a rectangle and returns the result as a `Point` object." + "Escribe un método de `Rectangle` llamado `midpoint` que encuentre el punto en el centro de un rectángulo y devuelva el resultado como un objeto `Point`." ] }, { @@ -1242,7 +1242,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1272,7 +1272,7 @@ "tags": [] }, "source": [ - "You can use the following example to test your code." + "Puedes usar el siguiente ejemplo para probar tu código." ] }, { @@ -1320,15 +1320,15 @@ "id": "00cbc4d9", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a `Rectangle` method called `make_cross` that:\n", + "Escribe un método de `Rectangle` llamado `make_cross` que:\n", "\n", - "1. Uses `make_lines` to get a list of `Line` objects that represent the four sides of the rectangle.\n", + "1. Use `make_lines` para obtener una lista de objetos `Line` que representan los cuatro lados del rectángulo.\n", "\n", - "2. Computes the midpoints of the four lines.\n", + "2. Calcule los puntos medios de las cuatro líneas.\n", "\n", - "3. Makes and returns a list of two `Line` objects that represent lines connecting opposite midpoints, forming a cross through the middle of the rectangle." + "3. Cree y devuelva una lista de dos objetos `Line` que representan líneas que conectan puntos medios opuestos, formando una cruz por el centro del rectángulo." ] }, { @@ -1338,7 +1338,7 @@ "tags": [] }, "source": [ - "You can use this outline to get started." + "Puedes usar este esquema para empezar." ] }, { @@ -1368,7 +1368,7 @@ "tags": [] }, "source": [ - "You can use the following example to test your code." + "Puedes usar el siguiente ejemplo para probar tu código." ] }, { @@ -1406,10 +1406,10 @@ "id": "0f707fe3", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a definition for a class named `Circle` with attributes `center` and `radius`, where `center` is a Point object and `radius` is a number.\n", - "Include special methods `__init__` and a `__str__`, and a method called `draw` that uses `jupyturtle` functions to draw the circle." + "Escribe una definición para una clase llamada `Circle` con atributos `center` y `radius`, donde `center` es un objeto Point y `radius` es un número.\n", + "Incluye los métodos especiales `__init__` y `__str__`, y un método llamado `draw` que use funciones de `jupyturtle` para dibujar el círculo." ] }, { @@ -1419,7 +1419,7 @@ "tags": [] }, "source": [ - "You can use the following function, which is a version of the `circle` function we wrote in Chapter 4." + "Puedes usar la siguiente función, que es una versión de la función `circle` que escribimos en el Capítulo 4." ] }, { @@ -1447,8 +1447,8 @@ "tags": [] }, "source": [ - "You can use the following example to test your code.\n", - "We'll start with a square `Rectangle` with width and height `100`." + "Puedes usar el siguiente ejemplo para probar tu código.\n", + "Empezaremos con un `Rectangle` cuadrado con `width` y `height` `100`." ] }, { @@ -1468,7 +1468,7 @@ "tags": [] }, "source": [ - "The following code should create a `Circle` that fits inside the square." + "El siguiente código debería crear un `Circle` que encaje dentro del cuadrado." ] }, { @@ -1488,7 +1488,7 @@ "tags": [] }, "source": [ - "If everything worked correctly, the following code should draw the circle inside the square (touching on all four sides)." + "Si todo funcionó correctamente, el siguiente código debería dibujar el círculo dentro del cuadrado (tocando los cuatro lados)." ] }, { @@ -1516,13 +1516,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Licencia del código: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] } ], @@ -1548,4 +1550,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/blank/chap17.ipynb b/blank/chap17.ipynb index bc6b43e..79483c0 100644 --- a/blank/chap17.ipynb +++ b/blank/chap17.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -27,12 +27,12 @@ "tags": [] }, "source": [ - "# Inheritance\n", + "# Herencia\n", "\n", - "The language feature most often associated with object-oriented programming is **inheritance**.\n", - "Inheritance is the ability to define a new class that is a modified version of an existing class.\n", - "In this chapter I demonstrate inheritance using classes that represent playing cards, decks of cards, and poker hands.\n", - "If you don't play poker, don't worry -- I'll tell you what you need to know." + "La característica del lenguaje que más a menudo se asocia con la programación orientada a objetos es la **herencia**.\n", + "La herencia es la capacidad de definir una nueva clase que es una versión modificada de una clase existente.\n", + "En este capítulo demuestro la herencia usando clases que representan cartas de juego, barajas de cartas y manos de póker.\n", + "Si no juegas al póker, no te preocupes: te diré lo que necesitas saber." ] }, { @@ -40,21 +40,21 @@ "id": "b19c4dae", "metadata": {}, "source": [ - "## Representing cards\n", + "## Representar cartas\n", "\n", - "There are 52 playing cards in a standard deck -- each of them belongs to one of four suits and one of thirteen ranks. \n", - "The suits are Spades, Hearts, Diamonds, and Clubs.\n", - "The ranks are Ace, 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, and King.\n", - "Depending on which game you are playing, an Ace can be higher than King or lower than 2.\n", + "Hay 52 cartas en una baraja estándar; cada una pertenece a uno de cuatro palos y a uno de trece rangos.\n", + "Los palos son Spades, Hearts, Diamonds y Clubs.\n", + "Los rangos son Ace, 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen y King.\n", + "Dependiendo del juego al que estés jugando, un Ace puede ser más alto que King o más bajo que 2.\n", "\n", - "If we want to define a new object to represent a playing card, it is obvious what the attributes should be: `rank` and `suit`.\n", - "It is less obvious what type the attributes should be.\n", - "One possibility is to use strings like `'Spade'` for suits and `'Queen'` for ranks.\n", - "A problem with this implementation is that it would not be easy to compare cards to see which had a higher rank or suit.\n", + "Si queremos definir un nuevo objeto para representar una carta, es obvio cuáles deberían ser los atributos: `rank` y `suit`.\n", + "Es menos obvio qué tipo deberían tener los atributos.\n", + "Una posibilidad es usar strings como `'Spade'` para los palos y `'Queen'` para los rangos.\n", + "Un problema con esta implementación es que no sería fácil comparar cartas para ver cuál tiene un rango o palo más alto.\n", "\n", - "An alternative is to use integers to **encode** the ranks and suits.\n", - "In this context, \"encode\" means that we are going to define a mapping between numbers and suits, or between numbers and ranks.\n", - "This kind of encoding is not meant to be a secret (that would be \"encryption\")." + "Una alternativa es usar enteros para **codificar** los rangos y los palos.\n", + "En este contexto, \"codificar\" significa que vamos a definir una correspondencia entre números y palos, o entre números y rangos.\n", + "Este tipo de codificación no pretende ser secreta (eso sería \"cifrado\")." ] }, { @@ -62,17 +62,17 @@ "id": "a9bafecf", "metadata": {}, "source": [ - "For example, this table shows the suits and the corresponding integer codes:\n", + "Por ejemplo, esta tabla muestra los palos y los códigos enteros correspondientes:\n", "\n", "\n", - "| Suit | Code |\n", + "| Palo | Código |\n", "| --- | --- |\n", "| Spades | 3 |\n", "| Hearts | 2 |\n", "| Diamonds | 1 |\n", "| Clubs | 0 |\n", "\n", - "With this encoding, we can compare suits by comparing their codes." + "Con esta codificación, podemos comparar palos comparando sus códigos." ] }, { @@ -80,21 +80,21 @@ "id": "a1b46b1a", "metadata": {}, "source": [ - "To encode the ranks, we'll use the integer `2` to represent the rank `2`, `3` to represent `3`, and so on up to `10`.\n", - "The following table shows the codes for the face cards.\n", + "Para codificar los rangos, usaremos el entero `2` para representar el rango `2`, `3` para representar `3`, y así sucesivamente hasta `10`.\n", + "La siguiente tabla muestra los códigos para las figuras.\n", "\n", " \n", - "| Rank | Code |\n", + "| Rango | Código |\n", "| --- | --- |\n", "| Jack | 11 |\n", "| Queen | 12 |\n", "| King | 13 |\n", "\n", - "And we can use either `1` or `14` to represent an Ace, depending on whether we want it to be considered lower or higher than the other ranks.\n", + "Y podemos usar `1` o `14` para representar un Ace, dependiendo de si queremos que se considere más bajo o más alto que los demás rangos.\n", "\n", - "To represent these encodings, we will use two lists of strings, one with the names of the suits and the other with the names of the ranks.\n", + "Para representar estas codificaciones, usaremos dos listas de strings, una con los nombres de los palos y otra con los nombres de los rangos.\n", "\n", - "Here's a definition for a class that represents a playing card, with these lists of strings as **class variables**, which are variables defined inside a class definition, but not inside a method." + "Aquí tienes una definición de una clase que representa una carta, con estas listas de strings como **variables de clase**, que son variables definidas dentro de una definición de clase, pero no dentro de un método." ] }, { @@ -110,9 +110,9 @@ "id": "d63f798a", "metadata": {}, "source": [ - "The first element of `rank_names` is `None` because there is no card with rank zero. By including `None` as a place-keeper, we get a list with the nice property that the index `2` maps to the string `'2'`, and so on.\n", + "El primer elemento de `rank_names` es `None` porque no hay ninguna carta con rango cero. Al incluir `None` como marcador de posición, obtenemos una lista con la práctica propiedad de que el índice `2` se corresponde con el string `'2'`, y así sucesivamente.\n", "\n", - "Class variables are associated with the class, rather than an instance of the class, so we can access them like this." + "Las variables de clase están asociadas con la clase, en lugar de con una instancia de la clase, así que podemos acceder a ellas de esta forma." ] }, { @@ -128,7 +128,7 @@ "id": "c837fff6", "metadata": {}, "source": [ - "We can use `suit_names` to look up a suit and get the corresponding string." + "Podemos usar `suit_names` para buscar un palo y obtener el string correspondiente." ] }, { @@ -144,7 +144,7 @@ "id": "a59d905e", "metadata": {}, "source": [ - "And `rank_names` to look up a rank." + "Y `rank_names` para buscar un rango." ] }, { @@ -160,9 +160,9 @@ "id": "50dda19b", "metadata": {}, "source": [ - "## Card attributes\n", + "## Atributos de las cartas\n", "\n", - "Here's an `__init__` method for the `Card` class -- it takes `suit` and `rank` as parameters and assigns them to attributes with the same names." + "Aquí tienes un método `__init__` para la clase `Card`: toma `suit` y `rank` como parámetros y los asigna a atributos con los mismos nombres." ] }, { @@ -178,7 +178,7 @@ "id": "31a2782d", "metadata": {}, "source": [ - "Now we can create a `Card` object like this." + "Ahora podemos crear un objeto `Card` así." ] }, { @@ -194,7 +194,7 @@ "id": "85e5cf5d", "metadata": {}, "source": [ - "We can use the new instance to access the attributes." + "Podemos usar la nueva instancia para acceder a los atributos." ] }, { @@ -210,7 +210,7 @@ "id": "449225d3", "metadata": {}, "source": [ - "It is also legal to use the instance to access the class variables." + "También es válido usar la instancia para acceder a las variables de clase." ] }, { @@ -226,7 +226,7 @@ "id": "97232ffa", "metadata": {}, "source": [ - "But if you use the class, it is clearer that they are class variables, not attributes." + "Pero si usas la clase, queda más claro que son variables de clase, no atributos." ] }, { @@ -234,9 +234,9 @@ "id": "7a0a79ae", "metadata": {}, "source": [ - "## Printing cards\n", + "## Imprimir cartas\n", "\n", - "Here's a `__str__` method for `Card` objects." + "Aquí tienes un método `__str__` para objetos `Card`." ] }, { @@ -252,7 +252,7 @@ "id": "d6c51352", "metadata": {}, "source": [ - "When we print a `Card`, Python calls the `__str__` method to get a human-readable representation of the card." + "Cuando imprimimos una `Card`, Python llama al método `__str__` para obtener una representación de la carta legible para humanos." ] }, { @@ -268,10 +268,10 @@ "id": "76044b9e", "metadata": {}, "source": [ - "The following is a diagram of the `Card` class object and the Card instance.\n", - "`Card` is a class object, so its type is `type`.\n", - "`queen` is an instance of `Card`, so its type is `Card`.\n", - "To save space, I didn't draw the contents of `suit_names` and `rank_names`." + "El siguiente es un diagrama del objeto de clase `Card` y de la instancia de Carta.\n", + "`Card` es un objeto de clase, así que su tipo es `type`.\n", + "`queen` es una instancia de `Card`, así que su tipo es `Card`.\n", + "Para ahorrar espacio, no dibujé el contenido de `suit_names` y `rank_names`." ] }, { @@ -299,7 +299,7 @@ "id": "ccb8e41d", "metadata": {}, "source": [ - "Every `Card` instance has its own `suit` and `rank` attributes, but there is only one `Card` class object, and only one copy of the class variables `suit_names` and `rank_names`." + "Cada instancia de `Card` tiene sus propios atributos `suit` y `rank`, pero solo hay un objeto de clase `Card` y una sola copia de las variables de clase `suit_names` y `rank_names`." ] }, { @@ -307,9 +307,9 @@ "id": "98c6508d", "metadata": {}, "source": [ - "## Comparing cards\n", + "## Comparar cartas\n", "\n", - "Suppose we create a second `Card` object with the same suit and rank." + "Supongamos que creamos un segundo objeto `Card` con el mismo palo y rango." ] }, { @@ -325,7 +325,7 @@ "id": "3c92779c", "metadata": {}, "source": [ - "If we use the `==` operator to compare them, it checks whether `queen` and `queen2` refer to the same object." + "Si usamos el operador `==` para compararlas, comprueba si `queen` y `queen2` hacen referencia al mismo objeto." ] }, { @@ -341,8 +341,8 @@ "id": "278d8abe", "metadata": {}, "source": [ - "They don't, so it returns `False`.\n", - "We can change this behavior by defining the special method `__eq__`." + "No lo hacen, así que devuelve `False`.\n", + "Podemos cambiar este comportamiento definiendo el special método `__eq__`." ] }, { @@ -358,10 +358,10 @@ "id": "bd66a9d3", "metadata": {}, "source": [ - "`__eq__` takes two `Card` objects as parameters and returns `True` if they have the same suit and rank, even if they are not the same object.\n", - "In other words, it checks whether they are equivalent, even if they are not identical.\n", + "`__eq__` toma dos objetos `Card` como parámetros y devuelve `True` si tienen el mismo palo y rango, incluso si no son el mismo objeto.\n", + "En otras palabras, comprueba si son equivalentes, aunque no sean idénticos.\n", "\n", - "When we use the `==` operator with `Card` objects, Python calls the `__eq__` method." + "Cuando usamos el operador `==` con objetos `Card`, Python llama al método `__eq__`." ] }, { @@ -377,7 +377,7 @@ "id": "23d99d3e", "metadata": {}, "source": [ - "As a second test, let's create a card with the same suit and a different rank." + "Como segunda prueba, vamos a crear una carta con el mismo palo y un rango diferente." ] }, { @@ -393,7 +393,7 @@ "id": "c5f66404", "metadata": {}, "source": [ - "We can confirm that `queen` and `six` are not equivalent." + "Podemos confirmar que `queen` y `six` no son equivalentes." ] }, { @@ -409,8 +409,8 @@ "id": "1dcb561f", "metadata": {}, "source": [ - "If we use the `!=` operator, Python invokes a special method called `__ne__`, if it exists.\n", - "Otherwise it invokes`__eq__` and inverts the result -- so if `__eq__` returns `True`, the result of the `!=` operator is `False`." + "Si usamos el operador `!=`, Python invoca un special método llamado `__ne__`, si existe.\n", + "De lo contrario, invoca `__eq__` e invierte el resultado; así que si `__eq__` devuelve `True`, el resultado del operador `!=` es `False`." ] }, { @@ -434,8 +434,8 @@ "id": "77c48464", "metadata": {}, "source": [ - "Now suppose we want to compare two cards to see which is bigger.\n", - "If we use one of the relational operators, we get a `TypeError`." + "Ahora supongamos que queremos comparar dos cartas para ver cuál es mayor.\n", + "Si usamos uno de los operadores relacionales, obtenemos un `TypeError`." ] }, { @@ -453,11 +453,11 @@ "id": "4db0ad52", "metadata": {}, "source": [ - "To change the behavior of the `<` operator, we can define a special method called `__lt__`, which is short for \"less than\".\n", - "For the sake of this example, let's assume that suit is more important than rank -- so all Spades outrank all Hearts, which outrank all Diamonds, and so on.\n", - "If two cards have the same suit, the one with the higher rank wins.\n", + "Para cambiar el comportamiento del operador `<`, podemos definir un special método llamado `__lt__`, abreviatura de \"less than\".\n", + "Para este ejemplo, supongamos que el palo es más importante que el rango: por eso todos los Spades superan a todos los Hearts, que superan a todos los Diamonds, y así sucesivamente.\n", + "Si dos cartas tienen el mismo palo, gana la que tiene el rango más alto.\n", "\n", - "To implement this logic, we'll use the following method, which returns a tuple containing a card's suit and rank, in that order." + "Para implementar esta lógica, usaremos el siguiente método, que devuelve una tupla que contiene el palo y el rango de una carta, en ese orden." ] }, { @@ -473,7 +473,7 @@ "id": "d5062348", "metadata": {}, "source": [ - "We can use this method to write `__lt__`." + "Podemos usar este método para escribir `__lt__`." ] }, { @@ -489,10 +489,10 @@ "id": "bd9ef8f5", "metadata": {}, "source": [ - "Tuple comparison compares the first elements from each tuple, which represent the suits.\n", - "If they are the same, it compares the second elements, which represent the ranks.\n", + "La comparación de tuplas compara los primeros elementos de cada tupla, que representan los palos.\n", + "Si son iguales, compara los segundos elementos, que representan los rangos.\n", "\n", - "Now if we use the `<` operator, it invokes the `__lt__` method." + "Ahora, si usamos el operador `<`, invoca el método `__lt__`." ] }, { @@ -508,8 +508,8 @@ "id": "83289a77", "metadata": {}, "source": [ - "If we use the `>` operator, it invokes a special method called `__gt__`, if it exists.\n", - "Otherwise it invokes `__lt__` with the arguments in the opposite order." + "Si usamos el operador `>`, invoca un special método llamado `__gt__`, si existe.\n", + "De lo contrario, invoca `__lt__` con los argumentos en el orden opuesto." ] }, { @@ -533,7 +533,7 @@ "id": "5d0a91de", "metadata": {}, "source": [ - "Finally, if we use the `<=` operator, it invokes a special method called `__le__`." + "Por último, si usamos el operador `<=`, invoca un special método llamado `__le__`." ] }, { @@ -549,7 +549,7 @@ "id": "6c85ac69", "metadata": {}, "source": [ - "So we can check whether one card is less than or equal to another." + "Así que podemos comprobar si una carta es menor o igual que otra." ] }, { @@ -573,7 +573,7 @@ "id": "7af7b289", "metadata": {}, "source": [ - "If we use the `>=` operator, it uses `__ge__` if it exists. Otherwise, it invokes `__le__` with the arguments in the opposite order." + "Si usamos el operador `>=`, usa `__ge__` si existe. De lo contrario, invoca `__le__` con los argumentos en el orden opuesto." ] }, { @@ -589,9 +589,9 @@ "id": "fe2a81cc", "metadata": {}, "source": [ - "As we have defined them, these methods are complete in the sense that we can compare any two `Card` objects, and consistent in the sense that results from different operators don't contradict each other.\n", - "With these two properties, we can say that `Card` objects are **totally ordered**.\n", - "And that means, as we'll see soon, that they can be sorted." + "Tal como los hemos definido, estos métodos son completos en el sentido de que podemos comparar dos objetos `Card` cualesquiera, y consistentes en el sentido de que los resultados de distintos operadores no se contradicen entre sí.\n", + "Con estas dos propiedades, podemos decir que los objetos `Card` están **totalmente ordenados**.\n", + "Y eso significa, como veremos pronto, que se pueden ordenar." ] }, { @@ -599,11 +599,10 @@ "id": "199f8bfc", "metadata": {}, "source": [ - "## Decks\n", + "## Barajas\n", "\n", - "Now that we have objects that represent cards, let's define objects that represent decks.\n", - "The following is a class definition for `Deck` with\n", - "an `__init__` method takes a list of `Card` objects as a parameter and assigns it to an attribute called `cards`." + "Ahora que tenemos objetos que representan cartas, definamos objetos que representen barajas.\n", + "La siguiente es una definición de clase para `Deck` con un método `__init__` que toma una lista de objetos `Card` como parámetro y la asigna a un atributo llamado `cards`." ] }, { @@ -619,7 +618,7 @@ "id": "2d529789", "metadata": {}, "source": [ - "To create a list that contains the 52 cards in a standard deck, we'll use the following static method." + "Para crear una lista que contiene las 52 cartas de una baraja estándar, usaremos el siguiente método estático." ] }, { @@ -635,11 +634,11 @@ "id": "47ae8f71", "metadata": {}, "source": [ - "In `make_cards`, the outer loop enumerates the suits from `0` to `3`.\n", - "The inner loop enumerates the ranks from `2` to `14` -- where `14` represents an Ace that outranks a King.\n", - "Each iteration creates a new `Card` with the current suit and rank, and appends it to `cards`.\n", + "En `make_cards`, el bucle externo enumera los palos de `0` a `3`.\n", + "El bucle interno enumera los rangos de `2` a `14`, donde `14` representa un Ace que supera a un King.\n", + "Cada iteración crea una nueva `Card` con el palo y el rango actuales, y la añade a `cards`.\n", "\n", - "Here's how we make a list of cards and a `Deck` object that contains it." + "Así es como creamos una lista de cartas y un objeto `Deck` que la contiene." ] }, { @@ -655,7 +654,7 @@ "id": "032ec302", "metadata": {}, "source": [ - "It contains 52 cards, as intended." + "Contiene 52 cartas, tal como queríamos." ] }, { @@ -665,9 +664,9 @@ "tags": [] }, "source": [ - "## Printing the deck\n", + "## Imprimir la baraja\n", "\n", - "Here is a `__str__` method for `Deck`." + "Aquí tienes un método `__str__` para `Deck`." ] }, { @@ -683,9 +682,9 @@ "id": "660f18e6", "metadata": {}, "source": [ - "This method demonstrates an efficient way to accumulate a large string -- building a list of strings and then using the string method `join`. \n", + "Este método demuestra una forma eficiente de acumular un string grande: construir una lista de strings y luego usar el método de string `join`.\n", "\n", - "We'll test this method with a deck that only contains two cards." + "Probaremos este método con una baraja que solo contiene dos cartas." ] }, { @@ -701,7 +700,7 @@ "id": "91c7145f", "metadata": {}, "source": [ - "If we call `str`, it invokes `__str__`." + "Si llamamos a `str`, invoca `__str__`." ] }, { @@ -717,9 +716,9 @@ "id": "00270656", "metadata": {}, "source": [ - "When Jupyter displays a string, it shows the \"representational\" form of the string, which represents a newline with the sequence `\\n`.\n", + "Cuando Jupyter muestra un string, enseña la forma \"representacional\" del string, que representa un salto de línea con la secuencia `\\n`.\n", "\n", - "However, if we print the result, Jupyter shows the \"printable\" form of the string, which prints the newline as whitespace." + "Sin embargo, si imprimimos el resultado, Jupyter muestra la forma \"imprimible\" del string, que imprime el salto de línea como espacio en blanco." ] }, { @@ -735,7 +734,7 @@ "id": "e97810c4", "metadata": {}, "source": [ - "So the cards appear on separate lines." + "Así que las cartas aparecen en líneas separadas." ] }, { @@ -743,11 +742,11 @@ "id": "52d3d597", "metadata": {}, "source": [ - "## Add, remove, shuffle and sort\n", + "## Añadir, quitar, barajar y ordenar\n", "\n", - "To deal cards, we would like a method that removes a card from the deck\n", - "and returns it. The list method `pop` provides a convenient way to do\n", - "that." + "Para repartir cartas, nos gustaría tener un método que quite una carta de la baraja\n", + "y la devuelva. El método de lista `pop` proporciona una forma cómoda de\n", + "hacerlo." ] }, { @@ -763,7 +762,7 @@ "id": "1fcef47b", "metadata": {}, "source": [ - "Here's how we use it." + "Así es como lo usamos." ] }, { @@ -779,7 +778,7 @@ "id": "65427954", "metadata": {}, "source": [ - "We can confirm that there are `51` cards left in the deck." + "Podemos confirmar que quedan `51` cartas en la baraja." ] }, { @@ -795,7 +794,7 @@ "id": "7ca3614e", "metadata": {}, "source": [ - "To add a card, we can use the list method `append`." + "Para añadir una carta, podemos usar el método de lista `append`." ] }, { @@ -811,7 +810,7 @@ "id": "2ecd8703", "metadata": {}, "source": [ - "As an example, we can put back the card we just popped." + "Como ejemplo, podemos volver a poner la carta que acabamos de extraer." ] }, { @@ -827,7 +826,7 @@ "id": "8b5af8ce", "metadata": {}, "source": [ - "To shuffle the deck, we can use the `shuffle` function from the `random` module:" + "Para barajar la baraja, podemos usar la función `shuffle` del module `random`:" ] }, { @@ -861,7 +860,7 @@ "id": "a8cb1a7f", "metadata": {}, "source": [ - "If we shuffle the deck and print the first few cards, we can see that they are in no apparent order." + "Si barajamos la baraja e imprimimos las primeras cartas, podemos ver que no están en ningún orden aparente." ] }, { @@ -877,7 +876,7 @@ "id": "a198dde3", "metadata": {}, "source": [ - "To sort the cards, we can use the list method `sort`, which sorts the elements \"in place\" -- that is, it modifies the list rather than creating a new list." + "Para ordenar las cartas, podemos usar el método de lista `sort`, que ordena los elementos \"in place\"; es decir, modifica la lista en lugar de crear una lista nueva." ] }, { @@ -893,7 +892,7 @@ "id": "d4f017c7", "metadata": {}, "source": [ - "When we invoke `sort`, it uses the `__lt__` method to compare cards." + "Cuando invocamos `sort`, usa el método `__lt__` para comparar cartas." ] }, { @@ -909,7 +908,7 @@ "id": "2bb966fd", "metadata": {}, "source": [ - "If we print the first few cards, we can confirm that they are in increasing order." + "Si imprimimos las primeras cartas, podemos confirmar que están en orden creciente." ] }, { @@ -925,8 +924,8 @@ "id": "5c41ce4d", "metadata": {}, "source": [ - "In this example, `Deck.sort` doesn't do anything other than invoke `list.sort`.\n", - "Passing along responsibility like this is called **delegation**." + "En este ejemplo, `Deck.sort` no hace nada más que invocar `list.sort`.\n", + "Pasar la responsabilidad de esta forma se llama **delegación**." ] }, { @@ -934,18 +933,18 @@ "id": "0502961b", "metadata": {}, "source": [ - "## Parents and children\n", + "## Padres e hijos\n", "\n", - "Inheritance is the ability to define a new class that is a modified version of an existing class.\n", - "As an example, let's say we want a class to represent a \"hand\", that is, the cards held by one player.\n", + "La herencia es la capacidad de definir una nueva clase que es una versión modificada de una clase existente.\n", + "Como ejemplo, digamos que queremos una clase para representar una \"mano\", es decir, las cartas que tiene un jugador.\n", "\n", - "* A hand is similar to a deck -- both are made up of a collection of cards, and both require operations like adding and removing cards.\n", + "* Una mano es similar a una baraja: ambas están formadas por una colección de cartas, y ambas requieren operaciones como añadir y quitar cartas.\n", "\n", - "* A hand is also different from a deck -- there are operations we want for hands that don't make sense for a deck. For example, in poker we might compare two hands to see which one wins. In bridge, we might compute a score for a hand in order to make a bid.\n", + "* Una mano también es diferente de una baraja: hay operaciones que queremos para manos que no tienen sentido para una baraja. Por ejemplo, en póker podríamos comparar dos manos para ver cuál gana. En bridge, podríamos calcular la puntuación de una mano para hacer una apuesta.\n", "\n", - "This relationship between classes -- where one is a specialized version of another -- lends itself to inheritance. \n", + "Esta relación entre clases, donde una es una versión especializada de otra, se presta a la herencia.\n", "\n", - "To define a new class that is based on an existing class, we put the name of the existing class in parentheses." + "Para definir una nueva clase basada en una clase existente, ponemos el nombre de la clase existente entre paréntesis." ] }, { @@ -961,9 +960,9 @@ "id": "339295cd", "metadata": {}, "source": [ - "This definition indicates that `Hand` inherits from `Deck`, which means that `Hand` objects can access methods defined in `Deck`, like `take_card` and `put_card`.\n", + "Esta definición indica que `Hand` hereda de `Deck`, lo que significa que los objetos `Hand` pueden acceder a métodos definidos en `Deck`, como `take_card` y `put_card`.\n", "\n", - "`Hand` also inherits `__init__` from `Deck`, but if we define `__init__` in the `Hand` class, it overrides the one in the `Deck` class." + "`Hand` también hereda `__init__` de `Deck`, pero si definimos `__init__` en la clase `Hand`, sobrescribe el de la clase `Deck`." ] }, { @@ -979,8 +978,8 @@ "id": "9b6a763a", "metadata": {}, "source": [ - "This version of `__init__` takes an optional string as a parameter, and always starts with an empty list of cards.\n", - "When we create a `Hand`, Python invokes this method, not the one in `Deck` -- which we can confirm by checking that the result has a `label` attribute." + "Esta versión de `__init__` toma un string opcional como parámetro y siempre empieza con una lista vacía de cartas.\n", + "Cuando creamos una `Hand`, Python invoca este método, no el de `Deck`, lo que podemos confirmar comprobando que el resultado tiene un atributo `label`." ] }, { @@ -996,7 +995,7 @@ "id": "b1e2a67d", "metadata": {}, "source": [ - "To deal a card, we can use `take_card` to remove a card from a `Deck`, and `put_card` to add the card to a `Hand`." + "Para repartir una carta, podemos usar `take_card` para quitar una carta de un `Deck`, y `put_card` para añadir la carta a una `Hand`." ] }, { @@ -1012,7 +1011,7 @@ "id": "dc2ce06b", "metadata": {}, "source": [ - "Let's encapsulate this code in a `Deck` method called `move_cards`." + "Encapsulemos este código en un método de `Deck` llamado `move_cards`." ] }, { @@ -1028,8 +1027,8 @@ "id": "16e6c404", "metadata": {}, "source": [ - "This method is polymorphic -- that is, it works with more than one type: `self` and `other` can be either a `Hand` or a `Deck`.\n", - "So we can use this method to deal a card from `Deck` to a `Hand`, from one `Hand` to another, or from a `Hand` back to a `Deck`." + "Este método es polimórfico; es decir, funciona con más de un tipo: `self` y `other` pueden ser tanto una `Hand` como un `Deck`.\n", + "Así que podemos usar este método para repartir una carta de `Deck` a `Hand`, de una `Hand` a otra, o de una `Hand` de vuelta a un `Deck`." ] }, { @@ -1037,18 +1036,18 @@ "id": "e648a722", "metadata": {}, "source": [ - "When a new class inherits from an existing one, the existing one is called the **parent** and the new class is called the **child**. In general:\n", + "Cuando una nueva clase hereda de una existente, la existente se llama **padre** y la nueva clase se llama **hija**. En general:\n", "\n", - "* Instances of the child class should have all of the attributes of the parent class, but they can have additional attributes.\n", + "* Las instancias de la clase hija deberían tener todos los atributos de la clase padre, pero pueden tener atributos adicionales.\n", "\n", - "* The child class should have all of the methods of the parent class, but it can have additional methods.\n", + "* La clase hija debería tener todos los métodos de la clase padre, pero puede tener métodos adicionales.\n", "\n", - "* If a child class overrides a method from the parent class, the new method should take the same parameters and return a compatible result.\n", + "* Si una clase hija sobrescribe un método de la clase padre, el nuevo método debería tomar los mismos parámetros y devolver un resultado compatible.\n", "\n", - "This set of rules is called the \"Liskov substitution principle\" after computer scientist Barbara Liskov.\n", + "Este conjunto de reglas se llama \"principio de sustitución de Liskov\", en honor a la científica de la computación Barbara Liskov.\n", "\n", - "If you follow these rules, any function or method designed to work with an instance of a parent class, like a `Deck`, will also work with instances of a child class, like `Hand`.\n", - "If you violate these rules, your code will collapse like a house of cards (sorry)." + "Si sigues estas reglas, cualquier función o método diseñado para trabajar con una instancia de una clase padre, como un `Deck`, también funcionará con instancias de una clase hija, como `Hand`.\n", + "Si rompes estas reglas, tu código se derrumbará como un castillo de naipes (lo siento)." ] }, { @@ -1056,12 +1055,12 @@ "id": "e80873dd", "metadata": {}, "source": [ - "## Specialization\n", + "## Especialización\n", "\n", - "Let's make a class called `BridgeHand` that represents a hand in bridge -- a widely played card game.\n", - "We'll inherit from `Hand` and add a new method called `high_card_point_count` that evaluates a hand using a \"high card point\" method, which adds up points for the high cards in the hand.\n", + "Hagamos una clase llamada `BridgeHand` que representa una mano en bridge, un juego de cartas muy popular.\n", + "Heredaremos de `Hand` y añadiremos un nuevo método llamado `high_card_point_count` que evalúa una mano usando un método de \"high carta point\", que suma puntos por las cartas altas de la mano.\n", "\n", - "Here's a class definition that contains as a class variable a dictionary that maps from card names to their point values." + "Aquí tienes una definición de clase que contiene, como variable de clase, un diccionario que asigna nombres de cartas a sus valores de puntos." ] }, { @@ -1077,7 +1076,7 @@ "id": "4c038717", "metadata": {}, "source": [ - "Given the rank of a card, like `12`, we can use `Card.rank_names` to get the string representation of the rank, and then use `hcp_dict` to get its score." + "Dado el rango de una carta, como `12`, podemos usar `Card.rank_names` para obtener la representación en string del rango, y luego usar `hcp_dict` para obtener su puntuación." ] }, { @@ -1093,7 +1092,7 @@ "id": "c3a7820d", "metadata": {}, "source": [ - "The following method loops through the cards in a `BridgeHand` and adds up their scores." + "El siguiente método recorre las cartas de una `BridgeHand` y suma sus puntuaciones." ] }, { @@ -1119,7 +1118,7 @@ "id": "94535d8e", "metadata": {}, "source": [ - "To test it, we'll deal a hand with five cards -- a bridge hand usually has thirteen, but it's easier to test code with small examples." + "Para probarlo, repartiremos una mano con cinco cartas; una mano de bridge normalmente tiene trece, pero es más fácil probar código con ejemplos pequeños." ] }, { @@ -1135,7 +1134,7 @@ "id": "a1bd2521", "metadata": {}, "source": [ - "And here is the total score for the King and Queen." + "Y aquí está la puntuación total para el King y la Queen." ] }, { @@ -1151,8 +1150,8 @@ "id": "b4f5e107", "metadata": {}, "source": [ - "`BridgeHand` inherits the variables and methods of `Hand` and adds a class variable and a method that are specific to bridge.\n", - "This way of using inheritance is called **specialization** because it defines a new class that is specialized for a particular use, like playing bridge." + "`BridgeHand` hereda las variables y métodos de `Hand` y añade una variable de clase y un método que son específicos de bridge.\n", + "Esta forma de usar la herencia se llama **especialización** porque define una nueva clase especializada para un uso particular, como jugar al bridge." ] }, { @@ -1160,20 +1159,20 @@ "id": "b493622d", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "Inheritance is a useful feature.\n", - "Some programs that would be repetitive without inheritance can be written more concisely with it.\n", - "Also, inheritance can facilitate code reuse, since you can customize the behavior of a parent class without having to modify it.\n", - "In some cases, the inheritance structure reflects the natural structure of the problem, which makes the design easier to understand.\n", + "La herencia es una característica útil.\n", + "Algunos programas que serían repetitivos sin herencia se pueden escribir de forma más concisa con ella.\n", + "Además, la herencia puede facilitar la reutilización de código, ya que puedes personalizar el comportamiento de una clase padre sin tener que modificarla.\n", + "En algunos casos, la estructura de herencia refleja la estructura natural del problema, lo que hace que el diseño sea más fácil de entender.\n", "\n", - "On the other hand, inheritance can make programs difficult to read.\n", - "When a method is invoked, it is sometimes not clear where to find its definition -- the relevant code may be spread across several modules.\n", + "Por otro lado, la herencia puede hacer que los programas sean difíciles de leer.\n", + "Cuando se invoca un método, a veces no está claro dónde encontrar su definición: el código relevante puede estar repartido entre varios modules.\n", "\n", - "Any time you are unsure about the flow of execution through your program, the simplest solution is to add print statements at the beginning of the relevant methods.\n", - "If `Deck.shuffle` prints a message that says something like `Running Deck.shuffle`, then as the program runs it traces the flow of execution.\n", + "Siempre que tengas dudas sobre el flujo de ejecución de tu programa, la solución más sencilla es añadir sentencias print al principio de los métodos relevantes.\n", + "Si `Deck.shuffle` imprime un mensaje que dice algo como `Running Deck.shuffle`, entonces, a medida que el programa se ejecuta, traza el flujo de ejecución.\n", "\n", - "As an alternative, you could use the following function, which takes an object and a method name (as a string) and returns the class that provides the definition of the method." + "Como alternativa, podrías usar la siguiente función, que toma un objeto y el nombre de un método (como string) y devuelve la clase que proporciona la definición del método." ] }, { @@ -1189,10 +1188,10 @@ "id": "1ee8f2da", "metadata": {}, "source": [ - "`find_defining_class` uses the `mro` method to get the list of class objects (types) that will be searched for methods.\n", - "\"MRO\" stands for \"method resolution order\", which is the sequence of classes Python searches to \"resolve\" a method name -- that is, to find the function object the name refers to.\n", + "`find_defining_class` usa el método `mro` para obtener la lista de objetos clase (tipos) que se buscarán para encontrar métodos.\n", + "\"MRO\" significa \"método resolution order\", que es la secuencia de clases que Python busca para \"resolver\" el nombre de un método; es decir, para encontrar el objeto función al que se refiere el nombre.\n", "\n", - "As an example, let's instantiate a `BridgeHand` and then find the defining class of `shuffle`." + "Como ejemplo, vamos a instanciar una `BridgeHand` y luego encontrar la clase que define `shuffle`." ] }, { @@ -1208,7 +1207,7 @@ "id": "eeb70a14", "metadata": {}, "source": [ - "The `shuffle` method for the `BridgeHand` object is the one in `Deck`." + "El método `shuffle` para el objeto `BridgeHand` es el que está en `Deck`." ] }, { @@ -1216,31 +1215,31 @@ "id": "07f4c4bb", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**inheritance:**\n", - " The ability to define a new class that is a modified version of a previously defined class.\n", + "**herencia (herencia):**\n", + " La capacidad de definir una nueva clase que es una versión modificada de una clase definida previamente.\n", "\n", - "**encode:**\n", - " To represent one set of values using another set of values by constructing a mapping between them.\n", + "**codificar (encode):**\n", + " Representar un conjunto de valores usando otro conjunto de valores construyendo una correspondencia entre ellos.\n", "\n", - "**class variable:**\n", - "A variable defined inside a class definition, but not inside any method.\n", + "**variable de clase:**\n", + "Una variable definida dentro de una definición de clase, pero no dentro de ningún método.\n", "\n", - "**totally ordered:**\n", - "A set of objects is totally ordered if we can compare any two elements and the results are consistent.\n", + "**totalmente ordenado:**\n", + "Un conjunto de objetos está totalmente ordenado si podemos comparar dos elementos cualesquiera y los resultados son consistentes.\n", "\n", - "**delegation:**\n", - "When one method passes responsibility to another method to do most or all of the work.\n", + "**delegación:**\n", + "Cuando un método pasa la responsabilidad a otro método para que haga la mayor parte o todo el trabajo.\n", "\n", - "**parent class:**\n", - "A class that is inherited from.\n", + "**clase padre:**\n", + "Una clase de la que se hereda.\n", "\n", - "**child class:**\n", - "A class that inherits from another class.\n", + "**clase hija:**\n", + "Una clase que hereda de otra clase.\n", "\n", - "**specialization:**\n", - "A way of using inheritance to create a new class that is a specialized version of an existing class." + "**especialización:**\n", + "Una forma de usar la herencia para crear una nueva clase que es una versión especializada de una clase existente." ] }, { @@ -1248,7 +1247,7 @@ "id": "1aea9b2b", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1266,25 +1265,25 @@ "id": "7913e6b1", "metadata": {}, "source": [ - "### Ask a Virtual Assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "When it goes well, object-oriented programming can make programs more readable, testable, and reusable.\n", - "But it can also make programs complicated and hard to maintain.\n", - "As a result, OOP is a topic of controversy -- some people love it, and some people don't.\n", + "Cuando sale bien, la programación orientada a objetos puede hacer que los programas sean más legibles, fáciles de probar y reutilizables.\n", + "Pero también puede hacer que los programas sean complicados y difíciles de mantener.\n", + "Como resultado, la OOP es un tema controvertido: algunas personas la adoran y a otras no les gusta.\n", "\n", - "To learn more about the topic, ask a virtual assistant:\n", + "Para aprender más sobre el tema, pregunta a un asistente virtual:\n", "\n", - "* What are some pros and cons of object-oriented programming?\n", + "* ¿Cuáles son algunas ventajas y desventajas de la programación orientada a objetos?\n", "\n", - "* What does it mean when people say \"favor composition over inheritance\"?\n", + "* ¿Qué significa cuando la gente dice \"favor composition over herencia\"?\n", "\n", - "* What is the Liskov substitution principle?\n", + "* ¿Qué es el principio de sustitución de Liskov?\n", "\n", - "* Is Python an object-oriented language?\n", + "* ¿Python es un lenguaje orientado a objetos?\n", "\n", - "* What are the requirements for a set to be totally ordered?\n", + "* ¿Cuáles son los requisitos para que un conjunto esté totalmente ordenado?\n", "\n", - "And as always, consider using a virtual assistant to help with the following exercises." + "Y, como siempre, considera usar un asistente virtual para ayudarte con los siguientes ejercicios." ] }, { @@ -1292,10 +1291,10 @@ "id": "1af81269", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In contract bridge, a \"trick\" is a round of play in which each of four players plays one card.\n", - "To represent those cards, we'll define a class that inherits from `Deck`." + "En bridge de contrato, una \"trick\" es una ronda de juego en la que cada uno de cuatro jugadores juega una carta.\n", + "Para representar esas cartas, definiremos una clase que hereda de `Deck`." ] }, { @@ -1311,10 +1310,10 @@ "id": "9916d562", "metadata": {}, "source": [ - "As an example, consider this trick, where the first player leads with the 3 of Diamonds, which means that Diamonds are the \"led suit\".\n", - "The second and third players \"follow suit\", which means they play a card with the led suit.\n", - "The fourth player plays a card of a different suit, which means they cannot win the trick.\n", - "So the winner of this trick is the third player, because they played the highest card in the led suit." + "Como ejemplo, considera esta trick, donde el primer jugador empieza con el 3 of Diamonds, lo que significa que Diamonds es el \"led suit\".\n", + "El segundo y el tercer jugador \"follow suit\", lo que significa que juegan una carta del palo que se ha iniciado.\n", + "El cuarto jugador juega una carta de un palo diferente, lo que significa que no puede ganar la trick.\n", + "Así que el ganador de esta trick es el tercer jugador, porque jugó la carta más alta del led suit." ] }, { @@ -1330,8 +1329,8 @@ "id": "c94a1337", "metadata": {}, "source": [ - "Write a `Trick` method called `find_winner` that loops through the cards in the `Trick` and returns the index of the card that wins.\n", - "In the previous example, the index of the winning card is `2`." + "Escribe un método de `Trick` llamado `find_winner` que recorra las cartas de la `Trick` y devuelva el índice de la carta ganadora.\n", + "En el ejemplo anterior, el índice de la carta ganadora es `2`." ] }, { @@ -1341,7 +1340,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1371,7 +1370,7 @@ "tags": [] }, "source": [ - "If you test your method with the previous example, the index of the winning card should be `2`." + "Si pruebas tu método con el ejemplo anterior, el índice de la carta ganadora debería ser `2`." ] }, { @@ -1389,11 +1388,11 @@ "id": "b5b9fb4b", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The next few exercises ask to you write functions that classify poker hands.\n", - "If you are not familiar with poker, I'll explain what you need to know.\n", - "We'll use the following class to represent poker hands." + "Los siguientes ejercicios te piden escribir funciones que clasifiquen manos de póker.\n", + "Si no estás familiarizado con el póker, explicaré lo que necesitas saber.\n", + "Usaremos la siguiente clase para representar manos de póker." ] }, { @@ -1409,18 +1408,18 @@ "id": "2daecced", "metadata": {}, "source": [ - "`PokerHand` provides two methods that will help with the exercises.\n", + "`PokerHand` proporciona dos métodos que ayudarán con los ejercicios.\n", "\n", - "* `get_suit_counts` loops through the cards in the `PokerHand`, counts the number of cards in each suit, and returns a dictionary that maps from each suit code to the number of times it appears.\n", + "* `get_suit_counts` recorre las cartas de la `PokerHand`, cuenta el número de cartas de cada palo y devuelve un diccionario que asigna cada código de palo al número de veces que aparece.\n", "\n", - "* `get_rank_counts` does the same thing with the ranks of the cards, returning a dictionary that maps from each rank code to the number of times it appears.\n", + "* `get_rank_counts` hace lo mismo con los rangos de las cartas, devolviendo un diccionario que asigna cada código de rango al número de veces que aparece.\n", "\n", - "All of the exercises that follow can be done using only the Python features we have learned so far, but some of them are more difficult than most of the previous exercises.\n", - "I encourage you to ask an AI for help.\n", + "Todos los ejercicios que siguen se pueden resolver usando solo las características de Python que hemos aprendido hasta ahora, pero algunos son más difíciles que la mayoría de los ejercicios anteriores.\n", + "Te animo a pedir ayuda a un asistente virtual.\n", "\n", - "For problems like this, it often works well to ask for general advice about strategies and algorithms.\n", - "Then you can either write the code yourself or ask for code.\n", - "If you ask for code, you might want to provide the relevant class definitions as part of the prompt." + "Para problemas como este, suele funcionar bien pedir consejos generales sobre estrategias y algorithms.\n", + "Luego puedes escribir el código tú mismo o pedir código.\n", + "Si pides código, quizá quieras proporcionar las definiciones de clase relevantes como parte del prompt." ] }, { @@ -1428,10 +1427,10 @@ "id": "ccc2d8ca", "metadata": {}, "source": [ - "As a first exercise, we'll write a method called `has_flush` that checks whether a hand has a \"flush\" -- that is, whether it contains at least five cards of the same suit.\n", + "Como primer ejercicio, escribiremos un método llamado `has_flush` que comprueba si una mano tiene un \"flush\"; es decir, si contiene al menos cinco cartas del mismo palo.\n", "\n", - "In most varieties of poker, a hand contains either five or seven cards, but there are some exotic variations where a hand contains other numbers of cards.\n", - "But regardless of how many cards there are in a hand, the only ones that count are the five that make the best hand." + "En la mayoría de variedades de póker, una mano contiene cinco o siete cartas, pero hay algunas variaciones exóticas donde una mano contiene otros números de cartas.\n", + "Pero, independientemente de cuántas cartas haya en una mano, las únicas que cuentan son las cinco que forman la mejor mano." ] }, { @@ -1441,7 +1440,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1471,7 +1470,7 @@ "tags": [] }, "source": [ - "To test this method, we'll construct a hand with five cards that are all Clubs, so it contains a flush." + "Para probar este método, construiremos una mano con cinco cartas que son todas Clubs, así que contiene un flush." ] }, { @@ -1491,7 +1490,7 @@ "tags": [] }, "source": [ - "If we invoke `get_suit_counts`, we can confirm that the rank code `0` appears `5` times." + "Si invocamos `get_suit_counts`, podemos confirmar que el código de rango `0` aparece `5` veces." ] }, { @@ -1511,7 +1510,7 @@ "tags": [] }, "source": [ - "So `has_flush` should return `True`." + "Así que `has_flush` debería devolver `True`." ] }, { @@ -1531,7 +1530,7 @@ "tags": [] }, "source": [ - "As a second test, we'll construct a hand with three Clubs and two other suits." + "Como segunda prueba, construiremos una mano con tres Clubs y otros dos palos." ] }, { @@ -1551,7 +1550,7 @@ "tags": [] }, "source": [ - "So `has_flush` should return `False`." + "Así que `has_flush` debería devolver `False`." ] }, { @@ -1569,13 +1568,13 @@ "id": "ad716880", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a method called `has_straight` that checks whether a hand contains a straight, which is a set of five cards with consecutive ranks.\n", - "For example, if a hand contains ranks `5`, `6`, `7`, `8`, and `9`, it contains a straight.\n", + "Escribe un método llamado `has_straight` que compruebe si una mano contiene una straight, que es un conjunto de cinco cartas con rangos consecutivos.\n", + "Por ejemplo, si una mano contiene los rangos `5`, `6`, `7`, `8` y `9`, contiene una straight.\n", "\n", - "An Ace can come before a two or after a King, so `Ace`, `2`, `3`, `4`, `5` is a straight and so it `10`, `Jack`, `Queen`, `King`, `Ace`.\n", - "But a straight cannot \"wrap around\", so `King`, `Ace`, `2`, `3`, `4` is not a straight." + "Un Ace puede ir antes de un dos o después de un King, así que `Ace`, `2`, `3`, `4`, `5` es una straight, y también lo es `10`, `Jack`, `Queen`, `King`, `Ace`.\n", + "Pero una straight no puede \"dar la vuelta\", así que `King`, `Ace`, `2`, `3`, `4` no es una straight." ] }, { @@ -1585,8 +1584,8 @@ "tags": [] }, "source": [ - "You can use the following outline to get started.\n", - "It includes a few lines of code that count the number of Aces -- represented with the code `1` or `14` -- and store the total in both locations of the counter." + "Puedes usar el siguiente esquema para empezar.\n", + "Incluye unas pocas líneas de código que cuentan el número de Aces, representados con el código `1` o `14`, y almacenan el total en ambas ubicaciones del contador." ] }, { @@ -1616,8 +1615,8 @@ "tags": [] }, "source": [ - "`good_hand`, which we created for the previous exercise, contains a straight.\n", - "If we use `get_rank_counts`, we can confirm that it has at least one card with each of five consecutive ranks." + "`good_hand`, que creamos para el ejercicio anterior, contiene una straight.\n", + "Si usamos `get_rank_counts`, podemos confirmar que tiene al menos una carta de cada uno de cinco rangos consecutivos." ] }, { @@ -1637,7 +1636,7 @@ "tags": [] }, "source": [ - "So `has_straight` should return `True`." + "Así que `has_straight` debería devolver `True`." ] }, { @@ -1657,7 +1656,7 @@ "tags": [] }, "source": [ - "`bad_hand` does not contain a straight, so `has_straight` should return `False`." + "`bad_hand` no contiene una straight, así que `has_straight` debería devolver `False`." ] }, { @@ -1675,10 +1674,10 @@ "id": "c1ecebd3", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "A hand has a straight flush if it contains a set of five cards that are both a straight and a flush -- that is, five cards of the same suit with consecutive ranks.\n", - "Write a `PokerHand` method that checks whether a hand has a straight flush." + "Una mano tiene una straight flush si contiene un conjunto de cinco cartas que son a la vez una straight y un flush; es decir, cinco cartas del mismo palo con rangos consecutivos.\n", + "Escribe un método de `PokerHand` que compruebe si una mano tiene una straight flush." ] }, { @@ -1688,7 +1687,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1728,7 +1727,7 @@ "tags": [] }, "source": [ - "Use the following examples to test your method." + "Usa los siguientes ejemplos para probar tu método." ] }, { @@ -1758,8 +1757,8 @@ "tags": [] }, "source": [ - "Note that it is not enough to check whether a hand has a straight and a flush.\n", - "To see why, consider the following hand." + "Ten en cuenta que no basta con comprobar si una mano tiene una straight y un flush.\n", + "Para ver por qué, considera la siguiente mano." ] }, { @@ -1779,7 +1778,7 @@ "tags": [] }, "source": [ - "This hand contains a straight and a flush, but they are not the same five cards." + "Esta mano contiene una straight y un flush, pero no son las mismas cinco cartas." ] }, { @@ -1799,7 +1798,7 @@ "tags": [] }, "source": [ - "So it does not contain a straight flush." + "Así que no contiene una straight flush." ] }, { @@ -1817,10 +1816,10 @@ "id": "dd742401", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "A poker hand has a pair if it contains two or more cards with the same rank.\n", - "Write a `PokerHand` method that checks whether a hand contains a pair." + "Una mano de póker tiene una pareja si contiene dos o más cartas con el mismo rango.\n", + "Escribe un método de `PokerHand` que compruebe si una mano contiene una pareja." ] }, { @@ -1830,7 +1829,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1868,7 +1867,7 @@ "id": "9f001207", "metadata": {}, "source": [ - "To test your method, here's a hand that has a pair." + "Para probar tu método, aquí tienes una mano que tiene una pareja." ] }, { @@ -1908,10 +1907,10 @@ "id": "c4180a64", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "A hand has a full house if it contains three cards of one rank and two cards of another rank.\n", - "Write a `PokerHand` method that checks whether a hand has a full house." + "Una mano tiene un full house si contiene tres cartas de un rango y dos cartas de otro rango.\n", + "Escribe un método de `PokerHand` que compruebe si una mano tiene un full house." ] }, { @@ -1921,7 +1920,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1951,7 +1950,7 @@ "tags": [] }, "source": [ - "You can use this hand to test your method." + "Puedes usar esta mano para probar tu método." ] }, { @@ -1999,10 +1998,10 @@ "id": "666340c1", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "This exercise is a cautionary tale about a common error that can be difficult to debug.\n", - "Consider the following class definition." + "Este ejercicio es una advertencia sobre un error común que puede ser difícil de depurar.\n", + "Considera la siguiente definición de clase." ] }, { @@ -2018,14 +2017,14 @@ "id": "1e349832", "metadata": {}, "source": [ - "`__init__` takes two parameters: `name` is required, but `contents` is optional -- if it's not provided, the default value is an empty list.\n", + "`__init__` toma dos parámetros: `name` es obligatorio, pero `contents` es opcional; si no se proporciona, el valor por defecto es una lista vacía.\n", "\n", - "`__str__` returns a string representation of the object that includes the name and the contents of the pouch.\n", + "`__str__` devuelve una representación en string del objeto que incluye el nombre y el contenido de la bolsa.\n", "\n", - "`put_in_pouch` takes any object and appends it to `contents`.\n", + "`put_in_pouch` toma cualquier objeto y lo añade a `contents`.\n", "\n", - "Now let's see how this class works.\n", - "We'll create two `Kangaroo` objects with the names `'Kanga'` and `'Roo'`." + "Ahora veamos cómo funciona esta clase.\n", + "Crearemos dos objetos `Kangaroo` con los nombres `'Kanga'` y `'Roo'`." ] }, { @@ -2041,7 +2040,7 @@ "id": "533982d1", "metadata": {}, "source": [ - "To Kanga's pouch we'll add two strings and Roo." + "A la bolsa de Kanga le añadiremos dos strings y Roo." ] }, { @@ -2057,7 +2056,7 @@ "id": "41cd6d6e", "metadata": {}, "source": [ - "If we print `kanga`, it seems like everything worked." + "Si imprimimos `kanga`, parece que todo ha funcionado." ] }, { @@ -2073,7 +2072,7 @@ "id": "0ba26163", "metadata": {}, "source": [ - "But what happens if we print `roo`?" + "Pero ¿qué pasa si imprimimos `roo`?" ] }, { @@ -2089,10 +2088,10 @@ "id": "a2aef813", "metadata": {}, "source": [ - "Roo's pouch contains the same contents as Kanga's, including a reference to `roo`!\n", + "¡La bolsa de Roo contiene el mismo contenido que la de Kanga, incluida una referencia a `roo`!\n", "\n", - "See if you can figure out what went wrong.\n", - "Then ask a virtual assistant, \"What's wrong with the following program?\" and paste in the definition of `Kangaroo`." + "A ver si puedes averiguar qué salió mal.\n", + "Luego pregunta a un asistente virtual: \"¿Qué está mal en el siguiente programa?\" y pega la definición de `Kangaroo`." ] }, { @@ -2110,13 +2109,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Licencia del código: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] } ], @@ -2142,4 +2143,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/blank/chap18.ipynb b/blank/chap18.ipynb index 6a069c1..f4269cc 100644 --- a/blank/chap18.ipynb +++ b/blank/chap18.ipynb @@ -5,9 +5,9 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", - "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." + "Puedes comprar las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", + "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325).\n" ] }, { @@ -27,7 +27,7 @@ "tags": [] }, "source": [ - "Here are versions of the `Card`, `Deck`, and `Hand` classes from Chapter 17, which we will use in some examples in this chapter." + "Aquí tienes versiones de las clases `Card`, `Deck` y `Hand` del Capítulo 17, que usaremos en algunos ejemplos de este capítulo.\n" ] }, { @@ -65,14 +65,14 @@ "id": "27e8d827", "metadata": {}, "source": [ - "# Python Extras\n", + "# Extras de Python\n", "\n", - "One of my goals for this book has been to teach you as little Python as possible. \n", - "When there were two ways to do something, I picked one and avoided mentioning the other.\n", - "Or sometimes I put the second one into an exercise.\n", + "Uno de mis objetivos con este libro ha sido enseñarte la menor cantidad posible de Python. \n", + "Cuando había dos maneras de hacer algo, elegí una y evité mencionar la otra.\n", + "O a veces puse la segunda en un ejercicio.\n", "\n", - "Now I want to go back for some of the good bits that got left behind.\n", - "Python provides a number of features that are not really necessary -- you can write good code without them -- but with them you can write code that's more concise, readable, or efficient, and sometimes all three." + "Ahora quiero volver a algunas de las partes buenas que quedaron fuera.\n", + "Python ofrece varias características que no son realmente necesarias -- puedes escribir buen código sin ellas -- pero con ellas puedes escribir código más conciso, legible o eficiente, y a veces las tres cosas.\n" ] }, { @@ -80,10 +80,10 @@ "id": "7ddcece8", "metadata": {}, "source": [ - "## Sets\n", + "## Conjuntos\n", "\n", - "Python provides a class called `set` that represents a collection of unique elements.\n", - "To create an empty set, we can use the class object like a function." + "Python proporciona una clase llamada `set` que representa una colección de elementos únicos.\n", + "Para crear un conjunto vacío, podemos usar el objeto de clase como una función.\n" ] }, { @@ -99,7 +99,7 @@ "id": "904e2071", "metadata": {}, "source": [ - "We can use the `add` method to add elements." + "Podemos usar el método `add` para añadir elementos.\n" ] }, { @@ -115,7 +115,7 @@ "id": "beee02fc", "metadata": {}, "source": [ - "Or we can pass any kind of sequence to `set`." + "O podemos pasar cualquier tipo de secuencia a `set`.\n" ] }, { @@ -131,8 +131,8 @@ "id": "42f99153", "metadata": {}, "source": [ - "An element can only appear once in a `set`.\n", - "If you add an element that's already there, it has no effect." + "Un elemento solo puede aparecer una vez en un `set`.\n", + "Si añades un elemento que ya está, no tiene ningún efecto.\n" ] }, { @@ -148,7 +148,7 @@ "id": "9b0a82ee", "metadata": {}, "source": [ - "Or if you create a set with a sequence that contains duplicates, the result contains only unique elements." + "O, si creas un conjunto con una secuencia que contiene duplicados, el resultado contiene solo elementos únicos.\n" ] }, { @@ -164,8 +164,8 @@ "id": "328e2009", "metadata": {}, "source": [ - "Some of the exercises in this book can be done concisely and efficiently with sets. \n", - "For example, here is a solution to an exercise in Chapter 11 that uses a dictionary to check whether there are any duplicate elements in a sequence." + "Algunos de los ejercicios de este libro se pueden hacer de forma concisa y eficiente con conjuntos. \n", + "Por ejemplo, aquí tienes una solución a un ejercicio del Capítulo 11 que usa un diccionario para comprobar si hay elementos duplicados en una secuencia.\n" ] }, { @@ -181,8 +181,8 @@ "id": "0b250e58", "metadata": {}, "source": [ - "This version adds the element of `t` as keys in a dictionary, and then checks whether there are fewer keys than elements.\n", - "Using sets, we can write the same function like this." + "Esta versión añade los elementos de `t` como claves en un diccionario, y luego comprueba si hay menos claves que elementos.\n", + "Usando conjuntos, podemos escribir la misma función así.\n" ] }, { @@ -208,11 +208,11 @@ "id": "30cf3158", "metadata": {}, "source": [ - "An element can only appear in a set once, so if an element in `t` appears more than once, the set will be smaller than `t`.\n", - "If there are no duplicates, the set will be the same size as `t`.\n", + "Un elemento solo puede aparecer en un conjunto una vez, así que si un elemento de `t` aparece más de una vez, el conjunto será más pequeño que `t`.\n", + "Si no hay duplicados, el conjunto tendrá el mismo tamaño que `t`.\n", "\n", - "`set` objects provide methods that perform set operations.\n", - "For example, `union` computes the union of two sets, which is a new set that contains all elements that appear in either set." + "Los objeto `set` proporcionan métodos que realizan operaciones de conjuntos.\n", + "Por ejemplo, `union` calcula la unión de dos conjuntos, que es un nuevo conjunto que contiene todos los elementos que aparecen en cualquiera de los dos conjuntos.\n" ] }, { @@ -228,8 +228,8 @@ "id": "57b1d50c", "metadata": {}, "source": [ - "Some arithmetic operators work with sets.\n", - "For example, the `-` operator performs set subtraction -- the result is a new set that contains all elements from the first set that are _not_ in the second set." + "Algunos operadores aritméticos funcionan con conjuntos.\n", + "Por ejemplo, el operador `-` realiza la resta de conjuntos -- el resultado es un nuevo conjunto que contiene todos los elementos del primer conjunto que _no_ están en el segundo conjunto.\n" ] }, { @@ -245,8 +245,8 @@ "id": "5099226c", "metadata": {}, "source": [ - "In [Chapter 12](section_dictionary_subtraction) we used dictionaries to find the words that appear in a document but not in a word list.\n", - "We used the following function, which takes two dictionaries and returns a new dictionary that contains only the keys from the first that don't appear in the second." + "En el [Capítulo 12](section_dictionary_subtraction) usamos diccionarios para encontrar las palabras que aparecen en un documento pero no en una lista de palabras.\n", + "Usamos la siguiente función, que recibe dos diccionarios y devuelve un nuevo diccionario que contiene solo las claves del primero que no aparecen en el segundo.\n" ] }, { @@ -262,8 +262,8 @@ "id": "455c3e34", "metadata": {}, "source": [ - "With sets, we don't have to write this function ourselves.\n", - "If `word_counter` is a dictionary that contains the unique words in the document and `word_list` is a list of valid words, we can compute the set difference like this." + "Con conjuntos, no tenemos que escribir esta función nosotros mismos.\n", + "Si `word_counter` es un diccionario que contiene las palabras únicas del documento y `word_list` es una lista de palabras válidas, podemos calcular la diferencia de conjuntos así.\n" ] }, { @@ -291,10 +291,10 @@ "id": "91efe708", "metadata": {}, "source": [ - "The result is a set that contains the words in the document that don't appear in the word list.\n", + "El resultado es un conjunto que contiene las palabras del documento que no aparecen en la lista de palabras.\n", "\n", - "The relational operators work with sets.\n", - "For example, `<=` checks whether one set is a subset of another, including the possibility that they are equal." + "Los operadores relacionales funcionan con conjuntos.\n", + "Por ejemplo, `<=` comprueba si un conjunto es un subconjunto de otro, incluyendo la posibilidad de que sean iguales.\n" ] }, { @@ -310,8 +310,8 @@ "id": "74d4d824", "metadata": {}, "source": [ - "With these operators, we can use sets to do some of the exercises in Chapter 7.\n", - "For example, here's a version of `uses_only` that uses a loop." + "Con estos operadores, podemos usar conjuntos para hacer algunos de los ejercicios del Capítulo 7.\n", + "Por ejemplo, aquí tienes una versión de `uses_only` que usa un bucle.\n" ] }, { @@ -327,8 +327,8 @@ "id": "58c1da26", "metadata": {}, "source": [ - "`uses_only` checks whether all letters in `word` are in `available`.\n", - "With sets, we can rewrite it like this." + "`uses_only` comprueba si todas las letras de `word` están en `available`.\n", + "Con conjuntos, podemos reescribirla así.\n" ] }, { @@ -344,7 +344,7 @@ "id": "01ce8cff", "metadata": {}, "source": [ - "If the letters in `word` are a subset of the letters in `available`, that means that `word` uses only letters in `available`." + "Si las letras de `word` son un subconjunto de las letras de `available`, eso significa que `word` usa solo letras de `available`.\n" ] }, { @@ -354,12 +354,12 @@ "source": [ "## Counters\n", "\n", - "A `Counter` is like a set, except that if an element appears more than once, the `Counter` keeps track of how many times it appears.\n", - "If you are familiar with the mathematical idea of a \"multiset\", a `Counter` is a\n", - "natural way to represent a multiset.\n", + "Un `Counter` es como un conjunto, excepto que si un elemento aparece más de una vez, el `Counter` lleva la cuenta de cuántas veces aparece.\n", + "Si conoces la idea matemática de un \"multiset\", un `Counter` es una forma\n", + "natural de representar un multiset.\n", "\n", - "The `Counter` class is defined in a module called `collections`, so you have to import it.\n", - "Then you can use the class object as a function and pass as an argument a string, list, or any other kind of sequence." + "La clase `Counter` está definida en un module llamado `collections`, así que tienes que importarla.\n", + "Después puedes usar el objeto de clase como una función y pasar como argumento un string, una lista o cualquier otro tipo de secuencia.\n" ] }, { @@ -383,12 +383,12 @@ "id": "8da28fe5", "metadata": {}, "source": [ - "A `Counter` object is like a dictionary that maps from each key to the number of times it appears.\n", - "As in dictionaries, the keys have to be hashable.\n", + "Un objeto `Counter` es como un diccionario que asocia cada clave con el número de veces que aparece.\n", + "Como en los diccionarios, las claves tienen que ser hashable.\n", "\n", - "Unlike dictionaries, `Counter` objects don't raise an exception if you access an\n", - "element that doesn't appear.\n", - "Instead, they return `0`." + "A diferencia de los diccionarios, los objeto `Counter` no lanzan una excepción si accedes a un\n", + "elemento que no aparece.\n", + "En su lugar, devuelven `0`.\n" ] }, { @@ -404,9 +404,9 @@ "id": "9bb2b650", "metadata": {}, "source": [ - "We can use `Counter` objects to solve one of the exercises from Chapter 10, which asks for a function that takes two words and checks whether they are anagrams -- that is, whether the letters from one can be rearranged to spell the other.\n", + "Podemos usar objeto `Counter` para resolver uno de los ejercicios del Capítulo 10, que pide una función que reciba dos palabras y compruebe si son anagramas -- es decir, si las letras de una se pueden reordenar para formar la otra.\n", "\n", - "Here's a solution using `Counter` objects." + "Aquí tienes una solución usando objeto `Counter`.\n" ] }, { @@ -422,9 +422,9 @@ "id": "6907f368", "metadata": {}, "source": [ - "If two words are anagrams, they contain the same letters with the same counts, so their `Counter` objects are equivalent.\n", + "Si dos palabras son anagramas, contienen las mismas letras con los mismos recuentos, así que sus objeto `Counter` son equivalentes.\n", "\n", - "`Counter` provides a method called `most_common` that returns a list of value-frequency pairs, sorted from most common to least." + "`Counter` proporciona un método llamado `most_common` que devuelve una lista de pares valor-frecuencia, ordenados de más común a menos común.\n" ] }, { @@ -440,10 +440,10 @@ "id": "b02b7dff", "metadata": {}, "source": [ - "They also provide methods and operators to perform set-like operations, including addition, subtraction, union and intersection.\n", - "For example, the `+` operator combines two `Counter` objects and creates a new `Counter` that contains the keys from both and the sums of the counts.\n", + "También proporcionan métodos y operadores para realizar operaciones parecidas a las de conjuntos, incluyendo suma, resta, unión e intersección.\n", + "Por ejemplo, el operador `+` combina dos objeto `Counter` y crea un nuevo `Counter` que contiene las claves de ambos y las sumas de los recuentos.\n", "\n", - "We can test it by making a `Counter` with the letters from `'bans'` and adding it to the letters from `'banana'`." + "Podemos probarlo creando un `Counter` con las letras de `'bans'` y sumándolo a las letras de `'banana'`.\n" ] }, { @@ -459,7 +459,7 @@ "id": "5461328e", "metadata": {}, "source": [ - "You'll have a chance to explore other `Counter` operations in the exercises at the end of this chapter." + "Tendrás la oportunidad de explorar otras operaciones de `Counter` en los ejercicios al final de este capítulo.\n" ] }, { @@ -469,13 +469,13 @@ "source": [ "## defaultdict\n", "\n", - "The `collections` module also provides `defaultdict`, which is like a dictionary except that if you access a key that doesn't exist, it generates a new value automatically.\n", + "El module `collections` también proporciona `defaultdict`, que es como un diccionario excepto que, si accedes a una clave que no existe, genera automáticamente un nuevo valor.\n", "\n", - "When you create a `defaultdict`, you provide a function that's used to create new values.\n", - "A function that create objects is sometimes called a **factory**.\n", - "The built-in functions that create lists, sets, and other types can be used as factories.\n", + "Cuando creas un `defaultdict`, proporcionas una función que se usa para crear nuevos valores.\n", + "Una función que crea objetos a veces se llama **fábrica**.\n", + "Las funciones integradas que crean listas, conjuntos y otros tipos se pueden usar como fábricas.\n", "\n", - "For example, here's a `defaultdict` that creates a new `list` when needed. " + "Por ejemplo, aquí tienes un `defaultdict` que crea una nueva `list` cuando hace falta.\n" ] }, { @@ -491,8 +491,8 @@ "id": "9f43d537", "metadata": {}, "source": [ - "Notice that the argument is `list`, which is a class object, not `list()`, which is a function call that creates a new list.\n", - "The factory function doesn't get called unless we access a key that doesn't exist." + "Fíjate en que el argumento es `list`, que es un objeto de clase, no `list()`, que es una llamada a función que crea una nueva lista.\n", + "La fábrica función no se llama a menos que accedamos a una clave que no existe.\n" ] }, { @@ -508,8 +508,8 @@ "id": "01f87415", "metadata": {}, "source": [ - "The new list, which we're calling `t`, is also added to the dictionary.\n", - "So if we modify `t`, the change appears in `d`:" + "La nueva lista, que llamamos `t`, también se añade al diccionario.\n", + "Así que si modificamos `t`, el cambio aparece en `d`:\n" ] }, { @@ -525,12 +525,12 @@ "id": "3e5d0151", "metadata": {}, "source": [ - "If you are making a dictionary of lists, you can often write simpler\n", - "code using `defaultdict`. \n", + "Si estás creando un diccionario de listas, a menudo puedes escribir código más simple\n", + "usando `defaultdict`. \n", "\n", - "In one of the exercises in [Chapter 11](chapter_tuples), I made a dictionary that maps from a sorted string of letters to the list of words that can be spelled with those letters.\n", - "For example, the string `'opst'` maps to the list `['opts', 'post', 'pots', 'spot', 'stop', 'tops']`.\n", - "Here's the original code." + "En uno de los ejercicios del [Capítulo 11](chapter_tuples), hice un diccionario que asocia un string de letras ordenadas con la lista de palabras que se pueden formar con esas letras.\n", + "Por ejemplo, el string `'opst'` se asocia con la lista `['opts', 'post', 'pots', 'spot', 'stop', 'tops']`.\n", + "Aquí está el código original.\n" ] }, { @@ -546,7 +546,7 @@ "id": "8e9a0a2b", "metadata": {}, "source": [ - "And here's a simpler version using a `defaultdict`." + "Y aquí tienes una versión más simple usando un `defaultdict`.\n" ] }, { @@ -562,7 +562,7 @@ "id": "cccdd46c", "metadata": {}, "source": [ - "In the exercises at the end of the chapter, you'll have a chance to practice using `defaultdict` objects." + "En los ejercicios al final del capítulo, tendrás la oportunidad de practicar usando objeto `defaultdict`.\n" ] }, { @@ -578,9 +578,9 @@ "id": "610359c1", "metadata": {}, "source": [ - "## Conditional expressions\n", + "## Expresiones condicionales\n", "\n", - "Conditional statements are often used to choose one of two values, like this:" + "Las sentencias condicionales se usan a menudo para elegir uno de dos valores, como aquí:\n" ] }, { @@ -616,11 +616,11 @@ "id": "2c5fc3dd", "metadata": {}, "source": [ - "This statement checks whether `x` is positive. If so, it computes its logarithm. \n", - "If not, `math.log` would raise a ValueError.\n", - "To avoid stopping the program, we generate a `NaN`, which is a special floating-point value that represents \"Not a Number\".\n", + "Esta sentencia comprueba si `x` es positivo. Si lo es, calcula su logaritmo. \n", + "Si no, `math.log` lanzaría un ValueError.\n", + "Para evitar detener el programa, generamos un `NaN`, que es un valor especial de punto flotante que representa \"Not a Number\".\n", "\n", - "We can write this statement more concisely using a **conditional expression**." + "Podemos escribir esta sentencia de forma más concisa usando una **conditional expression**.\n" ] }, { @@ -646,10 +646,10 @@ "id": "6a7cf27b", "metadata": {}, "source": [ - "You can almost read this line like English: \"`y` gets log-`x` if `x` is greater than 0; otherwise it gets `NaN`\".\n", + "Casi puedes leer esta línea como si fuera inglés: \"`y` recibe log-`x` si `x` es mayor que 0; de lo contrario recibe `NaN`\".\n", "\n", - "Recursive functions can sometimes be written concisely using conditional expressions. \n", - "For example, here is a version of `factorial` with a conditional _statement_." + "Las funciones recursivas a veces se pueden escribir de forma concisa usando expresiones condicionales. \n", + "Por ejemplo, aquí tienes una versión de `factorial` con una _sentencia_ condicional.\n" ] }, { @@ -665,7 +665,7 @@ "id": "56052b5c", "metadata": {}, "source": [ - "And here's a version with a conditional _expression_." + "Y aquí tienes una versión con una _expresión_ condicional.\n" ] }, { @@ -681,8 +681,8 @@ "id": "d53fbc15", "metadata": {}, "source": [ - "Another use of conditional expressions is handling optional arguments.\n", - "For example, here is class definition with an `__init__` method that uses a conditional statement to check a parameter with a default value." + "Otro uso de las expresiones condicionales es manejar argumentos opcionales.\n", + "Por ejemplo, aquí tienes una definición de clase con un método `__init__` que usa una sentencia condicional para comprobar un parámetro con un valor por defecto.\n" ] }, { @@ -698,7 +698,7 @@ "id": "655bfc46", "metadata": {}, "source": [ - "Here's a version that uses a conditional expression." + "Aquí tienes una versión que usa una expresión condicional.\n" ] }, { @@ -714,7 +714,7 @@ "id": "fef85229", "metadata": {}, "source": [ - "In general, you can replace a conditional statement with a conditional expression if both branches contain a single expression and no statements." + "En general, puedes reemplazar una sentencia condicional por una expresión condicional si ambas ramas contienen una sola expresión y ninguna sentencia.\n" ] }, { @@ -722,10 +722,10 @@ "id": "45d3b306", "metadata": {}, "source": [ - "## List comprehensions\n", + "## Comprensiones de listas\n", "\n", - "In previous chapters, we've seen a few examples where we start with an empty list and add elements, one at a time, using the `append` method.\n", - "For example, suppose we have a string that contains the title of a movie, and we want to capitalize all of the words." + "En capítulos anteriores, hemos visto algunos ejemplos donde empezamos con una lista vacía y añadimos elementos, uno por uno, usando el método `append`.\n", + "Por ejemplo, supón que tenemos un string que contiene el título de una película, y queremos poner en mayúscula la primera letra de todas las palabras.\n" ] }, { @@ -741,7 +741,7 @@ "id": "9eeb45a6", "metadata": {}, "source": [ - "We can split it into a list of strings, loop through the strings, capitalize them, and append them to a list." + "Podemos dividirlo en una lista de strings, recorrer los strings, capitalizarlos y añadirlos a una lista.\n" ] }, { @@ -757,7 +757,7 @@ "id": "b96197c2", "metadata": {}, "source": [ - "We can do the same thing more concisely using a **list comprehension**:" + "Podemos hacer lo mismo de forma más concisa usando una **comprensión de listas**:\n" ] }, { @@ -773,13 +773,13 @@ "id": "e5b565ad", "metadata": {}, "source": [ - "The bracket operators indicate that we are constructing a new list.\n", - "The expression inside the brackets specifies the elements of the list, and the `for` clause indicates what sequence we are looping through.\n", + "Los operadores de corchetes indican que estamos construyendo una nueva lista.\n", + "La expresión dentro de los corchetes especifica los elementos de la lista, y la cláusula `for` indica qué secuencia estamos recorriendo.\n", "\n", - "The syntax of a list comprehension might seem strange, because the loop variable -- `word` in this example -- appears in the expression before we get to its definition.\n", - "But you get used to it.\n", + "La sintaxis de una comprensión de listas puede parecer extraña, porque la variable del bucle -- `word` en este ejemplo -- aparece en la expresión antes de llegar a su definición.\n", + "Pero te acostumbras.\n", "\n", - "As another example, in [Chapter 9](section_word_list) we used this loop to read words from a file and append them to a list." + "Como otro ejemplo, en el [Capítulo 9](section_word_list) usamos este bucle para leer palabras de un archivo y añadirlas a una lista.\n" ] }, { @@ -815,7 +815,7 @@ "id": "2d1df49b", "metadata": {}, "source": [ - "Here's how we can write that as a list comprehension." + "Así es como podemos escribirlo como una comprensión de listas.\n" ] }, { @@ -841,8 +841,8 @@ "id": "92d856ba", "metadata": {}, "source": [ - "A list comprehension can also have an `if` clause that determines which elements are included in the list.\n", - "For example, here's a `for` loop we used in [Chapter 10](section_palindrome_list) to make a list of only the words in `word_list` that are palindromes." + "Una comprensión de listas también puede tener una cláusula `if` que determina qué elementos se incluyen en la lista.\n", + "Por ejemplo, aquí tienes un bucle `for` que usamos en el [Capítulo 10](section_palindrome_list) para crear una lista solo con las palabras de `word_list` que son palíndromos.\n" ] }, { @@ -878,7 +878,7 @@ "id": "151621d8", "metadata": {}, "source": [ - "Here's how we can do the same thing with an list comprehension." + "Así es como podemos hacer lo mismo con una comprensión de listas.\n" ] }, { @@ -904,9 +904,9 @@ "id": "5fc4eab1", "metadata": {}, "source": [ - "When a list comprehension is used as an argument to a function, we can often omit the brackets.\n", - "For example, suppose we want to add up $1 / 2^n$ for values of $n$ from 0 to 9.\n", - "We can use a list comprehension like this." + "Cuando una comprensión de listas se usa como argumento de una función, a menudo podemos omitir los corchetes.\n", + "Por ejemplo, supón que queremos sumar $1 / 2^n$ para valores de $n$ de 0 a 9.\n", + "Podemos usar una comprensión de listas así.\n" ] }, { @@ -922,7 +922,7 @@ "id": "2ee312e0", "metadata": {}, "source": [ - "Or we can leave out the brackets like this." + "O podemos dejar fuera los corchetes así.\n" ] }, { @@ -938,17 +938,17 @@ "id": "3d56d584", "metadata": {}, "source": [ - "In this example, the argument is technically a **generator expression**, not a list comprehension, and it never actually makes a list.\n", - "But other than that, the behavior is the same.\n", + "En este ejemplo, técnicamente el argumento es una **expresión generadora**, no una comprensión de listas, y en realidad nunca crea una lista.\n", + "Pero aparte de eso, el comportamiento es el mismo.\n", "\n", - "List comprehensions and generator expressions are concise and easy to read, at least for simple expressions.\n", - "And they are usually faster than the equivalent for loops, sometimes much faster.\n", - "So if you are mad at me for not mentioning them earlier, I understand.\n", + "Las comprensiones de listas y las expresiones generadoras son concisas y fáciles de leer, al menos para expresiones simples.\n", + "Y normalmente son más rápidas que los bucles `for` equivalentes, a veces mucho más rápidas.\n", + "Así que si estás enfadado conmigo por no haberlas mencionado antes, lo entiendo.\n", "\n", - "But, in my defense, list comprehensions are harder to debug because you can't put a print statement inside the loop.\n", - "I suggest you use them only if the computation is simple enough that you are likely to get it\n", - "right the first time.\n", - "Or consider writing and debugging a `for` loop and then converting it to a list comprehension." + "Pero, en mi defensa, las comprensiones de listas son más difíciles de depurar porque no puedes poner una sentencia print dentro del bucle.\n", + "Te sugiero que las uses solo si el cálculo es lo bastante simple como para que probablemente te salga\n", + "bien a la primera.\n", + "O considera escribir y depurar un bucle `for` y luego convertirlo en una comprensión de listas.\n" ] }, { @@ -956,9 +956,9 @@ "id": "f9fac860", "metadata": {}, "source": [ - "## `any` and `all`\n", + "## `any` y `all`\n", "\n", - "Python provides a built-in function, `any`, that takes a sequence of boolean values and returns `True` if any of the values are `True`." + "Python proporciona una función integrada, `any`, que recibe una secuencia de valores booleanos y devuelve `True` si cualquiera de los valores es `True`.\n" ] }, { @@ -974,7 +974,7 @@ "id": "43217186", "metadata": {}, "source": [ - "`any` is often used with generator expressions." + "`any` se usa a menudo con expresiones generadoras.\n" ] }, { @@ -990,8 +990,8 @@ "id": "22395487", "metadata": {}, "source": [ - "That example isn't very useful because it does the same thing as the `in` operator. \n", - "But we could use `any` to write concise solutions to some of the exercises in [Chapter 7](chapter_search). For example, we can write `uses_none` like this." + "Ese ejemplo no es muy útil porque hace lo mismo que el operador `in`. \n", + "Pero podríamos usar `any` para escribir soluciones concisas a algunos de los ejercicios del [Capítulo 7](chapter_search). Por ejemplo, podemos escribir `uses_none` así.\n" ] }, { @@ -1027,11 +1027,11 @@ "id": "fbefe3c1", "metadata": {}, "source": [ - "This function loops through the letters in `word` and checks whether any of them are in `forbidden`.\n", - "Using `any` with a generator expression is efficient because it stops immediately if it finds a `True` value, so it doesn't have to loop through the whole sequence.\n", + "Esta función recorre las letras de `word` y comprueba si alguna de ellas está en `forbidden`.\n", + "Usar `any` con una expresión generadora es eficiente porque se detiene inmediatamente si encuentra un valor `True`, así que no tiene que recorrer toda la secuencia.\n", "\n", - "Python provides another built-in function, `all`, that returns `True` if every element of the sequence is `True`.\n", - "We can use it to write a concise version of `uses_all`." + "Python proporciona otra función integrada, `all`, que devuelve `True` si todos los elementos de la secuencia son `True`.\n", + "Podemos usarla para escribir una versión concisa de `uses_all`.\n" ] }, { @@ -1067,7 +1067,7 @@ "id": "8d9f7364", "metadata": {}, "source": [ - "Expressions using `any` and `all` can be concise, efficient, and easy to read." + "Las expresiones que usan `any` y `all` pueden ser concisas, eficientes y fáciles de leer.\n" ] }, { @@ -1075,11 +1075,11 @@ "id": "911857a3", "metadata": {}, "source": [ - "## Named tuples\n", + "## Named tuplas\n", "\n", - "The `collections` module provides a function called `namedtuple` that can be used to create simple classes.\n", - "For example, the `Point` object in [Chapter 16](section_create_point) has only two attributes, `x` and `y`.\n", - "Here's how we defined it." + "El module `collections` proporciona una función llamada `namedtuple` que se puede usar para crear clases simples.\n", + "Por ejemplo, el objeto `Point` del [Capítulo 16](section_create_point) solo tiene dos atributos, `x` e `y`.\n", + "Así es como lo definimos.\n" ] }, { @@ -1095,8 +1095,8 @@ "id": "36f08927", "metadata": {}, "source": [ - "That's a lot of code to convey a small amount of information.\n", - "`namedtuple` provides a more concise way to define classes like this." + "Eso es mucho código para transmitir una pequeña cantidad de información.\n", + "`namedtuple` proporciona una forma más concisa de definir clases como esta.\n" ] }, { @@ -1112,12 +1112,12 @@ "id": "942a0877", "metadata": {}, "source": [ - "The first argument is the name of the class you want to create. The\n", - "second is a list of the attributes `Point` objects should have.\n", - "The result is a class object, which is why it is assigned to a capitalized variable name.\n", + "El primer argumento es el nombre de la clase que quieres crear. El\n", + "segundo es una lista de los atributos que deben tener los objeto `Point`.\n", + "El resultado es un objeto de clase, por eso se asigna a un nombre de variable con mayúscula inicial.\n", "\n", - "A class created with `namedtuple` provides an `__init__` method that assigns values to the attributes and a `__str__` that displays the object in a readable form.\n", - "So we can create and display a `Point` object like this." + "Una clase creada con `namedtuple` proporciona un método `__init__` que asigna valores a los atributos y un `__str__` que muestra el objeto de forma legible.\n", + "Así que podemos crear y mostrar un objeto `Point` así.\n" ] }, { @@ -1133,7 +1133,7 @@ "id": "b42ee9a2", "metadata": {}, "source": [ - "`Point` also provides an `__eq__` method that checks whether two `Point` objects are equivalent -- that is, whether their attributes are the same." + "`Point` también proporciona un método `__eq__` que comprueba si dos objeto `Point` son equivalentes -- es decir, si sus atributos son iguales.\n" ] }, { @@ -1149,7 +1149,7 @@ "id": "9bcf275a", "metadata": {}, "source": [ - "You can access the elements of a named tuple by name or by index." + "Puedes acceder a los elementos de una named tupla por nombre o por índice.\n" ] }, { @@ -1173,7 +1173,7 @@ "id": "0768ff41", "metadata": {}, "source": [ - "You can also treat a named tuple as a tuple, as in this assignment." + "También puedes tratar una named tupla como una tupla, como en esta asignación.\n" ] }, { @@ -1189,8 +1189,8 @@ "id": "964aa3bd", "metadata": {}, "source": [ - "But `namedtuple` objects are immutable.\n", - "After the attributes are initialized, they can't be changed." + "Pero los objeto `namedtuple` son inmutables.\n", + "Después de inicializar los atributos, no se pueden cambiar.\n" ] }, { @@ -1218,10 +1218,10 @@ "id": "f2db7783", "metadata": {}, "source": [ - "`namedtuple` provides a quick way to define simple classes.\n", - "The drawback is that simple classes don't always stay simple.\n", - "You might decide later that you want to add methods to a named tuple.\n", - "In that case, you can define a new class that inherits from the named tuple." + "`namedtuple` proporciona una forma rápida de definir clases simples.\n", + "La desventaja es que las clases simples no siempre siguen siendo simples.\n", + "Puede que más adelante decidas que quieres añadir métodos a una named tupla.\n", + "En ese caso, puedes definir una nueva clase que herede de la named tupla.\n" ] }, { @@ -1237,7 +1237,7 @@ "id": "805475ce", "metadata": {}, "source": [ - "Or at that point you could switch to a conventional class definition." + "O en ese punto podrías cambiar a una definición de clase convencional.\n" ] }, { @@ -1245,9 +1245,9 @@ "id": "4f3713a0", "metadata": {}, "source": [ - "## Packing keyword arguments\n", + "## Empaquetar argumentos de palabra clave\n", "\n", - "In [Chapter 11](section_argument_pack), we wrote a function that packs its arguments into a tuple." + "En el [Capítulo 11](section_argument_pack), escribimos una función que empaqueta sus argumentos en una tupla.\n" ] }, { @@ -1263,7 +1263,7 @@ "id": "71e3b049", "metadata": {}, "source": [ - "You can call this function with any number of arguments." + "Puedes llamar a esta función con cualquier número de argumentos.\n" ] }, { @@ -1279,8 +1279,8 @@ "id": "486a690f", "metadata": {}, "source": [ - "But the `*` operator doesn't pack keyword arguments.\n", - "So calling this function with a keyword argument causes an error." + "Pero el operador `*` no empaqueta argumentos de palabra clave.\n", + "Así que llamar a esta función con un argumento de palabra clave causa un error.\n" ] }, { @@ -1298,7 +1298,7 @@ "id": "eb7f9281", "metadata": {}, "source": [ - "To pack keyword arguments, we can use the `**` operator:" + "Para empaquetar argumentos de palabra clave, podemos usar el operador `**`:\n" ] }, { @@ -1314,8 +1314,8 @@ "id": "067bf7c4", "metadata": {}, "source": [ - "The keyword-packing parameter can have any name, but `kwargs` is a common choice.\n", - "The result is a dictionary that maps from keywords to values." + "El parámetro que empaqueta keywords puede tener cualquier nombre, pero `kwargs` es una elección común.\n", + "El resultado es un diccionario que asocia keywords con valores.\n" ] }, { @@ -1331,10 +1331,10 @@ "id": "07be77f3", "metadata": {}, "source": [ - "In this example, the value of `kwargs` is printed, but otherwise is has no effect.\n", + "En este ejemplo, se imprime el valor de `kwargs`, pero por lo demás no tiene ningún efecto.\n", "\n", - "But the `**` operator can also be used in an argument list to unpack a dictionary.\n", - "For example, here's a version of `mean` that packs any keyword arguments it gets and then unpacks them as keyword arguments for `sum`." + "Pero el operador `**` también se puede usar en una lista de argumentos para desempaquetar un diccionario.\n", + "Por ejemplo, aquí tienes una versión de `mean` que empaqueta cualquier argumento de palabra clave que recibe y luego los desempaqueta como argumentos de palabra clave para `sum`.\n" ] }, { @@ -1350,8 +1350,8 @@ "id": "ba00858c", "metadata": {}, "source": [ - "Now if we call `mean` with `start` as a keyword argument, it gets passed along to sum, which uses it as the starting point of the summation.\n", - "In the following example `start=3` adds `3` to the sum before computing the mean, so the sum is `6` and the result is `3`." + "Ahora, si llamamos a `mean` con `start` como argumento de palabra clave, se pasa a sum, que lo usa como punto de partida de la suma.\n", + "En el siguiente ejemplo `start=3` añade `3` a la suma antes de calcular la media, así que la suma es `6` y el resultado es `3`.\n" ] }, { @@ -1367,7 +1367,7 @@ "id": "949a2ca3", "metadata": {}, "source": [ - "As another example, if we have a dictionary with keys `x` and `y`, we can use it with the unpack operator to create a `Point` object." + "Como otro ejemplo, si tenemos un diccionario con las claves `x` e `y`, podemos usarlo con el operador de desempaquetado para crear un objeto `Point`.\n" ] }, { @@ -1383,7 +1383,7 @@ "id": "8aaf128a", "metadata": {}, "source": [ - "Without the unpack operator, `d` is treated as a single positional argument, so it gets assigned to `x`, and we get a `TypeError` because there's no second argument to assign to `y`." + "Sin el operador de desempaquetado, `d` se trata como un único argumento posicional, así que se asigna a `x`, y obtenemos un `TypeError` porque no hay un segundo argumento que asignar a `y`.\n" ] }, { @@ -1401,7 +1401,7 @@ "id": "e8acb958", "metadata": {}, "source": [ - "When you are working with functions that have a large number of keyword arguments, it is often useful to create and pass around dictionaries that specify frequently used options." + "Cuando trabajas con funciones que tienen un gran número de argumentos de palabra clave, a menudo es útil crear y pasar diccionarios que especifican opciones usadas con frecuencia.\n" ] }, { @@ -1417,11 +1417,11 @@ "id": "e046e382", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "In previous chapters, we used `doctest` to test functions.\n", - "For example, here's a function called `add` that takes two numbers and returns their sum.\n", - "In includes a doctest that checks whether `2 + 2` is `4`." + "En capítulos anteriores, usamos `doctest` para probar funciones.\n", + "Por ejemplo, aquí tienes una función llamada `add` que recibe dos números y devuelve su suma.\n", + "Incluye un doctest que comprueba si `2 + 2` es `4`.\n" ] }, { @@ -1437,7 +1437,7 @@ "id": "a5e332d3", "metadata": {}, "source": [ - "This function takes a function object and runs its doctests." + "Esta función recibe un objeto función y ejecuta sus doctests.\n" ] }, { @@ -1453,7 +1453,7 @@ "id": "2d752a40", "metadata": {}, "source": [ - "So we can test `add` like this." + "Así que podemos probar `add` así.\n" ] }, { @@ -1469,10 +1469,10 @@ "id": "77d36e9b", "metadata": {}, "source": [ - "There's no output, which means all tests passed.\n", + "No hay salida, lo que significa que todas las pruebas pasaron.\n", "\n", - "Python provides another tool for running automated tests, called `unittest`.\n", - "It is a little more complicated to use, but here's an example." + "Python proporciona otra herramienta para ejecutar pruebas automatizadas, llamada `unittest`.\n", + "Es un poco más complicada de usar, pero aquí tienes un ejemplo.\n" ] }, { @@ -1488,15 +1488,15 @@ "id": "59b4212a", "metadata": {}, "source": [ - "First we import `TestCase`, which is a class in the `unittest` module.\n", - "To use it, we have to define a new class that inherits from `TestCase` and provides at least one test method.\n", - "The name of the test method must begin with `test` and should indicate which function it tests.\n", + "Primero importamos `TestCase`, que es una clase del module `unittest`.\n", + "Para usarla, tenemos que definir una nueva clase que herede de `TestCase` y proporcione al menos un método de test.\n", + "El nombre del método de test debe empezar con `test` y debería indicar qué función prueba.\n", "\n", - "In this example, `test_add` tests the `add` function by calling it, saving the result, and invoking `assertEqual`, which is inherited from `TestCase`.\n", - "`assertEqual` takes two arguments and checks whether they are equal.\n", + "En este ejemplo, `test_add` prueba la función `add` llamándola, guardando el resultado e invocando `assertEqual`, que se hereda de `TestCase`.\n", + "`assertEqual` recibe dos argumentos y comprueba si son iguales.\n", "\n", - "In order to run this test method, we have to run a function in `unittest` called `main` and provide several keyword arguments.\n", - "The following function shows the details -- if you are curious, you can ask a virtual assistant to explain how it works." + "Para ejecutar este método de test, tenemos que ejecutar una función de `unittest` llamada `main` y proporcionar varios argumentos de palabra clave.\n", + "La siguiente función muestra los detalles -- si tienes curiosidad, puedes pedirle a un asistente virtual que explique cómo funciona.\n" ] }, { @@ -1512,11 +1512,11 @@ "id": "5409ea0c", "metadata": {}, "source": [ - "`run_unittest` does not take `TestExample` as an argument -- instead, it searches for classes that inherit from `TestCase`.\n", - "Then it searches for methods that begin with `test` and runs them.\n", - "This process is called **test discovery**.\n", + "`run_unittest` no recibe `TestExample` como argumento -- en su lugar, busca clases que heredan de `TestCase`.\n", + "Luego busca métodos que empiezan con `test` y los ejecuta.\n", + "Este proceso se llama **test discovery**.\n", "\n", - "Here's what happens when we call `run_unittest`." + "Esto es lo que pasa cuando llamamos a `run_unittest`.\n" ] }, { @@ -1532,10 +1532,10 @@ "id": "7775304a", "metadata": {}, "source": [ - "`unittest.main` reports the number of tests it ran and the results.\n", - "In this case `OK` indicates that the tests passed.\n", + "`unittest.main` informa del número de pruebas que ejecutó y de los resultados.\n", + "En este caso `OK` indica que las pruebas pasaron.\n", "\n", - "To see what happens when a test fails, we'll add an incorrect test method to `TestExample`." + "Para ver qué pasa cuando un test falla, añadiremos un método de test incorrecto a `TestExample`.\n" ] }, { @@ -1551,7 +1551,7 @@ "id": "96810614", "metadata": {}, "source": [ - "Here's what happens when we run the tests." + "Esto es lo que pasa cuando ejecutamos las pruebas.\n" ] }, { @@ -1567,10 +1567,10 @@ "id": "64b743cb", "metadata": {}, "source": [ - "The report includes the test method that failed and an error message showing where.\n", - "The summary indicates that two tests ran and one failed.\n", + "El informe incluye el método de test que falló y un mensaje de error que muestra dónde.\n", + "El resumen indica que se ejecutaron dos pruebas y una falló.\n", "\n", - "In the exercises below, I'll suggest some prompts you can use to ask a virtual assistant for more information about `unittest`." + "En los ejercicios siguientes, sugeriré algunos prompts que puedes usar para pedir más información sobre `unittest` a un asistente virtual.\n" ] }, { @@ -1578,22 +1578,22 @@ "id": "7d0fb256", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**factory:**\n", - " A function used to create objects, often passed as a parameter to a function.\n", + "**fábrica:**\n", + " Una función usada para crear objetos, que a menudo se pasa como parámetro a una función.\n", "\n", "**conditional expression:**\n", - "An expression that uses a conditional to select one of two values.\n", + "Una expresión que usa un condicional para seleccionar uno de dos valores.\n", "\n", - "**list comprehension:**\n", - "A concise way to loop through a sequence and create a list.\n", + "**comprensión de listas:**\n", + "Una forma concisa de recorrer una secuencia y crear una lista.\n", "\n", - "**generator expression:**\n", - "Similar to a list comprehension except that it does not create a list.\n", + "**expresión generadora:**\n", + "Similar a una comprensión de listas, excepto que no crea una lista.\n", "\n", "**test discovery:**\n", - "A process used to find and run tests." + "Un proceso usado para encontrar y ejecutar pruebas.\n" ] }, { @@ -1601,7 +1601,7 @@ "id": "bc03f15d", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios\n" ] }, { @@ -1619,28 +1619,28 @@ "id": "fe10415e", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "There are a few topics in this chapter you might want to learn about.\n", - "Here are some question to ask an AI.\n", + "Hay algunos temas de este capítulo sobre los que quizá quieras aprender más.\n", + "Aquí tienes algunas preguntas para hacerle a una AI.\n", "\n", - "* \"What are the methods and operators of Python's set class?\"\n", + "* \"¿Cuáles son los métodos y operadores de la clase conjunto de Python?\"\n", "\n", - "* \"What are the methods and operators of Python's Counter class?\"\n", + "* \"¿Cuáles son los métodos y operadores de la clase Counter de Python?\"\n", "\n", - "* \"What is the difference between a Python list comprehension and a generator expression?\"\n", + "* \"¿Cuál es la diferencia entre una comprensión de listas de Python y una expresión generadora?\"\n", "\n", - "* \"When should I use Python's `namedtuple` rather than define a new class?\"\n", + "* \"¿Cuándo debería usar `namedtuple` de Python en lugar de definir una nueva clase?\"\n", "\n", - "* \"What are some uses of packing and unpacking keyword arguments?\"\n", + "* \"¿Cuáles son algunos usos de empaquetar y desempaquetar argumentos de palabra clave?\"\n", "\n", - "* \"How does `unittest` do test discovery?\"\n", + "* \"¿Cómo hace `unittest` test discovery?\"\n", "\n", - "\"Along with `assertEqual`, what are the most commonly used methods in `unittest.TestCase`?\"\n", + "\"Junto con `assertEqual`, ¿cuáles son los métodos más usados en `unittest.TestCase`?\"\n", "\n", - "\"What are the pros and cons of `doctest` and `unittest`?\"\n", + "\"¿Cuáles son los pros y los contras de `doctest` y `unittest`?\"\n", "\n", - "For the following exercises, consider asking an AI for help, but as always, remember to test the results." + "Para los siguientes ejercicios, considera pedir ayuda a una AI, pero como siempre, recuerda probar los resultados.\n" ] }, { @@ -1648,9 +1648,9 @@ "id": "c61ecde2", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "One of the exercises in Chapter 7 asks for a function called `uses_none` that takes a word and a string of forbidden letters, and returns `True` if the word does not use any of the letters. Here's a solution." + "Uno de los ejercicios del Capítulo 7 pide una función llamada `uses_none` que recibe una palabra y un string de letras prohibidas, y devuelve `True` si la palabra no usa ninguna de esas letras. Aquí tienes una solución.\n" ] }, { @@ -1666,8 +1666,8 @@ "id": "b558b8b3", "metadata": {}, "source": [ - "Write a version of this function that uses `set` operations instead of a `for` loop.\n", - "Hint: ask an AI \"How do I compute the intersection of Python sets?\"" + "Escribe una versión de esta función que use operaciones de `set` en lugar de un bucle `for`.\n", + "Pista: pregunta a una AI \"¿Cómo calculo la intersección de conjuntos de Python?\"\n" ] }, { @@ -1677,7 +1677,7 @@ "tags": [] }, "source": [ - "You can use this outline to get started." + "Puedes usar este esquema para empezar.\n" ] }, { @@ -1723,12 +1723,12 @@ "id": "d2d670cf", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Scrabble is a board game where the objective is to use letter tiles to spell words.\n", - "For example, if we have tiles with the letters `T`, `A`, `B`, `L`, `E`, we can spell `BELT` and `LATE` using a subset of the tiles -- but we can't spell `BEET` because we don't have two `E`s.\n", + "Scrabble es un juego de mesa donde el objetivo es usar fichas de letras para formar palabras.\n", + "Por ejemplo, si tenemos fichas con las letras `T`, `A`, `B`, `L`, `E`, podemos formar `BELT` y `LATE` usando un subconjunto de las fichas -- pero no podemos formar `BEET` porque no tenemos dos `E`.\n", "\n", - "Write a function that takes a string of letters and a word, and checks whether the letters can spell the word, taking into account how many times each letter appears." + "Escribe una función que reciba un string de letras y una palabra, y compruebe si las letras pueden formar la palabra, teniendo en cuenta cuántas veces aparece cada letra.\n" ] }, { @@ -1738,7 +1738,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar.\n" ] }, { @@ -1774,9 +1774,9 @@ "id": "de2dc099", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In one of the exercises from [Chapter 17](chapter_inheritance), my solution to `has_straightflush` uses the following method, which partitions a `PokerHand` into a list of four hands, where each hand contains cards of the same suit." + "En uno de los ejercicios del [Capítulo 17](chapter_inheritance), mi solución para `has_straightflush` usa el siguiente método, que particiona una `PokerHand` en una lista de cuatro manos, donde cada mano contiene cartas del mismo palo.\n" ] }, { @@ -1792,7 +1792,7 @@ "id": "cd04a7a3", "metadata": {}, "source": [ - "Write a simplified version of this function using a `defaultdict`." + "Escribe una versión simplificada de esta función usando un `defaultdict`.\n" ] }, { @@ -1802,7 +1802,7 @@ "tags": [] }, "source": [ - "Here's an outline of the `PokerHand` class and the `partition_suits` function you can use to get started." + "Aquí tienes un esquema de la clase `PokerHand` y de la función `partition_suits` que puedes usar para empezar.\n" ] }, { @@ -1830,7 +1830,7 @@ "tags": [] }, "source": [ - "To test your code, we'll make a deck and shuffle it." + "Para probar tu código, crearemos un mazo y lo barajaremos.\n" ] }, { @@ -1850,7 +1850,7 @@ "tags": [] }, "source": [ - "Then create a `PokerHand` and add seven cards to it." + "Luego crea una `PokerHand` y añádele siete cartas.\n" ] }, { @@ -1870,7 +1870,7 @@ "tags": [] }, "source": [ - "If you invoke `partition` and print the results, each hand should contain cards of one suit only." + "Si invocas `partition` e imprimes los resultados, cada mano debería contener solo cartas de un palo.\n" ] }, { @@ -1888,9 +1888,9 @@ "id": "218798e3", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Here's the function from Chapter 11 that computes Fibonacci numbers." + "Aquí tienes la función del Capítulo 11 que calcula números de Fibonacci.\n" ] }, { @@ -1906,7 +1906,7 @@ "id": "6acab624", "metadata": {}, "source": [ - "Write a version of this function with a single return statement that use two conditional expressions, one nested inside the other." + "Escribe una versión de esta función con una sola sentencia retorno que use dos expresiones condicionales, una anidada dentro de la otra.\n" ] }, { @@ -1942,9 +1942,9 @@ "id": "2deb0e1f", "metadata": {}, "source": [ - "### Exercise\n", - "The following is a function that computes the binomial coefficient\n", - "recursively." + "### Ejercicio\n", + "La siguiente es una función que calcula el coeficiente binomial\n", + "de forma recursiva.\n" ] }, { @@ -1960,10 +1960,10 @@ "id": "656c61f6", "metadata": {}, "source": [ - "Rewrite the body of the function using nested conditional expressions.\n", + "Reescribe el cuerpo de la función usando expresiones condicionales anidadas.\n", "\n", - "This function is not very efficient because it ends up computing the same values over and over.\n", - "Make it more efficient by memoizing it, as described in [Chapter 10](section_memos)." + "Esta función no es muy eficiente porque acaba calculando los mismos valores una y otra vez.\n", + "Hazla más eficiente memoizándola, como se describe en el [Capítulo 10](section_memos).\n" ] }, { @@ -1987,9 +1987,9 @@ "id": "921719dc", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Here's the `__str__` method from the `Deck` class in [Chapter 17](section_print_deck)." + "Aquí tienes el método `__str__` de la clase `Deck` en el [Capítulo 17](section_print_deck).\n" ] }, { @@ -2005,7 +2005,7 @@ "id": "27f189cf", "metadata": {}, "source": [ - "Write a more concise version of this method with a list comprehension or generator expression." + "Escribe una versión más concisa de este método con una comprensión de listas o una expresión generadora.\n" ] }, { @@ -2025,7 +2025,7 @@ "tags": [] }, "source": [ - "You can use this example to test your solution." + "Puedes usar este ejemplo para probar tu solución.\n" ] }, { @@ -2053,13 +2053,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n" ] } ], @@ -2085,4 +2087,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/blank/chap19.ipynb b/blank/chap19.ipynb index 4d86fb8..be0fc26 100644 --- a/blank/chap19.ipynb +++ b/blank/chap19.ipynb @@ -5,9 +5,9 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", - "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." + "Puedes encargar versiones impresas y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", + "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325).\n" ] }, { @@ -15,7 +15,7 @@ "id": "171aca73", "metadata": {}, "source": [ - "# Final thoughts" + "# Reflexiones finales\n" ] }, { @@ -23,19 +23,19 @@ "id": "4d551c99", "metadata": {}, "source": [ - "Learning to program is not easy, but if you made it this far, you are off to a good start.\n", - "Now I have some suggestions for ways you can keep learning and apply what you have learned.\n", + "Aprender a programar no es fácil, pero si has llegado hasta aquí, has empezado con buen pie.\n", + "Ahora tengo algunas sugerencias sobre cómo puedes seguir aprendiendo y aplicar lo que has aprendido.\n", "\n", - "This book is meant to be a general introduction to programming, so we have not focused on specific applications.\n", - "Depending on your interests, there are any number of areas where you can apply your new skills.\n", + "Este libro pretende ser una introducción general a la programación, así que no nos hemos centrado en aplicaciones específicas.\n", + "Según tus intereses, hay muchas áreas en las que puedes aplicar tus nuevas habilidades.\n", "\n", - "If you are interested in Data Science, there are three books of mine you might like:\n", + "Si te interesa la ciencia de datos, hay tres libros míos que podrían gustarte:\n", "\n", "* *Think Stats: Exploratory Data Analysis*, O'Reilly Media, 2014.\n", "\n", "* *Think Bayes: Bayesian Statistics in Python*, O'Reilly Media, 2021.\n", "\n", - "* *Think DSP: Digital Signal Processing in Python*, O'Reilly Media, 2016." + "* *Think DSP: Digital Signal Processing in Python*, O'Reilly Media, 2016.\n" ] }, { @@ -43,13 +43,13 @@ "id": "cceabe36", "metadata": {}, "source": [ - "If you are interested in physical modeling and complex systems, you might like:\n", + "Si te interesan el modelado físico y los sistemas complejos, quizá te gusten:\n", "\n", "* *Modeling and Simulation in Python: An Introduction for Scientists and Engineers*, No Starch Press, 2023.\n", "\n", "* *Think Complexity: Complexity Science and Computational Modeling*, O'Reilly Media, 2018.\n", "\n", - "These use NumPy, SciPy, pandas, and other Python libraries for data science and scientific computing." + "Estos libros usan NumPy, SciPy, pandas y otras librerías de Python para ciencia de datos y computación científica.\n" ] }, { @@ -57,13 +57,13 @@ "id": "54a39121", "metadata": {}, "source": [ - "This book tries to find a balance between general principles of programming and details of Python.\n", - "As a result, it does not include every feature of the Python language.\n", - "For more about Python, and good advice about how to use it, I recommend *Fluent Python: Clear, Concise, and Effective Programming*, second edition by Luciano Ramalho, O'Reilly Media, 2022.\n", + "Este libro intenta encontrar un equilibrio entre los principios generales de la programación y los detalles de Python.\n", + "Como resultado, no incluye todas las características del lenguaje Python.\n", + "Para saber más sobre Python, y para buenos consejos sobre cómo usarlo, recomiendo *Fluent Python: Clear, Concise, and Effective Programming*, segunda edición de Luciano Ramalho, O'Reilly Media, 2022.\n", "\n", - "After an introduction to programming, a common next step is to learn about data structures and algorithms.\n", - "I have a work in progress on this topic, called *Data Structures and Information Retrieval in Python*.\n", - "A free electronic version is available from Green Tea Press at ." + "Después de una introducción a la programación, un siguiente paso habitual es aprender sobre estructuras de datos y algoritmos.\n", + "Tengo una obra en curso sobre este tema, llamada *Data Structures and Information Retrieval in Python*.\n", + "Hay una versión electrónica gratuita disponible en Green Tea Press en .\n" ] }, { @@ -71,11 +71,11 @@ "id": "a1598510", "metadata": {}, "source": [ - "As you work on more complex programs, you will encounter new challenges.\n", - "You might find it helpful to review the sections in this book about debugging.\n", - "In particular, remember the Six R's of debugging from [Chapter 12](section_debugging_12): reading, running, ruminating, rubber-ducking, retreating, and resting.\n", + "A medida que trabajes en programas más complejos, encontrarás nuevos desafíos.\n", + "Puede resultarte útil repasar las secciones de este libro sobre depuración.\n", + "En particular, recuerda las seis R de la depuración del [Capítulo 12](section_deerrorging_12) (por sus nombres en inglés): leer, ejecutar, reflexionar, explicárselo a un patito de goma, tomar distancia y descansar.\n", "\n", - "This book suggests tools to help with debugging, including the `print` and `repr` functions, the `structshape` function in [Chapter 11](section_debugging_11) -- and the built-in functions `isinstance`, `hasattr`, and `vars` in [Chapter 14](section_debugging_14)." + "Este libro sugiere herramientas para ayudar con la depuración, incluidas las funciones `print` y `repr`, la función `structshape` del [Capítulo 11](section_deerrorging_11) -- y las funciones integradas `isinstance`, `hasattr` y `vars` del [Capítulo 14](section_deerrorging_14).\n" ] }, { @@ -83,12 +83,12 @@ "id": "fb4dd345", "metadata": {}, "source": [ - "It also suggests tools for testing programs, including the `assert` statement, the `doctest` module, and the `unittest` module.\n", - "Including tests in your programs is one of the best ways to prevent and detect errors, and save time debugging.\n", + "También sugiere herramientas para probar programas, incluidas la sentencia `assert`, el módulo `doctest` y el módulo `unittest`.\n", + "Incluir pruebas en tus programas es una de las mejores formas de prevenir y detectar errores, y de ahorrar tiempo en depuración.\n", "\n", - "But the best kind of debugging is the kind you don't have to do.\n", - "If you use an incremental development process as described in [Chapter 6](section_incremental) -- and test as you go -- you will make fewer errors and find them more quickly when you do.\n", - "Also, remember encapsulation and generalization from [Chapter 4](section_encapsulation), which is particularly useful when you are developing code in Jupyter notebooks." + "Pero la mejor depuración es el que no tienes que hacer.\n", + "Si usas un proceso de desarrollo incremental como se describe en el [Capítulo 6](section_incremental) -- y pruebas a medida que avanzas -- cometerás menos errores y los encontrarás más rápido cuando aparezcan.\n", + "Además, recuerda la encapsulación y la generalización del [Capítulo 4](section_encapsulation), que son especialmente útiles cuando desarrollas código en Jupyter notebooks.\n" ] }, { @@ -96,16 +96,16 @@ "id": "0d29933e", "metadata": {}, "source": [ - "Throughout this book, I've suggested ways to use virtual assistants to help you learn, program, and debug.\n", - "I hope you are finding these tools useful.\n", + "A lo largo de este libro, he sugerido formas de usar asistentes virtuales para ayudarte a aprender, programar y depurar.\n", + "Espero que estas herramientas te estén resultando útiles.\n", "\n", - "In additional to virtual assistants like ChatGPT, you might also want to use a tool like Copilot that autocompletes code as you type.\n", - "I did not recommend using these tools, initially, because they can be overwhelming for beginners.\n", - "But you might want to explore them now.\n", + "Además de asistentes virtuales como ChatGPT, quizá también quieras usar una herramienta como Copilot, que autocompleta código mientras escribes.\n", + "Al principio no recomendé usar estas herramientas porque pueden resultar abrumadoras para principiantes.\n", + "Pero quizá ahora quieras explorarlas.\n", "\n", - "Using AI tools effectively requires some experimentation and reflection to find a flow that works for you.\n", - "If you think it's a nuisance to copy code from ChatGPT to Jupyter, you might prefer something like Copilot.\n", - "But the cognitive work you do to compose a prompt and interpret the response can be as valuable as the code the tool generates, in the same vein as rubber duck debugging." + "Usar herramientas de AI de forma efectiva requiere algo de experimentación y reflexión para encontrar un flujo que funcione para ti.\n", + "Si te resulta molesto copiar código de ChatGPT a Jupyter, quizá prefieras algo como Copilot.\n", + "Pero el trabajo cognitivo que haces para componer un prompt e interpretar la respuesta puede ser tan valioso como el código que genera la herramienta, en la misma línea que la depuración con patito de goma.\n" ] }, { @@ -113,17 +113,17 @@ "id": "c28d6815", "metadata": {}, "source": [ - "As you gain programming experience, you might want to explore other development environments.\n", - "I think Jupyter notebooks are a good place to start, but they are relatively new and not as widely-used as conventional integrated development environments (IDE).\n", - "For Python, the most popular IDEs include PyCharm and Spyder -- and Thonny, which is often recommended for beginners.\n", - "Other IDEs, like Visual Studio Code and Eclipse, work with other programming languages as well.\n", - "Or, as a simpler alternative, you can write Python programs using any text editor you like.\n", - "\n", - "As you continue your programming journey, you don't have to go alone!\n", - "If you live in or near a city, there's a good chance there is a Python user group you can join.\n", - "These groups are usually friendly to beginners, so don't be afraid.\n", - "If there is no group near you, you might be able to join events remotely.\n", - "Also, keep an eye out for regional Python conferences." + "A medida que ganes experiencia programando, quizá quieras explorar otros entornos de desarrollo.\n", + "Creo que Jupyter notebooks es un buen lugar para empezar, pero son relativamente nuevos y no se usan tanto como los entornos de desarrollo integrados (IDE) convencionales.\n", + "Para Python, los IDE más populares incluyen PyCharm y Spyder -- y Thonny, que suele recomendarse para principiantes.\n", + "Otros IDE, como Visual Studio Código y Eclipse, también funcionan con otros lenguajes de programación.\n", + "O, como alternativa más sencilla, puedes escribir programas en Python usando cualquier editor de texto que te guste.\n", + "\n", + "Mientras continúas tu viaje en la programación, no tienes que hacerlo en soledad.\n", + "Si vives en una ciudad o cerca de una, es muy probable que haya un grupo de usuarios de Python al que puedas unirte.\n", + "Estos grupos suelen ser amables con principiantes, así que no tengas miedo.\n", + "Si no hay ningún grupo cerca de ti, quizá puedas unirte a eventos de forma remota.\n", + "Además, mantente atento a conferencias regionales de Python.\n" ] }, { @@ -131,12 +131,12 @@ "id": "28cb22bf", "metadata": {}, "source": [ - "One of the best ways to improve your programming skills is to learn another language.\n", - "If you are interested in statistics and data science, you might want to learn R.\n", - "But I particularly recommend learning a functional language like Racket or Elixir.\n", - "Functional programming requires a different kind of thinking, which changes the way you think about programs.\n", + "Una de las mejores formas de mejorar tus habilidades de programación es aprender otro lenguaje.\n", + "Si te interesan la estadística y ciencia de datos, quizá quieras aprender R.\n", + "Pero recomiendo especialmente aprender un lenguaje funcional como Racket o Elixir.\n", + "La programación funcional requiere una forma distinta de pensar, lo que cambia la manera en que piensas sobre los programas.\n", "\n", - "Good luck!" + "¡Buena suerte!\n" ] }, { @@ -154,13 +154,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n" ] } ], @@ -185,4 +187,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/chapters/chap00.ipynb b/chapters/chap00.ipynb index e7c283c..73fca92 100644 --- a/chapters/chap00.ipynb +++ b/chapters/chap00.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -15,7 +15,7 @@ "id": "d9724920", "metadata": {}, "source": [ - "# Preface\n", + "# Prefacio\n", "\n" ] }, @@ -24,21 +24,21 @@ "id": "b76f38c6", "metadata": {}, "source": [ - "## Who Is This Book For?\n", + "## ¿Para quién es este libro?\n", "\n", - "If you want to learn to program, you have come to the right place.\n", - "Python is one of the best programming languages for beginners -- and it is also one of the most in-demand skills.\n", + "Si quieres aprender a programar, has llegado al lugar adecuado.\n", + "Python es uno de los mejores lenguajes de programación para principiantes, y también una de las habilidades más demandadas.\n", "\n", - "You have also come at the right time, because learning to program now is probably easier than ever.\n", - "With virtual assistants like ChatGPT, you don't have to learn alone.\n", - "Throughout this book, I'll suggest ways you can use these tools to accelerate your learning.\n", + "También has llegado en el momento adecuado, porque aprender a programar ahora probablemente sea más fácil que nunca.\n", + "Con asistentes virtuales como ChatGPT, no tienes que aprender en soledad.\n", + "A lo largo de este libro, sugeriré formas de usar estas herramientas para acelerar tu aprendizaje.\n", "\n", - "This book is primarily for people who have never programmed before and people who have some experience in another programming language.\n", - "If you have substantial experience in Python, you might find the first few chapters too slow.\n", + "Este libro es principalmente para personas que nunca han programado y para personas que tienen algo de experiencia en otro lenguaje de programación.\n", + "Si tienes bastante experiencia en Python, quizá los primeros capítulos te parezcan demasiado lentos.\n", "\n", - "One of the challenges of learning to program is that you have to learn *two* languages: one is the programming language itself; the other is the vocabulary we use to talk about programs.\n", - "If you learn only the programming language, you are likely to have problems when you need to interpret an error message, read documentation, talk to another person, or use virtual assistants.\n", - "If you have done some programming, but you have not also learned this second language, I hope you find this book helpful." + "Uno de los retos de aprender a programar es que tienes que aprender *dos* lenguajes: uno es el propio lenguaje de programación; el otro es el vocabulario que usamos para hablar de programas.\n", + "Si solo aprendes el lenguaje de programación, es probable que tengas problemas cuando necesites interpretar un mensaje de error, leer documentación, hablar con otra persona o usar asistentes virtuales.\n", + "Si has programado algo, pero no has aprendido también este segundo lenguaje, espero que este libro te resulte útil." ] }, { @@ -46,21 +46,21 @@ "id": "b4dd57bc", "metadata": {}, "source": [ - "## Goals of the Book\n", + "## Objetivos del libro\n", "\n", - "Writing this book, I tried to be careful with the vocabulary.\n", - "I define each term when it first appears.\n", - "And there is a glossary at the end of each chapter that reviews the terms that were introduced.\n", + "Al escribir este libro, intenté tener cuidado con el vocabulario.\n", + "Defino cada término cuando aparece por primera vez.\n", + "Y al final de cada capítulo hay un glosario que repasa los términos que se han introducido.\n", "\n", - "I also tried to be concise.\n", - "The less mental effort it takes to read the book, the more capacity you will have for programming.\n", + "También intenté ser conciso.\n", + "Cuanto menos esfuerzo mental requiera leer el libro, más capacidad tendrás para programar.\n", "\n", - "But you can't learn to program just by reading a book -- you have to practice.\n", - "For that reason, this book includes exercises at the end of every chapter where you can practice what you have learned.\n", + "Pero no puedes aprender a programar solo leyendo un libro: tienes que practicar.\n", + "Por eso, este libro incluye ejercicios al final de cada capítulo en los que puedes practicar lo que has aprendido.\n", "\n", - "If you read carefully and work on exercises consistently, you will make progress.\n", - "But I'll warn you now -- learning to program is not easy, and even for experienced programmers it can be frustrating.\n", - "As we go, I will suggest strategies to help you write correct programs and fix incorrect ones." + "Si lees con atención y trabajas en los ejercicios de forma constante, avanzarás.\n", + "Pero te aviso desde ahora: aprender a programar no es fácil, e incluso para programadores con experiencia puede ser frustrante.\n", + "A medida que avancemos, sugeriré estrategias para ayudarte a escribir programas correctos y arreglar los incorrectos." ] }, { @@ -68,31 +68,31 @@ "id": "6516d914", "metadata": {}, "source": [ - "## Navigating the Book\n", + "## Cómo navegar por el libro\n", "\n", - "Each chapter in this book builds on the previous ones, so you should read them in order and take time to work on the exercises before you move on.\n", + "Cada capítulo de este libro se basa en los anteriores, así que deberías leerlos en orden y dedicar tiempo a trabajar en los ejercicios antes de seguir adelante.\n", "\n", - "The first six chapters introduce basic elements like arithmetic, conditionals, and loops.\n", - "They also introduce the most important concept in programming, functions, and a powerful way to use them, recursion.\n", + "Los primeros seis capítulos presentan elementos básicos como la aritmética, los condicionales y los bucles.\n", + "También presentan el concepto más importante de la programación, las funciones, y una forma potente de usarlas, la recursión.\n", "\n", - "Chapters 7 and 8 introduce strings -- which can represent letter, words, and sentences -- and algorithms for working with them.\n", + "Los capítulos 7 y 8 presentan strings, que pueden representar letras, palabras y frases, y algoritmos para trabajar con ellas.\n", "\n", - "Chapters 9 through 12 introduce Python's core data structures -- lists, dictionaries, and tuples -- which are powerful tools for writing efficient programs.\n", - "Chapter 12 presents algorithms for analyzing text and randomly generating new text.\n", - "Algorithms like these are at the core of large language models (LLMs), so this chapter will give you an idea of how tools like ChatGPT work.\n", + "Los capítulos 9 a 12 presentan las estructuras de datos principales de Python: listas, diccionarios y tuplas, que son herramientas potentes para escribir programas eficientes.\n", + "El capítulo 12 presenta algoritmos para analizar texto y generar texto nuevo de forma aleatoria.\n", + "Algoritmos como estos están en el núcleo de los modelos de lenguaje grandes (LLMs), así que este capítulo te dará una idea de cómo funcionan herramientas como ChatGPT.\n", "\n", - "Chapter 13 is about ways to store data in long-term storage -- files and databases.\n", - "As an exercise, you can write a program that searches a file system and finds duplicate files.\n", + "El capítulo 13 trata sobre formas de almacenar datos a largo plazo: archivos y bases de datos.\n", + "Como ejercicio, puedes escribir un programa que busque en un sistema de archivos y encuentre archivos duplicados.\n", "\n", - "Chapters 14 through 17 introduce object-oriented programming (OOP), which is a way to organize programs and the data they work with.\n", - "Many Python libraries are written in object-oriented style, so these chapters will help you understand their design -- and define your own objects.\n", + "Los capítulos 14 a 17 presentan la programación orientada a objetos (OOP), que es una forma de organizar programas y los datos con los que trabajan.\n", + "Muchas librerías de Python están escritas con estilo orientado a objetos, así que estos capítulos te ayudarán a entender su diseño y a definir tus propios objetos.\n", "\n", - "The goal of this book is not to cover the entire Python language.\n", - "Rather, I focus on a subset of the language that provides the greatest capability with the fewest concepts.\n", - "Nevertheless, Python has a lot of features you can use to solve common problems efficiently.\n", - "Chapter 18 presents some of these features.\n", + "El objetivo de este libro no es cubrir todo el lenguaje Python.\n", + "En cambio, me centro en un subconjunto del lenguaje que ofrece la mayor capacidad con el menor número de conceptos.\n", + "Aun así, Python tiene muchas características que puedes usar para resolver problemas comunes de forma eficiente.\n", + "El capítulo 18 presenta algunas de estas características.\n", "\n", - "Finally, Chapter 19 presents my parting thoughts and suggestions for continuing your programming journey." + "Por último, el capítulo 19 presenta mis reflexiones finales y sugerencias para continuar tu camino en la programación." ] }, { @@ -100,38 +100,38 @@ "id": "23013838", "metadata": {}, "source": [ - "## What's new in the third edition?\n", + "## ¿Qué hay de nuevo en la tercera edición?\n", "\n", - "The biggest changes in this edition were driven by two new technologies -- Jupyter notebooks and virtual assistants.\n", + "Los cambios más grandes de esta edición fueron impulsados por dos tecnologías nuevas: los Jupyter notebooks y los asistentes virtuales.\n", "\n", - "Each chapter of this book is a Jupyter notebook, which is a document that contains both ordinary text and code.\n", - "For me, that makes it easier to write the code, test it, and keep it consistent with the text.\n", - "For you, it means you can run the code, modify it, and work on the exercises, all in one place.\n", - "Instructions for working with the notebooks are in the first chapter.\n", + "Cada capítulo de este libro es un Jupyter notebook, que es un documento que contiene tanto texto normal como código.\n", + "Para mí, eso facilita escribir el código, probarlo y mantenerlo coherente con el texto.\n", + "Para ti, significa que puedes ejecutar el código, modificarlo y trabajar en los ejercicios, todo en un solo lugar.\n", + "Las instrucciones para trabajar con los notebooks están en el primer capítulo.\n", "\n", - "The other big change is that I've added advice for working with virtual assistants like ChatGPT and using them to accelerate your learning.\n", - "When the previous edition of this book was published in 2016, the predecessors of these tools were far less useful and most people were unaware of them. \n", - "Now they are a standard tool for software engineering, and I think they will be a transformational tool for learning to program -- and learning a lot of other things, too.\n", + "El otro gran cambio es que he añadido consejos para trabajar con asistentes virtuales como ChatGPT y usarlos para acelerar tu aprendizaje.\n", + "Cuando se publicó la edición anterior de este libro en 2016, los predecesores de estas herramientas eran mucho menos útiles y la mayoría de la gente no los conocía. \n", + "Ahora son una herramienta estándar para la ingeniería de software, y creo que serán una herramienta transformadora para aprender a programar, y para aprender muchas otras cosas también.\n", "\n", - "The other changes in the book were motivated by my regrets about the second edition.\n", + "Los demás cambios del libro fueron motivados por mis arrepentimientos sobre la segunda edición.\n", "\n", - "The first is that I did not emphasize software testing.\n", - "That was already a regrettable omission in 2016, but with the advent of virtual assistants, automated testing has become even more important.\n", - "So this edition presents Python's most widely-used testing tools, `doctest` and `unittest`, and includes several exercises where you can practice working with them.\n", + "El primero es que no puse suficiente énfasis en las pruebas de software.\n", + "Eso ya era una omisión lamentable en 2016, pero con la llegada de los asistentes virtuales, las pruebas automatizadas se han vuelto aún más importantes.\n", + "Así que esta edición presenta las herramientas de testing más usadas de Python, `doctest` y `unittest`, e incluye varios ejercicios donde puedes practicar con ellas.\n", "\n", - "My other regret is that the exercises in the second edition were uneven -- some were more interesting than others and some were too hard.\n", - "Moving to Jupyter notebooks helped me develop and test a more engaging and effective sequence of exercises.\n", + "Mi otro arrepentimiento es que los ejercicios de la segunda edición eran desiguales: algunos eran más interesantes que otros y algunos eran demasiado difíciles.\n", + "Pasar a Jupyter notebooks me ayudó a desarrollar y probar una secuencia de ejercicios más atractiva y eficaz.\n", "\n", - "In this revision, the sequence of topics is almost the same, but I rearranged a few of the chapters and compressed two short chapters into one.\n", - "Also, I expanded the coverage of strings to include regular expressions.\n", + "En esta revisión, la secuencia de temas es casi la misma, pero reorganicé algunos capítulos y comprimí dos capítulos cortos en uno.\n", + "Además, amplié la cobertura de strings para incluir expresiones regulares.\n", "\n", - "A few chapters use turtle graphics.\n", - "In previous editions, I used Python's `turtle` module, but unfortunately it doesn't work in Jupyter notebooks.\n", - "So I replaced it with a new turtle module that should be easier to use.\n", + "Algunos capítulos usan turtle graphics.\n", + "En ediciones anteriores usé el módulo `turtle` de Python, pero por desgracia no funciona en Jupyter notebooks.\n", + "Así que lo reemplacé por un nuevo turtle módulo que debería ser más fácil de usar.\n", "\n", - "Finally, I rewrote a substantial fraction of the text, clarifying places that needed it and cutting back in places where I was not as concise as I could be.\n", + "Por último, reescribí una parte considerable del texto, aclarando lugares que lo necesitaban y recortando en lugares donde no fui tan conciso como podía ser.\n", "\n", - "I am very proud of this new edition -- I hope you like it!" + "Estoy muy orgulloso de esta nueva edición. ¡Espero que te guste!" ] }, { @@ -139,27 +139,27 @@ "id": "bfb779bb", "metadata": {}, "source": [ - "## Getting started\n", + "## Primeros pasos\n", "\n", - "For most programming languages, including Python, there are many tools you can use to write and run programs. \n", - "These tools are called integrated development environments (IDEs).\n", - "In general, there are two kinds of IDEs:\n", + "Para la mayoría de los lenguajes de programación, incluido Python, hay muchas herramientas que puedes usar para escribir y ejecutar programas. \n", + "Estas herramientas se llaman entornos de desarrollo integrados (IDEs).\n", + "En general, hay dos tipos de IDEs:\n", "\n", - "* Some work with files that contain code, so they provide tools for editing and running these files.\n", + "* Algunos trabajan con archivos que contienen código, así que proporcionan herramientas para editar y ejecutar esos archivos.\n", "\n", - "* Others work primarily with notebooks, which are documents that contain text and code.\n", + "* Otros trabajan principalmente con notebooks, que son documentos que contienen texto y código.\n", "\n", - "For beginners, I recommend starting with a notebook development environment like Jupyter.\n", + "Para principiantes, recomiendo empezar con un entorno de desarrollo de notebooks como Jupyter.\n", "\n", - "The notebooks for this book are available from an online repository at .\n", + "Los notebooks de este libro están disponibles en un repositorio online en .\n", "\n", - "There are two ways to use them:\n", + "Hay dos formas de usarlos:\n", "\n", - "* You can download the notebooks and run them on your own computer. In that case, you have to install Python and Jupyter, which is not hard, but if you want to learn Python, it can be frustrating to spend a lot of time installing software.\n", + "* Puedes descargar los notebooks y ejecutarlos en tu propio ordenador. En ese caso, tienes que instalar Python y Jupyter, lo cual no es difícil, pero si quieres aprender Python puede ser frustrante pasar mucho tiempo instalando software.\n", "\n", - "* An alternative is to run the notebooks on Colab, which is a Jupyter environment that runs in a web browser, so you don't have to install anything. Colab is operated by Google, and it is free to use.\n", + "* Una alternativa es ejecutar los notebooks en Colab, que es un entorno Jupyter que se ejecuta en un navegador web, así que no tienes que instalar nada. Colab está operado por Google y es gratuito.\n", "\n", - "If you are just getting started, I strongly recommend you start with Colab." + "Si estás empezando, te recomiendo encarecidamente que empieces con Colab." ] }, { @@ -167,17 +167,17 @@ "id": "2ebd2412", "metadata": {}, "source": [ - "## Resources for Teachers\n", + "## Recursos para docentes\n", "\n", - "If you are teaching with this book, here are some resources you might find useful.\n", + "Si enseñas con este libro, aquí tienes algunos recursos que pueden resultarte útiles.\n", "\n", - "* You can find notebooks with solutions to the exercises at , along with links to the additional resources below.\n", + "* Puedes encontrar notebooks con soluciones a los ejercicios en , junto con enlaces a los recursos adicionales de abajo.\n", "\n", - "* Quizzes for each chapter, and a summative quiz for the whole book, are available on request.\n", + "* Hay cuestionarios para cada capítulo, y un cuestionario final para todo el libro, disponibles bajo petición.\n", "\n", - "* *Teaching and Learning with Jupyter* is an online book with suggestions for using Jupyter effectively in the classroom. You can read the book at \n", + "* *Teaching and Learning with Jupyter* es un libro online con sugerencias para usar Jupyter de forma eficaz en el aula. Puedes leer el libro en \n", "\n", - "* One of the best ways to use notebooks is live coding, where an instructor writes code and students follow along in their own notebooks. To learn about live coding -- and get other great advice about teaching programming -- I recommend the instructor training provided by The Carpentries, at " + "* Una de las mejores formas de usar notebooks es programación en vivo (live coding), donde un instructor escribe código y los estudiantes le siguen en sus propios notebooks. Para aprender sobre programación en vivo, y obtener otros grandes consejos sobre enseñanza de programación, recomiendo la formación para instructores ofrecida por The Carpentries, en " ] }, { @@ -185,29 +185,29 @@ "id": "28e7de55", "metadata": {}, "source": [ - "## Acknowledgments\n", + "## Agradecimientos\n", "\n", - "Many thanks to Jeff Elkner, who translated my Java book into Python,\n", - "which got this project started and introduced me to what has turned out\n", - "to be my favorite language.\n", - "Thanks also to Chris Meyers, who contributed several sections to *How to Think Like a Computer Scientist*.\n", + "Muchas gracias a Jeff Elkner, que tradujo mi libro de Java a Python,\n", + "lo que puso en marcha este proyecto y me presentó lo que ha acabado siendo\n", + "mi lenguaje favorito.\n", + "Gracias también a Chris Meyers, que contribuyó con varias secciones a *How to Think Like a Computer Scientist*.\n", "\n", - "Thanks to the Free Software Foundation for developing the GNU Free Documentation License, which helped make my collaboration with Jeff and Chris possible, and thanks to the Creative Commons for the license I am using now.\n", + "Gracias a la Free Software Foundation por desarrollar la GNU Free Documentation License, que ayudó a hacer posible mi colaboración con Jeff y Chris, y gracias a Creative Commons por la licencia que uso ahora.\n", "\n", - "Thanks to the developers and maintainers of the Python language and the libraries I used, including the Turtle graphics module; the tools I used to develop the book, including Jupyter and JupyterBook; and the services I used, including ChatGPT, Copilot, Colab and GitHub.\n", + "Gracias a quienes desarrollan y mantienen el lenguaje Python y las librerías que usé, incluido el módulo de Turtle graphics; las herramientas que usé para desarrollar el libro, incluidos Jupyter y JupyterBook; y los servicios que usé, incluidos ChatGPT, Copilot, Colab y GitHub.\n", "\n", - "Thanks to the editors at Lulu who worked on *How to Think Like a Computer Scientist* and the editors at O'Reilly Media who worked on *Think Python*.\n", + "Gracias a los editores de Lulu que trabajaron en *How to Think Like a Computer Scientist* y a los editores de O'Reilly Media que trabajaron en *Think Python*.\n", "\n", - "Special thanks to the technical reviewers for the second edition, Melissa Lewis and Luciano Ramalho, and for the third edition, Sam Lau and Luciano Ramalho (again!).\n", - "I am also grateful to Luciano for developing the turtle graphics module I use in several chapters, called `jupyturtle`.\n", + "Un agradecimiento especial a los revisores técnicos de la segunda edición, Melissa Lewis y Luciano Ramalho, y de la tercera edición, Sam Lau y Luciano Ramalho (¡otra vez!).\n", + "También agradezco a Luciano haber desarrollado el turtle graphics módulo que uso en varios capítulos, llamado `jupyturtle`.\n", "\n", - "Thanks to all the students who worked with earlier versions of this book and all the contributors who sent in corrections and suggestions.\n", - "More than 100 sharp-eyed and thoughtful readers have sent in suggestions and corrections over the past few years. Their contributions, and enthusiasm for this project, have been a huge help.\n", + "Gracias a todos los estudiantes que trabajaron con versiones anteriores de este libro y a todos los colaboradores que enviaron correcciones y sugerencias.\n", + "Más de 100 lectores atentos y reflexivos han enviado sugerencias y correcciones durante los últimos años. Sus contribuciones, y su entusiasmo por este proyecto, han sido de enorme ayuda.\n", "\n", - "If you have a suggestion or correction, please send email to `feedback@thinkpython.com`.\n", - "If you include at least part of the sentence the error appears in, that\n", - "makes it easy for me to search. Page and section numbers are fine, too,\n", - "but not quite as easy to work with. Thanks!" + "Si tienes una sugerencia o corrección, envía un email a `feedback@thinkpython.com`.\n", + "Si incluyes al menos una parte de la frase en la que aparece el error, eso\n", + "me facilita la búsqueda. Los números de página y sección también sirven,\n", + "pero no son tan fáciles de manejar. ¡Gracias!" ] }, { @@ -225,13 +225,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Licencia del código: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] } ], diff --git a/chapters/chap01.ipynb b/chapters/chap01.ipynb index bd3875d..5f4c579 100644 --- a/chapters/chap01.ipynb +++ b/chapters/chap01.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -17,14 +17,14 @@ "tags": [] }, "source": [ - "# Welcome\n", + "# Bienvenida\n", "\n", - "This is the Jupyter notebook for Chapter 1 of [*Think Python*, 3rd edition](https://greenteapress.com/wp/think-python-3rd-edition), by Allen B. Downey.\n", + "Este es el Jupyter notebook del capítulo 1 de [*Think Python*, 3.ª edición](https://greenteapress.com/wp/think-python-3rd-edition), de Allen B. Downey.\n", "\n", - "If you are not familiar with Jupyter notebooks,\n", - "[click here for a short introduction](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/jupyter_intro.ipynb).\n", + "Si no conoces los Jupyter notebooks,\n", + "[haz clic aquí para ver una breve introducción](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/jupyter_intro.ipynb).\n", "\n", - "Then, if you are not already running this notebook on Colab, [click here to run this notebook on Colab](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/chap01.ipynb)." + "Luego, si aún no estás ejecutando este notebook en Colab, [haz clic aquí para ejecutar este notebook en Colab](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/chap01.ipynb)." ] }, { @@ -34,9 +34,9 @@ "tags": [] }, "source": [ - "The following cell downloads a file and runs some code that is used specifically for this book.\n", - "You don't have to understand this code yet, but you should run it before you do anything else in this notebook.\n", - "Remember that you can run the code by selecting the cell and pressing the play button (a triangle in a circle) or hold down `Shift` and press `Enter`." + "La siguiente celda descarga un archivo y ejecuta algo de código que se usa específicamente para este libro.\n", + "Todavía no tienes que entender este código, pero deberías ejecutarlo antes de hacer cualquier otra cosa en este notebook.\n", + "Recuerda que puedes ejecutar el código seleccionando la celda y pulsando el botón de reproducción (un triángulo dentro de un círculo) o manteniendo pulsada la tecla `Shift` y presionando `Enter`." ] }, { @@ -71,21 +71,21 @@ "tags": [] }, "source": [ - "# Programming as a way of thinking\n", + "# Programar como una forma de pensar\n", "\n", - "The first goal of this book is to teach you how to program in Python.\n", - "But learning to program means learning a new way to think, so the second goal of this book is to help you think like a computer scientist.\n", - "This way of thinking combines some of the best features of mathematics, engineering, and natural science.\n", - "Like mathematicians, computer scientists use formal languages to denote ideas -- specifically computations.\n", - "Like engineers, they design things, assembling components into systems and evaluating trade-offs among alternatives.\n", - "Like scientists, they observe the behavior of complex systems, form hypotheses, and test predictions.\n", + "El primer objetivo de este libro es enseñarte a programar en Python.\n", + "Pero aprender a programar implica aprender una nueva forma de pensar, así que el segundo objetivo de este libro es ayudarte a pensar como un científico de la computación.\n", + "Esta forma de pensar combina algunas de las mejores características de las matemáticas, la ingeniería y las ciencias naturales.\n", + "Como los matemáticos, los científicos de la computación usan lenguajes formales para expresar ideas -- específicamente, cómputos.\n", + "Como los ingenieros, diseñan cosas, ensamblan componentes en sistemas y evalúan las ventajas y desventajas de distintas alternativas.\n", + "Como los científicos, observan el comportamiento de sistemas complejos, formulan hipótesis y prueban predicciones.\n", "\n", - "We will start with the most basic elements of programming and work our way up.\n", - "In this chapter, we'll see how Python represents numbers, letters, and words.\n", - "And you'll learn to perform arithmetic operations.\n", + "Empezaremos con los elementos más básicos de la programación y avanzaremos poco a poco.\n", + "En este capítulo veremos cómo Python representa números, letras y palabras.\n", + "Y aprenderás a realizar operaciones aritméticas.\n", "\n", - "You will also start to learn the vocabulary of programming, including terms like operator, expression, value, and type.\n", - "This vocabulary is important -- you will need it to understand the rest of the book, to communicate with other programmers, and to use and understand virtual assistants." + "También empezarás a aprender el vocabulario de la programación, incluyendo términos como operador, expresión, valor y tipo.\n", + "Este vocabulario es importante -- lo necesitarás para entender el resto del libro, comunicarte con otros programadores y usar y entender asistentes virtuales." ] }, { @@ -93,9 +93,9 @@ "id": "a371aea3", "metadata": {}, "source": [ - "## Arithmetic operators\n", + "## Operadores aritméticos\n", "\n", - "An **arithmetic operator** is a symbol that represents an arithmetic computation. For example, the plus sign, `+`, performs addition." + "Un **operador aritmético** es un símbolo que representa un cálculo aritmético. Por ejemplo, el signo más, `+`, realiza una suma." ] }, { @@ -113,7 +113,7 @@ "id": "fc0e7ce8", "metadata": {}, "source": [ - "The minus sign, `-`, is the operator that performs subtraction." + "El signo menos, `-`, es el operador que realiza una resta." ] }, { @@ -131,7 +131,7 @@ "id": "63e4e780", "metadata": {}, "source": [ - "The asterisk, `*`, performs multiplication." + "El asterisco, `*`, realiza una multiplicación." ] }, { @@ -149,7 +149,7 @@ "id": "a6192d13", "metadata": {}, "source": [ - "And the forward slash, `/`, performs division:" + "Y la barra inclinada, `/`, realiza una división:" ] }, { @@ -167,16 +167,16 @@ "id": "641ad233", "metadata": {}, "source": [ - "Notice that the result of the division is `42.0` rather than `42`. That's because there are two types of numbers in Python: \n", + "Observa que el resultado de la división es `42.0` en lugar de `42`. Eso se debe a que hay dos tipos de números en Python: \n", "\n", - "* **integers**, which represent numbers with no fractional or decimal part, and \n", + "* **enteros**, que representan números sin parte fraccionaria o decimal, y \n", "\n", - "* **floating-point numbers**, which represent integers and numbers with a decimal point.\n", + "* **números de coma flotante**, que representan enteros y números con punto decimal.\n", "\n", - "If you add, subtract, or multiply two integers, the result is an integer.\n", - "But if you divide two integers, the result is a floating-point number.\n", - "Python provides another operator, `//`, that performs **integer division**.\n", - "The result of integer division is always an integer." + "Si sumas, restas o multiplicas dos enteros, el resultado es un entero.\n", + "Pero si divides dos enteros, el resultado es un número de coma flotante.\n", + "Python proporciona otro operador, `//`, que realiza **división entera**.\n", + "El resultado de la división entera siempre es un entero." ] }, { @@ -194,7 +194,7 @@ "id": "b2a620ab", "metadata": {}, "source": [ - "Integer division is also called \"floor division\" because it always rounds down (toward the \"floor\"). " + "La división entera también se llama \"división de piso\" porque siempre redondea hacia abajo (hacia el \"piso\"). " ] }, { @@ -212,8 +212,7 @@ "id": "41e2886a", "metadata": {}, "source": [ - "Finally, the operator `**` performs exponentiation; that is, it raises a\n", - "number to a power:" + "Por último, el operador `**` realiza exponenciación; es decir, eleva un número a una potencia:" ] }, { @@ -231,9 +230,8 @@ "id": "b2502fb6", "metadata": {}, "source": [ - "In some other languages, the caret, `^`, is used for exponentiation, but in Python\n", - "it is a bitwise operator called XOR.\n", - "If you are not familiar with bitwise operators, the result might be unexpected:" + "En algunos otros lenguajes, el acento circunflejo, `^`, se usa para la exponenciación, pero en Python es un operador bit a bit llamado XOR.\n", + "Si no conoces los operadores bit a bit, el resultado puede ser inesperado:" ] }, { @@ -251,8 +249,7 @@ "id": "30078370", "metadata": {}, "source": [ - "I won't cover bitwise operators in this book, but you can read about\n", - "them at ." + "No cubriré los operadores bit a bit en este libro, pero puedes leer sobre ellos en ." ] }, { @@ -260,11 +257,11 @@ "id": "0f5b7e97", "metadata": {}, "source": [ - "## Expressions\n", + "## Expresiones\n", "\n", - "A collection of operators and numbers is called an **expression**.\n", - "An expression can contain any number of operators and numbers.\n", - "For example, here's an expression that contains two operators." + "Un conjunto de operadores y números se llama una **expresión**.\n", + "Una expresión puede contener cualquier cantidad de operadores y números.\n", + "Por ejemplo, aquí hay una expresión que contiene dos operadores." ] }, { @@ -282,10 +279,10 @@ "id": "8e95039c", "metadata": {}, "source": [ - "Notice that exponentiation happens before addition.\n", - "Python follows the order of operations you might have learned in a math class: exponentiation happens before multiplication and division, which happen before addition and subtraction.\n", + "Observa que la exponenciación ocurre antes que la suma.\n", + "Python sigue el orden de operaciones que quizá aprendiste en clase de matemáticas: la exponenciación ocurre antes que la multiplicación y la división, que ocurren antes que la suma y la resta.\n", "\n", - "In the following example, multiplication happens before addition." + "En el siguiente ejemplo, la multiplicación ocurre antes que la suma." ] }, { @@ -303,7 +300,7 @@ "id": "914a60d8", "metadata": {}, "source": [ - "If you want the addition to happen first, you can use parentheses." + "Si quieres que la suma ocurra primero, puedes usar paréntesis." ] }, { @@ -321,8 +318,8 @@ "id": "67ae0ae9", "metadata": {}, "source": [ - "Every expression has a **value**.\n", - "For example, the expression `6 * 7` has the value `42`." + "Toda expresión tiene un **valor**.\n", + "Por ejemplo, la expresión `6 * 7` tiene el valor `42`." ] }, { @@ -330,10 +327,10 @@ "id": "caebaa51", "metadata": {}, "source": [ - "## Arithmetic functions\n", + "## Funciones aritméticas\n", "\n", - "In addition to the arithmetic operators, Python provides a few **functions** that work with numbers.\n", - "For example, the `round` function takes a floating-point number and rounds it off to the nearest integer." + "Además de los operadores aritméticos, Python proporciona algunas **funciones** que trabajan con números.\n", + "Por ejemplo, la función `round` toma un número de coma flotante y lo redondea al entero más cercano." ] }, { @@ -361,8 +358,8 @@ "id": "f5738b4b", "metadata": {}, "source": [ - "The `abs` function computes the absolute value of a number.\n", - "For a positive number, the absolute value is the number itself." + "La función `abs` calcula el valor absoluto de un número.\n", + "Para un número positivo, el valor absoluto es el propio número." ] }, { @@ -380,7 +377,7 @@ "id": "e518494a", "metadata": {}, "source": [ - "For a negative number, the absolute value is positive." + "Para un número negativo, el valor absoluto es positivo." ] }, { @@ -398,11 +395,11 @@ "id": "6969ce45", "metadata": {}, "source": [ - "When we use a function like this, we say we're **calling** the function.\n", - "An expression that calls a function is a **function call**.\n", + "Cuando usamos una función como esta, decimos que estamos **llamando** a la función.\n", + "Una expresión que llama a una función es una **llamada a función**.\n", "\n", - "When you call a function, the parentheses are required.\n", - "If you leave them out, you get an error message." + "Cuando llamas a una función, los paréntesis son obligatorios.\n", + "Si los omites, obtienes un mensaje de error." ] }, { @@ -412,8 +409,8 @@ "tags": [] }, "source": [ - "NOTE: The following cell uses `%%expect`, which is a Jupyter \"magic command\" that means we expect the code in this cell to produce an error. For more on this topic, see the\n", - "[Jupyter notebook introduction](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/jupyter_intro.ipynb)." + "NOTA: La siguiente celda usa `%%expect`, que es un \"magic command\" de Jupyter que significa que esperamos que el código de esta celda produzca un error. Para más información sobre este tema, consulta la\n", + "[introducción a Jupyter notebook](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/jupyter_intro.ipynb)." ] }, { @@ -435,13 +432,13 @@ "id": "7d356f1b", "metadata": {}, "source": [ - "You can ignore the first line of this message; it doesn't contain any information we need to understand right now.\n", - "The second line is the code that contains the error, with a caret (`^`) beneath it to indicate where the error was discovered.\n", + "Puedes ignorar la primera línea de este mensaje; no contiene ninguna información que necesitemos entender ahora mismo.\n", + "La segunda línea es el código que contiene el error, con un acento circunflejo (`^`) debajo para indicar dónde se descubrió el error.\n", "\n", - "The last line indicates that this is a **syntax error**, which means that there is something wrong with the structure of the expression.\n", - "In this example, the problem is that a function call requires parentheses.\n", + "La última línea indica que se trata de un **error de sintaxis**, lo que significa que hay algo incorrecto en la estructura de la expresión.\n", + "En este ejemplo, el problema es que una llamada a función requiere paréntesis.\n", "\n", - "Let's see what happens if you leave out the parentheses *and* the value." + "Veamos qué ocurre si omites los paréntesis *y* el valor." ] }, { @@ -459,8 +456,8 @@ "id": "94478885", "metadata": {}, "source": [ - "A function name all by itself is a legal expression that has a value.\n", - "When it's displayed, the value indicates that `abs` is a function, and it includes some additional information I'll explain later." + "Un nombre de función por sí solo es una expresión válida que tiene un valor.\n", + "Cuando se muestra, el valor indica que `abs` es una función e incluye información adicional que explicaré más adelante." ] }, { @@ -470,8 +467,8 @@ "source": [ "## Strings\n", "\n", - "In addition to numbers, Python can also represent sequences of letters, which are called **strings** because the letters are strung together like beads on a necklace.\n", - "To write a string, we can put a sequence of letters inside straight quotation marks." + "Además de números, Python también puede representar secuencias de letras, que se llaman **strings** porque las letras están ensartadas como cuentas en un collar.\n", + "Para escribir un string, podemos poner una secuencia de letras entre comillas rectas." ] }, { @@ -489,7 +486,7 @@ "id": "d20050d8", "metadata": {}, "source": [ - "It is also legal to use double quotation marks." + "También es válido usar comillas dobles." ] }, { @@ -507,7 +504,7 @@ "id": "76f5edb7", "metadata": {}, "source": [ - "Double quotes make it easy to write a string that contains an apostrophe, which is the same symbol as a straight quote." + "Las comillas dobles facilitan escribir un string que contiene un apóstrofo, que es el mismo símbolo que una comilla recta." ] }, { @@ -525,7 +522,7 @@ "id": "d62d4b1c", "metadata": {}, "source": [ - "Strings can also contain spaces, punctuation, and digits." + "Los strings también pueden contener espacios, signos de puntuación y dígitos." ] }, { @@ -543,7 +540,7 @@ "id": "9ad47f7a", "metadata": {}, "source": [ - "The `+` operator works with strings; it joins two strings into a single string, which is called **concatenation**" + "El operador `+` funciona con strings; une dos strings en un solo string, lo que se llama **concatenación**" ] }, { @@ -561,7 +558,7 @@ "id": "0ad969a3", "metadata": {}, "source": [ - "The `*` operator also works with strings; it makes multiple copies of a string and concatenates them." + "El operador `*` también funciona con strings; hace varias copias de un string y las concatena." ] }, { @@ -579,9 +576,9 @@ "id": "dfba16a5", "metadata": {}, "source": [ - "The other arithmetic operators don't work with strings.\n", + "Los otros operadores aritméticos no funcionan con strings.\n", "\n", - "Python provides a function called `len` that computes the length of a string." + "Python proporciona una función llamada `len` que calcula la longitud de un string." ] }, { @@ -599,10 +596,10 @@ "id": "d91e00b3", "metadata": {}, "source": [ - "Notice that `len` counts the letters between the quotes, but not the quotes.\n", + "Observa que `len` cuenta las letras entre las comillas, pero no las comillas.\n", "\n", - "When you create a string, be sure to use straight quotes.\n", - "The back quote, also known as a backtick, causes a syntax error." + "Cuando crees un string, asegúrate de usar comillas rectas.\n", + "La comilla invertida, también conocida como backtick, causa un error de sintaxis." ] }, { @@ -624,7 +621,7 @@ "id": "40d893d1", "metadata": {}, "source": [ - "Smart quotes, also known as curly quotes, are also illegal." + "Las comillas tipográficas, también conocidas como comillas curvas, tampoco son válidas." ] }, { @@ -646,21 +643,21 @@ "id": "5471d4f8", "metadata": {}, "source": [ - "## Values and types\n", + "## Valores y tipos\n", "\n", - "So far we've seen three kinds of values:\n", + "Hasta ahora hemos visto tres clases de valores:\n", "\n", - "* `2` is an integer,\n", + "* `2` es un entero,\n", "\n", - "* `42.0` is a floating-point number, and \n", + "* `42.0` es un número de coma flotante, y \n", "\n", - "* `'Hello'` is a string.\n", + "* `'Hello'` es un string.\n", "\n", - "A kind of value is called a **type**.\n", - "Every value has a type -- or we sometimes say it \"belongs to\" a type.\n", + "Una clase de valor se llama **tipo**.\n", + "Todo valor tiene un tipo -- o a veces decimos que \"pertenece a\" un tipo.\n", "\n", - "Python provides a function called `type` that tells you the type of any value.\n", - "The type of an integer is `int`." + "Python proporciona una función llamada `type` que te dice el tipo de cualquier valor.\n", + "El tipo de un entero es `int`." ] }, { @@ -678,7 +675,7 @@ "id": "b137814c", "metadata": {}, "source": [ - "The type of a floating-point number is `float`." + "El tipo de un número de coma flotante es `float`." ] }, { @@ -696,7 +693,7 @@ "id": "266dea4e", "metadata": {}, "source": [ - "And the type of a string is `str`." + "Y el tipo de un string es `str`." ] }, { @@ -714,8 +711,8 @@ "id": "76d216ed", "metadata": {}, "source": [ - "The types `int`, `float`, and `str` can be used as functions.\n", - "For example, `int` can take a floating-point number and convert it to an integer (always rounding down)." + "Los tipos `int`, `float` y `str` se pueden usar como funciones.\n", + "Por ejemplo, `int` puede tomar un número de coma flotante y convertirlo en un entero (siempre redondeando hacia abajo)." ] }, { @@ -733,7 +730,7 @@ "id": "dcd8d114", "metadata": {}, "source": [ - "And `float` can convert an integer to a floating-point value." + "Y `float` puede convertir un entero en un valor de punto flotante." ] }, { @@ -751,8 +748,8 @@ "id": "eda70b61", "metadata": {}, "source": [ - "Now, here's something that can be confusing.\n", - "What do you get if you put a sequence of digits in quotes?" + "Ahora, aquí hay algo que puede ser confuso.\n", + "¿Qué obtienes si pones una secuencia de dígitos entre comillas?" ] }, { @@ -770,7 +767,7 @@ "id": "fdded653", "metadata": {}, "source": [ - "It looks like a number, but it is actually a string." + "Parece un número, pero en realidad es un string." ] }, { @@ -788,7 +785,7 @@ "id": "2683ac35", "metadata": {}, "source": [ - "If you try to use it like a number, you might get an error." + "Si intentas usarlo como un número, puede que obtengas un error." ] }, { @@ -810,10 +807,10 @@ "id": "32c11cc4", "metadata": {}, "source": [ - "This example generates a `TypeError`, which means that the values in the expression, which are called **operands**, have the wrong type.\n", - "The error message indicates that the `/` operator does not support the types of these values, which are `str` and `int`.\n", + "Este ejemplo genera un `TypeError`, lo que significa que los valores de la expresión, que se llaman **operandos**, tienen el tipo incorrecto.\n", + "El mensaje de error indica que el operador `/` no admite los tipos de estos valores, que son `str` e `int`.\n", "\n", - "If you have a string that contains digits, you can use `int` to convert it to an integer." + "Si tienes un string que contiene dígitos, puedes usar `int` para convertirlo en un entero." ] }, { @@ -831,7 +828,7 @@ "id": "86935d56", "metadata": {}, "source": [ - "If you have a string that contains digits and a decimal point, you can use `float` to convert it to a floating-point number." + "Si tienes un string que contiene dígitos y un punto decimal, puedes usar `float` para convertirlo en un número de coma flotante." ] }, { @@ -849,9 +846,8 @@ "id": "03103ef4", "metadata": {}, "source": [ - "When you write a large integer, you might be tempted to use commas\n", - "between groups of digits, as in `1,000,000`.\n", - "This is a legal expression in Python, but the result is not an integer." + "Cuando escribes un entero grande, puede que te sientas tentado a usar comas entre grupos de dígitos, como en `1,000,000`.\n", + "Esta es una expresión válida en Python, pero el resultado no es un entero." ] }, { @@ -869,10 +865,10 @@ "id": "3d24af71", "metadata": {}, "source": [ - "Python interprets `1,000,000` as a comma-separated sequence of integers.\n", - "We'll learn more about this kind of sequence later.\n", + "Python interpreta `1,000,000` como una secuencia de enteros separados por comas.\n", + "Aprenderemos más sobre este tipo de secuencia más adelante.\n", "\n", - "You can use underscores to make large numbers easier to read." + "Puedes usar guiones bajos para que los números grandes sean más fáciles de leer." ] }, { @@ -890,13 +886,13 @@ "id": "1761cbac", "metadata": {}, "source": [ - "## Formal and natural languages\n", + "## Lenguajes formales y naturales\n", "\n", - "**Natural languages** are the languages people speak, like English, Spanish, and French. They were not designed by people; they evolved naturally.\n", + "Los **lenguajes naturales** son los idiomas que hablan las personas, como inglés, español y francés. No fueron diseñados por personas; evolucionaron de forma natural.\n", "\n", - "**Formal languages** are languages that are designed by people for specific applications. \n", - "For example, the notation that mathematicians use is a formal language that is particularly good at denoting relationships among numbers and symbols.\n", - "Similarly, programming languages are formal languages that have been designed to express computations." + "Los **lenguajes formales** son lenguajes diseñados por personas para aplicaciones específicas. \n", + "Por ejemplo, la notación que usan los matemáticos es un lenguaje formal especialmente bueno para representar relaciones entre números y símbolos.\n", + "De forma similar, los lenguajes de programación son lenguajes formales diseñados para expresar cómputos." ] }, { @@ -904,19 +900,13 @@ "id": "1bf3d2dc", "metadata": {}, "source": [ - "Although formal and natural languages have some features in\n", - "common there are important differences:\n", + "Aunque los lenguajes formales y naturales tienen algunas características en común, hay diferencias importantes:\n", "\n", - "* Ambiguity: Natural languages are full of ambiguity, which people deal with by\n", - " using contextual clues and other information. Formal languages are\n", - " designed to be nearly or completely unambiguous, which means that\n", - " any program has exactly one meaning, regardless of context.\n", + "* Ambigüedad: Los lenguajes naturales están llenos de ambigüedad, que las personas manejan usando pistas contextuales y otra información. Los lenguajes formales están diseñados para ser casi o completamente no ambiguos, lo que significa que cualquier programa tiene exactamente un significado, independientemente del contexto.\n", "\n", - "* Redundancy: In order to make up for ambiguity and reduce misunderstandings,\n", - " natural languages use redundancy. As a result, they are\n", - " often verbose. Formal languages are less redundant and more concise.\n", + "* Redundancia: Para compensar la ambigüedad y reducir malentendidos, los lenguajes naturales usan redundancia. Como resultado, a menudo son verbosos. Los lenguajes formales son menos redundantes y más concisos.\n", "\n", - "* Literalness: Natural languages are full of idiom and metaphor. Formal languages mean exactly what they say." + "* Literalidad: Los lenguajes naturales están llenos de modismos y metáforas. Los lenguajes formales significan exactamente lo que dicen." ] }, { @@ -924,12 +914,10 @@ "id": "78a1cec8", "metadata": {}, "source": [ - "Because we all grow up speaking natural languages, it is sometimes hard to adjust to formal languages.\n", - "Formal languages are more dense than natural languages, so it takes longer to read them.\n", - "Also, the structure is important, so it is not always best to read from top to bottom, left to right.\n", - "Finally, the details matter. Small errors in spelling and\n", - "punctuation, which you can get away with in natural languages, can make\n", - "a big difference in a formal language." + "Como todos crecemos hablando lenguajes naturales, a veces cuesta adaptarse a los lenguajes formales.\n", + "Los lenguajes formales son más densos que los lenguajes naturales, así que lleva más tiempo leerlos.\n", + "Además, la estructura es importante, por lo que no siempre es mejor leer de arriba abajo, de izquierda a derecha.\n", + "Por último, los detalles importan. Pequeños errores de ortografía y puntuación, que puedes tolerar en los lenguajes naturales, pueden marcar una gran diferencia en un lenguaje formal." ] }, { @@ -939,15 +927,15 @@ "source": [ "## Debugging\n", "\n", - "Programmers make mistakes. For whimsical reasons, programming errors are called **bugs** and the process of tracking them down is called **debugging**.\n", + "Los programadores cometen errores. Por razones caprichosas, los errores de programación se llaman **bugs** y el proceso de encontrarlos se llama **debugging**.\n", "\n", - "Programming, and especially debugging, sometimes brings out strong emotions. If you are struggling with a difficult bug, you might feel angry, sad, or embarrassed.\n", + "Programar, y especialmente debugging, a veces provoca emociones intensas. Si estás luchando con un bug difícil, puede que sientas enfado, tristeza o vergüenza.\n", "\n", - "Preparing for these reactions might help you deal with them. One approach is to think of the computer as an employee with certain strengths, like speed and precision, and particular weaknesses, like lack of empathy and inability to grasp the big picture.\n", + "Prepararte para estas reacciones puede ayudarte a manejarlas. Un enfoque es pensar en la computadora como un empleado con ciertas fortalezas, como velocidad y precisión, y debilidades particulares, como falta de empatía e incapacidad para captar el panorama general.\n", "\n", - "Your job is to be a good manager: find ways to take advantage of the strengths and mitigate the weaknesses. And find ways to use your emotions to engage with the problem, without letting your reactions interfere with your ability to work effectively.\n", + "Tu trabajo es ser un buen gerente: encontrar formas de aprovechar las fortalezas y mitigar las debilidades. Y encontrar formas de usar tus emociones para involucrarte con el problema, sin dejar que tus reacciones interfieran con tu capacidad de trabajar eficazmente.\n", "\n", - "Learning to debug can be frustrating, but it is a valuable skill that is useful for many activities beyond programming. At the end of each chapter there is a section, like this one, with my suggestions for debugging. I hope they help!" + "Aprender a debug puede ser frustrante, pero es una habilidad valiosa que resulta útil para muchas actividades más allá de la programación. Al final de cada capítulo hay una sección, como esta, con mis sugerencias para debugging. ¡Espero que te ayuden!" ] }, { @@ -955,62 +943,62 @@ "id": "33b8ad00", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**arithmetic operator:**\n", - "A symbol, like `+` and `*`, that denotes an arithmetic operation like addition or multiplication.\n", + "**operador aritmético:**\n", + "Un símbolo, como `+` y `*`, que denota una operación aritmética como suma o multiplicación.\n", "\n", - "**integer:**\n", - "A type that represents numbers with no fractional or decimal part.\n", + "**entero:**\n", + "Un tipo que representa números sin parte fraccionaria o decimal.\n", "\n", - "**floating-point:**\n", - "A type that represents integers and numbers with decimal parts.\n", + "**número de coma flotante:**\n", + "Un tipo que representa enteros y números con partes decimales.\n", "\n", - "**integer division:**\n", - "An operator, `//`, that divides two numbers and rounds down to an integer.\n", + "**división entera:**\n", + "Un operador, `//`, que divide dos números y redondea hacia abajo a un entero.\n", "\n", - "**expression:**\n", - "A combination of variables, values, and operators.\n", + "**expresión:**\n", + "Una combinación de variables, valores y operadores.\n", "\n", - "**value:**\n", - "An integer, floating-point number, or string -- or one of other kinds of values we will see later.\n", + "**valor:**\n", + "Un entero, número de coma flotante o string -- u otro de los tipos de valores que veremos más adelante.\n", "\n", - "**function:**\n", - "A named sequence of statements that performs some useful operation.\n", - "Functions may or may not take arguments and may or may not produce a result.\n", + "**función:**\n", + "Una secuencia con nombre de sentencias que realiza alguna operación útil.\n", + "Las funciones pueden tomar argumentos o no, y pueden producir un resultado o no.\n", "\n", - "**function call:**\n", - "An expression -- or part of an expression -- that runs a function.\n", - "It consists of the function name followed by an argument list in parentheses.\n", + "**llamada a función:**\n", + "Una expresión -- o parte de una expresión -- que ejecuta una función.\n", + "Consiste en el nombre de la función seguido de una lista de argumentos entre paréntesis.\n", "\n", - "**syntax error:**\n", - "An error in a program that makes it impossible to parse -- and therefore impossible to run.\n", + "**error de sintaxis:**\n", + "Un error en un programa que hace imposible analizarlo -- y por lo tanto imposible ejecutarlo.\n", "\n", "**string:**\n", - " A type that represents sequences of characters.\n", + " Un tipo que representa secuencias de caracteres.\n", "\n", - "**concatenation:**\n", - "Joining two strings end-to-end.\n", + "**concatenación:**\n", + "Unir dos strings extremo con extremo.\n", "\n", - "**type:**\n", - "A category of values.\n", - "The types we have seen so far are integers (type `int`), floating-point numbers (type ` float`), and strings (type `str`).\n", + "**tipo:**\n", + "Una categoría de valores.\n", + "Los tipos que hemos visto hasta ahora son enteros (tipo `int`), números de coma flotante (tipo ` float`) y strings (tipo `str`).\n", "\n", - "**operand:**\n", - "One of the values on which an operator operates.\n", + "**operando:**\n", + "Uno de los valores sobre los que opera un operador.\n", "\n", - "**natural language:**\n", - "Any of the languages that people speak that evolved naturally.\n", + "**lenguaje natural:**\n", + "Cualquiera de los idiomas que hablan las personas y que evolucionaron de forma natural.\n", "\n", - "**formal language:**\n", - "Any of the languages that people have designed for specific purposes, such as representing mathematical ideas or computer programs.\n", - "All programming languages are formal languages.\n", + "**lenguaje formal:**\n", + "Cualquiera de los lenguajes que las personas han diseñado para propósitos específicos, como representar ideas matemáticas o programas de computadora.\n", + "Todos los lenguajes de programación son lenguajes formales.\n", "\n", "**bug:**\n", - "An error in a program.\n", + "Un error en un programa.\n", "\n", "**debugging:**\n", - "The process of finding and correcting errors." + "El proceso de encontrar y corregir errores." ] }, { @@ -1018,7 +1006,7 @@ "id": "ed4ec01b", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1041,15 +1029,15 @@ "id": "23adf208", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregúntale a un asistente virtual\n", "\n", - "As you work through this book, there are several ways you can use a virtual assistant or chatbot to help you learn.\n", + "A medida que avances en este libro, hay varias formas en las que puedes usar un asistente virtual o chatbot para ayudarte a aprender.\n", "\n", - "* If you want to learn more about a topic in the chapter, or anything is unclear, you can ask for an explanation.\n", + "* Si quieres aprender más sobre un tema del capítulo, o algo no está claro, puedes pedir una explicación.\n", "\n", - "* If you are having a hard time with any of the exercises, you can ask for help.\n", + "* Si tienes dificultades con alguno de los ejercicios, puedes pedir ayuda.\n", "\n", - "In each chapter, I'll suggest exercises you can do with a virtual assistant, but I encourage you to try things on your own and see what works for you." + "En cada capítulo sugeriré ejercicios que puedes hacer con un asistente virtual, pero te animo a probar cosas por tu cuenta y ver qué te funciona." ] }, { @@ -1057,15 +1045,15 @@ "id": "ebf1a451", "metadata": {}, "source": [ - "Here are some topics you could ask a virtual assistant about:\n", + "Aquí tienes algunos temas sobre los que podrías preguntar a un asistente virtual:\n", "\n", - "* Earlier I mentioned bitwise operators but I didn't explain why the value of `7 ^ 2` is 5. Try asking \"What are the bitwise operators in Python?\" or \"What is the value of `7 XOR 2`?\"\n", + "* Antes mencioné los operadores bit a bit, pero no expliqué por qué el valor de `7 ^ 2` es 5. Prueba a preguntar \"¿Cuáles son los operadores bit a bit en Python?\" o \"¿Cuál es el valor de `7 XOR 2`?\"\n", "\n", - "* I also mentioned the order of operations. For more details, ask \"What is the order of operations in Python?\"\n", + "* También mencioné el orden de operaciones. Para más detalles, pregunta \"¿Cuál es el orden de las operaciones en Python?\"\n", "\n", - "* The `round` function, which we used to round a floating-point number to the nearest integer, can take a second argument. Try asking \"What are the arguments of the round function?\" or \"How do I round pi off to three decimal places?\"\n", + "* La función `round`, que usamos para redondear un número de coma flotante al entero más cercano, puede tomar un segundo argumento. Prueba a preguntar \"¿Cuáles son los argumentos de la función round?\" o \"¿Cómo redondeo pi a tres decimales?\"\n", "\n", - "* There's one more arithmetic operator I didn't mention; try asking \"What is the modulus operator in Python?\"" + "* Hay un operador aritmético más que no mencioné; prueba a preguntar \"¿Qué es el operador módulo en Python?\"" ] }, { @@ -1073,9 +1061,9 @@ "id": "9be3e1c7", "metadata": {}, "source": [ - "Most virtual assistants know about Python, so they answer questions like this pretty reliably.\n", - "But remember that these tools make mistakes.\n", - "If you get code from a chatbot, test it!" + "La mayoría de los asistentes virtuales saben sobre Python, así que responden preguntas como estas de forma bastante fiable.\n", + "Pero recuerda que estas herramientas cometen errores.\n", + "Si obtienes código de un chatbot, ¡pruébalo!" ] }, { @@ -1083,11 +1071,11 @@ "id": "03c1ef93", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "You might wonder what `round` does if a number ends in `0.5`.\n", - "The answer is that it sometimes rounds up and sometimes rounds down.\n", - "Try these examples and see if you can figure out what rule it follows." + "Quizá te preguntes qué hace `round` si un número termina en `0.5`.\n", + "La respuesta es que a veces redondea hacia arriba y a veces hacia abajo.\n", + "Prueba estos ejemplos y mira si puedes averiguar qué regla sigue." ] }, { @@ -1115,7 +1103,7 @@ "id": "dd2f890e", "metadata": {}, "source": [ - "If you are curious, ask a virtual assistant, \"If a number ends in 0.5, does Python round up or down?\"" + "Si tienes curiosidad, pregunta a un asistente virtual: \"Si un número termina en 0.5, ¿Python redondea hacia arriba o hacia abajo?\"" ] }, { @@ -1123,17 +1111,17 @@ "id": "2cd03bcb", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "When you learn about a new feature, you should try it out and make mistakes on purpose.\n", - "That way, you learn the error messages, and when you see them again, you will know what they mean.\n", - "It is better to make mistakes now and deliberately than later and accidentally.\n", + "Cuando aprendes una característica nueva, deberías probarla y cometer errores a propósito.\n", + "Así aprendes los mensajes de error y, cuando los vuelvas a ver, sabrás qué significan.\n", + "Es mejor cometer errores ahora y deliberadamente que más tarde y accidentalmente.\n", "\n", - "1. You can use a minus sign to make a negative number like `-2`. What happens if you put a plus sign before a number? What about `2++2`?\n", + "1. Puedes usar un signo menos para crear un número negativo como `-2`. ¿Qué ocurre si pones un signo más delante de un número? ¿Y con `2++2`?\n", "\n", - "2. What happens if you have two values with no operator between them, like `4 2`?\n", + "2. ¿Qué ocurre si tienes dos valores sin operador entre ellos, como `4 2`?\n", "\n", - "3. If you call a function like `round(42.5)`, what happens if you leave out one or both parentheses?" + "3. Si llamas a una función como `round(42.5)`, ¿qué ocurre si omites uno o ambos paréntesis?" ] }, { @@ -1141,11 +1129,11 @@ "id": "1fb0adfe", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Recall that every expression has a value, every value has a type, and we can use the `type` function to find the type of any value.\n", + "Recuerda que toda expresión tiene un valor, todo valor tiene un tipo, y podemos usar la función `type` para encontrar el tipo de cualquier valor.\n", "\n", - "What is the type of the value of the following expressions? Make your best guess for each one, and then use `type` to find out.\n", + "¿Cuál es el tipo del valor de las siguientes expresiones? Haz tu mejor conjetura para cada una y luego usa `type` para averiguarlo.\n", "\n", "* `765`\n", "\n", @@ -1169,22 +1157,22 @@ "id": "23762eec", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The following questions give you a chance to practice writing arithmetic expressions.\n", + "Las siguientes preguntas te dan la oportunidad de practicar escribiendo expresiones aritméticas.\n", "\n", - "1. How many seconds are there in 42 minutes 42 seconds?\n", + "1. ¿Cuántos segundos hay en 42 minutos y 42 segundos?\n", "\n", - "2. How many miles are there in 10 kilometers? Hint: there are 1.61 kilometers in a mile.\n", + "2. ¿Cuántas millas hay en 10 kilómetros? Pista: hay 1,61 kilómetros en una milla.\n", "\n", - "3. If you run a 10 kilometer race in 42 minutes 42 seconds, what is your average pace in seconds per mile? \n", + "3. Si corres una carrera de 10 kilómetros en 42 minutos y 42 segundos, ¿cuál es tu ritmo medio en segundos por milla? \n", " \n", - "4. What is your average pace in minutes and seconds per mile?\n", + "4. ¿Cuál es tu ritmo medio en minutos y segundos por milla?\n", "\n", - "5. What is your average speed in miles per hour?\n", + "5. ¿Cuál es tu velocidad media en millas por hora?\n", "\n", - "If you already know about variables, you can use them for this exercise.\n", - "If you don't, you can do the exercise without them -- and then we'll see them in the next chapter." + "Si ya sabes sobre variables, puedes usarlas para este ejercicio.\n", + "Si no, puedes hacer el ejercicio sin ellas -- y luego las veremos en el siguiente capítulo." ] }, { @@ -1272,13 +1260,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/chapters/chap02.ipynb b/chapters/chap02.ipynb index fb2369f..e9882ff 100644 --- a/chapters/chap02.ipynb +++ b/chapters/chap02.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -41,12 +41,12 @@ "id": "d0286422", "metadata": {}, "source": [ - "# Variables and Statements\n", + "# Variables y sentencias\n", "\n", - "In the previous chapter, we used operators to write expressions that perform arithmetic computations.\n", + "En el capítulo anterior usamos operadores para escribir expresiones que realizan cálculos aritméticos.\n", "\n", - "In this chapter, you'll learn about variables and statements, the `import` statement, and the `print` function.\n", - "And I'll introduce more of the vocabulary we use to talk about programs, including \"argument\" and \"module\".\n" + "En este capítulo aprenderás sobre variables y sentencias, la sentencia `import` y la función `print`.\n", + "Y presentaré más vocabulario que usamos para hablar de programas, incluyendo \"argumento\" y \"módulo\".\n" ] }, { @@ -56,8 +56,8 @@ "source": [ "## Variables\n", "\n", - "A **variable** is a name that refers to a value.\n", - "To create a variable, we can write a **assignment statement** like this." + "Una **variable** es un nombre que se refiere a un valor.\n", + "Para crear una variable, podemos escribir una **sentencia de asignación** como esta." ] }, { @@ -75,9 +75,9 @@ "id": "52f187f1", "metadata": {}, "source": [ - "An assignment statement has three parts: the name of the variable on the left, the equals operator, `=`, and an expression on the right.\n", - "In this example, the expression is an integer.\n", - "In the following example, the expression is a floating-point number." + "Una sentencia de asignación tiene tres partes: el nombre de la variable a la izquierda, el operador igual, `=`, y una expresión a la derecha.\n", + "En este ejemplo, la expresión es un entero.\n", + "En el siguiente ejemplo, la expresión es un número de punto flotante." ] }, { @@ -95,7 +95,7 @@ "id": "3e27e65c", "metadata": {}, "source": [ - "And in the following example, the expression is a string." + "Y en el siguiente ejemplo, la expresión es un string." ] }, { @@ -113,10 +113,10 @@ "id": "cb5916ea", "metadata": {}, "source": [ - "When you run an assignment statement, there is no output.\n", - "Python creates the variable and gives it a value, but the assignment statement has no visible effect.\n", - "However, after creating a variable, you can use it as an expression.\n", - "So we can display the value of `message` like this:" + "Cuando ejecutas una sentencia de asignación, no hay salida.\n", + "Python crea la variable y le da un valor, pero la sentencia de asignación no tiene ningún efecto visible.\n", + "Sin embargo, después de crear una variable, puedes usarla como una expresión.\n", + "Así que podemos mostrar el valor de `message` así:" ] }, { @@ -134,7 +134,7 @@ "id": "e3fd81de", "metadata": {}, "source": [ - "You can also use a variable as part of an expression with arithmetic operators." + "También puedes usar una variable como parte de una expresión con operadores aritméticos." ] }, { @@ -162,7 +162,7 @@ "id": "97396e7d", "metadata": {}, "source": [ - "And you can use a variable when you call a function." + "Y puedes usar una variable cuando llamas a una función." ] }, { @@ -190,10 +190,9 @@ "id": "397d9da3", "metadata": {}, "source": [ - "## State diagrams\n", + "## Diagramas de estado\n", "\n", - "A common way to represent variables on paper is to write the name with\n", - "an arrow pointing to its value. " + "Una forma común de representar variables en papel es escribir el nombre con una flecha apuntando a su valor. " ] }, { @@ -239,8 +238,8 @@ "id": "6f40da93", "metadata": {}, "source": [ - "This kind of figure is called a **state diagram** because it shows what state each of the variables is in (think of it as the variable's state of mind).\n", - "We'll use state diagrams throughout the book to represent a model of how Python stores variables and their values." + "Este tipo de figura se llama **diagrama de estado** porque muestra en qué estado está cada una de las variables (piensa en ello como el estado mental de la variable).\n", + "Usaremos diagramas de estado a lo largo del libro para representar un modelo de cómo Python almacena variables y sus valores." ] }, { @@ -248,16 +247,15 @@ "id": "ba252c85", "metadata": {}, "source": [ - "## Variable names\n", + "## Nombres de variables\n", "\n", - "Variable names can be as long as you like. They can contain both letters and numbers, but they can't begin with a number. \n", - "It is legal to use uppercase letters, but it is conventional to use only lower case for\n", - "variable names.\n", + "Los nombres de variables pueden ser tan largos como quieras. Pueden contener letras y números, pero no pueden comenzar con un número. \n", + "Es válido usar letras mayúsculas, pero lo convencional es usar solo minúsculas para los nombres de variables.\n", "\n", - "The only punctuation that can appear in a variable name is the underscore character, `_`. It is often used in names with multiple words, such as `your_name` or `airspeed_of_unladen_swallow`.\n", + "El único signo de puntuación que puede aparecer en un nombre de variable es el carácter de guion bajo, `_`. Se usa a menudo en nombres con varias palabras, como `your_name` o `airspeed_of_unladen_swallow`.\n", "\n", - "If you give a variable an illegal name, you get a syntax error.\n", - "The name `million!` is illegal because it contains punctuation." + "Si le das a una variable un nombre no válido, obtienes un error de sintaxis.\n", + "El nombre `million!` no es válido porque contiene puntuación." ] }, { @@ -279,7 +277,7 @@ "id": "a1cefe3e", "metadata": {}, "source": [ - "`76trombones` is illegal because it starts with a number." + "`76trombones` no es válido porque empieza con un número." ] }, { @@ -301,7 +299,7 @@ "id": "94aa7e60", "metadata": {}, "source": [ - "`class` is also illegal, but it might not be obvious why." + "`class` tampoco es válido, pero puede que no sea obvio por qué." ] }, { @@ -323,10 +321,10 @@ "id": "784cfb5c", "metadata": {}, "source": [ - "It turns out that `class` is a **keyword**, which is a special word used to specify the structure of a program.\n", - "Keywords can't be used as variable names.\n", + "Resulta que `class` es una **palabra clave**, que es una palabra especial usada para especificar la estructura de un programa.\n", + "Las palabras clave no se pueden usar como nombres de variables.\n", "\n", - "Here's a complete list of Python's keywords:" + "Aquí tienes una lista completa de las palabras clave de Python:" ] }, { @@ -364,9 +362,7 @@ "id": "6f14d301", "metadata": {}, "source": [ - "You don't have to memorize this list. In most development environments,\n", - "keywords are displayed in a different color; if you try to use one as a\n", - "variable name, you'll know." + "No tienes que memorizar esta lista. En la mayoría de los entornos de desarrollo, las palabras clave se muestran en un color diferente; si intentas usar una como nombre de variable, lo sabrás." ] }, { @@ -374,10 +370,10 @@ "id": "c954a3b0", "metadata": {}, "source": [ - "## The import statement\n", + "## La sentencia import\n", "\n", - "In order to use some Python features, you have to **import** them.\n", - "For example, the following statement imports the `math` module." + "Para usar algunas características de Python, tienes que **importarlas**.\n", + "Por ejemplo, la siguiente sentencia importa el módulo `math`." ] }, { @@ -395,9 +391,9 @@ "id": "ea4f75ec", "metadata": {}, "source": [ - "A **module** is a collection of variables and functions.\n", - "The math module provides a variable called `pi` that contains the value of the mathematical constant denoted $\\pi$.\n", - "We can display its value like this." + "Un **módulo** es una colección de variables y funciones.\n", + "El módulo math proporciona una variable llamada `pi` que contiene el valor de la constante matemática denotada $\\pi$.\n", + "Podemos mostrar su valor así." ] }, { @@ -415,10 +411,10 @@ "id": "c96106e4", "metadata": {}, "source": [ - "To use a variable in a module, you have to use the **dot operator** (`.`) between the name of the module and the name of the variable.\n", + "Para usar una variable de un módulo, tienes que usar el **operador punto** (`.`) entre el nombre del módulo y el nombre de la variable.\n", "\n", - "The math module also contains functions.\n", - "For example, `sqrt` computes square roots." + "El módulo math también contiene funciones.\n", + "Por ejemplo, `sqrt` calcula raíces cuadradas." ] }, { @@ -436,7 +432,7 @@ "id": "185e94a3", "metadata": {}, "source": [ - "And `pow` raises one number to the power of a second number." + "Y `pow` eleva un número a la potencia de un segundo número." ] }, { @@ -454,8 +450,8 @@ "id": "5df25a9a", "metadata": {}, "source": [ - "At this point we've seen two ways to raise a number to a power: we can use the `math.pow` function or the exponentiation operator, `**`.\n", - "Either one is fine, but the operator is used more often than the function." + "En este punto hemos visto dos formas de elevar un número a una potencia: podemos usar la función `math.pow` o el operador de exponenciación, `**`.\n", + "Cualquiera de las dos está bien, pero el operador se usa más a menudo que la función." ] }, { @@ -463,13 +459,13 @@ "id": "6538f22b", "metadata": {}, "source": [ - "## Expressions and statements\n", + "## Expresiones y sentencias\n", "\n", - "So far, we've seen a few kinds of expressions.\n", - "An expression can be a single value, like an integer, floating-point number, or string.\n", - "It can also be a collection of values and operators.\n", - "And it can include variable names and function calls.\n", - "Here's an expression that includes several of these elements." + "Hasta ahora hemos visto algunos tipos de expresiones.\n", + "Una expresión puede ser un solo valor, como un entero, un número de punto flotante o un string.\n", + "También puede ser una colección de valores y operadores.\n", + "Y puede incluir nombres de variables y llamadas a funciones.\n", + "Aquí hay una expresión que incluye varios de estos elementos." ] }, { @@ -487,9 +483,9 @@ "id": "000dd2ba", "metadata": {}, "source": [ - "We have also seen a few kind of statements.\n", - "A **statement** is a unit of code that has an effect, but no value.\n", - "For example, an assignment statement creates a variable and gives it a value, but the statement itself has no value." + "También hemos visto algunos tipos de sentencias.\n", + "Una **sentencia** es una unidad de código que tiene un efecto, pero no un valor.\n", + "Por ejemplo, una sentencia de asignación crea una variable y le da un valor, pero la sentencia en sí no tiene valor." ] }, { @@ -507,7 +503,7 @@ "id": "cff0414b", "metadata": {}, "source": [ - "Similarly, an import statement has an effect -- it imports a module so we can use the variables and functions it contains -- but it has no visible effect." + "De forma similar, una sentencia import tiene un efecto -- importa un módulo para que podamos usar las variables y funciones que contiene -- pero no tiene efecto visible." ] }, { @@ -525,8 +521,8 @@ "id": "2aeb1000", "metadata": {}, "source": [ - "Computing the value of an expression is called **evaluation**.\n", - "Running a statement is called **execution**." + "Calcular el valor de una expresión se llama **evaluación**.\n", + "Ejecutar una sentencia se llama **ejecución**." ] }, { @@ -534,9 +530,9 @@ "id": "f61601e4", "metadata": {}, "source": [ - "## The print function\n", + "## La función print\n", "\n", - "When you evaluate an expression, the result is displayed." + "Cuando evalúas una expresión, se muestra el resultado." ] }, { @@ -554,7 +550,7 @@ "id": "efacf0fa", "metadata": {}, "source": [ - "But if you evaluate more than one expression, only the value of the last one is displayed." + "Pero si evalúas más de una expresión, solo se muestra el valor de la última." ] }, { @@ -573,7 +569,7 @@ "id": "cf2b991d", "metadata": {}, "source": [ - "To display more than one value, you can use the `print` function." + "Para mostrar más de un valor, puedes usar la función `print`." ] }, { @@ -592,7 +588,7 @@ "id": "29af1f89", "metadata": {}, "source": [ - "It also works with floating-point numbers and strings." + "También funciona con números de punto flotante y strings." ] }, { @@ -611,7 +607,7 @@ "id": "8b4d7f4a", "metadata": {}, "source": [ - "You can also use a sequence of expressions separated by commas." + "También puedes usar una secuencia de expresiones separadas por comas." ] }, { @@ -629,7 +625,7 @@ "id": "af447ec4", "metadata": {}, "source": [ - "Notice that the `print` function puts a space between the values." + "Observa que la función `print` coloca un espacio entre los valores." ] }, { @@ -637,12 +633,12 @@ "id": "7c73a2fa", "metadata": {}, "source": [ - "## Arguments\n", + "## Argumentos\n", "\n", - "When you call a function, the expression in parenthesis is called an **argument**.\n", - "Normally I would explain why, but in this case the technical meaning of a term has almost nothing to do with the common meaning of the word, so I won't even try.\n", + "Cuando llamas a una función, la expresión entre paréntesis se llama un **argumento**.\n", + "Normalmente explicaría por qué, pero en este caso el significado técnico de un término no tiene casi nada que ver con el significado común de la palabra, así que ni siquiera lo intentaré.\n", "\n", - "Some of the functions we've seen so far take only one argument, like `int`." + "Algunas de las funciones que hemos visto hasta ahora toman solo un argumento, como `int`." ] }, { @@ -660,7 +656,7 @@ "id": "c4ad4f2c", "metadata": {}, "source": [ - "Some take two, like `math.pow`." + "Algunas toman dos, como `math.pow`." ] }, { @@ -678,8 +674,8 @@ "id": "17293749", "metadata": {}, "source": [ - "Some can take additional arguments that are optional. \n", - "For example, `int` can take a second argument that specifies the base of the number." + "Algunas pueden tomar argumentos adicionales que son opcionales. \n", + "Por ejemplo, `int` puede tomar un segundo argumento que especifica la base del número." ] }, { @@ -697,9 +693,9 @@ "id": "c95589a1", "metadata": {}, "source": [ - "The sequence of digits `101` in base 2 represents the number 5 in base 10.\n", + "La secuencia de dígitos `101` en base 2 representa el número 5 en base 10.\n", "\n", - "`round` also takes an optional second argument, which is the number of decimal places to round off to." + "`round` también toma un segundo argumento opcional, que es el número de posiciones decimales al que redondear." ] }, { @@ -717,7 +713,7 @@ "id": "21e4a448", "metadata": {}, "source": [ - "Some functions can take any number of arguments, like `print`." + "Algunas funciones pueden tomar cualquier número de argumentos, como `print`." ] }, { @@ -735,7 +731,7 @@ "id": "667cff14", "metadata": {}, "source": [ - "If you call a function and provide too many arguments, that's a `TypeError`." + "Si llamas a una función y proporcionas demasiados argumentos, eso es un `TypeError`." ] }, { @@ -757,7 +753,7 @@ "id": "5103368e", "metadata": {}, "source": [ - "If you provide too few arguments, that's also a `TypeError`." + "Si proporcionas muy pocos argumentos, eso también es un `TypeError`." ] }, { @@ -779,7 +775,7 @@ "id": "5333c416", "metadata": {}, "source": [ - "And if you provide an argument with a type the function can't handle, that's a `TypeError`, too." + "Y si proporcionas un argumento con un tipo que la función no puede manejar, eso también es un `TypeError`." ] }, { @@ -801,7 +797,7 @@ "id": "548828af", "metadata": {}, "source": [ - "This kind of checking can be annoying when you are getting started, but it helps you detect and correct errors." + "Este tipo de comprobación puede ser molesto cuando estás empezando, pero te ayuda a detectar y corregir errores." ] }, { @@ -809,13 +805,13 @@ "id": "be2b6a9b", "metadata": {}, "source": [ - "## Comments\n", + "## Comentarios\n", "\n", - "As programs get bigger and more complicated, they get more difficult to read.\n", - "Formal languages are dense, and it is often difficult to look at a piece of code and figure out what it is doing and why.\n", + "A medida que los programas se hacen más grandes y complicados, se vuelven más difíciles de leer.\n", + "Los lenguajes formales son densos, y a menudo es difícil mirar un fragmento de código y averiguar qué hace y por qué.\n", "\n", - "For this reason, it is a good idea to add notes to your programs to explain in natural language what the program is doing. \n", - "These notes are called **comments**, and they start with the `#` symbol." + "Por esta razón, es buena idea añadir notas a tus programas para explicar en lenguaje natural qué está haciendo el programa. \n", + "Estas notas se llaman **comentarios**, y empiezan con el símbolo `#`." ] }, { @@ -834,8 +830,7 @@ "id": "519c83a9", "metadata": {}, "source": [ - "In this case, the comment appears on a line by itself. You can also put\n", - "comments at the end of a line:" + "En este caso, el comentario aparece en una línea por sí solo. También puedes poner comentarios al final de una línea:" ] }, { @@ -853,13 +848,12 @@ "id": "87c8d10c", "metadata": {}, "source": [ - "Everything from the `#` to the end of the line is ignored---it has no\n", - "effect on the execution of the program.\n", + "Todo desde el `#` hasta el final de la línea se ignora---no tiene efecto en la ejecución del programa.\n", "\n", - "Comments are most useful when they document non-obvious features of the code.\n", - "It is reasonable to assume that the reader can figure out *what* the code does; it is more useful to explain *why*.\n", + "Los comentarios son más útiles cuando documentan características no obvias del código.\n", + "Es razonable suponer que el lector puede averiguar *qué* hace el código; es más útil explicar *por qué*.\n", "\n", - "This comment is redundant with the code and useless:" + "Este comentario es redundante con el código y no sirve:" ] }, { @@ -877,7 +871,7 @@ "id": "eb83b14a", "metadata": {}, "source": [ - "This comment contains useful information that is not in the code:" + "Este comentario contiene información útil que no está en el código:" ] }, { @@ -895,8 +889,7 @@ "id": "6cd60d4f", "metadata": {}, "source": [ - "Good variable names can reduce the need for comments, but long names can\n", - "make complex expressions hard to read, so there is a tradeoff." + "Los buenos nombres de variables pueden reducir la necesidad de comentarios, pero los nombres largos pueden hacer que las expresiones complejas sean difíciles de leer, así que hay una compensación." ] }, { @@ -906,14 +899,14 @@ "source": [ "## Debugging\n", "\n", - "Three kinds of errors can occur in a program: syntax errors, runtime errors, and semantic errors.\n", - "It is useful to distinguish between them in order to track them down more quickly.\n", + "En un programa pueden ocurrir tres tipos de errores: errores de sintaxis, errores en tiempo de ejecución y errores semánticos.\n", + "Es útil distinguirlos para localizarlos más rápidamente.\n", "\n", - "* **Syntax error**: \"Syntax\" refers to the structure of a program and the rules about that structure. If there is a syntax error anywhere in your program, Python does not run the program. It displays an error message immediately.\n", + "* **Error de sintaxis**: \"Sintaxis\" se refiere a la estructura de un programa y a las reglas sobre esa estructura. Si hay un error de sintaxis en cualquier parte de tu programa, Python no ejecuta el programa. Muestra un mensaje de error inmediatamente.\n", "\n", - "* **Runtime error**: If there are no syntax errors in your program, it can start running. But if something goes wrong, Python displays an error message and stops. This type of error is called a runtime error. It is also called an **exception** because it indicates that something exceptional has happened.\n", + "* **Error en tiempo de ejecución**: Si no hay errores de sintaxis en tu programa, puede empezar a ejecutarse. Pero si algo sale mal, Python muestra un mensaje de error y se detiene. Este tipo de error se llama error en tiempo de ejecución. También se llama una **excepción** porque indica que ha ocurrido algo excepcional.\n", "\n", - "* **Semantic error**: The third type of error is \"semantic\", which means related to meaning. If there is a semantic error in your program, it runs without generating error messages, but it does not do what you intended. Identifying semantic errors can be tricky because it requires you to work backward by looking at the output of the program and trying to figure out what it is doing." + "* **Error semántico**: El tercer tipo de error es \"semántico\", lo que significa relacionado con el significado. Si hay un error semántico en tu programa, se ejecuta sin generar mensajes de error, pero no hace lo que pretendías. Identificar errores semánticos puede ser complicado porque requiere que trabajes hacia atrás mirando la salida del programa e intentando averiguar qué está haciendo." ] }, { @@ -921,7 +914,7 @@ "id": "6cd52721", "metadata": {}, "source": [ - "As we've seen, an illegal variable name is a syntax error." + "Como hemos visto, un nombre de variable no válido es un error de sintaxis." ] }, { @@ -943,7 +936,7 @@ "id": "b8971d33", "metadata": {}, "source": [ - "If you use an operator with a type it doesn't support, that's a runtime error. " + "Si usas un operador con un tipo que no admite, eso es un error en tiempo de ejecución. " ] }, { @@ -965,8 +958,8 @@ "id": "e51fa6e2", "metadata": {}, "source": [ - "Finally, here's an example of a semantic error.\n", - "Suppose we want to compute the average of `1` and `3`, but we forget about the order of operations and write this:" + "Por último, aquí tienes un ejemplo de error semántico.\n", + "Supongamos que queremos calcular la media de `1` y `3`, pero olvidamos el orden de operaciones y escribimos esto:" ] }, { @@ -984,9 +977,9 @@ "id": "0828afc0", "metadata": {}, "source": [ - "When this expression is evaluated, it does not produce an error message, so there is no syntax error or runtime error.\n", - "But the result is not the average of `1` and `3`, so the program is not correct.\n", - "This is a semantic error because the program runs but it doesn't do what's intended." + "Cuando se evalúa esta expresión, no produce un mensaje de error, así que no hay error de sintaxis ni error en tiempo de ejecución.\n", + "Pero el resultado no es la media de `1` y `3`, así que el programa no es correcto.\n", + "Este es un error semántico porque el programa se ejecuta pero no hace lo que se pretendía." ] }, { @@ -994,52 +987,52 @@ "id": "07396f3d", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", "**variable:**\n", - "A name that refers to a value.\n", + "Un nombre que se refiere a un valor.\n", "\n", - "**assignment statement:**\n", - "A statement that assigns a value to a variable.\n", + "**sentencia de asignación:**\n", + "Una sentencia que asigna un valor a una variable.\n", "\n", - "**state diagram:**\n", - "A graphical representation of a set of variables and the values they refer to.\n", + "**diagrama de estado:**\n", + "Una representación gráfica de un conjunto de variables y los valores a los que se refieren.\n", "\n", - "**keyword:**\n", - "A special word used to specify the structure of a program.\n", + "**palabra clave:**\n", + "Una palabra especial usada para especificar la estructura de un programa.\n", "\n", - "**import statement:**\n", - "A statement that reads a module file so we can use the variables and functions it contains.\n", + "**sentencia de importación:**\n", + "Una sentencia que lee un archivo de módulo para que podamos usar las variables y funciones que contiene.\n", "\n", - "**module:**\n", - "A file that contains Python code, including function definitions and sometimes other statements.\n", + "**módulo:**\n", + "Un archivo que contiene código Python, incluyendo definiciones de funciones y a veces otras sentencias.\n", "\n", - "**dot operator:**\n", - "The operator, `.`, used to access a function in another module by specifying the module name followed by a dot and the function name.\n", + "**operador punto:**\n", + "El operador, `.`, usado para acceder a una función en otro módulo especificando el nombre del módulo seguido de un punto y el nombre de la función.\n", "\n", - "**evaluate:**\n", - "Perform the operations in an expression in order to compute a value.\n", + "**evaluar:**\n", + "Realizar las operaciones de una expresión para calcular un valor.\n", "\n", - "**statement:**\n", - "One or more lines of code that represent a command or action.\n", + "**sentencia:**\n", + "Una o más líneas de código que representan una orden o acción.\n", "\n", - "**execute:**\n", - "Run a statement and do what it says.\n", + "**ejecutar:**\n", + "Ejecutar una sentencia y hacer lo que dice.\n", "\n", - "**argument:**\n", - "A value provided to a function when the function is called.\n", + "**argumento:**\n", + "Un valor proporcionado a una función cuando se llama a la función.\n", "\n", - "**comment:**\n", - "Text included in a program that provides information about the program but has no effect on its execution.\n", + "**comentario:**\n", + "Texto incluido en un programa que proporciona información sobre el programa pero no tiene efecto en su ejecución.\n", "\n", - "**runtime error:**\n", - "An error that causes a program to display an error message and exit.\n", + "**error en tiempo de ejecución:**\n", + "Un error que hace que un programa muestre un mensaje de error y termine.\n", "\n", - "**exception:**\n", - "An error that is detected while the program is running.\n", + "**excepción:**\n", + "Un error que se detecta mientras el programa se está ejecutando.\n", "\n", - "**semantic error:**\n", - "An error that causes a program to do the wrong thing, but not to display an error message." + "**error semántico:**\n", + "Un error que hace que un programa haga algo incorrecto, pero no muestre un mensaje de error." ] }, { @@ -1047,7 +1040,7 @@ "id": "70ee273d", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1070,20 +1063,20 @@ "id": "7256a9b2", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregúntale a un asistente virtual\n", "\n", - "Again, I encourage you to use a virtual assistant to learn more about any of the topics in this chapter.\n", + "De nuevo, te animo a usar un asistente virtual para aprender más sobre cualquiera de los temas de este capítulo.\n", "\n", - "If you are curious about any of keywords I listed, you could ask \"Why is class a keyword?\" or \"Why can't variable names be keywords?\"\n", + "Si tienes curiosidad por alguna de las palabras clave que enumeré, podrías preguntar \"¿Por qué class es una palabra clave?\" o \"¿Por qué los nombres de variables no pueden ser palabras clave?\"\n", "\n", - "You might have noticed that `int`, `float`, and `str` are not Python keywords.\n", - "They are variables that represent types, and they can be used as functions.\n", - "So it is *legal* to have a variable or function with one of those names, but it is strongly discouraged. Ask an assistant \"Why is it bad to use int, float, and str as variable names?\"\n", + "Quizá hayas notado que `int`, `float` y `str` no son palabras clave de Python.\n", + "Son variables que representan tipos, y se pueden usar como funciones.\n", + "Así que es *legal* tener una variable o función con uno de esos nombres, pero se desaconseja firmemente. Pregunta a un asistente: \"¿Por qué es mala idea usar int, float y str como nombres de variables?\"\n", "\n", - "Also ask, \"What are the built-in functions in Python?\"\n", - "If you are curious about any of them, ask for more information.\n", + "Pregunta también: \"¿Cuáles son las funciones incorporadas de Python?\"\n", + "Si tienes curiosidad por alguna de ellas, pide más información.\n", "\n", - "In this chapter we imported the `math` module and used some of the variable and functions it provides. Ask an assistant, \"What variables and functions are in the math module?\" and \"Other than math, what modules are considered core Python?\"" + "En este capítulo importamos el módulo `math` y usamos algunas de las variables y funciones que proporciona. Pregunta a un asistente: \"¿Qué variables y funciones hay en el módulo math?\" y \"Además de math, ¿qué módulos se consideran parte del núcleo de Python?\"" ] }, { @@ -1091,20 +1084,19 @@ "id": "f92afde0", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Repeating my advice from the previous chapter, whenever you learn a new feature, you should make errors on purpose to see what goes wrong.\n", + "Repitiendo mi consejo del capítulo anterior: siempre que aprendas una característica nueva, deberías cometer errores a propósito para ver qué falla.\n", "\n", - "- We've seen that `n = 17` is legal. What about `17 = n`?\n", + "- Hemos visto que `n = 17` es válido. ¿Qué pasa con `17 = n`?\n", "\n", - "- How about `x = y = 1`?\n", + "- ¿Y con `x = y = 1`?\n", "\n", - "- In some languages every statement ends with a semi-colon (`;`). What\n", - " happens if you put a semi-colon at the end of a Python statement?\n", + "- En algunos lenguajes, cada sentencia termina con punto y coma (`;`). ¿Qué ocurre si pones un punto y coma al final de una sentencia de Python?\n", "\n", - "- What if you put a period at the end of a statement?\n", + "- ¿Qué pasa si pones un punto al final de una sentencia?\n", "\n", - "- What happens if you spell the name of a module wrong and try to import `maath`?" + "- ¿Qué ocurre si escribes mal el nombre de un módulo e intentas importar `maath`?" ] }, { @@ -1112,11 +1104,11 @@ "id": "9d562609", "metadata": {}, "source": [ - "### Exercise\n", - "Practice using the Python interpreter as a calculator:\n", + "### Ejercicio\n", + "Practica usando el intérprete de Python como calculadora:\n", "\n", - "**Part 1.** The volume of a sphere with radius $r$ is $\\frac{4}{3} \\pi r^3$.\n", - "What is the volume of a sphere with radius 5? Start with a variable named `radius` and then assign the result to a variable named `volume`. Display the result. Add comments to indicate that `radius` is in centimeters and `volume` in cubic centimeters." + "**Parte 1.** El volumen de una esfera con radio $r$ es $\\frac{4}{3} \\pi r^3$.\n", + "¿Cuál es el volumen de una esfera con radio 5? Empieza con una variable llamada `radius` y luego asigna el resultado a una variable llamada `volume`. Muestra el resultado. Añade comentarios para indicar que `radius` está en centímetros y `volume` en centímetros cúbicos." ] }, { @@ -1134,12 +1126,12 @@ "id": "6449b12b", "metadata": {}, "source": [ - "**Part 2.** A rule of trigonometry says that for any value of $x$, $(\\cos x)^2 + (\\sin x)^2 = 1$. Let's see if it's true for a specific value of $x$ like 42.\n", + "**Parte 2.** Una regla de trigonometría dice que para cualquier valor de $x$, $(\\cos x)^2 + (\\sin x)^2 = 1$. Veamos si es cierta para un valor específico de $x$, como 42.\n", "\n", - "Create a variable named `x` with this value.\n", - "Then use `math.cos` and `math.sin` to compute the sine and cosine of $x$, and the sum of their squared.\n", + "Crea una variable llamada `x` con este valor.\n", + "Luego usa `math.cos` y `math.sin` para calcular el seno y el coseno de $x$, y la suma de sus cuadrados.\n", "\n", - "The result should be close to 1. It might not be exactly 1 because floating-point arithmetic is not exact---it is only approximately correct." + "El resultado debería estar cerca de 1. Puede que no sea exactamente 1 porque la aritmética de punto flotante no es exacta---solo es aproximadamente correcta." ] }, { @@ -1157,16 +1149,16 @@ "id": "4986801f", "metadata": {}, "source": [ - "**Part 3.** In addition to `pi`, the other variable defined in the `math` module is `e`, which represents the base of the natural logarithm, written in math notation as $e$. If you are not familiar with this value, ask a virtual assistant \"What is `math.e`?\" Now let's compute $e^2$ three ways:\n", + "**Parte 3.** Además de `pi`, la otra variable definida en el módulo `math` es `e`, que representa la base del logaritmo natural, escrita en notación matemática como $e$. Si no conoces este valor, pregunta a un asistente virtual \"¿Qué es `math.e`?\" Ahora calculemos $e^2$ de tres formas:\n", "\n", - "* Use `math.e` and the exponentiation operator (`**`).\n", + "* Usa `math.e` y el operador de exponenciación (`**`).\n", "\n", - "* Use `math.pow` to raise `math.e` to the power `2`.\n", + "* Usa `math.pow` para elevar `math.e` a la potencia `2`.\n", "\n", - "* Use `math.exp`, which takes as an argument a value, $x$, and computes $e^x$.\n", + "* Usa `math.exp`, que toma como argumento un valor, $x$, y calcula $e^x$.\n", "\n", - "You might notice that the last result is slightly different from the other two.\n", - "See if you can find out which is correct." + "Puede que notes que el último resultado es ligeramente diferente de los otros dos.\n", + "Mira si puedes averiguar cuál es correcto." ] }, { @@ -1214,13 +1206,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/chapters/chap03.ipynb b/chapters/chap03.ipynb index 5f2cb1d..d728b65 100644 --- a/chapters/chap03.ipynb +++ b/chapters/chap03.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes comprar versiones impresas y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -41,15 +41,15 @@ "id": "6bd858a8", "metadata": {}, "source": [ - "# Functions\n", + "# Funciones\n", "\n", - "In the previous chapter we used several functions provided by Python, like `int` and `float`, and a few provided by the `math` module, like `sqrt` and `pow`.\n", - "In this chapter, you will learn how to create your own functions and run them.\n", - "And we'll see how one function can call another.\n", - "As examples, we'll display lyrics from Monty Python songs.\n", - "These silly examples demonstrate an important feature -- the ability to write your own functions is the foundation of programming.\n", + "En el capítulo anterior usamos varias funciones proporcionadas por Python, como `int` y `float`, y algunas proporcionadas por el módulo `math`, como `sqrt` y `pow`.\n", + "En este capítulo aprenderás a crear tus propias funciones y a ejecutarlas.\n", + "Y veremos cómo una función puede llamar a otra.\n", + "Como ejemplos, mostraremos letras de canciones de Monty Python.\n", + "Estos ejemplos absurdos demuestran una característica importante: la capacidad de escribir tus propias funciones es la base de la programación.\n", "\n", - "This chapter also introduces a new statement, the `for` loop, which is used to repeat a computation." + "Este capítulo también introduce una nueva sentencia, el bucle `for`, que se usa para repetir un cálculo." ] }, { @@ -57,9 +57,9 @@ "id": "b4ea99c5", "metadata": {}, "source": [ - "## Defining new functions\n", + "## Definir nuevas funciones\n", "\n", - "A **function definition** specifies the name of a new function and the sequence of statements that run when the function is called. Here's an example:" + "Una **definición de función** especifica el nombre de una nueva función y la secuencia de sentencias que se ejecutan cuando se llama a la función. Aquí tienes un ejemplo:" ] }, { @@ -79,17 +79,17 @@ "id": "0174fc41", "metadata": {}, "source": [ - "`def` is a keyword that indicates that this is a function definition.\n", - "The name of the function is `print_lyrics`.\n", - "Anything that's a legal variable name is also a legal function name.\n", + "`def` es una palabra clave que indica que esto es una definición de función.\n", + "El nombre de la función es `print_lyrics`.\n", + "Cualquier cosa que sea un nombre de variable válido también es un nombre de función válido.\n", "\n", - "The empty parentheses after the name indicate that this function doesn't take any arguments.\n", + "Los paréntesis vacíos después del nombre indican que esta función no recibe argumentos.\n", "\n", - "The first line of the function definition is called the **header** -- the rest is called the **body**.\n", - "The header has to end with a colon and the body has to be indented. By convention, indentation is always four spaces. \n", - "The body of this function is two print statements; in general, the body of a function can contain any number of statements of any kind.\n", + "La primera línea de la definición de función se llama **encabezado**; el resto se llama **cuerpo**.\n", + "El encabezado tiene que terminar con dos puntos y el cuerpo tiene que estar indentado. Por convención, la indentación es siempre de cuatro espacios. \n", + "El cuerpo de esta función son dos sentencias `print`; en general, el cuerpo de una función puede contener cualquier número de sentencias de cualquier tipo.\n", "\n", - "Defining a function creates a **function object**, which we can display like this." + "Definir una función crea un **objeto función**, que podemos mostrar así." ] }, { @@ -107,10 +107,10 @@ "id": "12bd0879", "metadata": {}, "source": [ - "The output indicates that `print_lyrics` is a function that takes no arguments.\n", - "`__main__` is the name of the module that contains `print_lyrics`.\n", + "La salida indica que `print_lyrics` es una función que no recibe argumentos.\n", + "`__main__` es el nombre del módulo que contiene `print_lyrics`.\n", "\n", - "Now that we've defined a function, we can call it the same way we call built-in functions." + "Ahora que hemos definido una función, podemos llamarla del mismo modo que llamamos a las funciones incorporadas." ] }, { @@ -128,7 +128,7 @@ "id": "8f0fc45d", "metadata": {}, "source": [ - "When the function runs, it executes the statements in the body, which display the first two lines of \"The Lumberjack Song\"." + "Cuando la función se ejecuta, ejecuta las sentencias del cuerpo, que muestran las dos primeras líneas de \"The Lumberjack Song\"." ] }, { @@ -136,12 +136,12 @@ "id": "6d35193e", "metadata": {}, "source": [ - "## Parameters\n", + "## Parámetros\n", "\n", - "Some of the functions we have seen require arguments; for example, when you call `abs` you pass a number as an argument.\n", - "Some functions take more than one argument; for example, `math.pow` takes two, the base and the exponent.\n", + "Algunas de las funciones que hemos visto requieren argumentos; por ejemplo, cuando llamas a `abs` pasas un número como argumento.\n", + "Algunas funciones reciben más de un argumento; por ejemplo, `math.pow` recibe dos: la base y el exponente.\n", "\n", - "Here is a definition for a function that takes an argument." + "Aquí tienes la definición de una función que recibe un argumento." ] }, { @@ -161,9 +161,9 @@ "id": "1716e3dc", "metadata": {}, "source": [ - "The variable name in parentheses is a **parameter**.\n", - "When the function is called, the value of the argument is assigned to the parameter.\n", - "For example, we can call `print_twice` like this." + "El nombre de variable entre paréntesis es un **parámetro**.\n", + "Cuando se llama a la función, el valor del argumento se asigna al parámetro.\n", + "Por ejemplo, podemos llamar a `print_twice` así." ] }, { @@ -181,7 +181,7 @@ "id": "f02be6d2", "metadata": {}, "source": [ - "Running this function has the same effect as assigning the argument to the parameter and then executing the body of the function, like this." + "Ejecutar esta función tiene el mismo efecto que asignar el argumento al parámetro y luego ejecutar el cuerpo de la función, así." ] }, { @@ -201,7 +201,7 @@ "id": "ea8b8b6e", "metadata": {}, "source": [ - "You can also use a variable as an argument." + "También puedes usar una variable como argumento." ] }, { @@ -220,7 +220,7 @@ "id": "5c1884ad", "metadata": {}, "source": [ - "In this example, the value of `line` gets assigned to the parameter `string`." + "En este ejemplo, el valor de `line` se asigna al parámetro `string`." ] }, { @@ -228,10 +228,10 @@ "id": "a3e5a790", "metadata": {}, "source": [ - "## Calling functions\n", + "## Llamar funciones\n", "\n", - "Once you have defined a function, you can use it inside another function.\n", - "To demonstrate, we'll write functions that print the lyrics of \"The Spam Song\" ().\n", + "Una vez que has definido una función, puedes usarla dentro de otra función.\n", + "Para demostrarlo, escribiremos funciones que imprimen la letra de \"The Spam Song\" ().\n", "\n", "> Spam, Spam, Spam, Spam, \n", "> Spam, Spam, Spam, Spam, \n", @@ -239,7 +239,7 @@ "> (Lovely Spam, Wonderful Spam!) \n", "> Spam, Spam,\n", "\n", - "We'll start with the following function, which takes two parameters.\n" + "Empezaremos con la siguiente función, que recibe dos parámetros.\n" ] }, { @@ -258,7 +258,7 @@ "id": "bdd4daa4", "metadata": {}, "source": [ - "We can use this function to print the first line of the song, like this." + "Podemos usar esta función para imprimir la primera línea de la canción, así." ] }, { @@ -277,7 +277,7 @@ "id": "c6f81e09", "metadata": {}, "source": [ - "To display the first two lines, we can define a new function that uses `repeat`." + "Para mostrar las dos primeras líneas, podemos definir una nueva función que use `repeat`." ] }, { @@ -297,7 +297,7 @@ "id": "8058ffe4", "metadata": {}, "source": [ - "And then call it like this." + "Y luego llamarla así." ] }, { @@ -315,7 +315,7 @@ "id": "07ca432a", "metadata": {}, "source": [ - "To display the last three lines, we can define another function, which also uses `repeat`." + "Para mostrar las últimas tres líneas, podemos definir otra función, que también usa `repeat`." ] }, { @@ -346,7 +346,7 @@ "id": "d6456a19", "metadata": {}, "source": [ - "Finally, we can bring it all together with one function that prints the whole verse." + "Por último, podemos unirlo todo con una función que imprime la estrofa completa." ] }, { @@ -376,10 +376,10 @@ "id": "d088fe68", "metadata": {}, "source": [ - "When we run `print_verse`, it calls `first_two_lines`, which calls `repeat`, which calls `print`.\n", - "That's a lot of functions.\n", + "Cuando ejecutamos `print_verse`, llama a `first_two_lines`, que llama a `repeat`, que llama a `print`.\n", + "Son muchas funciones.\n", "\n", - "Of course, we could have done the same thing with fewer functions, but the point of this example is to show how functions can work together." + "Por supuesto, podríamos haber hecho lo mismo con menos funciones, pero el objetivo de este ejemplo es mostrar cómo las funciones pueden trabajar juntas." ] }, { @@ -387,10 +387,10 @@ "id": "c3b16e3f", "metadata": {}, "source": [ - "## Repetition\n", + "## Repetición\n", "\n", - "If we want to display more than one verse, we can use a `for` statement.\n", - "Here's a simple example." + "Si queremos mostrar más de una estrofa, podemos usar una sentencia `for`.\n", + "Aquí tienes un ejemplo sencillo." ] }, { @@ -409,20 +409,20 @@ "id": "bf320549", "metadata": {}, "source": [ - "The first line is a header that ends with a colon.\n", - "The second line is the body, which has to be indented.\n", + "La primera línea es un encabezado que termina con dos puntos.\n", + "La segunda línea es el cuerpo, que tiene que estar indentado.\n", "\n", - "The header starts with the keyword `for`, a new variable named `i`, and another keyword, `in`. \n", - "It uses the `range` function to create a sequence of two values, which are `0` and `1`.\n", - "In Python, when we start counting, we usually start from `0`.\n", + "El encabezado empieza con la palabra clave `for`, una nueva variable llamada `i` y otra palabra clave, `in`. \n", + "Usa la función `range` para crear una secuencia de dos valores, que son `0` y `1`.\n", + "En Python, cuando empezamos a contar, normalmente empezamos desde `0`.\n", "\n", - "When the `for` statement runs, it assigns the first value from `range` to `i` and then runs the `print` function in the body, which displays `0`.\n", + "Cuando la sentencia `for` se ejecuta, asigna el primer valor de `range` a `i` y luego ejecuta la función `print` en el cuerpo, que muestra `0`.\n", "\n", - "When it gets to the end of the body, it loops back around to the header, which is why this statement is called a **loop**.\n", - "The second time through the loop, it assigns the next value from `range` to `i`, and displays it.\n", - "Then, because that's the last value from `range`, the loop ends.\n", + "Cuando llega al final del cuerpo, vuelve al encabezado, por eso esta sentencia se llama **bucle**.\n", + "La segunda vez que recorre el bucle, asigna el siguiente valor de `range` a `i` y lo muestra.\n", + "Entonces, como ese es el último valor de `range`, el bucle termina.\n", "\n", - "Here's how we can use a `for` loop to print two verses of the song." + "Así es como podemos usar un bucle `for` para imprimir dos estrofas de la canción." ] }, { @@ -443,8 +443,8 @@ "id": "88a46733", "metadata": {}, "source": [ - "You can put a `for` loop inside a function.\n", - "For example, `print_n_verses` takes a parameter named `n`, which has to be an integer, and displays the given number of verses. " + "Puedes poner un bucle `for` dentro de una función.\n", + "Por ejemplo, `print_n_verses` recibe un parámetro llamado `n`, que tiene que ser un entero, y muestra el número dado de estrofas. " ] }, { @@ -465,7 +465,7 @@ "id": "ad8060fe", "metadata": {}, "source": [ - "In this example, we don't use `i` in the body of the loop, but there has to be a variable name in the header anyway." + "En este ejemplo, no usamos `i` en el cuerpo del bucle, pero de todos modos tiene que haber un nombre de variable en el encabezado." ] }, { @@ -473,11 +473,11 @@ "id": "b320ec90", "metadata": {}, "source": [ - "## Variables and parameters are local\n", + "## Las variables y los parámetros son locales\n", "\n", - "When you create a variable inside a function, it is **local**, which\n", - "means that it only exists inside the function.\n", - "For example, the following function takes two arguments, concatenates them, and prints the result twice." + "Cuando creas una variable dentro de una función, es **local**, lo que\n", + "significa que solo existe dentro de la función.\n", + "Por ejemplo, la siguiente función recibe dos argumentos, los concatena e imprime el resultado dos veces." ] }, { @@ -497,7 +497,7 @@ "id": "3a35a6d0", "metadata": {}, "source": [ - "Here's an example that uses it:" + "Aquí tienes un ejemplo que la usa:" ] }, { @@ -517,8 +517,8 @@ "id": "4ab4e008", "metadata": {}, "source": [ - "When `cat_twice` runs, it creates a local variable named `cat`, which is destroyed when the function ends.\n", - "If we try to display it, we get a `NameError`:" + "Cuando `cat_twice` se ejecuta, crea una variable local llamada `cat`, que se destruye cuando termina la función.\n", + "Si intentamos mostrarla, obtenemos un `NameError`:" ] }, { @@ -540,10 +540,10 @@ "id": "3ae36c29", "metadata": {}, "source": [ - "Outside of the function, `cat` is not defined. \n", + "Fuera de la función, `cat` no está definida. \n", "\n", - "Parameters are also local.\n", - "For example, outside `cat_twice`, there is no such thing as `part1` or `part2`." + "Los parámetros también son locales.\n", + "Por ejemplo, fuera de `cat_twice`, no existe nada llamado `part1` o `part2`." ] }, { @@ -551,15 +551,15 @@ "id": "eabac8a6", "metadata": {}, "source": [ - "## Stack diagrams\n", + "## Diagramas de pila\n", "\n", - "To keep track of which variables can be used where, it is sometimes useful to draw a **stack diagram**. \n", - "Like state diagrams, stack diagrams show the value of each variable, but they also show the function each variable belongs to.\n", + "Para llevar la cuenta de qué variables se pueden usar en cada lugar, a veces es útil dibujar un **diagrama de pila**. \n", + "Como los diagramas de estado, los diagramas de pila muestran el valor de cada variable, pero también muestran la función a la que pertenece cada variable.\n", "\n", - "Each function is represented by a **frame**.\n", - "A frame is a box with the name of a function on the outside and the parameters and local variables of the function on the inside.\n", + "Cada función se representa mediante un **marco**.\n", + "Un marco es una caja con el nombre de una función por fuera y los parámetros y variables locales de la función por dentro.\n", "\n", - "Here's the stack diagram for the previous example." + "Aquí tienes el diagrama de pila del ejemplo anterior." ] }, { @@ -617,12 +617,12 @@ "id": "854fee12", "metadata": {}, "source": [ - "The frames are arranged in a stack that indicates which function called\n", - "which, and so on. Reading from the bottom, `print` was called by `print_twice`, which was called by `cat_twice`, which was called by `__main__` -- which is a special name for the topmost frame.\n", - "When you create a variable outside of any function, it belongs to `__main__`.\n", + "Los marcos se organizan en un stack que indica qué función llamó a\n", + "cuál, y así sucesivamente. Leyendo desde abajo, `print` fue llamada por `print_twice`, que fue llamada por `cat_twice`, que fue llamada por `__main__`, que es un nombre especial para el marco superior.\n", + "Cuando creas una variable fuera de cualquier función, pertenece a `__main__`.\n", "\n", - "In the frame for `print`, the question mark indicates that we don't know the name of the parameter.\n", - "If you are curious, ask a virtual assistant, \"What are the parameters of the Python print function?\"" + "En el marco de `print`, el signo de interrogación indica que no sabemos el nombre del parámetro.\n", + "Si tienes curiosidad, pregunta a un asistente virtual: \"¿Cuáles son los parámetros de la función `print` de Python?" ] }, { @@ -632,8 +632,8 @@ "source": [ "## Tracebacks\n", "\n", - "When a runtime error occurs in a function, Python displays the name of the function that was running, the name of the function that called it, and so on, up the stack.\n", - "To see an example, I'll define a version of `print_twice` that contains an error -- it tries to print `cat`, which is a local variable in another function." + "Cuando ocurre un error en tiempo de ejecución dentro de una función, Python muestra el nombre de la función que se estaba ejecutando, el nombre de la función que la llamó, y así sucesivamente, subiendo por el stack.\n", + "Para ver un ejemplo, definiré una versión de `print_twice` que contiene un error: intenta imprimir `cat`, que es una variable local de otra función." ] }, { @@ -653,7 +653,7 @@ "id": "d7c0713b", "metadata": {}, "source": [ - "Now here's what happens when we run `cat_twice`." + "Ahora esto es lo que ocurre cuando ejecutamos `cat_twice`." ] }, { @@ -690,11 +690,11 @@ "id": "2f4defcf", "metadata": {}, "source": [ - "The error message includes a **traceback**, which shows the function that was running when the error occurred, the function that called it, and so on.\n", - "In this example, it shows that `cat_twice` called `print_twice`, and the error occurred in a `print_twice`.\n", + "El mensaje de error incluye un **traceback**, que muestra la función que se estaba ejecutando cuando ocurrió el error, la función que la llamó, y así sucesivamente.\n", + "En este ejemplo, muestra que `cat_twice` llamó a `print_twice`, y que el error ocurrió en un `print_twice`.\n", "\n", - "The order of the functions in the traceback is the same as the order of the frames in the stack diagram.\n", - "The function that was running is at the bottom." + "El orden de las funciones en el traceback es el mismo que el orden de los marcos en el diagrama de pila.\n", + "La función que se estaba ejecutando está abajo del todo." ] }, { @@ -702,23 +702,23 @@ "id": "374b4696", "metadata": {}, "source": [ - "## Why functions?\n", + "## ¿Por qué funciones?\n", "\n", - "It may not be clear yet why it is worth the trouble to divide a program into\n", - "functions.\n", - "There are several reasons:\n", + "Puede que todavía no esté claro por qué merece la pena dividir un programa en\n", + "funciones.\n", + "Hay varias razones:\n", "\n", - "- Creating a new function gives you an opportunity to name a group of\n", - " statements, which makes your program easier to read and debug.\n", + "- Crear una nueva función te da la oportunidad de nombrar un grupo de\n", + " sentencias, lo que hace que tu programa sea más fácil de leer y depurar.\n", "\n", - "- Functions can make a program smaller by eliminating repetitive code.\n", - " Later, if you make a change, you only have to make it in one place.\n", + "- Las funciones pueden hacer que un programa sea más pequeño al eliminar código repetitivo.\n", + " Más adelante, si haces un cambio, solo tienes que hacerlo en un lugar.\n", "\n", - "- Dividing a long program into functions allows you to debug the parts\n", - " one at a time and then assemble them into a working whole.\n", + "- Dividir un programa largo en funciones te permite depurar las partes\n", + " de una en una y luego ensamblarlas en un todo que funciona.\n", "\n", - "- Well-designed functions are often useful for many programs. Once you\n", - " write and debug one, you can reuse it." + "- Las funciones bien diseñadas suelen ser útiles para muchos programas. Una vez que\n", + " escribes y depuras una, puedes reutilizarla." ] }, { @@ -726,25 +726,25 @@ "id": "c6dd486e", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "Debugging can be frustrating, but it is also challenging, interesting, and sometimes even fun.\n", - "And it is one of the most important skills you can learn.\n", + "Depurar puede ser frustrante, pero también es desafiante, interesante y a veces incluso divertido.\n", + "Y es una de las habilidades más importantes que puedes aprender.\n", "\n", - "In some ways debugging is like detective work.\n", - "You are given clues and you have to infer the events that led to the\n", - "results you see.\n", + "En cierto modo, depurar es como hacer trabajo de detective.\n", + "Se te dan pistas y tienes que inferir los eventos que llevaron a los\n", + "resultados que ves.\n", "\n", - "Debugging is also like experimental science.\n", - "Once you have an idea about what is going wrong, you modify your program and try again.\n", - "If your hypothesis was correct, you can predict the result of the modification, and you take a step closer to a working program.\n", - "If your hypothesis was wrong, you have to come up with a new one.\n", + "Depurar también se parece a la ciencia experimental.\n", + "Una vez que tienes una idea de qué va mal, modificas tu programa y vuelves a intentarlo.\n", + "Si tu hipótesis era correcta, puedes predecir el resultado de la modificación, y das un paso más hacia un programa que funciona.\n", + "Si tu hipótesis era incorrecta, tienes que proponer una nueva.\n", "\n", - "For some people, programming and debugging are the same thing; that is, programming is the process of gradually debugging a program until it does what you want.\n", - "The idea is that you should start with a working program and make small modifications, debugging them as you go.\n", + "Para algunas personas, programar y depurar son lo mismo; es decir, programar es el proceso de depurar gradualmente un programa hasta que hace lo que quieres.\n", + "La idea es que deberías empezar con un programa que funciona y hacer pequeñas modificaciones, depurándolas sobre la marcha.\n", "\n", - "If you find yourself spending a lot of time debugging, that is often a sign that you are writing too much code before you start tests.\n", - "If you take smaller steps, you might find that you can move faster." + "Si te encuentras pasando mucho tiempo depurando, a menudo es una señal de que estás escribiendo demasiado código antes de empezar a hacer pruebas.\n", + "Si das pasos más pequeños, puede que descubras que puedes avanzar más rápido." ] }, { @@ -752,39 +752,39 @@ "id": "d4e95e63", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**function definition:**\n", - "A statement that creates a function.\n", + "**definición de función:**\n", + "Una sentencia que crea una función.\n", "\n", - "**header:**\n", - " The first line of a function definition.\n", + "**encabezado:**\n", + " La primera línea de una definición de función.\n", "\n", - "**body:**\n", - " The sequence of statements inside a function definition.\n", + "**cuerpo:**\n", + " La secuencia de sentencias dentro de una definición de función.\n", "\n", - "**function object:**\n", - "A value created by a function definition.\n", - "The name of the function is a variable that refers to a function object.\n", + "**objeto de función:**\n", + "Un valor creado por una definición de función.\n", + "El nombre de la función es una variable que se refiere a un objeto función.\n", "\n", - "**parameter:**\n", - " A name used inside a function to refer to the value passed as an argument.\n", + "**parámetro:**\n", + " Un nombre usado dentro de una función para referirse al valor pasado como argumento.\n", "\n", - "**loop:**\n", - " A statement that runs one or more statements, often repeatedly.\n", + "**bucle:**\n", + " Una sentencia que ejecuta una o más sentencias, a menudo repetidamente.\n", "\n", - "**local variable:**\n", - "A variable defined inside a function, and which can only be accessed inside the function.\n", + "**variable local:**\n", + "Una variable definida dentro de una función, y a la que solo se puede acceder dentro de la función.\n", "\n", - "**stack diagram:**\n", - "A graphical representation of a stack of functions, their variables, and the values they refer to.\n", + "**diagrama de pila:**\n", + "Una representación gráfica de un stack de funciones, sus variables y los valores a los que se refieren.\n", "\n", - "**frame:**\n", - " A box in a stack diagram that represents a function call.\n", - " It contains the local variables and parameters of the function.\n", + "**marco:**\n", + " Una caja en un diagrama de pila que representa una llamada a función.\n", + " Contiene las variables locales y los parámetros de la función.\n", "\n", "**traceback:**\n", - " A list of the functions that are executing, printed when an exception occurs." + " Una lista de las funciones que se están ejecutando, impresa cuando ocurre una excepción." ] }, { @@ -792,7 +792,7 @@ "id": "eca485f2", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -815,23 +815,23 @@ "id": "82951027", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "The statements in a function or a `for` loop are indented by four spaces, by convention.\n", - "But not everyone agrees with that convention.\n", - "If you are curious about the history of this great debate, ask a virtual assistant to \"tell me about spaces and tabs in Python\".\n", + "Las sentencias dentro de una función o un bucle `for` se indentan con cuatro espacios, por convención.\n", + "Pero no todo el mundo está de acuerdo con esa convención.\n", + "Si tienes curiosidad por la historia de este gran debate, pregunta a un asistente virtual que te hable sobre \"espacios y tabulaciones en Python\".\n", "\n", - "Virtual assistant are pretty good at writing small functions.\n", + "Los asistentes virtuales son bastante buenos escribiendo funciones pequeñas.\n", "\n", - "1. Ask your favorite VA to \"Write a function called repeat that takes a string and an integer and prints the string the given number of times.\" \n", + "1. Pregunta a tu asistente virtual favorito: \"Escribe una función llamada repeat que reciba un string y un entero e imprima el string el número de veces indicado\". \n", "\n", - "2. If the result uses a `for` loop, you could ask, \"Can you do it without a for loop?\"\n", + "2. Si el resultado usa un bucle `for`, podrías preguntar: \"¿Puedes hacerlo sin un bucle for?\"\n", "\n", - "3. Pick any other function in this chapter and ask a VA to write it. The challenge is to describe the function precisely enough to get what you want. Use the vocabulary you have learned so far in this book.\n", + "3. Elige cualquier otra función de este capítulo y pide a un asistente virtual que la escriba. El reto es describir la función con suficiente precisión para obtener lo que quieres. Usa el vocabulario que has aprendido hasta ahora en este libro.\n", "\n", - "Virtual assistants are also pretty good at debugging functions.\n", + "Los asistentes virtuales también son bastante buenos depurando funciones.\n", "\n", - "1. Ask a VA what's wrong with this version of `print_twice`.\n", + "1. Pregunta a un asistente virtual qué está mal en esta versión de `print_twice`.\n", "\n", " ```\n", " def print_twice(string):\n", @@ -839,7 +839,7 @@ " print(cat)\n", " ```\n", " \n", - "And if you get stuck on any of the exercises below, consider asking a VA for help." + "Y si te bloqueas en cualquiera de los ejercicios siguientes, considera pedir ayuda a un asistente virtual." ] }, { @@ -847,9 +847,9 @@ "id": "b7157b09", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function named `print_right` that takes a string named `text` as a parameter and prints the string with enough leading spaces that the last letter of the string is in the 40th column of the display." + "Escribe una función llamada `print_right` que reciba un string llamado `text` como parámetro e imprima el string con suficientes espacios iniciales para que la última letra del string esté en la columna 40 de la pantalla." ] }, { @@ -867,9 +867,9 @@ "id": "428fbee5", "metadata": {}, "source": [ - "Hint: Use the `len` function, the string concatenation operator (`+`) and the string repetition operator (`*`).\n", + "Pista: usa la función `len`, el operador de concatenación de strings (`+`) y el operador de repetición de strings (`*`).\n", "\n", - "Here's an example that shows how it should work." + "Aquí tienes un ejemplo que muestra cómo debería funcionar." ] }, { @@ -891,9 +891,9 @@ "id": "b47467fa", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `triangle` that takes a string and an integer and draws a pyramid with the given height, made up using copies of the string. Here's an example of a pyramid with `5` levels, using the string `'L'`." + "Escribe una función llamada `triangle` que reciba un string y un entero, y dibuje una pirámide con la altura dada, hecha usando copias del string. Aquí tienes un ejemplo de una pirámide con `5` niveles, usando el string `'L'`." ] }, { @@ -924,9 +924,9 @@ "id": "4a28f635", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `rectangle` that takes a string and two integers and draws a rectangle with the given width and height, made up using copies of the string. Here's an example of a rectangle with width `5` and height `4`, made up of the string `'H'`." + "Escribe una función llamada `rectangle` que reciba un string y dos enteros, y dibuje un rectángulo con la anchura y altura dadas, hecho usando copias del string. Aquí tienes un ejemplo de un rectángulo con anchura `5` y altura `4`, hecho con el string `'H'`." ] }, { @@ -957,20 +957,20 @@ "id": "44a5de6f", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The song \"99 Bottles of Beer\" starts with this verse:\n", + "La canción \"99 Bottles of Beer\" empieza con esta estrofa:\n", "\n", "> 99 bottles of beer on the wall \n", "> 99 bottles of beer \n", "> Take one down, pass it around \n", "> 98 bottles of beer on the wall \n", "\n", - "Then the second verse is the same, except that it starts with 98 bottles and ends with 97. The song continues -- for a very long time -- until there are 0 bottles of beer.\n", + "Luego la segunda estrofa es igual, excepto que empieza con 98 botellas y termina con 97. La canción continúa, durante muchísimo tiempo, hasta que hay 0 botellas de cerveza.\n", "\n", - "Write a function called `bottle_verse` that takes a number as a parameter and displays the verse that starts with the given number of bottles.\n", + "Escribe una función llamada `bottle_verse` que reciba un número como parámetro y muestre la estrofa que empieza con el número dado de botellas.\n", "\n", - "Hint: Consider starting with a function that can print the first, second, or last line of the verse, and then use it to write `bottle_verse`." + "Pista: considera empezar con una función que pueda imprimir la primera, segunda o última línea de la estrofa, y luego úsala para escribir `bottle_verse`." ] }, { @@ -1000,7 +1000,7 @@ "tags": [] }, "source": [ - "Use this function call to display the first verse." + "Usa esta llamada a función para mostrar la primera estrofa." ] }, { @@ -1022,8 +1022,8 @@ "tags": [] }, "source": [ - "If you want to print the whole song, you can use this `for` loop, which counts down from `99` to `1`.\n", - "You don't have to completely understand this example---we'll learn more about `for` loops and the `range` function later." + "Si quieres imprimir la canción completa, puedes usar este bucle `for`, que cuenta hacia atrás desde `99` hasta `1`.\n", + "No tienes que entender completamente este ejemplo; aprenderemos más sobre los bucles `for` y la función `range` más adelante." ] }, { @@ -1055,13 +1055,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/chapters/chap04.ipynb b/chapters/chap04.ipynb index 7117af6..bae44fc 100644 --- a/chapters/chap04.ipynb +++ b/chapters/chap04.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes comprar versiones impresas y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -55,10 +55,10 @@ "id": "fbb4d5a2", "metadata": {}, "source": [ - "# Functions and Interfaces\n", + "# Funciones e interfaces\n", "\n", - "This chapter introduces a module called `jupyturtle`, which allows you to create simple drawings by giving instructions to an imaginary turtle.\n", - "We will use this module to write functions that draw squares, polygons, and circles -- and to demonstrate **interface design**, which is a way of designing functions that work together." + "Este capítulo introduce un módulo llamado `jupyturtle`, que te permite crear dibujos sencillos dando instrucciones a una turtle imaginaria.\n", + "Usaremos este módulo para escribir funciones que dibujan cuadrados, polígonos y círculos, y para demostrar el **diseño de interfaces**, que es una forma de diseñar funciones que trabajan juntas." ] }, { @@ -68,9 +68,9 @@ "tags": [] }, "source": [ - "## The jupyturtle module\n", + "## El módulo jupyturtle\n", "\n", - "To use the `jupyturtle` module, we can import it like this." + "Para usar el módulo `jupyturtle`, podemos importarlo así." ] }, { @@ -88,7 +88,7 @@ "id": "8c801121", "metadata": {}, "source": [ - "Now we can use the functions defined in the module, like `make_turtle` and `forward`." + "Ahora podemos usar las funciones definidas en el módulo, como `make_turtle` y `forward`." ] }, { @@ -107,14 +107,14 @@ "id": "77a61cbb", "metadata": {}, "source": [ - "`make_turtle` creates a **canvas**, which is a space on the screen where we can draw, and a turtle, which is represented by a circular shell and a triangular head.\n", - "The circle shows the location of the turtle and the triangle indicates the direction it is facing.\n", + "`make_turtle` crea un **canvas**, que es un espacio en la pantalla donde podemos dibujar, y una turtle, que se representa con un caparazón circular y una cabeza triangular.\n", + "El círculo muestra la ubicación de la turtle y el triángulo indica la dirección hacia la que mira.\n", "\n", - "`forward` moves the turtle a given distance in the direction it's facing, drawing a line segment along the way.\n", - "The distance is in arbitrary units -- the actual size depends on your computer's screen.\n", + "`forward` mueve la turtle una distancia dada en la dirección hacia la que mira, dibujando un segmento de línea por el camino.\n", + "La distancia está en unidades arbitrarias: el tamaño real depende de la pantalla de tu ordenador.\n", "\n", - "We will use functions defined in the `jupyturtle` module many times, so it would be nice if we did not have to write the name of the module every time.\n", - "That's possible if we import the module like this." + "Usaremos muchas veces funciones definidas en el módulo `jupyturtle`, así que estaría bien no tener que escribir el nombre del módulo cada vez.\n", + "Eso es posible si importamos el módulo así." ] }, { @@ -132,7 +132,7 @@ "id": "c1322d31", "metadata": {}, "source": [ - "This version of the import statement imports `make_turtle` and `forward` from the `jupyturtle` module so we can call them like this." + "Esta versión de la sentencia `import` importa `make_turtle` y `forward` desde el módulo `jupyturtle`, de modo que podemos llamarlas así." ] }, { @@ -151,8 +151,8 @@ "id": "bd319754", "metadata": {}, "source": [ - "`jupyturtle` provides two other functions we'll use, called `left` and `right`.\n", - "We'll import them like this." + "`jupyturtle` proporciona otras dos funciones que usaremos, llamadas `left` y `right`.\n", + "Las importaremos así." ] }, { @@ -170,8 +170,8 @@ "id": "0da2a311", "metadata": {}, "source": [ - "`left` causes the turtle to turn left. It takes one argument, which is the angle of the turn in degrees.\n", - "For example, we can make a 90 degree left turn like this." + "`left` hace que la turtle gire a la izquierda. Recibe un argumento, que es el ángulo del giro en grados.\n", + "Por ejemplo, podemos hacer un giro a la izquierda de 90 grados así." ] }, { @@ -192,8 +192,8 @@ "id": "cea2940f", "metadata": {}, "source": [ - "This program moves the turtle east and then north, leaving two line segments behind.\n", - "Before you go on, see if you can modify the previous program to make a square." + "Este programa mueve la turtle hacia el este y luego hacia el norte, dejando dos segmentos de línea detrás.\n", + "Antes de continuar, prueba si puedes modificar el programa anterior para hacer un cuadrado." ] }, { @@ -201,9 +201,9 @@ "id": "e20ea96c", "metadata": {}, "source": [ - "## Making a square\n", + "## Hacer un cuadrado\n", "\n", - "Here's one way to make a square." + "Aquí tienes una forma de hacer un cuadrado." ] }, { @@ -233,7 +233,7 @@ "id": "a7500957", "metadata": {}, "source": [ - "Because this program repeats the same pair of lines four times, we can do the same thing more concisely with a `for` loop." + "Como este programa repite el mismo par de líneas cuatro veces, podemos hacer lo mismo de forma más concisa con un bucle `for`." ] }, { @@ -256,9 +256,9 @@ "tags": [] }, "source": [ - "## Encapsulation and generalization\n", + "## Encapsulación y generalización\n", "\n", - "Let's take the square-drawing code from the previous section and put it in a function called `square`." + "Tomemos el código para dibujar cuadrados de la sección anterior y pongámoslo en una función llamada `square`." ] }, { @@ -279,7 +279,7 @@ "id": "0789b5d9", "metadata": {}, "source": [ - "Now we can call the function like this." + "Ahora podemos llamar a la función así." ] }, { @@ -298,11 +298,11 @@ "id": "da905fc6", "metadata": {}, "source": [ - "Wrapping a piece of code up in a function is called **encapsulation**.\n", - "One of the benefits of encapsulation is that it attaches a name to the code, which serves as a kind of documentation. Another advantage is that if you re-use the code, it is more concise to call a function twice than to copy and paste the body!\n", + "Envolver un fragmento de código en una función se llama **encapsulación**.\n", + "Uno de los beneficios de la encapsulación es que le da un nombre al código, que sirve como una especie de documentación. ¡Otra ventaja es que, si reutilizas el código, es más conciso llamar a una función dos veces que copiar y pegar el cuerpo!\n", "\n", - "In the current version, the size of the square is always `50`.\n", - "If we want to draw squares with different sizes, we can take the length of the sides as a parameter. " + "En la versión actual, el tamaño del cuadrado siempre es `50`.\n", + "Si queremos dibujar cuadrados de distintos tamaños, podemos tomar la longitud de los lados como parámetro. " ] }, { @@ -323,7 +323,7 @@ "id": "397fda4b", "metadata": {}, "source": [ - "Now we can draw squares with different sizes." + "Ahora podemos dibujar cuadrados de distintos tamaños." ] }, { @@ -343,10 +343,10 @@ "id": "5a46bf64", "metadata": {}, "source": [ - "Adding a parameter to a function is called **generalization** because it makes the function more general: with the previous version, the square is always the same size; with this version it can be any size.\n", + "Añadir un parámetro a una función se llama **generalización** porque hace que la función sea más general: con la versión anterior, el cuadrado siempre tiene el mismo tamaño; con esta versión puede tener cualquier tamaño.\n", "\n", - "If we add another parameter, we can make it even more general.\n", - "The following function draws regular polygons with a given number of sides." + "Si añadimos otro parámetro, podemos hacerla aún más general.\n", + "La siguiente función dibuja polígonos regulares con un número dado de lados." ] }, { @@ -368,9 +368,9 @@ "id": "286d3c77", "metadata": {}, "source": [ - "In a regular polygon with `n` sides, the angle between adjacent sides is `360 / n` degrees. \n", + "En un polígono regular con `n` lados, el ángulo entre lados adyacentes es de `360 / n` grados. \n", "\n", - "The following example draws a `7`-sided polygon with side length `30`." + "El siguiente ejemplo dibuja un polígono de `7` lados con longitud de lado `30`." ] }, { @@ -389,8 +389,8 @@ "id": "dc0226db", "metadata": {}, "source": [ - "When a function has more than a few numeric arguments, it is easy to forget what they are, or what order they should be in. \n", - "It can be a good idea to include the names of the parameters in the argument list." + "Cuando una función tiene más de unos pocos argumentos numéricos, es fácil olvidar qué son o en qué orden deberían ir. \n", + "Puede ser una buena idea incluir los nombres de los parámetros en la lista de argumentos." ] }, { @@ -411,10 +411,10 @@ "id": "6aa28eba", "metadata": {}, "source": [ - "These are sometimes called \"named arguments\" because they include the parameter names.\n", - "But in Python they are more often called **keyword arguments** (not to be confused with Python keywords like `for` and `def`).\n", + "A veces se llaman \"argumentos con nombre\" porque incluyen los nombres de los parámetros.\n", + "Pero en Python se llaman más a menudo **argumentos de palabra clave** (no deben confundirse con las palabras clave de Python como `for` y `def`).\n", "\n", - "This use of the assignment operator, `=`, is a reminder about how arguments and parameters work -- when you call a function, the arguments are assigned to the parameters." + "Este uso del operador de asignación, `=`, sirve como recordatorio de cómo funcionan los argumentos y los parámetros: cuando llamas a una función, los argumentos se asignan a los parámetros." ] }, { @@ -422,11 +422,11 @@ "id": "b10184b4", "metadata": {}, "source": [ - "## Approximating a circle\n", + "## Aproximar un círculo\n", "\n", - "Now suppose we want to draw a circle.\n", - "We can do that, approximately, by drawing a polygon with a large number of sides, so each side is small enough that it's hard to see.\n", - "Here is a function that uses `polygon` to draw a `30`-sided polygon that approximates a circle." + "Ahora supongamos que queremos dibujar un círculo.\n", + "Podemos hacerlo, aproximadamente, dibujando un polígono con un gran número de lados, de modo que cada lado sea lo bastante pequeño como para que cueste verlo.\n", + "Aquí tienes una función que usa `polygon` para dibujar un polígono de `30` lados que aproxima un círculo." ] }, { @@ -450,13 +450,13 @@ "id": "39023314", "metadata": {}, "source": [ - "`circle` takes the radius of the the circle as a parameter.\n", - "It computes `circumference`, which is the circumference of a circle with the given radius.\n", - "`n` is the number of sides, so `circumference / n` is the length of each side.\n", + "`circle` recibe el radio del círculo como parámetro.\n", + "Calcula `circumference`, que es la circunferencia de un círculo con el radio dado.\n", + "`n` es el número de lados, así que `circumference / n` es la longitud de cada lado.\n", "\n", - "This function might take a long time to run.\n", - "We can speed it up by calling `make_turtle` with a keyword argument called `delay` that sets the time, in seconds, the turtle waits after each step.\n", - "The default value is `0.2` seconds -- if we set it to `0.02` it runs about 10 times faster." + "Esta función podría tardar mucho en ejecutarse.\n", + "Podemos acelerarla llamando a `make_turtle` con un argumento de palabra clave llamado `delay` que establece el tiempo, en segundos, que la turtle espera después de cada paso.\n", + "El valor predeterminado es `0.2` segundos; si lo establecemos en `0.02`, se ejecuta unas 10 veces más rápido." ] }, { @@ -475,11 +475,11 @@ "id": "701f9cf8", "metadata": {}, "source": [ - "A limitation of this solution is that `n` is a constant, which means\n", - "that for very big circles, the sides are too long, and for small\n", - "circles, we waste time drawing very short sides.\n", - "One option is to generalize the function by taking `n` as a parameter.\n", - "But let's keep it simple for now." + "Una limitación de esta solución es que `n` es una constante, lo que significa\n", + "que para círculos muy grandes los lados son demasiado largos, y para círculos pequeños\n", + "perdemos tiempo dibujando lados muy cortos.\n", + "Una opción es generalizar la función tomando `n` como parámetro.\n", + "Pero mantengámoslo sencillo por ahora." ] }, { @@ -487,15 +487,15 @@ "id": "c48f262c", "metadata": {}, "source": [ - "## Refactoring\n", + "## Refactorización\n", "\n", - "Now let's write a more general version of `circle`, called `arc`, that takes a second parameter, `angle`, and draws an arc of a circle that spans the given angle.\n", - "For example, if `angle` is `360` degrees, it draws a complete circle. If `angle` is `180` degrees, it draws a half circle.\n", + "Ahora escribamos una versión más general de `circle`, llamada `arc`, que recibe un segundo parámetro, `angle`, y dibuja un arco de un círculo que abarca el ángulo dado.\n", + "Por ejemplo, si `angle` es `360` grados, dibuja un círculo completo. Si `angle` es `180` grados, dibuja un semicírculo.\n", "\n", - "To write `circle`, we were able to reuse `polygon`, because a many-sided polygon is a good approximation of a circle.\n", - "But we can't use `polygon` to write `arc`.\n", + "Para escribir `circle`, pudimos reutilizar `polygon`, porque un polígono con muchos lados es una buena aproximación de un círculo.\n", + "Pero no podemos usar `polygon` para escribir `arc`.\n", "\n", - "Instead, we'll create the more general version of `polygon`, called `polyline`." + "En su lugar, crearemos una versión más general de `polygon`, llamada `polyline`." ] }, { @@ -516,9 +516,9 @@ "id": "c2b2503e", "metadata": {}, "source": [ - "`polyline` takes as parameters the number of line segments to draw, `n`, the length of the segments, `length`, and the angle between them, `angle`.\n", + "`polyline` recibe como parámetros el número de segmentos de línea que debe dibujar, `n`, la longitud de los segmentos, `length`, y el ángulo entre ellos, `angle`.\n", "\n", - "Now we can rewrite `polygon` to use `polyline`." + "Ahora podemos reescribir `polygon` para que use `polyline`." ] }, { @@ -538,7 +538,7 @@ "id": "2714a59e", "metadata": {}, "source": [ - "And we can use `polyline` to write `arc`." + "Y podemos usar `polyline` para escribir `arc`." ] }, { @@ -561,9 +561,9 @@ "id": "3c18773c", "metadata": {}, "source": [ - "`arc` is similar to `circle`, except that it computes `arc_length`, which is a fraction of the circumference of a circle.\n", + "`arc` es similar a `circle`, salvo que calcula `arc_length`, que es una fracción de la circunferencia de un círculo.\n", "\n", - "Finally, we can rewrite `circle` to use `arc`." + "Por último, podemos reescribir `circle` para que use `arc`." ] }, { @@ -582,8 +582,8 @@ "id": "313a357c", "metadata": {}, "source": [ - "To check that these functions work as expected, we'll use them to draw something like a snail.\n", - "With `delay=0`, the turtle runs as fast as possible." + "Para comprobar que estas funciones funcionan como esperamos, las usaremos para dibujar algo parecido a un caracol.\n", + "Con `delay=0`, la turtle va lo más rápido posible." ] }, { @@ -604,12 +604,12 @@ "id": "a34da3d8", "metadata": {}, "source": [ - "In this example, we started with working code and reorganized it with different functions.\n", - "Changes like this, which improve the code without changing its behavior, are called **refactoring**.\n", + "En este ejemplo, empezamos con código que funcionaba y lo reorganizamos con funciones diferentes.\n", + "Los cambios como este, que mejoran el código sin cambiar su comportamiento, se llaman **refactorización**.\n", "\n", - "If we had planned ahead, we might have written `polyline` first and avoided refactoring, but often you don't know enough at the beginning of a project to design all the functions.\n", - "Once you start coding, you understand the problem better.\n", - "Sometimes refactoring is a sign that you have learned something." + "Si lo hubiéramos planeado con antelación, quizá habríamos escrito `polyline` primero y evitado la refactorización, pero a menudo no sabes lo suficiente al principio de un proyecto para diseñar todas las funciones.\n", + "Una vez que empiezas a programar, entiendes mejor el problema.\n", + "A veces la refactorización es una señal de que has aprendido algo." ] }, { @@ -617,10 +617,10 @@ "id": "d18c9d16", "metadata": {}, "source": [ - "## Stack diagram\n", + "## Diagrama de pila\n", "\n", - "When we call `circle`, it calls `arc`, which calls `polyline`.\n", - "We can use a stack diagram to show this sequence of function calls and the parameters for each one." + "Cuando llamamos a `circle`, llama a `arc`, que llama a `polyline`.\n", + "Podemos usar un diagrama de pila para mostrar esta secuencia de llamadas a funciones y los parámetros de cada una." ] }, { @@ -666,8 +666,8 @@ "id": "3160bba1", "metadata": {}, "source": [ - "Notice that the value of `angle` in `polyline` is different from the value of `angle` in `arc`.\n", - "Parameters are local, which means you can use the same parameter name in different functions; it's a different variable in each function, and it can refer to a different value. " + "Observa que el valor de `angle` en `polyline` es diferente del valor de `angle` en `arc`.\n", + "Los parámetros son locales, lo que significa que puedes usar el mismo nombre de parámetro en funciones diferentes; es una variable distinta en cada función y puede referirse a un valor diferente. " ] }, { @@ -675,27 +675,27 @@ "id": "c23552d3", "metadata": {}, "source": [ - "## A development plan\n", + "## Un plan de desarrollo\n", "\n", - "A **development plan** is a process for writing programs.\n", - "The process we used in this chapter is \"encapsulation and generalization\".\n", - "The steps of this process are:\n", + "Un **plan de desarrollo** es un proceso para escribir programas.\n", + "El proceso que usamos en este capítulo es \"encapsulación y generalización\".\n", + "Los pasos de este proceso son:\n", "\n", - "1. Start by writing a small program with no function definitions.\n", + "1. Empieza escribiendo un programa pequeño sin definiciones de funciones.\n", "\n", - "2. Once you get the program working, identify a coherent piece of it,\n", - " encapsulate the piece in a function and give it a name.\n", + "2. Una vez que consigas que el programa funcione, identifica una parte coherente,\n", + " encapsula esa parte en una función y dale un nombre.\n", "\n", - "3. Generalize the function by adding appropriate parameters.\n", + "3. Generaliza la función añadiendo los parámetros adecuados.\n", "\n", - "4. Repeat Steps 1 to 3 until you have a set of working functions.\n", + "4. Repite los pasos 1 a 3 hasta que tengas un conjunto de funciones que funcionen.\n", "\n", - "5. Look for opportunities to improve the program by refactoring. For\n", - " example, if you have similar code in several places, consider\n", - " factoring it into an appropriately general function.\n", + "5. Busca oportunidades para mejorar el programa mediante refactorización. Por\n", + " ejemplo, si tienes código similar en varios lugares, considera\n", + " factorizarlo en una función adecuadamente general.\n", "\n", - "This process has some drawbacks -- we will see alternatives later -- but it can be useful if you don't know ahead of time how to divide the program into functions.\n", - "This approach lets you design as you go along." + "Este proceso tiene algunas desventajas (veremos alternativas más adelante), pero puede ser útil si no sabes de antemano cómo dividir el programa en funciones.\n", + "Este enfoque te permite diseñar sobre la marcha." ] }, { @@ -703,13 +703,13 @@ "id": "a3b6b83d", "metadata": {}, "source": [ - "The design of a function has two parts:\n", + "El diseño de una función tiene dos partes:\n", "\n", - "* The **interface** is how the function is used, including its name, the parameters it takes and what the function is supposed to do.\n", + "* La **interfaz** es cómo se usa la función, incluyendo su nombre, los parámetros que recibe y lo que se supone que debe hacer.\n", "\n", - "* The **implementation** is how the function does what it's supposed to do.\n", + "* La **implementación** es cómo la función hace lo que se supone que debe hacer.\n", "\n", - "For example, here's the first version of `circle` we wrote, which uses `polygon`." + "Por ejemplo, aquí tienes la primera versión de `circle` que escribimos, que usa `polygon`." ] }, { @@ -731,7 +731,7 @@ "id": "5d3d2e79", "metadata": {}, "source": [ - "And here's the refactored version that uses `arc`." + "Y aquí tienes la versión refactorizada que usa `arc`." ] }, { @@ -750,7 +750,7 @@ "id": "b726f72c", "metadata": {}, "source": [ - "These two functions have the same interface -- they take the same parameters and do the same thing -- but they have different implementations." + "Estas dos funciones tienen la misma interfaz: reciben los mismos parámetros y hacen lo mismo, pero tienen implementaciones diferentes." ] }, { @@ -762,8 +762,8 @@ "source": [ "## Docstrings\n", "\n", - "A **docstring** is a string at the beginning of a function that explains the interface (\"doc\" is short for \"documentation\").\n", - "Here is an example:" + "Un **docstring** es un string al principio de una función que explica la interfaz (\"doc\" es la abreviatura de \"documentación\").\n", + "Aquí tienes un ejemplo:" ] }, { @@ -790,18 +790,18 @@ "id": "55b60cbc", "metadata": {}, "source": [ - "By convention, docstrings are triple-quoted strings, also known as **multiline strings** because the triple quotes allow the string to span more than one line.\n", + "Por convención, los docstrings son strings entre comillas triples, también conocidos como **strings multilínea** porque las comillas triples permiten que el string ocupe más de una línea.\n", "\n", - "A docstring should:\n", + "Un docstring debería:\n", "\n", - "* Explain concisely what the function does, without getting into the details of how it works,\n", + "* Explicar de forma concisa qué hace la función, sin entrar en los detalles de cómo funciona,\n", "\n", - "* Explain what effect each parameter has on the behavior of the function, and\n", + "* Explicar qué efecto tiene cada parámetro en el comportamiento de la función, e\n", "\n", - "* Indicate what type each parameter should be, if it is not obvious.\n", + "* Indicar qué tipo debería tener cada parámetro, si no es obvio.\n", "\n", - "Writing this kind of documentation is an important part of interface design.\n", - "A well-designed interface should be simple to explain; if you have a hard time explaining one of your functions, maybe the interface could be improved." + "Escribir este tipo de documentación es una parte importante del diseño de interfaces.\n", + "Una interfaz bien diseñada debería ser sencilla de explicar; si te cuesta explicar una de tus funciones, quizá la interfaz podría mejorarse." ] }, { @@ -809,20 +809,20 @@ "id": "f1115940", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "An interface is like a contract between a function and a caller. The\n", - "caller agrees to provide certain arguments and the function agrees to\n", - "do certain work.\n", + "Una interfaz es como un contrato entre una función y quien la llama. Quien\n", + "llama acepta proporcionar ciertos argumentos y la función acepta\n", + "hacer cierto trabajo.\n", "\n", - "For example, `polyline` requires three arguments: `n` has to be an integer; `length` should be a positive number; and `angle` has to be a number, which is understood to be in degrees.\n", + "Por ejemplo, `polyline` requiere tres argumentos: `n` tiene que ser un entero; `length` debería ser un número positivo; y `angle` tiene que ser un número, que se entiende que está en grados.\n", "\n", - "These requirements are called **preconditions** because they are supposed to be true before the function starts executing. Conversely, conditions at the end of the function are **postconditions**.\n", - "Postconditions include the intended effect of the function (like drawing line segments) and any side effects (like moving the turtle or making other changes).\n", + "Estos requisitos se llaman **precondiciones** porque se supone que deben ser verdaderos antes de que la función empiece a ejecutarse. Por el contrario, las condiciones al final de la función son **postcondiciones**.\n", + "Las postcondiciones incluyen el efecto previsto de la función (como dibujar segmentos de línea) y cualquier efecto secundario (como mover la turtle o hacer otros cambios).\n", "\n", - "Preconditions are the responsibility of the caller. If the caller violates a precondition and the function doesn't work correctly, the bug is in the caller, not the function.\n", + "Las precondiciones son responsabilidad de quien llama. Si quien llama viola una precondición y la función no funciona correctamente, el bug está en quien llama, no en la función.\n", "\n", - "If the preconditions are satisfied and the postconditions are not, the bug is in the function. If your pre- and postconditions are clear, they can help with debugging." + "Si las precondiciones se satisfacen y las postcondiciones no, el bug está en la función. Si tus precondiciones y postcondiciones están claras, pueden ayudar con la depuración." ] }, { @@ -830,40 +830,40 @@ "id": "a4d33a70", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**interface design:**\n", - "A process for designing the interface of a function, which includes the parameters it should take.\n", + "**diseño de interfaces:**\n", + "Un proceso para diseñar la interfaz de una función, que incluye los parámetros que debería recibir.\n", "\n", - "**canvas:**\n", - "A window used to display graphical elements including lines, circles, rectangles, and other shapes.\n", + "**lienzo:**\n", + "Una ventana usada para mostrar elementos gráficos, incluyendo líneas, círculos, rectángulos y otras formas.\n", "\n", - "**encapsulation:**\n", - " The process of transforming a sequence of statements into a function definition.\n", + "**encapsulación:**\n", + " El proceso de transformar una secuencia de sentencias en una definición de función.\n", "\n", - "**generalization:**\n", - " The process of replacing something unnecessarily specific (like a number) with something appropriately general (like a variable or parameter).\n", + "**generalización:**\n", + " El proceso de reemplazar algo innecesariamente específico (como un número) por algo adecuadamente general (como una variable o un parámetro).\n", "\n", - "**keyword argument:**\n", - "An argument that includes the name of the parameter.\n", + "**argumento de palabra clave:**\n", + "Un argumento que incluye el nombre del parámetro.\n", "\n", - "**refactoring:**\n", - " The process of modifying a working program to improve function interfaces and other qualities of the code.\n", + "**refactorización:**\n", + " El proceso de modificar un programa que funciona para mejorar las interfaces de las funciones y otras cualidades del código.\n", "\n", - "**development plan:**\n", - "A process for writing programs.\n", + "**plan de desarrollo:**\n", + "Un proceso para escribir programas.\n", "\n", "**docstring:**\n", - " A string that appears at the top of a function definition to document the function's interface.\n", + " Un string que aparece al principio de una definición de función para documentar la interfaz de la función.\n", "\n", - "**multiline string:**\n", - "A string enclosed in triple quotes that can span more than one line of a program.\n", + "**string multilínea:**\n", + "Un string encerrado entre comillas triples que puede ocupar más de una línea de un programa.\n", "\n", - "**precondition:**\n", - " A requirement that should be satisfied by the caller before a function starts.\n", + "**precondición:**\n", + " Un requisito que debería satisfacer quien llama antes de que empiece una función.\n", "\n", - "**postcondition:**\n", - " A requirement that should be satisfied by the function before it ends." + "**postcondición:**\n", + " Un requisito que debería satisfacer la función antes de terminar." ] }, { @@ -871,7 +871,7 @@ "id": "0bfe2e19", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -894,13 +894,13 @@ "id": "50ed5c38", "metadata": {}, "source": [ - "For the exercises below, there are a few more turtle functions you might want to use.\n", + "Para los ejercicios siguientes, hay algunas funciones más de turtle que quizá quieras usar.\n", "\n", - "* `penup` lifts the turtle's imaginary pen so it doesn't leave a trail when it moves.\n", + "* `penup` levanta el lápiz imaginario de la turtle para que no deje rastro cuando se mueve.\n", "\n", - "* `pendown` puts the pen back down.\n", + "* `pendown` vuelve a bajar el lápiz.\n", "\n", - "The following function uses `penup` and `pendown` to move the turtle without leaving a trail." + "La siguiente función usa `penup` y `pendown` para mover la turtle sin dejar rastro." ] }, { @@ -927,10 +927,10 @@ "id": "c78c1e17", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `rectangle` that draws a rectangle with given side lengths.\n", - "For example, here's a rectangle that's `80` units wide and `40` units tall." + "Escribe una función llamada `rectangle` que dibuje un rectángulo con longitudes de lado dadas.\n", + "Por ejemplo, aquí tienes un rectángulo de `80` unidades de ancho y `40` unidades de alto." ] }, { @@ -950,7 +950,7 @@ "tags": [] }, "source": [ - "You can use the following code to test your function." + "Puedes usar el siguiente código para probar tu función." ] }, { @@ -971,9 +971,9 @@ "id": "8b8faaf6", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `rhombus` that draws a rhombus with a given side length and a given interior angle. For example, here's a rhombus with side length `50` and an interior angle of `60` degrees." + "Escribe una función llamada `rhombus` que dibuje un rombo con una longitud de lado dada y un ángulo interior dado. Por ejemplo, aquí tienes un rombo con longitud de lado `50` y un ángulo interior de `60` grados." ] }, { @@ -993,7 +993,7 @@ "tags": [] }, "source": [ - "You can use the following code to test your function." + "Puedes usar el siguiente código para probar tu función." ] }, { @@ -1014,9 +1014,9 @@ "id": "a9175a90", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Now write a more general function called `parallelogram` that draws a quadrilateral with parallel sides. Then rewrite `rectangle` and `rhombus` to use `parallelogram`." + "Ahora escribe una función más general llamada `parallelogram` que dibuje un cuadrilátero con lados paralelos. Luego reescribe `rectangle` y `rhombus` para que usen `parallelogram`." ] }, { @@ -1056,7 +1056,7 @@ "tags": [] }, "source": [ - "You can use the following code to test your functions." + "Puedes usar el siguiente código para probar tus funciones." ] }, { @@ -1083,13 +1083,13 @@ "id": "991ab59d", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write an appropriately general set of functions that can draw shapes like this.\n", + "Escribe un conjunto de funciones adecuadamente general que pueda dibujar formas como esta.\n", "\n", "![](https://github.com/AllenDowney/ThinkPython/raw/v3/jupyturtle_pie.png)\n", "\n", - "Hint: Write a function called `triangle` that draws one triangular segment, and then a function called `draw_pie` that uses `triangle`." + "Pista: escribe una función llamada `triangle` que dibuje un segmento triangular, y luego una función llamada `draw_pie` que use `triangle`." ] }, { @@ -1119,7 +1119,7 @@ "tags": [] }, "source": [ - "You can use the following code to test your functions." + "Puedes usar el siguiente código para probar tus funciones." ] }, { @@ -1159,13 +1159,13 @@ "id": "9c78b76f", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write an appropriately general set of functions that can draw flowers like this.\n", + "Escribe un conjunto de funciones adecuadamente general que pueda dibujar flores como esta.\n", "\n", "![](https://github.com/AllenDowney/ThinkPython/raw/v3/jupyturtle_flower.png)\n", "\n", - "Hint: Use `arc` to write a function called `petal` that draws one flower petal." + "Pista: usa `arc` para escribir una función llamada `petal` que dibuje un pétalo de flor." ] }, { @@ -1195,12 +1195,12 @@ "tags": [] }, "source": [ - "You can use the following code to test your functions.\n", + "Puedes usar el siguiente código para probar tus funciones.\n", "\n", - "Because the solution draws a lot of small line segments, it tends to slow down as it runs.\n", - "To avoid that, you can add the keyword argument `auto_render=False` to avoid drawing after every step, and then call the `render` function at the end to show the result.\n", + "Como la solución dibuja muchos segmentos de línea pequeños, tiende a ralentizarse mientras se ejecuta.\n", + "Para evitarlo, puedes añadir el argumento de palabra clave `auto_render=False` para evitar dibujar después de cada paso, y luego llamar a la función `render` al final para mostrar el resultado.\n", "\n", - "While you are debugging, you might want to remove `auto_render=False`." + "Mientras estés depurando, quizá quieras quitar `auto_render=False`." ] }, { @@ -1248,12 +1248,12 @@ "id": "9d9f35d1", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "There are several modules like `jupyturtle` in Python, and the one we used in this chapter has been customized for this book.\n", - "So if you ask a virtual assistant for help, it won't know which module to use.\n", - "But if you give it a few examples to work with, it can probably figure it out.\n", - "For example, try this prompt and see if it can write a function that draws a spiral:\n", + "Hay varios módulos como `jupyturtle` en Python, y el que usamos en este capítulo se ha personalizado para este libro.\n", + "Así que, si pides ayuda a un asistente virtual, no sabrá qué módulo usar.\n", + "Pero si le das algunos ejemplos con los que trabajar, probablemente pueda deducirlo.\n", + "Por ejemplo, prueba este prompt y mira si puede escribir una función que dibuje una espiral:\n", "\n", "```\n", "The following program uses a turtle graphics module to draw a circle:\n", @@ -1285,9 +1285,9 @@ "id": "7beb2afe", "metadata": {}, "source": [ - "Keep in mind that the result might use features we have not seen yet, and it might have errors.\n", - "Copy the code from the VA and see if you can get it working.\n", - "If you didn't get what you wanted, try modifying the prompt.\n" + "Ten en cuenta que el resultado podría usar características que aún no hemos visto, y podría tener errores.\n", + "Copia el código del asistente virtual y comprueba si puedes hacerlo funcionar.\n", + "Si no obtuviste lo que querías, prueba a modificar el prompt.\n" ] }, { @@ -1317,13 +1317,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/chapters/chap05.ipynb b/chapters/chap05.ipynb index 23e5094..73237f2 100644 --- a/chapters/chap05.ipynb +++ b/chapters/chap05.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes comprar versiones impresas y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -42,12 +42,12 @@ "id": "75b60d6c", "metadata": {}, "source": [ - "# Conditionals and Recursion\n", + "# Condicionales y recursión\n", "\n", - "The main topic of this chapter is the `if` statement, which executes different code depending on the state of the program.\n", - "And with the `if` statement we'll be able to explore one of the most powerful ideas in computing, **recursion**.\n", + "El tema principal de este capítulo es la sentencia `if`, que ejecuta código distinto según el estado del programa.\n", + "Y con la sentencia `if` podremos explorar una de las ideas más potentes de la informática: la **recursión**.\n", "\n", - "But we'll start with three new features: the modulus operator, boolean expressions, and logical operators." + "Pero empezaremos con tres características nuevas: el operador módulo, las expresiones booleanas y los operadores lógicos." ] }, { @@ -55,13 +55,13 @@ "id": "4ab7caf4", "metadata": {}, "source": [ - "## Integer division and modulus\n", + "## División entera y módulo\n", "\n", - "Recall that the integer division operator, `//`, divides two numbers and rounds\n", - "down to an integer.\n", - "For example, suppose the run time of a movie is 105 minutes. \n", - "You might want to know how long that is in hours.\n", - "Conventional division returns a floating-point number:" + "Recuerda que el operador de división entera, `//`, divide dos números y redondea\n", + "hacia abajo hasta un entero.\n", + "Por ejemplo, supón que la duración de una película es de 105 minutos. \n", + "Puede que quieras saber cuánto es eso en horas.\n", + "La división convencional devuelve un número de punto flotante:" ] }, { @@ -80,8 +80,8 @@ "id": "3f224403", "metadata": {}, "source": [ - "But we don't normally write hours with decimal points.\n", - "Integer division returns the integer number of hours, rounding down:" + "Pero normalmente no escribimos las horas con decimales.\n", + "La división entera devuelve el número entero de horas, redondeando hacia abajo:" ] }, { @@ -101,7 +101,7 @@ "id": "bfa9b0cf", "metadata": {}, "source": [ - "To get the remainder, you could subtract off one hour in minutes:" + "Para obtener el resto, podrías restar una hora expresada en minutos:" ] }, { @@ -120,7 +120,7 @@ "id": "05caf27f", "metadata": {}, "source": [ - "Or you could use the **modulus operator**, `%`, which divides two numbers and returns the remainder." + "O podrías usar el **operador módulo**, `%`, que divide dos números y devuelve el resto." ] }, { @@ -139,12 +139,12 @@ "id": "18c1e0d0", "metadata": {}, "source": [ - "The modulus operator is more useful than it might seem.\n", - "For example, it can check whether one number is divisible by another -- if `x % y` is zero, then `x` is divisible by `y`.\n", + "El operador módulo es más útil de lo que podría parecer.\n", + "Por ejemplo, puede comprobar si un número es divisible por otro: si `x % y` es cero, entonces `x` es divisible por `y`.\n", "\n", - "Also, it can extract the right-most digit or digits from a number.\n", - "For example, `x % 10` yields the right-most digit of `x` (in base 10).\n", - "Similarly, `x % 100` yields the last two digits." + "También puede extraer el dígito o los dígitos más a la derecha de un número.\n", + "Por ejemplo, `x % 10` produce el dígito más a la derecha de `x` (en base 10).\n", + "De forma similar, `x % 100` produce los dos últimos dígitos." ] }, { @@ -173,8 +173,8 @@ "id": "f2344fc0", "metadata": {}, "source": [ - "Finally, the modulus operator can do \"clock arithmetic\".\n", - "For example, if an event starts at 11 AM and lasts three hours, we can use the modulus operator to figure out what time it ends." + "Por último, el operador módulo puede hacer «aritmética de reloj».\n", + "Por ejemplo, si un evento empieza a las 11 AM y dura tres horas, podemos usar el operador módulo para averiguar a qué hora termina." ] }, { @@ -195,7 +195,7 @@ "id": "351c30df", "metadata": {}, "source": [ - "The event would end at 2 PM." + "El evento terminaría a las 2 PM." ] }, { @@ -203,10 +203,10 @@ "id": "5ed1b58b", "metadata": {}, "source": [ - "## Boolean Expressions\n", + "## Expresiones booleanas\n", "\n", - "A **boolean expression** is an expression that is either true or false.\n", - "For example, the following expressions use the equals operator, `==`, which compares two values and produces `True` if they are equal and `False` otherwise:" + "Una **expresión booleana** es una expresión que es verdadera o falsa.\n", + "Por ejemplo, las siguientes expresiones usan el operador de igualdad, `==`, que compara dos valores y produce `True` si son iguales y `False` en caso contrario:" ] }, { @@ -234,8 +234,8 @@ "id": "41fbc642", "metadata": {}, "source": [ - "A common error is to use a single equal sign (`=`) instead of a double equal sign (`==`).\n", - "Remember that `=` assigns a value to a variable and `==` compares two values. " + "Un error común es usar un solo signo igual (`=`) en lugar de un doble signo igual (`==`).\n", + "Recuerda que `=` asigna un valor a una variable y `==` compara dos valores. " ] }, { @@ -264,8 +264,8 @@ "id": "d3ec6b48", "metadata": {}, "source": [ - "`True` and `False` are special values that belong to the type `bool`;\n", - "they are not strings:" + "`True` y `False` son valores especiales que pertenecen al tipo `bool`;\n", + "no son cadenas:" ] }, { @@ -293,7 +293,7 @@ "id": "451b2e8d", "metadata": {}, "source": [ - "The `==` operator is one of the **relational operators**; the others are:" + "El operador `==` es uno de los **operadores relacionales**; los otros son:" ] }, { @@ -351,12 +351,12 @@ "id": "db5a9477", "metadata": {}, "source": [ - "## Logical operators\n", + "## Operadores lógicos\n", "\n", - "To combine boolean values into expressions, we can use **logical operators**.\n", - "The most common are `and`, ` or`, and `not`.\n", - "The meaning of these operators is similar to their meaning in English.\n", - "For example, the value of the following expression is `True` only if `x` is greater than `0` *and* less than `10`." + "Para combinar valores booleanos en expresiones, podemos usar **operadores lógicos**.\n", + "Los más comunes son `and`, ` or` y `not`.\n", + "El significado de estos operadores es parecido a su significado en inglés.\n", + "Por ejemplo, el valor de la siguiente expresión es `True` solo si `x` es mayor que `0` *y* menor que `10`." ] }, { @@ -374,7 +374,7 @@ "id": "e8c14026", "metadata": {}, "source": [ - "The following expression is `True` if *either or both* of the conditions is true, that is, if the number is divisible by 2 *or* 3:" + "La siguiente expresión es `True` si *una o ambas* condiciones son verdaderas, es decir, si el número es divisible por 2 *o* por 3:" ] }, { @@ -392,7 +392,7 @@ "id": "3bd0ef52", "metadata": {}, "source": [ - "Finally, the `not` operator negates a boolean expression, so the following expression is `True` if `x > y` is `False`." + "Por último, el operador `not` niega una expresión booleana, de modo que la siguiente expresión es `True` si `x > y` es `False`." ] }, { @@ -410,8 +410,8 @@ "id": "fc6098c2", "metadata": {}, "source": [ - "Strictly speaking, the operands of a logical operator should be boolean expressions, but Python is not very strict.\n", - "Any nonzero number is interpreted as `True`:" + "En sentido estricto, los operandos de un operador lógico deberían ser expresiones booleanas, pero Python no es muy estricto.\n", + "Cualquier número distinto de cero se interpreta como `True`:" ] }, { @@ -429,8 +429,8 @@ "id": "102ceab9", "metadata": {}, "source": [ - "This flexibility can be useful, but there are some subtleties to it that can be confusing.\n", - "You might want to avoid it." + "Esta flexibilidad puede ser útil, pero tiene algunas sutilezas que pueden resultar confusas.\n", + "Quizá prefieras evitarla." ] }, { @@ -438,12 +438,12 @@ "id": "6b0f2dc1", "metadata": {}, "source": [ - "## if statements\n", + "## Sentencias `if`\n", "\n", - "In order to write useful programs, we almost always need the ability to\n", - "check conditions and change the behavior of the program accordingly.\n", - "**Conditional statements** give us this ability. The simplest form is\n", - "the `if` statement:" + "Para escribir programas útiles, casi siempre necesitamos la capacidad de\n", + "comprobar condiciones y cambiar el comportamiento del programa en consecuencia.\n", + "Las **sentencias condicionales** nos dan esta capacidad. La forma más sencilla es\n", + "la sentencia `if`:" ] }, { @@ -462,16 +462,16 @@ "id": "973f705e", "metadata": {}, "source": [ - "`if` is a Python keyword.\n", - "`if` statements have the same structure as function definitions: a\n", - "header followed by an indented statement or sequence of statements called a **block**.\n", + "`if` es una palabra clave de Python.\n", + "Las sentencias `if` tienen la misma estructura que las definiciones de función: una\n", + "cabecera seguida de una sentencia indentada o de una secuencia de sentencias llamada **bloque**.\n", "\n", - "The boolean expression after `if` is called the **condition**.\n", - "If it is true, the statements in the indented block run. If not, they don't.\n", + "La expresión booleana que va después de `if` se llama **condición**.\n", + "Si es verdadera, se ejecutan las sentencias del bloque indentado. Si no, no se ejecutan.\n", "\n", - "There is no limit to the number of statements that can appear in the block, but there has to be at least one.\n", - "Occasionally, it is useful to have a block that does nothing -- usually as a place keeper for code you haven't written yet.\n", - "In that case, you can use the `pass` statement, which does nothing." + "No hay límite para el número de sentencias que pueden aparecer en el bloque, pero tiene que haber al menos una.\n", + "A veces resulta útil tener un bloque que no hace nada, normalmente como marcador de posición para código que todavía no has escrito.\n", + "En ese caso, puedes usar la sentencia `pass`, que no hace nada." ] }, { @@ -490,7 +490,7 @@ "id": "adf3f6c5", "metadata": {}, "source": [ - "The word `TODO` in a comment is a conventional reminder that there's something you need to do later." + "La palabra `TODO` en un comentario es un recordatorio convencional de que hay algo que tienes que hacer más adelante." ] }, { @@ -498,10 +498,10 @@ "id": "eb39bcd9", "metadata": {}, "source": [ - "## The `else` clause\n", + "## La cláusula `else`\n", "\n", - "An `if` statement can have a second part, called an `else` clause.\n", - "The syntax looks like this:" + "Una sentencia `if` puede tener una segunda parte, llamada cláusula `else`.\n", + "La sintaxis tiene este aspecto:" ] }, { @@ -522,14 +522,14 @@ "id": "e7dc8943", "metadata": {}, "source": [ - "If the condition is true, the first indented statement runs; otherwise, the second indented statement runs.\n", + "Si la condición es verdadera, se ejecuta la primera sentencia indentada; si no, se ejecuta la segunda sentencia indentada.\n", "\n", - "In this example, if `x` is even, the remainder when `x` is divided by `2` is `0`, so the condition is true and the program displays `x is even`.\n", - "If `x` is odd, the remainder is `1`, so the condition\n", - "is false, and the program displays `x is odd`.\n", + "En este ejemplo, si `x` es par, el resto al dividir `x` entre `2` es `0`, así que la condición es verdadera y el programa muestra `x is even`.\n", + "Si `x` es impar, el resto es `1`, así que la condición\n", + "es falsa, y el programa muestra `x is odd`.\n", "\n", - "Since the condition must be true or false, exactly one of the alternatives will run. \n", - "The alternatives are called **branches**." + "Como la condición debe ser verdadera o falsa, se ejecutará exactamente una de las alternativas. \n", + "Las alternativas se llaman **ramas**." ] }, { @@ -537,10 +537,10 @@ "id": "20c8adb6", "metadata": {}, "source": [ - "## Chained conditionals\n", + "## Condicionales encadenados\n", "\n", - "Sometimes there are more than two possibilities and we need more than two branches.\n", - "One way to express a computation like that is a **chained conditional**, which includes an `elif` clause." + "A veces hay más de dos posibilidades y necesitamos más de dos ramas.\n", + "Una forma de expresar un cálculo así es un **condicional encadenado**, que incluye una cláusula `elif`." ] }, { @@ -563,15 +563,15 @@ "id": "46916379", "metadata": {}, "source": [ - "`elif` is an abbreviation of \"else if\".\n", - "There is no limit on the number of `elif` clauses.\n", - "If there is an `else` clause, it has to be at the end, but there doesn't have to be\n", - "one.\n", + "`elif` es una abreviatura de «else if».\n", + "No hay límite en el número de cláusulas `elif`.\n", + "Si hay una cláusula `else`, tiene que ir al final, pero no tiene por qué haber\n", + "una.\n", "\n", - "Each condition is checked in order.\n", - "If the first is false, the next is checked, and so on.\n", - "If one of them is true, the corresponding branch runs and the `if` statement ends.\n", - "Even if more than one condition is true, only the first true branch runs." + "Cada condición se comprueba en orden.\n", + "Si la primera es falsa, se comprueba la siguiente, y así sucesivamente.\n", + "Si una de ellas es verdadera, se ejecuta la rama correspondiente y termina la sentencia `if`.\n", + "Aunque más de una condición sea verdadera, solo se ejecuta la primera rama verdadera." ] }, { @@ -579,10 +579,10 @@ "id": "e0c0b9dd", "metadata": {}, "source": [ - "## Nested Conditionals\n", + "## Condicionales anidados\n", "\n", - "One conditional can also be nested within another.\n", - "We could have written the example in the previous section like this:" + "Un condicional también puede estar anidado dentro de otro.\n", + "Podríamos haber escrito el ejemplo de la sección anterior así:" ] }, { @@ -606,15 +606,15 @@ "id": "29f67a0a", "metadata": {}, "source": [ - "The outer `if` statement contains two branches. \n", - "The first branch contains a simple statement. The second branch contains another `if` statement, which has two branches of its own.\n", - "Those two branches are both simple statements, although they could have been conditional statements as well.\n", + "La sentencia `if` exterior contiene dos ramas. \n", + "La primera rama contiene una sentencia sencilla. La segunda rama contiene otra sentencia `if`, que tiene dos ramas propias.\n", + "Esas dos ramas son ambas sentencias sencillas, aunque también podrían haber sido sentencias condicionales.\n", "\n", - "Although the indentation of the statements makes the structure apparent, **nested conditionals** can be difficult to read.\n", - "I suggest you avoid them when you can.\n", + "Aunque la indentación de las sentencias hace visible la estructura, los **condicionales anidados** pueden ser difíciles de leer.\n", + "Te sugiero que los evites cuando puedas.\n", "\n", - "Logical operators often provide a way to simplify nested conditional statements.\n", - "Here's an example with a nested conditional." + "Los operadores lógicos suelen proporcionar una forma de simplificar sentencias condicionales anidadas.\n", + "Aquí tienes un ejemplo con un condicional anidado." ] }, { @@ -634,7 +634,7 @@ "id": "5292eb11", "metadata": {}, "source": [ - "The `print` statement runs only if we make it past both conditionals, so we get the same effect with the `and` operator." + "La sentencia `print` se ejecuta solo si superamos ambos condicionales, así que conseguimos el mismo efecto con el operador `and`." ] }, { @@ -653,7 +653,7 @@ "id": "dd8e808a", "metadata": {}, "source": [ - "For this kind of condition, Python provides a more concise option:" + "Para este tipo de condición, Python ofrece una opción más concisa:" ] }, { @@ -672,11 +672,11 @@ "id": "db583cd9", "metadata": {}, "source": [ - "## Recursion\n", + "## Recursión\n", "\n", - "It is legal for a function to call itself.\n", - "It may not be obvious why that is a good thing, but it turns out to be one of the most magical things a program can do.\n", - "Here's an example." + "Es legal que una función se llame a sí misma.\n", + "Puede que no sea obvio por qué eso es algo bueno, pero resulta ser una de las cosas más mágicas que puede hacer un programa.\n", + "Aquí tienes un ejemplo." ] }, { @@ -699,10 +699,10 @@ "id": "c88e0dc7", "metadata": {}, "source": [ - "If `n` is 0 or negative, `countdown` outputs the word, \"Blastoff!\" Otherwise, it\n", - "outputs `n` and then calls itself, passing `n-1` as an argument.\n", + "Si `n` es 0 o negativo, `countdown` muestra la palabra «Blastoff!». En caso contrario,\n", + "muestra `n` y luego se llama a sí misma, pasando `n-1` como argumento.\n", "\n", - "Here's what happens when we call this function with the argument `3`." + "Esto es lo que ocurre cuando llamamos a esta función con el argumento `3`." ] }, { @@ -720,23 +720,23 @@ "id": "3f3c87ec", "metadata": {}, "source": [ - "The execution of `countdown` begins with `n=3`, and since `n` is greater\n", - "than `0`, it displays `3`, and then calls itself\\...\n", + "La ejecución de `countdown` empieza con `n=3`, y como `n` es mayor\n", + "que `0`, muestra `3` y luego se llama a sí misma\\...\n", "\n", - "> The execution of `countdown` begins with `n=2`, and since `n` is\n", - "> greater than `0`, it displays `2`, and then calls itself\\...\n", + "> La ejecución de `countdown` empieza con `n=2`, y como `n` es\n", + "> mayor que `0`, muestra `2` y luego se llama a sí misma\\...\n", ">\n", - "> > The execution of `countdown` begins with `n=1`, and since `n` is\n", - "> > greater than `0`, it displays `1`, and then calls itself\\...\n", + "> > La ejecución de `countdown` empieza con `n=1`, y como `n` es\n", + "> > mayor que `0`, muestra `1` y luego se llama a sí misma\\...\n", "> >\n", - "> > > The execution of `countdown` begins with `n=0`, and since `n` is\n", - "> > > not greater than `0`, it displays \"Blastoff!\" and returns.\n", + "> > > La ejecución de `countdown` empieza con `n=0`, y como `n` no es\n", + "> > > mayor que `0`, muestra «Blastoff!» y retorna.\n", "> >\n", - "> > The `countdown` that got `n=1` returns.\n", + "> > La `countdown` que recibió `n=1` retorna.\n", ">\n", - "> The `countdown` that got `n=2` returns.\n", + "> La `countdown` que recibió `n=2` retorna.\n", "\n", - "The `countdown` that got `n=3` returns." + "La `countdown` que recibió `n=3` retorna." ] }, { @@ -744,8 +744,8 @@ "id": "782e95bb", "metadata": {}, "source": [ - "A function that calls itself is **recursive**.\n", - "As another example, we can write a function that prints a string `n` times." + "Una función que se llama a sí misma es **recursiva**.\n", + "Como otro ejemplo, podemos escribir una función que imprime una cadena `n` veces." ] }, { @@ -766,11 +766,11 @@ "id": "73d07c17", "metadata": {}, "source": [ - "If `n` is positive, `print_n_times` displays the value of `string` and then calls itself, passing along `string` and `n-1` as arguments.\n", + "Si `n` es positivo, `print_n_times` muestra el valor de `string` y luego se llama a sí misma, pasando `string` y `n-1` como argumentos.\n", "\n", - "If `n` is `0` or negative, the condition is false and `print_n_times` does nothing.\n", + "Si `n` es `0` o negativo, la condición es falsa y `print_n_times` no hace nada.\n", "\n", - "Here's how it works." + "Así es como funciona." ] }, { @@ -788,9 +788,9 @@ "id": "1fb55a78", "metadata": {}, "source": [ - "For simple examples like this, it is probably easier to use a `for`\n", - "loop. But we will see examples later that are hard to write with a `for`\n", - "loop and easy to write with recursion, so it is good to start early." + "Para ejemplos sencillos como este, probablemente sea más fácil usar un bucle `for`.\n", + "Pero más adelante veremos ejemplos que son difíciles de escribir con un bucle `for`\n", + "y fáciles de escribir con recursión, así que conviene empezar pronto." ] }, { @@ -798,9 +798,9 @@ "id": "c652c739", "metadata": {}, "source": [ - "## Stack diagrams for recursive functions\n", + "## Diagramas de stack para funciones recursivas\n", "\n", - "Here's a stack diagram that shows the frames created when we called `countdown` with `n = 3`." + "Aquí tienes un diagrama de stack que muestra los marcos creados cuando llamamos a `countdown` con `n = 3`." ] }, { @@ -846,9 +846,9 @@ "id": "9282331b", "metadata": {}, "source": [ - "The four `countdown` frames have different values for the parameter `n`.\n", - "The bottom of the stack, where `n=0`, is called the **base case**.\n", - "It does not make a recursive call, so there are no more frames." + "Los cuatro marcos de `countdown` tienen valores distintos para el parámetro `n`.\n", + "La parte inferior del stack, donde `n=0`, se llama **caso base**.\n", + "No hace una llamada recursiva, así que no hay más marcos." ] }, { @@ -882,12 +882,12 @@ "id": "37bbc2b8", "metadata": {}, "source": [ - "## Infinite recursion\n", + "## Recursión infinita\n", "\n", - "If a recursion never reaches a base case, it goes on making recursive\n", - "calls forever, and the program never terminates. This is known as\n", - "**infinite recursion**, and it is generally not a good idea.\n", - "Here's a minimal function with an infinite recursion." + "Si una recursión nunca alcanza un caso base, sigue haciendo llamadas\n", + "recursivas para siempre, y el programa nunca termina. Esto se conoce como\n", + "**recursión infinita**, y por lo general no es una buena idea.\n", + "Aquí tienes una función mínima con una recursión infinita." ] }, { @@ -906,9 +906,9 @@ "id": "450a20ac", "metadata": {}, "source": [ - "Every time `recurse` is called, it calls itself, which creates another frame.\n", - "In Python, there is a limit to the number of frames that can be on the stack at the same time.\n", - "If a program exceeds the limit, it causes a runtime error." + "Cada vez que se llama a `recurse`, se llama a sí misma, lo que crea otro marco.\n", + "En Python, hay un límite para el número de marcos que pueden estar en el stack al mismo tiempo.\n", + "Si un programa supera el límite, provoca un error en tiempo de ejecución." ] }, { @@ -942,9 +942,9 @@ "id": "39fc5c31", "metadata": {}, "source": [ - "The traceback indicates that there were almost 3000 frames on the stack when the error occurred.\n", + "El traceback indica que había casi 3000 marcos en el stack cuando ocurrió el error.\n", "\n", - "If you encounter an infinite recursion by accident, review your function to confirm that there is a base case that does not make a recursive call. And if there is a base case, check whether you are guaranteed to reach it." + "Si te encuentras por accidente con una recursión infinita, revisa tu función para confirmar que hay un caso base que no hace una llamada recursiva. Y si hay un caso base, comprueba si tienes garantizado llegar a él." ] }, { @@ -952,15 +952,15 @@ "id": "45299414", "metadata": {}, "source": [ - "## Keyboard input\n", + "## Entrada por teclado\n", "\n", - "The programs we have written so far accept no input from the user. They\n", - "just do the same thing every time.\n", + "Los programas que hemos escrito hasta ahora no aceptan entrada del usuario. Simplemente\n", + "hacen lo mismo cada vez.\n", "\n", - "Python provides a built-in function called `input` that stops the\n", - "program and waits for the user to type something. When the user presses\n", - "*Return* or *Enter*, the program resumes and `input` returns what the user\n", - "typed as a string." + "Python proporciona una función integrada llamada `input` que detiene el\n", + "programa y espera a que el usuario escriba algo. Cuando el usuario pulsa\n", + "*Return* o *Enter*, el programa continúa y `input` devuelve lo que el usuario\n", + "ha escrito como una cadena." ] }, { @@ -990,8 +990,8 @@ "id": "acf9ec53", "metadata": {}, "source": [ - "Before getting input from the user, you might want to display a prompt\n", - "telling the user what to type. `input` can take a prompt as an argument:" + "Antes de obtener entrada del usuario, puede que quieras mostrar un prompt\n", + "que le indique qué debe escribir. `input` puede recibir un prompt como argumento:" ] }, { @@ -1022,9 +1022,10 @@ "id": "1b754b39", "metadata": {}, "source": [ - "The sequence `\\n` at the end of the prompt represents a **newline**, which is a special character that causes a line break -- that way the user's input appears below the prompt.\n", + "La secuencia `\n", + "` al final del prompt representa una **nueva línea**, que es un carácter especial que provoca un salto de línea; así, la entrada del usuario aparece debajo del prompt.\n", "\n", - "If you expect the user to type an integer, you can use the `int` function to convert the return value to `int`." + "Si esperas que el usuario escriba un entero, puedes usar la función `int` para convertir el valor de retorno a `int`." ] }, { @@ -1056,7 +1057,7 @@ "id": "0a65f2af", "metadata": {}, "source": [ - "But if they type something that's not an integer, you'll get a runtime error." + "Pero si escribe algo que no es un entero, obtendrás un error en tiempo de ejecución." ] }, { @@ -1090,7 +1091,7 @@ "id": "a4ce3ed5", "metadata": {}, "source": [ - "We will see how to handle this kind of error later." + "Más adelante veremos cómo manejar este tipo de error." ] }, { @@ -1100,17 +1101,16 @@ "source": [ "## Debugging\n", "\n", - "When a syntax or runtime error occurs, the error message contains a lot\n", - "of information, but it can be overwhelming. The most useful parts are\n", - "usually:\n", + "Cuando ocurre un error de sintaxis o en tiempo de ejecución, el mensaje de error contiene mucha\n", + "información, pero puede resultar abrumador. Las partes más útiles suelen ser:\n", "\n", - "- What kind of error it was, and\n", + "- Qué tipo de error fue, y\n", "\n", - "- Where it occurred.\n", + "- Dónde ocurrió.\n", "\n", - "Syntax errors are usually easy to find, but there are a few gotchas.\n", - "Errors related to spaces and tabs can be tricky because they are invisible\n", - "and we are used to ignoring them." + "Los errores de sintaxis suelen ser fáciles de encontrar, pero hay algunas trampas.\n", + "Los errores relacionados con espacios y tabulaciones pueden ser complicados porque son invisibles\n", + "y estamos acostumbrados a ignorarlos." ] }, { @@ -1132,12 +1132,12 @@ "id": "d1d06263", "metadata": {}, "source": [ - "In this example, the problem is that the second line is indented by one space.\n", - "But the error message points to `y`, which is misleading.\n", - "Error messages indicate where the problem was discovered, but the actual error might be earlier in the code.\n", + "En este ejemplo, el problema es que la segunda línea está indentada con un espacio.\n", + "Pero el mensaje de error señala a `y`, lo que resulta engañoso.\n", + "Los mensajes de error indican dónde se descubrió el problema, pero el error real podría estar antes en el código.\n", "\n", - "The same is true of runtime errors. \n", - "For example, suppose you are trying to convert a ratio to decibels, like this:" + "Lo mismo ocurre con los errores en tiempo de ejecución. \n", + "Por ejemplo, supón que intentas convertir una razón a decibelios, así:" ] }, { @@ -1174,11 +1174,11 @@ "id": "55914374", "metadata": {}, "source": [ - "The error message indicates line 5, but there is nothing wrong with that line.\n", - "The problem is in line 4, which uses integer division instead of floating-point division -- as a result, the value of `ratio` is `0`.\n", - "When we call `math.log10`, we get a `ValueError` with the message `math domain error`, because `0` is not in the \"domain\" of valid arguments for `math.log10`, because the logarithm of `0` is undefined.\n", + "El mensaje de error indica la línea 5, pero no hay nada malo en esa línea.\n", + "El problema está en la línea 4, que usa división entera en lugar de división de punto flotante; como resultado, el valor de `ratio` es `0`.\n", + "Cuando llamamos a `math.log10`, obtenemos un `ValueError` con el mensaje `math domain error`, porque `0` no está en el «dominio» de argumentos válidos para `math.log10`, ya que el logaritmo de `0` no está definido.\n", "\n", - "In general, you should take the time to read error messages carefully, but don't assume that everything they say is correct." + "En general, deberías tomarte el tiempo de leer cuidadosamente los mensajes de error, pero no asumas que todo lo que dicen es correcto." ] }, { @@ -1186,53 +1186,53 @@ "id": "8ffe690e", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**recursion:**\n", - "The process of calling the function that is currently executing.\n", + "**recursión:**\n", + "El proceso de llamar a la función que se está ejecutando en ese momento.\n", "\n", - "**modulus operator:**\n", - "An operator, `%`, that works on integers and returns the remainder when one number is divided by another.\n", + "**operador módulo:**\n", + "Un operador, `%`, que funciona con enteros y devuelve el resto cuando un número se divide entre otro.\n", "\n", - "**boolean expression:**\n", - "An expression whose value is either `True` or `False`.\n", + "**expresión booleana:**\n", + "Una expresión cuyo valor es `True` o `False`.\n", "\n", - "**relational operator:**\n", - "One of the operators that compares its operands: `==`, `!=`, `>`, `<`, `>=`, and `<=`.\n", + "**operador relacional:**\n", + "Uno de los operadores que compara sus operandos: `==`, `!=`, `>`, `<`, `>=` y `<=`.\n", "\n", - "**logical operator:**\n", - "One of the operators that combines boolean expressions, including `and`, `or`, and `not`.\n", + "**operador lógico:**\n", + "Uno de los operadores que combina expresiones booleanas, incluidos `and`, `or` y `not`.\n", "\n", - "**conditional statement:**\n", - "A statement that controls the flow of execution depending on some condition.\n", + "**sentencia condicional:**\n", + "Una sentencia que controla el flujo de ejecución dependiendo de alguna condición.\n", "\n", - "**condition:**\n", - "The boolean expression in a conditional statement that determines which branch runs.\n", + "**condición:**\n", + "La expresión booleana en una sentencia condicional que determina qué rama se ejecuta.\n", "\n", - "**block:**\n", - "One or more statements indented to indicate they are part of another statement.\n", + "**bloque:**\n", + "Una o más sentencias indentadas para indicar que forman parte de otra sentencia.\n", "\n", - "**branch:**\n", - "One of the alternative sequences of statements in a conditional statement.\n", + "**rama:**\n", + "Una de las secuencias alternativas de sentencias en una sentencia condicional.\n", "\n", - "**chained conditional:**\n", - "A conditional statement with a series of alternative branches.\n", + "**condicional encadenado:**\n", + "Una sentencia condicional con una serie de ramas alternativas.\n", "\n", - "**nested conditional:**\n", - "A conditional statement that appears in one of the branches of another conditional statement.\n", + "**condicional anidado:**\n", + "Una sentencia condicional que aparece en una de las ramas de otra sentencia condicional.\n", "\n", - "**recursive:**\n", - "A function that calls itself is recursive.\n", + "**recursiva:**\n", + "Una función que se llama a sí misma es recursiva.\n", "\n", - "**base case:**\n", - "A conditional branch in a recursive function that does not make a recursive call.\n", + "**caso base:**\n", + "Una rama condicional en una función recursiva que no hace una llamada recursiva.\n", "\n", - "**infinite recursion:**\n", - "A recursion that doesn't have a base case, or never reaches it.\n", - "Eventually, an infinite recursion causes a runtime error.\n", + "**recursión infinita:**\n", + "Una recursión que no tiene caso base o que nunca lo alcanza.\n", + "Con el tiempo, una recursión infinita provoca un error en tiempo de ejecución.\n", "\n", - "**newline:**\n", - "A character that creates a line break between two parts of a string." + "**nueva línea:**\n", + "Un carácter que crea un salto de línea entre dos partes de una cadena." ] }, { @@ -1240,7 +1240,7 @@ "id": "8d783953", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1263,15 +1263,15 @@ "id": "02f9f1d7", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "* Ask a virtual assistant, \"What are some uses of the modulus operator?\"\n", + "* Pregunta a un asistente virtual: «¿Cuáles son algunos usos del operador módulo?»\n", "\n", - "* Python provides operators to compute the logical operations `and`, `or`, and `not`, but it doesn't have an operator that computes the exclusive `or` operation, usually written `xor`. Ask an assistant \"What is the logical xor operation and how do I compute it in Python?\"\n", + "* Python proporciona operadores para calcular las operaciones lógicas `and`, `or` y `not`, pero no tiene un operador que calcule la operación `or` exclusiva, que normalmente se escribe `xor`. Pregunta a un asistente: «¿Qué es la operación lógica xor y cómo la calculo en Python?»\n", "\n", - "In this chapter, we saw two ways to write an `if` statement with three branches, using a chained conditional or a nested conditional.\n", - "You can use a virtual assistant to convert from one to the other.\n", - "For example, ask a VA, \"Convert this statement to a chained conditional.\"" + "En este capítulo, vimos dos formas de escribir una sentencia `if` con tres ramas: usando un condicional encadenado o un condicional anidado.\n", + "Puedes usar un asistente virtual para convertir de una forma a la otra.\n", + "Por ejemplo, pregunta a un asistente virtual: «Convierte esta sentencia en un condicional encadenado»." ] }, { @@ -1308,7 +1308,7 @@ "id": "9c2a8466", "metadata": {}, "source": [ - "Ask a VA, \"Rewrite this statement with a single conditional.\"" + "Pregunta a un asistente virtual: «Reescribe esta sentencia con un único condicional»." ] }, { @@ -1328,7 +1328,7 @@ "id": "e0fbed08", "metadata": {}, "source": [ - "See if a VA can simplify this unnecessary complexity." + "Comprueba si un asistente virtual puede simplificar esta complejidad innecesaria." ] }, { @@ -1347,7 +1347,7 @@ "id": "74ef776d", "metadata": {}, "source": [ - "Here's an attempt at a recursive function that counts down by two." + "Aquí tienes un intento de función recursiva que cuenta hacia atrás de dos en dos." ] }, { @@ -1370,7 +1370,7 @@ "id": "77178e79", "metadata": {}, "source": [ - "It seems to work." + "Parece funcionar." ] }, { @@ -1388,8 +1388,8 @@ "id": "c9d3a8dc", "metadata": {}, "source": [ - "But it has an error. Ask a virtual assistant what's wrong and how to fix it.\n", - "Paste the solution it provides back here and test it." + "Pero tiene un error. Pregunta a un asistente virtual qué está mal y cómo arreglarlo.\n", + "Pega aquí la solución que te proporcione y pruébala." ] }, { @@ -1397,10 +1397,10 @@ "id": "240a3888", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The `time` module provides a function, also called `time`, that returns\n", - "returns the number of seconds since the \"Unix epoch\", which is January 1, 1970, 00:00:00 UTC (Coordinated Universal Time)." + "El módulo `time` proporciona una función, también llamada `time`, que devuelve\n", + "el número de segundos transcurridos desde la «época Unix», que es el 1 de enero de 1970, 00:00:00 UTC (tiempo universal coordinado)." ] }, { @@ -1421,7 +1421,7 @@ "id": "054c3197", "metadata": {}, "source": [ - "Use integer division and the modulus operator to compute the number of days since January 1, 1970 and the current time of day in hours, minutes, and seconds." + "Usa la división entera y el operador módulo para calcular el número de días transcurridos desde el 1 de enero de 1970 y la hora actual del día en horas, minutos y segundos." ] }, { @@ -1431,7 +1431,7 @@ "tags": [] }, "source": [ - "You can read more about the `time` module at ." + "Puedes leer más sobre el módulo `time` en ." ] }, { @@ -1479,23 +1479,22 @@ "id": "6b1fd514", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "If you are given three sticks, you may or may not be able to arrange\n", - "them in a triangle. For example, if one of the sticks is 12 inches long\n", - "and the other two are one inch long, you will not be able to get the\n", - "short sticks to meet in the middle. For any three lengths, there is a\n", - "test to see if it is possible to form a triangle:\n", + "Si te dan tres palos, puede que puedas colocarlos formando un triángulo, o puede que no. Por ejemplo, si uno de los palos mide 12 pulgadas\n", + "y los otros dos miden una pulgada, no podrás hacer que los\n", + "palos cortos se encuentren en el centro. Para tres longitudes cualesquiera, hay una\n", + "prueba para ver si es posible formar un triángulo:\n", "\n", - "> If any of the three lengths is greater than the sum of the other two,\n", - "> then you cannot form a triangle. Otherwise, you can. (If the sum of\n", - "> two lengths equals the third, they form what is called a \"degenerate\"\n", - "> triangle.)\n", + "> Si cualquiera de las tres longitudes es mayor que la suma de las otras dos,\n", + "> entonces no puedes formar un triángulo. En caso contrario, sí puedes. (Si la suma de\n", + "> dos longitudes es igual a la tercera, forman lo que se llama un triángulo\n", + "> «degenerado».)\n", "\n", - "Write a function named `is_triangle` that takes three integers as\n", - "arguments, and that prints either \"Yes\" or \"No\", depending on\n", - "whether you can or cannot form a triangle from sticks with the given\n", - "lengths. Hint: Use a chained conditional.\n", + "Escribe una función llamada `is_triangle` que reciba tres enteros como\n", + "argumentos, y que imprima «Yes» o «No», dependiendo de\n", + "si se puede o no formar un triángulo con palos de las longitudes dadas.\n", + "Pista: usa un condicional encadenado.\n", "\n" ] }, @@ -1518,7 +1517,7 @@ "tags": [] }, "source": [ - "Test your function with the following cases." + "Prueba tu función con los siguientes casos." ] }, { @@ -1574,10 +1573,10 @@ "id": "2ba42106", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "What is the output of the following program? Draw a stack diagram that\n", - "shows the state of the program when it prints the result." + "¿Cuál es la salida del siguiente programa? Dibuja un diagrama de stack que\n", + "muestre el estado del programa cuando imprime el resultado." ] }, { @@ -1623,14 +1622,14 @@ "id": "bca9517d", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The following exercises use the `jupyturtle` module, described in Chapter 4.\n", + "Los siguientes ejercicios usan el módulo `jupyturtle`, descrito en el Capítulo 4.\n", "\n", - "Read the following function and see if you can figure out what it does.\n", - "Then run it and see if you got it right.\n", - "Adjust the values of `length`, `angle` and `factor` and see what effect they have on the result.\n", - "If you are not sure you understand how it works, try asking a virtual assistant." + "Lee la siguiente función y mira si puedes averiguar qué hace.\n", + "Luego ejecútala y comprueba si acertaste.\n", + "Ajusta los valores de `length`, `angle` y `factor`, y observa qué efecto tienen en el resultado.\n", + "Si no tienes claro cómo funciona, prueba a preguntar a un asistente virtual." ] }, { @@ -1671,30 +1670,30 @@ "id": "e525ba59", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Ask a virtual assistant \"What is the Koch curve?\"\n", + "Pregunta a un asistente virtual: «¿Qué es la curva de Koch?»\n", "\n", - "To draw a Koch curve with length `x`, all you\n", - "have to do is\n", + "Para dibujar una curva de Koch con longitud `x`, todo lo que\n", + "tienes que hacer es\n", "\n", - "1. Draw a Koch curve with length `x/3`.\n", + "1. Dibujar una curva de Koch con longitud `x/3`.\n", "\n", - "2. Turn left 60 degrees.\n", + "2. Girar a la izquierda 60 grados.\n", "\n", - "3. Draw a Koch curve with length `x/3`.\n", + "3. Dibujar una curva de Koch con longitud `x/3`.\n", "\n", - "4. Turn right 120 degrees.\n", + "4. Girar a la derecha 120 grados.\n", "\n", - "5. Draw a Koch curve with length `x/3`.\n", + "5. Dibujar una curva de Koch con longitud `x/3`.\n", "\n", - "6. Turn left 60 degrees.\n", + "6. Girar a la izquierda 60 grados.\n", "\n", - "7. Draw a Koch curve with length `x/3`.\n", + "7. Dibujar una curva de Koch con longitud `x/3`.\n", "\n", - "The exception is if `x` is less than `5` -- in that case, you can just draw a straight line with length `x`.\n", + "La excepción es si `x` es menor que `5`; en ese caso, puedes dibujar simplemente una línea recta con longitud `x`.\n", "\n", - "Write a function called `koch` that takes `x` as an argument and draws a Koch curve with the given length.\n" + "Escribe una función llamada `koch` que reciba `x` como argumento y dibuje una curva de Koch con la longitud dada.\n" ] }, { @@ -1712,7 +1711,7 @@ "id": "2991143a", "metadata": {}, "source": [ - "The result should look like this:" + "El resultado debería verse así:" ] }, { @@ -1733,7 +1732,7 @@ "tags": [] }, "source": [ - "Once you have koch working, you can use this loop to draw three Koch curves in the shape of a snowflake." + "Cuando tengas `koch` funcionando, puedes usar este bucle para dibujar tres curvas de Koch con forma de copo de nieve." ] }, { @@ -1756,17 +1755,17 @@ "id": "4c964239", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Virtual assistants know about the functions in the `jupyturtle` module, but there are many versions of these functions, with different names, so a VA might not know which one you are talking about.\n", + "Los asistentes virtuales conocen las funciones del módulo `jupyturtle`, pero hay muchas versiones de estas funciones, con nombres distintos, así que un asistente virtual podría no saber de cuál estás hablando.\n", "\n", - "To solve this problem, you can provide additional information before you ask a question.\n", - "For example, you could start a prompt with \"Here's a program that uses the `jupyturtle` module,\" and then paste in one of the examples from this chapter.\n", - "After that, the VA should be able to generate code that uses this module.\n", + "Para resolver este problema, puedes proporcionar información adicional antes de hacer una pregunta.\n", + "Por ejemplo, podrías empezar un prompt con «Aquí tienes un programa que usa el módulo `jupyturtle`», y luego pegar uno de los ejemplos de este capítulo.\n", + "Después de eso, el asistente virtual debería poder generar código que use este módulo.\n", "\n", - "As an example, ask a VA for a program that draws a Sierpiński triangle.\n", - "The code you get should be a good starting place, but you might have to do some debugging.\n", - "If the first attempt doesn't work, you can tell the VA what happened and ask for help -- or you can debug it yourself." + "Como ejemplo, pide a un asistente virtual un programa que dibuje un triángulo de Sierpiński.\n", + "El código que obtengas debería ser un buen punto de partida, pero quizá tengas que hacer algo de debugging.\n", + "Si el primer intento no funciona, puedes contarle al asistente virtual qué ocurrió y pedir ayuda, o puedes depurarlo por tu cuenta." ] }, { @@ -1784,7 +1783,7 @@ "id": "6a95097a", "metadata": {}, "source": [ - "Here's what the result might look like, although the version you get might be different." + "Este es un posible aspecto del resultado, aunque la versión que obtengas podría ser diferente." ] }, { @@ -1818,9 +1817,11 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/chapters/chap06.ipynb b/chapters/chap06.ipynb index a8d03c3..943d61c 100644 --- a/chapters/chap06.ipynb +++ b/chapters/chap06.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes comprar las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -41,16 +41,16 @@ "id": "88ecc443", "metadata": {}, "source": [ - "# Return Values\n", + "# Valores de retorno\n", "\n", - "In previous chapters, we've used built-in functions -- like `abs` and `round` -- and functions in the math module -- like `sqrt` and `pow`.\n", - "When you call one of these functions, it returns a value you can assign to a variable or use as part of an expression.\n", + "En capítulos anteriores, hemos usado funciones integradas -- como `abs` y `round` -- y funciones del módulo math -- como `sqrt` y `pow`.\n", + "Cuando llamas a una de estas funciones, devuelve un valor que puedes asignar a una variable o usar como parte de una expresión.\n", "\n", - "The functions we have written so far are different.\n", - "Some use the `print` function to display values, and some use turtle functions to draw figures.\n", - "But they don't return values we assign to variables or use in expressions.\n", + "Las funciones que hemos escrito hasta ahora son diferentes.\n", + "Algunas usan la función `print` para mostrar valores, y otras usan funciones de turtle para dibujar figuras.\n", + "Pero no devuelven valores que asignemos a variables o usemos en expresiones.\n", "\n", - "In this chapter, we'll see how to write functions that return values." + "En este capítulo veremos cómo escribir funciones que devuelven valores." ] }, { @@ -58,10 +58,10 @@ "id": "6cf2cf80", "metadata": {}, "source": [ - "## Some functions have return values\n", + "## Algunas funciones tienen valores de retorno\n", "\n", - "When you call a function like `math.sqrt`, the result is called a **return value**.\n", - "If the function call appears at the end of a cell, Jupyter displays the return value immediately." + "Cuando llamas a una función como `math.sqrt`, el resultado se llama **valor de retorno**.\n", + "Si la llamada a la función aparece al final de una celda, Jupyter muestra inmediatamente el valor de retorno." ] }, { @@ -81,7 +81,7 @@ "id": "4b4885c2", "metadata": {}, "source": [ - "If you assign the return value to a variable, it doesn't get displayed." + "Si asignas el valor de retorno a una variable, no se muestra." ] }, { @@ -99,7 +99,7 @@ "id": "196c692b", "metadata": {}, "source": [ - "But you can display it later." + "Pero puedes mostrarlo más tarde." ] }, { @@ -117,7 +117,7 @@ "id": "257b28d5", "metadata": {}, "source": [ - "Or you can use the return value as part of an expression." + "O puedes usar el valor de retorno como parte de una expresión." ] }, { @@ -135,7 +135,7 @@ "id": "23ed47ab", "metadata": {}, "source": [ - "Here's an example of a function that returns a value." + "Aquí tienes un ejemplo de una función que devuelve un valor." ] }, { @@ -155,11 +155,12 @@ "id": "273acabc", "metadata": {}, "source": [ - "`circle_area` takes `radius` as a parameter and computes the area of a circle with that radius.\n", + "`circle_area` toma `radius` como parámetro y calcula el área de un círculo con ese radio.\n", "\n", - "The last line is a `return` statement that returns the value of `area`.\n", + "La última línea es una sentencia `return` que devuelve el valor de `area`.\n", "\n", - "If we call the function like this, Jupyter displays the return value.\n" + "Si llamamos a la función así, Jupyter muestra el valor de retorno.\n", + "\n" ] }, { @@ -177,7 +178,7 @@ "id": "4f28bfd6", "metadata": {}, "source": [ - "We can assign the return value to a variable." + "Podemos asignar el valor de retorno a una variable." ] }, { @@ -195,7 +196,7 @@ "id": "3f82fe70", "metadata": {}, "source": [ - "Or use it as part of an expression." + "O usarlo como parte de una expresión." ] }, { @@ -213,7 +214,7 @@ "id": "15122fd2", "metadata": {}, "source": [ - "Later we can display the value of the variable we assigned the result to." + "Más tarde podemos mostrar el valor de la variable a la que asignamos el resultado." ] }, { @@ -231,7 +232,7 @@ "id": "a3f6dcae", "metadata": {}, "source": [ - "But we can't access `area`." + "Pero no podemos acceder a `area`." ] }, { @@ -253,7 +254,7 @@ "id": "f8ace9ce", "metadata": {}, "source": [ - "`area` is a local variable in a function, so we can't access it from outside the function." + "`area` es una variable local dentro de una función, así que no podemos acceder a ella desde fuera de la función." ] }, { @@ -261,10 +262,10 @@ "id": "41a4f03f", "metadata": {}, "source": [ - "## And some have None\n", + "## Y algunas tienen None\n", "\n", - "If a function doesn't have a `return` statement, it returns `None`, which is a special value like `True` and `False`.\n", - "For example, here's the `repeat` function from Chapter 3." + "Si una función no tiene una sentencia `return`, devuelve `None`, que es un valor especial como `True` y `False`.\n", + "Por ejemplo, aquí está la función `repeat` del Capítulo 3." ] }, { @@ -283,7 +284,7 @@ "id": "6ada19cf", "metadata": {}, "source": [ - "If we call it like this, it displays the first line of the Monty Python song \"Finland\"." + "Si la llamamos así, muestra la primera línea de la canción \"Finland\" de Monty Python." ] }, { @@ -301,8 +302,8 @@ "id": "fe49f5e5", "metadata": {}, "source": [ - "This function uses the `print` function to display a string, but it does not use a `return` statement to return a value.\n", - "If we assign the result to a variable, it displays the string anyway. " + "Esta función usa la función `print` para mostrar una cadena, pero no usa una sentencia `return` para devolver un valor.\n", + "Si asignamos el resultado a una variable, muestra la cadena de todos modos. " ] }, { @@ -320,7 +321,7 @@ "id": "4ecabbdb", "metadata": {}, "source": [ - "And if we display the value of the variable, we get nothing." + "Y si mostramos el valor de la variable, no obtenemos nada." ] }, { @@ -338,8 +339,8 @@ "id": "07033959", "metadata": {}, "source": [ - "`result` actually has a value, but Jupyter doesn't show it.\n", - "However, we can display it like this." + "`result` en realidad tiene un valor, pero Jupyter no lo muestra.\n", + "Sin embargo, podemos mostrarlo así." ] }, { @@ -357,9 +358,9 @@ "id": "379b98c5", "metadata": {}, "source": [ - "The return value from `repeat` is `None`.\n", + "El valor de retorno de `repeat` es `None`.\n", "\n", - "Now here's a function similar to `repeat` except that has a return value." + "Ahora aquí tienes una función parecida a `repeat`, excepto que sí tiene un valor de retorno." ] }, { @@ -378,10 +379,10 @@ "id": "db6ad3d4", "metadata": {}, "source": [ - "Notice that we can use an expression in a `return` statement, not just a variable.\n", + "Observa que podemos usar una expresión en una sentencia `return`, no solo una variable.\n", "\n", - "With this version, we can assign the result to a variable.\n", - "When the function runs, it doesn't display anything." + "Con esta versión, podemos asignar el resultado a una variable.\n", + "Cuando la función se ejecuta, no muestra nada." ] }, { @@ -399,7 +400,7 @@ "id": "1232cd8a", "metadata": {}, "source": [ - "But later we can display the value assigned to `line`." + "Pero más tarde podemos mostrar el valor asignado a `line`." ] }, { @@ -417,7 +418,7 @@ "id": "ae02c7d2", "metadata": {}, "source": [ - "A function like this is called a **pure function** because it doesn't display anything or have any other effect -- other than returning a value." + "Una función como esta se llama **función pura** porque no muestra nada ni tiene ningún otro efecto -- aparte de devolver un valor." ] }, { @@ -425,9 +426,9 @@ "id": "567ae734", "metadata": {}, "source": [ - "## Return values and conditionals\n", + "## Valores de retorno y condicionales\n", "\n", - "If Python did not provide `abs`, we could write it like this." + "Si Python no proporcionara `abs`, podríamos escribirla así." ] }, { @@ -449,12 +450,12 @@ "id": "ffd559b8", "metadata": {}, "source": [ - "If `x` is negative, the first `return` statement returns `-x` and the function ends immediately.\n", - "Otherwise, the second `return` statement returns `x` and the function ends.\n", - "So this function is correct.\n", + "Si `x` es negativo, la primera sentencia `return` devuelve `-x` y la función termina inmediatamente.\n", + "En caso contrario, la segunda sentencia `return` devuelve `x` y la función termina.\n", + "Así que esta función es correcta.\n", "\n", - "However, if you put `return` statements in a conditional, you have to make sure that every possible path through the program hits a `return` statement.\n", - "For example, here's an incorrect version of `absolute_value`." + "Sin embargo, si pones sentencias `return` en un condicional, tienes que asegurarte de que todos los caminos posibles del programa lleguen a una sentencia `return`.\n", + "Por ejemplo, aquí tienes una versión incorrecta de `absolute_value`." ] }, { @@ -476,7 +477,7 @@ "id": "da3280ae", "metadata": {}, "source": [ - "Here's what happens if we call this function with `0` as an argument." + "Esto es lo que ocurre si llamamos a esta función con `0` como argumento." ] }, { @@ -494,9 +495,9 @@ "id": "5733f239", "metadata": {}, "source": [ - "We get nothing! Here's the problem: when `x` is `0`, neither condition is true, and the function ends without hitting a `return` statement, which means that the return value is `None`, so Jupyter displays nothing.\n", + "¡No obtenemos nada! Este es el problema: cuando `x` es `0`, ninguna condición es verdadera, y la función termina sin llegar a una sentencia `return`, lo que significa que el valor de retorno es `None`, así que Jupyter no muestra nada.\n", "\n", - "As another example, here's a version of `absolute_value` with an extra `return` statement at the end." + "Como otro ejemplo, aquí tienes una versión de `absolute_value` con una sentencia `return` adicional al final." ] }, { @@ -520,12 +521,12 @@ "id": "cf5486fd", "metadata": {}, "source": [ - "If `x` is negative, the first `return` statement runs and the function ends.\n", - "Otherwise the second `return` statement runs and the function ends.\n", - "Either way, we never get to the third `return` statement -- so it can never run.\n", + "Si `x` es negativo, se ejecuta la primera sentencia `return` y la función termina.\n", + "En caso contrario, se ejecuta la segunda sentencia `return` y la función termina.\n", + "De cualquier manera, nunca llegamos a la tercera sentencia `return` -- así que nunca puede ejecutarse.\n", "\n", - "Code that can never run is called **dead code**.\n", - "In general, dead code doesn't do any harm, but it often indicates a misunderstanding, and it might be confusing to someone trying to understand the program." + "El código que nunca puede ejecutarse se llama **código muerto**.\n", + "En general, el código muerto no hace daño, pero a menudo indica un malentendido y podría confundir a alguien que intenta entender el programa." ] }, { @@ -535,22 +536,22 @@ "tags": [] }, "source": [ - "## Incremental development\n", + "## Desarrollo incremental\n", "\n", - "As you write larger functions, you might find yourself spending more\n", - "time debugging.\n", - "To deal with increasingly complex programs, you might want to try **incremental development**, which is a way of adding and testing only a small amount of code at a time.\n", + "A medida que escribas funciones más grandes, puede que notes que pasas más\n", + "tiempo depurando.\n", + "Para enfrentarte a programas cada vez más complejos, quizá quieras probar el **desarrollo incremental**, que es una forma de añadir y probar solo una pequeña cantidad de código cada vez.\n", "\n", - "As an example, suppose you want to find the distance between two points represented by the coordinates $(x_1, y_1)$ and $(x_2, y_2)$.\n", - "By the Pythagorean theorem, the distance is:\n", + "Como ejemplo, supón que quieres encontrar la distancia entre dos puntos representados por las coordenadas $(x_1, y_1)$ y $(x_2, y_2)$.\n", + "Por el teorema de Pitágoras, la distancia es:\n", "\n", "$$\\mathrm{distance} = \\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}$$ \n", "\n", - "The first step is to consider what a `distance` function should look like in Python -- that is, what are the inputs (parameters) and what is the output (return value)?\n", + "El primer paso es considerar cómo debería ser una función `distance` en Python -- es decir, cuáles son las entradas (parámetros) y cuál es la salida (valor de retorno).\n", "\n", - "For this function, the inputs are the coordinates of the points.\n", - "The return value is the distance.\n", - "Immediately you can write an outline of the function:" + "Para esta función, las entradas son las coordenadas de los puntos.\n", + "El valor de retorno es la distancia.\n", + "De inmediato puedes escribir un esquema de la función:" ] }, { @@ -569,10 +570,10 @@ "id": "7b384fcf", "metadata": {}, "source": [ - "This version doesn't compute distances yet -- it always returns zero.\n", - "But it is a complete function with a return value, which means that you can test it before you make it more complicated.\n", + "Esta versión todavía no calcula distancias -- siempre devuelve cero.\n", + "Pero es una función completa con un valor de retorno, lo que significa que puedes probarla antes de hacerla más complicada.\n", "\n", - "To test the new function, we'll call it with sample arguments:" + "Para probar la nueva función, la llamaremos con argumentos de ejemplo:" ] }, { @@ -590,13 +591,13 @@ "id": "13a98096", "metadata": {}, "source": [ - "I chose these values so that the horizontal distance is `3` and the\n", - "vertical distance is `4`.\n", - "That way, the result is `5`, the hypotenuse of a `3-4-5` right triangle. When testing a function, it is useful to know the right answer.\n", + "Elegí estos valores para que la distancia horizontal sea `3` y la\n", + "distancia vertical sea `4`.\n", + "Así, el resultado es `5`, la hipotenusa de un triángulo rectángulo `3-4-5`. Al probar una función, es útil conocer la respuesta correcta.\n", "\n", - "At this point we have confirmed that the function runs and returns a value, and we can start adding code to the body.\n", - "A good next step is to find the differences `x2 - x1` and `y2 - y1`. \n", - "Here's a version that stores those values in temporary variables and displays them." + "En este punto hemos confirmado que la función se ejecuta y devuelve un valor, y podemos empezar a añadir código al cuerpo.\n", + "Un buen siguiente paso es encontrar las diferencias `x2 - x1` e `y2 - y1`. \n", + "Aquí tienes una versión que almacena esos valores en variables temporales y los muestra." ] }, { @@ -619,10 +620,10 @@ "id": "c342a3bd", "metadata": {}, "source": [ - "If the function is working, it should display `dx is 3` and `dy is 4`.\n", - "If so, we know that the function is getting the right arguments and\n", - "performing the first computation correctly. If not, there are only a few\n", - "lines to check." + "Si la función funciona, debería mostrar `dx is 3` y `dy is 4`.\n", + "Si es así, sabemos que la función está recibiendo los argumentos correctos y\n", + "realizando correctamente el primer cálculo. Si no, solo hay unas pocas\n", + "líneas que revisar." ] }, { @@ -640,7 +641,7 @@ "id": "9424eca9", "metadata": {}, "source": [ - "Good so far. Next we compute the sum of squares of `dx` and `dy`:" + "Hasta aquí, bien. A continuación calculamos la suma de los cuadrados de `dx` e `dy`:" ] }, { @@ -663,7 +664,7 @@ "id": "e28262f9", "metadata": {}, "source": [ - "Again, we can run the function and check the output, which should be `25`. " + "De nuevo, podemos ejecutar la función y comprobar la salida, que debería ser `25`. " ] }, { @@ -681,7 +682,7 @@ "id": "c09f0ddc", "metadata": {}, "source": [ - "Finally, we can use `math.sqrt` to compute the distance:" + "Por último, podemos usar `math.sqrt` para calcular la distancia:" ] }, { @@ -704,7 +705,7 @@ "id": "f27902ac", "metadata": {}, "source": [ - "And test it." + "Y probarla." ] }, { @@ -722,9 +723,9 @@ "id": "8ad2e626", "metadata": {}, "source": [ - "The result is correct, but this version of the function displays the result rather than returning it, so the return value is `None`.\n", + "El resultado es correcto, pero esta versión de la función muestra el resultado en lugar de devolverlo, así que el valor de retorno es `None`.\n", "\n", - "We can fix that by replacing the `print` function with a `return` statement." + "Podemos arreglarlo sustituyendo la función `print` por una sentencia `return`." ] }, { @@ -747,8 +748,8 @@ "id": "f3a13a14", "metadata": {}, "source": [ - "This version of `distance` is a pure function.\n", - "If we call it like this, only the result is displayed." + "Esta versión de `distance` es una función pura.\n", + "Si la llamamos así, solo se muestra el resultado." ] }, { @@ -766,7 +767,7 @@ "id": "7db8cf86", "metadata": {}, "source": [ - "And if we assign the result to a variable, nothing is displayed." + "Y si asignamos el resultado a una variable, no se muestra nada." ] }, { @@ -784,20 +785,20 @@ "id": "0c3b8829", "metadata": {}, "source": [ - "The `print` statements we wrote are useful for debugging, but once the function is working, we can remove them. \n", - "Code like that is called **scaffolding** because it is helpful for building the program but is not part of the final product.\n", + "Las sentencias `print` que escribimos son útiles para depurar, pero una vez que la función funciona, podemos eliminarlas. \n", + "El código de ese tipo se llama **andamiaje** porque ayuda a construir el programa, pero no forma parte del producto final.\n", "\n", - "This example demonstrates incremental development.\n", - "The key aspects of this process are:\n", + "Este ejemplo demuestra el desarrollo incremental.\n", + "Los aspectos clave de este proceso son:\n", "\n", - "1. Start with a working program, make small changes, and test after every change.\n", + "1. Empieza con un programa que funcione, haz cambios pequeños y prueba después de cada cambio.\n", "\n", - "2. Use variables to hold intermediate values so you can display and check them.\n", + "2. Usa variables para guardar valores intermedios, de modo que puedas mostrarlos y comprobarlos.\n", "\n", - "3. Once the program is working, remove the scaffolding.\n", + "3. Una vez que el programa funcione, elimina el andamiaje.\n", "\n", - "At any point, if there is an error, you should have a good idea where it is.\n", - "Incremental development can save you a lot of debugging time." + "En cualquier punto, si hay un error, deberías tener una buena idea de dónde está.\n", + "El desarrollo incremental puede ahorrarte mucho tiempo de debugging." ] }, { @@ -805,10 +806,10 @@ "id": "3dd7514f", "metadata": {}, "source": [ - "## Boolean functions\n", + "## Funciones booleanas\n", "\n", - "Functions can return the boolean values `True` and `False`, which is often convenient for encapsulating a complex test in a function.\n", - "For example, `is_divisible` checks whether `x` is divisible by `y` with no remainder." + "Las funciones pueden devolver los valores booleanos `True` y `False`, lo que a menudo resulta conveniente para encapsular una prueba compleja en una función.\n", + "Por ejemplo, `is_divisible` comprueba si `x` es divisible por `y` sin resto." ] }, { @@ -830,7 +831,7 @@ "id": "f3a58afb", "metadata": {}, "source": [ - "Here's how we use it." + "Así es como la usamos." ] }, { @@ -858,8 +859,8 @@ "id": "e9103ece", "metadata": {}, "source": [ - "Inside the function, the result of the `==` operator is a boolean, so we can write the\n", - "function more concisely by returning it directly." + "Dentro de la función, el resultado del operador `==` es un booleano, así que podemos escribir la\n", + "función de forma más concisa devolviéndolo directamente." ] }, { @@ -878,7 +879,7 @@ "id": "4d82dae5", "metadata": {}, "source": [ - "Boolean functions are often used in conditional statements." + "Las funciones booleanas se usan a menudo en sentencias condicionales." ] }, { @@ -897,7 +898,7 @@ "id": "9e232afc", "metadata": {}, "source": [ - "It might be tempting to write something like this:" + "Podría ser tentador escribir algo como esto:" ] }, { @@ -916,7 +917,7 @@ "id": "ff9e5160", "metadata": {}, "source": [ - "But the comparison is unnecessary." + "Pero la comparación es innecesaria." ] }, { @@ -924,27 +925,27 @@ "id": "a932a966", "metadata": {}, "source": [ - "## Recursion with return values\n", + "## Recursión con valores de retorno\n", "\n", - "Now that we can write functions with return values, we can write recursive functions with return values, and with that capability, we have passed an important threshold -- the subset of Python we have is now **Turing complete**, which means that we can perform any computation that can be described by an algorithm.\n", + "Ahora que podemos escribir funciones con valores de retorno, podemos escribir funciones recursivas con valores de retorno, y con esa capacidad hemos cruzado un umbral importante -- el subconjunto de Python que tenemos ahora es **Turing completo**, lo que significa que podemos realizar cualquier cálculo que pueda describirse mediante un algoritmo.\n", "\n", - "To demonstrate recursion with return values, we'll evaluate a few recursively defined mathematical functions.\n", - "A recursive definition is similar to a circular definition, in the sense that the definition refers to the thing being defined. A truly circular definition is not very useful:\n", + "Para demostrar la recursión con valores de retorno, evaluaremos algunas funciones matemáticas definidas de forma recursiva.\n", + "Una definición recursiva se parece a una definición circular, en el sentido de que la definición se refiere a la cosa que se está definiendo. Una definición verdaderamente circular no es muy útil:\n", "\n", - "> vorpal: An adjective used to describe something that is vorpal.\n", + "> vorpal: Un adjetivo usado para describir algo que es vorpal.\n", "\n", - "If you saw that definition in the dictionary, you might be annoyed. \n", - "On the other hand, if you looked up the definition of the factorial function, denoted with the symbol $!$, you might get something like this: \n", + "Si vieras esa definición en el diccionario, quizá te molestaría. \n", + "Por otro lado, si buscaras la definición de la función factorial, denotada con el símbolo $!$, podrías encontrar algo como esto: \n", "\n", - "$$\\begin{aligned}\n", - "0! &= 1 \\\\\n", + "$$\begin{aligned}\n", + "0! &= 1 \\\n", "n! &= n~(n-1)!\n", "\\end{aligned}$$ \n", "\n", - "This definition says that the factorial of $0$ is $1$, and the factorial of any other value, $n$, is $n$ multiplied by the factorial of $n-1$.\n", + "Esta definición dice que el factorial de $0$ es $1$, y que el factorial de cualquier otro valor, $n$, es $n$ multiplicado por el factorial de $n-1$.\n", "\n", - "If you can write a recursive definition of something, you can write a Python program to evaluate it. \n", - "Following an incremental development process, we'll start with a function that take `n` as a parameter and always returns `0`." + "Si puedes escribir una definición recursiva de algo, puedes escribir un programa en Python para evaluarlo. \n", + "Siguiendo un proceso de desarrollo incremental, empezaremos con una función que toma `n` como parámetro y siempre devuelve `0`." ] }, { @@ -963,7 +964,7 @@ "id": "ee1f63b8", "metadata": {}, "source": [ - "Now let's add the first part of the definition -- if the argument happens to be `0`, all we have to do is return `1`:" + "Ahora añadamos la primera parte de la definición -- si resulta que el argumento es `0`, todo lo que tenemos que hacer es devolver `1`:" ] }, { @@ -985,8 +986,8 @@ "id": "4f2fd7c7", "metadata": {}, "source": [ - "Now let's fill in the second part -- if `n` is not `0`, we have to make a recursive\n", - "call to find the factorial of `n-1` and then multiply the result by `n`:" + "Ahora completemos la segunda parte -- si `n` no es `0`, tenemos que hacer una llamada recursiva\n", + "para encontrar el factorial de `n-1` y luego multiplicar el resultado por `n`:" ] }, { @@ -1009,32 +1010,32 @@ "id": "da3d1595", "metadata": {}, "source": [ - "The flow of execution for this program is similar to the flow of `countdown` in Chapter 5.\n", - "If we call `factorial` with the value `3`:\n", + "El flujo de ejecución de este programa es similar al flujo de `countdown` en el Capítulo 5.\n", + "Si llamamos a `factorial` con el valor `3`:\n", "\n", - "Since `3` is not `0`, we take the second branch and calculate the factorial\n", - "of `n-1`\\...\n", + "Como `3` no es `0`, tomamos la segunda rama y calculamos el factorial\n", + "de `n-1`\\...\n", "\n", - "> Since `2` is not `0`, we take the second branch and calculate the\n", - "> factorial of `n-1`\\...\n", + "> Como `2` no es `0`, tomamos la segunda rama y calculamos el\n", + "> factorial de `n-1`\\...\n", ">\n", - "> > Since `1` is not `0`, we take the second branch and calculate the\n", - "> > factorial of `n-1`\\...\n", + "> > Como `1` no es `0`, tomamos la segunda rama y calculamos el\n", + "> > factorial de `n-1`\\...\n", "> >\n", - "> > > Since `0` equals `0`, we take the first branch and return `1` without\n", - "> > > making any more recursive calls.\n", + "> > > Como `0` es igual a `0`, tomamos la primera rama y devolvemos `1` sin\n", + "> > > hacer más llamadas recursivas.\n", "> >\n", - "> > The return value, `1`, is multiplied by `n`, which is `1`, and the\n", - "> > result is returned.\n", + "> > El valor de retorno, `1`, se multiplica por `n`, que es `1`, y se\n", + "> > devuelve el resultado.\n", ">\n", - "> The return value, `1`, is multiplied by `n`, which is `2`, and the result\n", - "> is returned.\n", + "> El valor de retorno, `1`, se multiplica por `n`, que es `2`, y se devuelve\n", + "> el resultado.\n", "\n", - "The return value `2` is multiplied by `n`, which is `3`, and the result,\n", - "`6`, becomes the return value of the function call that started the whole\n", - "process.\n", + "El valor de retorno `2` se multiplica por `n`, que es `3`, y el resultado,\n", + "`6`, se convierte en el valor de retorno de la llamada a la función que inició todo el\n", + "proceso.\n", "\n", - "The following figure shows the stack diagram for this sequence of function calls." + "La figura siguiente muestra el diagrama de pila para esta secuencia de llamadas a funciones." ] }, { @@ -1093,10 +1094,10 @@ "id": "f924c539", "metadata": {}, "source": [ - "The return values are shown being passed back up the stack.\n", - "In each frame, the return value is the product of `n` and `recurse`.\n", + "Los valores de retorno se muestran pasando de vuelta hacia arriba por la pila.\n", + "En cada marco, el valor de retorno es el producto de `n` y `recurse`.\n", "\n", - "In the last frame, the local variable `recurse` does not exist because the branch that creates it does not run." + "En el último marco, la variable local `recurse` no existe porque la rama que la crea no se ejecuta." ] }, { @@ -1104,20 +1105,20 @@ "id": "acea9dc1", "metadata": {}, "source": [ - "## Leap of faith\n", + "## Salto de fe\n", "\n", - "Following the flow of execution is one way to read programs, but it can quickly become overwhelming. An alternative is what I call the \"leap of faith\". When you come to a function call, instead of following the flow of execution, you *assume* that the function works correctly and returns the right result.\n", + "Seguir el flujo de ejecución es una forma de leer programas, pero puede volverse abrumadora rápidamente. Una alternativa es lo que llamo el \"salto de fe\". Cuando llegas a una llamada a una función, en lugar de seguir el flujo de ejecución, *asumes* que la función funciona correctamente y devuelve el resultado adecuado.\n", "\n", - "In fact, you are already practicing this leap of faith when you use built-in functions.\n", - "When you call `abs` or `math.sqrt`, you don't examine the bodies of those functions -- you just assume that they work.\n", + "De hecho, ya estás practicando este salto de fe cuando usas funciones integradas.\n", + "Cuando llamas a `abs` o `math.sqrt`, no examinas los cuerpos de esas funciones -- simplemente asumes que funcionan.\n", "\n", - "The same is true when you call one of your own functions. For example, earlier we wrote a function called `is_divisible` that determines whether one number is divisible by another. Once we convince ourselves that this function is correct, we can use it without looking at the body again.\n", + "Lo mismo ocurre cuando llamas a una de tus propias funciones. Por ejemplo, antes escribimos una función llamada `is_divisible` que determina si un número es divisible por otro. Una vez que nos convencemos de que esta función es correcta, podemos usarla sin volver a mirar el cuerpo.\n", "\n", - "The same is true of recursive programs.\n", - "When you get to the recursive call, instead of following the flow of execution, you should assume that the recursive call works and then ask yourself, \"Assuming that I can compute the factorial of $n-1$, can I compute the factorial of $n$?\"\n", - "The recursive definition of factorial implies that you can, by multiplying by $n$.\n", + "Lo mismo ocurre con los programas recursivos.\n", + "Cuando llegas a la llamada recursiva, en lugar de seguir el flujo de ejecución, deberías asumir que la llamada recursiva funciona y luego preguntarte: \"Suponiendo que puedo calcular el factorial de $n-1$, ¿puedo calcular el factorial de $n$?\"\n", + "La definición recursiva del factorial implica que sí puedes, multiplicando por $n$.\n", "\n", - "Of course, it's a bit strange to assume that the function works correctly when you haven't finished writing it, but that's why it's called a leap of faith!" + "Por supuesto, es un poco extraño asumir que la función funciona correctamente cuando aún no has terminado de escribirla, ¡pero por eso se llama salto de fe!" ] }, { @@ -1129,15 +1130,15 @@ "source": [ "## Fibonacci\n", "\n", - "After `factorial`, the most common example of a recursive function is `fibonacci`, which has the following definition: \n", + "Después de `factorial`, el ejemplo más común de función recursiva es `fibonacci`, que tiene la siguiente definición: \n", "\n", - "$$\\begin{aligned}\n", - "\\mathrm{fibonacci}(0) &= 0 \\\\\n", - "\\mathrm{fibonacci}(1) &= 1 \\\\\n", + "$$\begin{aligned}\n", + "\\mathrm{fibonacci}(0) &= 0 \\\n", + "\\mathrm{fibonacci}(1) &= 1 \\\n", "\\mathrm{fibonacci}(n) &= \\mathrm{fibonacci}(n-1) + \\mathrm{fibonacci}(n-2)\n", "\\end{aligned}$$ \n", "\n", - "Translated into Python, it looks like this:" + "Traducida a Python, se ve así:" ] }, { @@ -1161,11 +1162,11 @@ "id": "69d56a0b", "metadata": {}, "source": [ - "If you try to follow the flow of execution here, even for small values of $n$, your head explodes.\n", - "But according to the leap of faith, if you assume that the two recursive calls work correctly, you can be confident that the last `return` statement is correct.\n", + "Si intentas seguir aquí el flujo de ejecución, incluso para valores pequeños de $n$, te explota la cabeza.\n", + "Pero según el salto de fe, si asumes que las dos llamadas recursivas funcionan correctamente, puedes confiar en que la última sentencia `return` es correcta.\n", "\n", - "As an aside, this way of computing Fibonacci numbers is very inefficient.\n", - "In [Chapter 10](section_memos) I'll explain why and suggest a way to improve it." + "Como nota aparte, esta forma de calcular números de Fibonacci es muy ineficiente.\n", + "En el [Capítulo 10](section_memos) explicaré por qué y sugeriré una forma de mejorarla." ] }, { @@ -1173,9 +1174,9 @@ "id": "26d9706b", "metadata": {}, "source": [ - "## Checking types\n", + "## Comprobación de tipos\n", "\n", - "What happens if we call `factorial` and give it `1.5` as an argument?" + "¿Qué ocurre si llamamos a `factorial` y le damos `1.5` como argumento?" ] }, { @@ -1197,16 +1198,16 @@ "id": "0bec7ba4", "metadata": {}, "source": [ - "It looks like an infinite recursion. How can that be? The function has base cases when `n == 1` or `n == 0`.\n", - "But if `n` is not an integer, we can *miss* the base case and recurse forever.\n", + "Parece una recursión infinita. ¿Cómo puede ser? La función tiene casos base cuando `n == 1` o `n == 0`.\n", + "Pero si `n` no es un entero, podemos *saltarnos* el caso base y hacer recursión para siempre.\n", "\n", - "In this example, the initial value of `n` is `1.5`.\n", - "In the first recursive call, the value of `n` is `0.5`.\n", - "In the next, it is `-0.5`. \n", - "From there, it gets smaller (more negative), but it will never be `0`.\n", + "En este ejemplo, el valor inicial de `n` es `1.5`.\n", + "En la primera llamada recursiva, el valor de `n` es `0.5`.\n", + "En la siguiente, es `-0.5`. \n", + "A partir de ahí, se hace más pequeño (más negativo), pero nunca será `0`.\n", "\n", - "To avoid infinite recursion we can use the built-in function `isinstance` to check the type of the argument.\n", - "Here's how we check whether a value is an integer." + "Para evitar la recursión infinita podemos usar la función integrada `isinstance` para comprobar el tipo del argumento.\n", + "Así comprobamos si un valor es un entero." ] }, { @@ -1234,7 +1235,7 @@ "id": "b0017b42", "metadata": {}, "source": [ - "Now here's a version of `factorial` with error-checking." + "Ahora aquí tienes una versión de `factorial` con comprobación de errores." ] }, { @@ -1262,8 +1263,9 @@ "id": "0561e3f5", "metadata": {}, "source": [ - "First it checks whether `n` is an integer.\n", - "If not, it displays an error message and returns `None`.\n", + "Primero comprueba si `n` es un entero.\n", + "Si no lo es, muestra un mensaje de error y devuelve `None`.\n", + "\n", "\n" ] }, @@ -1282,8 +1284,8 @@ "id": "10b00a39", "metadata": {}, "source": [ - "Then it checks whether `n` is negative.\n", - "If so, it displays an error message and returns `None.`" + "Luego comprueba si `n` es negativo.\n", + "Si lo es, muestra un mensaje de error y devuelve `None`." ] }, { @@ -1301,8 +1303,8 @@ "id": "96aa1403", "metadata": {}, "source": [ - "If we get past both checks, we know that `n` is a non-negative integer, so we can be confident the recursion will terminate.\n", - "Checking the parameters of a function to make sure they have the correct types and values is called **input validation**." + "Si superamos ambas comprobaciones, sabemos que `n` es un entero no negativo, así que podemos confiar en que la recursión terminará.\n", + "Comprobar los parámetros de una función para asegurarse de que tienen los tipos y valores correctos se llama **validación de entrada**." ] }, { @@ -1314,25 +1316,25 @@ "source": [ "## Debugging\n", "\n", - "Breaking a large program into smaller functions creates natural checkpoints for debugging.\n", - "If a function is not working, there are three possibilities to consider:\n", + "Dividir un programa grande en funciones más pequeñas crea puntos de control naturales para depurar.\n", + "Si una función no funciona, hay tres posibilidades que considerar:\n", "\n", - "- There is something wrong with the arguments the function is getting -- that is, a precondition is violated.\n", + "- Hay algo mal con los argumentos que recibe la función -- es decir, se viola una precondición.\n", "\n", - "- There is something wrong with the function -- that is, a postcondition is violated.\n", + "- Hay algo mal con la función -- es decir, se viola una postcondición.\n", "\n", - "- The caller is doing something wrong with the return value.\n", + "- Quien llama a la función está haciendo algo mal con el valor de retorno.\n", "\n", - "To rule out the first possibility, you can add a `print` statement at the beginning of the function that displays the values of the parameters (and maybe their types).\n", - "Or you can write code that checks the preconditions explicitly.\n", + "Para descartar la primera posibilidad, puedes añadir una sentencia `print` al principio de la función que muestre los valores de los parámetros (y quizá sus tipos).\n", + "O puedes escribir código que compruebe explícitamente las precondiciones.\n", "\n", - "If the parameters look good, you can add a `print` statement before each `return` statement and display the return value.\n", - "If possible, call the function with arguments that make it easy check the result. \n", + "Si los parámetros parecen correctos, puedes añadir una sentencia `print` antes de cada sentencia `return` y mostrar el valor de retorno.\n", + "Si es posible, llama a la función con argumentos que faciliten comprobar el resultado. \n", "\n", - "If the function seems to be working, look at the function call to make sure the return value is being used correctly -- or used at all!\n", + "Si la función parece funcionar, mira la llamada a la función para asegurarte de que el valor de retorno se está usando correctamente -- ¡o de que se está usando siquiera!\n", "\n", - "Adding `print` statements at the beginning and end of a function can help make the flow of execution more visible.\n", - "For example, here is a version of `factorial` with print statements:" + "Añadir sentencias `print` al principio y al final de una función puede ayudar a hacer más visible el flujo de ejecución.\n", + "Por ejemplo, aquí tienes una versión de `factorial` con sentencias print:" ] }, { @@ -1360,8 +1362,8 @@ "id": "0c044111", "metadata": {}, "source": [ - "`space` is a string of space characters that controls the indentation of\n", - "the output. Here is the result of `factorial(3)` :" + "`space` es una cadena de caracteres de espacio que controla la indentación de\n", + "la salida. Este es el resultado de `factorial(3)` :" ] }, { @@ -1379,8 +1381,8 @@ "id": "43b3e408", "metadata": {}, "source": [ - "If you are confused about the flow of execution, this kind of output can be helpful.\n", - "It takes some time to develop effective scaffolding, but a little bit of scaffolding can save a lot of debugging." + "Si tienes dudas sobre el flujo de ejecución, este tipo de salida puede ser útil.\n", + "Lleva tiempo desarrollar andamiaje eficaz, pero un poco de andamiaje puede ahorrar mucho debugging." ] }, { @@ -1388,29 +1390,29 @@ "id": "b7c3962f", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**return value:**\n", - "The result of a function. If a function call is used as an expression, the return value is the value of the expression.\n", + "**valor de retorno:**\n", + "El resultado de una función. Si una llamada a una función se usa como expresión, el valor de retorno es el valor de la expresión.\n", "\n", - "**pure function:**\n", - "A function that does not display anything or have any other effect, other than returning a return value.\n", + "**función pura:**\n", + "Una función que no muestra nada ni tiene ningún otro efecto, aparte de devolver un valor de retorno.\n", "\n", "\n", - "**dead code:**\n", - "Part of a program that can never run, often because it appears after a `return` statement.\n", + "**código muerto:**\n", + "Parte de un programa que nunca puede ejecutarse, a menudo porque aparece después de una sentencia `return`.\n", "\n", - "**incremental development:**\n", - "A program development plan intended to avoid debugging by adding and testing only a small amount of code at a time.\n", + "**desarrollo incremental:**\n", + "Un plan de desarrollo de programas pensado para evitar la depuración añadiendo y probando solo una pequeña cantidad de código cada vez.\n", "\n", - "**scaffolding:**\n", - " Code that is used during program development but is not part of the final version.\n", + "**andamiaje:**\n", + " Código que se usa durante el desarrollo del programa pero que no forma parte de la versión final.\n", "\n", - "**Turing complete:**\n", - "A language, or subset of a language, is Turing complete if it can perform any computation that can be described by an algorithm.\n", + "**Turing completo:**\n", + "Un lenguaje, o un subconjunto de un lenguaje, es Turing completo si puede realizar cualquier cálculo que pueda describirse mediante un algoritmo.\n", "\n", - "**input validation:**\n", - "Checking the parameters of a function to make sure they have the correct types and values" + "**validación de entrada:**\n", + "Comprobar los parámetros de una función para asegurarse de que tienen los tipos y valores correctos" ] }, { @@ -1418,7 +1420,7 @@ "id": "ff7b1edf", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1441,9 +1443,9 @@ "id": "0da2daaf", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "In this chapter, we saw an incorrect function that can end without returning a value." + "En este capítulo vimos una función incorrecta que puede terminar sin devolver un valor." ] }, { @@ -1465,7 +1467,7 @@ "id": "69563d4b", "metadata": {}, "source": [ - "And a version of the same function that has dead code at the end." + "Y una versión de la misma función que tiene código muerto al final." ] }, { @@ -1489,7 +1491,7 @@ "id": "9fe8ae2e", "metadata": {}, "source": [ - "And we saw the following example, which is correct but not idiomatic." + "Y vimos el siguiente ejemplo, que es correcto pero no idiomático." ] }, { @@ -1511,9 +1513,9 @@ "id": "14f52688", "metadata": {}, "source": [ - "Ask a virtual assistant what's wrong with each of these functions and see if it can spot the errors or improve the style.\n", + "Pregunta a un asistente virtual qué está mal en cada una de estas funciones y comprueba si puede detectar los errores o mejorar el estilo.\n", "\n", - "Then ask \"Write a function that takes coordinates of two points and computes the distance between them.\" See if the result resembles the version of `distance` we wrote in this chapter." + "Luego pregunta: \"Escribe una función que tome las coordenadas de dos puntos y calcule la distancia entre ellos.\" Comprueba si el resultado se parece a la versión de `distance` que escribimos en este capítulo." ] }, { @@ -1521,14 +1523,14 @@ "id": "fd23bb60", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Use incremental development to write a function called `hypot` that returns the length of the hypotenuse of a right triangle given the lengths of the other two legs as arguments.\n", + "Usa desarrollo incremental para escribir una función llamada `hypot` que devuelva la longitud de la hipotenusa de un triángulo rectángulo dadas las longitudes de los otros dos catetos como argumentos.\n", "\n", - "Note: There's a function in the math module called `hypot` that does the same thing, but you should not use it for this exercise!\n", + "Nota: Hay una función en el módulo math llamada `hypot` que hace lo mismo, ¡pero no deberías usarla para este ejercicio!\n", "\n", - "Even if you can write the function correctly on the first try, start with a function that always returns `0` and practice making small changes, testing as you go.\n", - "When you are done, the function should only return a value -- it should not display anything." + "Aunque puedas escribir la función correctamente al primer intento, empieza con una función que siempre devuelva `0` y practica haciendo cambios pequeños, probando a medida que avanzas.\n", + "Cuando termines, la función solo debería devolver un valor -- no debería mostrar nada." ] }, { @@ -1636,10 +1638,10 @@ "id": "0a66d82a", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a boolean function, `is_between(x, y, z)`, that returns `True` if $x < y < z$ or if \n", - "$z < y < x$, and`False` otherwise." + "Escribe una función booleana, `is_between(x, y, z)`, que devuelva `True` si $x < y < z$ o si \n", + "$z < y < x$, y `False` en caso contrario." ] }, { @@ -1659,7 +1661,7 @@ "tags": [] }, "source": [ - "You can use these examples to test your function." + "Puedes usar estos ejemplos para probar tu función." ] }, { @@ -1715,20 +1717,20 @@ "id": "57f06466", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The Ackermann function, $A(m, n)$, is defined:\n", + "La función de Ackermann, $A(m, n)$, se define así:\n", "\n", - "$$\\begin{aligned}\n", - "A(m, n) = \\begin{cases} \n", - " n+1 & \\mbox{if } m = 0 \\\\ \n", - " A(m-1, 1) & \\mbox{if } m > 0 \\mbox{ and } n = 0 \\\\ \n", + "$$\begin{aligned}\n", + "A(m, n) = \begin{cases} \n", + " n+1 & \\mbox{if } m = 0 \\ \n", + " A(m-1, 1) & \\mbox{if } m > 0 \\mbox{ and } n = 0 \\ \n", "A(m-1, A(m, n-1)) & \\mbox{if } m > 0 \\mbox{ and } n > 0.\n", "\\end{cases} \n", "\\end{aligned}$$ \n", "\n", - "Write a function named `ackermann` that evaluates the Ackermann function.\n", - "What happens if you call `ackermann(5, 5)`?" + "Escribe una función llamada `ackermann` que evalúe la función de Ackermann.\n", + "¿Qué ocurre si llamas a `ackermann(5, 5)`?" ] }, { @@ -1748,7 +1750,7 @@ "tags": [] }, "source": [ - "You can use these examples to test your function." + "Puedes usar estos ejemplos para probar tu función." ] }, { @@ -1794,7 +1796,7 @@ "tags": [] }, "source": [ - "If you call this function with values bigger than 4, you get a `RecursionError`." + "Si llamas a esta función con valores mayores que 4, obtienes un `RecursionError`." ] }, { @@ -1818,7 +1820,7 @@ "tags": [] }, "source": [ - "To see why, add a print statement to the beginning of the function to display the values of the parameters, and then run the examples again." + "Para ver por qué, añade una sentencia print al principio de la función para mostrar los valores de los parámetros, y luego ejecuta los ejemplos de nuevo." ] }, { @@ -1828,12 +1830,12 @@ "tags": [] }, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "A number, $a$, is a power of $b$ if it is divisible by $b$ and $a/b$ is\n", - "a power of $b$. Write a function called `is_power` that takes parameters\n", - "`a` and `b` and returns `True` if `a` is a power of `b`. Note: you will\n", - "have to think about the base case." + "Un número, $a$, es una potencia de $b$ si es divisible por $b$ y $a/b$ es\n", + "una potencia de $b$. Escribe una función llamada `is_power` que tome los parámetros\n", + "`a` y `b`, y devuelva `True` si `a` es una potencia de `b`. Nota: tendrás\n", + "que pensar en el caso base." ] }, { @@ -1853,7 +1855,7 @@ "tags": [] }, "source": [ - "You can use these examples to test your function." + "Puedes usar estos ejemplos para probar tu función." ] }, { @@ -1909,17 +1911,17 @@ "id": "a33bbd07", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The greatest common divisor (GCD) of $a$ and $b$ is the largest number\n", - "that divides both of them with no remainder.\n", + "El máximo común divisor (MCD) de $a$ y $b$ es el número más grande\n", + "que divide a ambos sin dejar resto.\n", "\n", - "One way to find the GCD of two numbers is based on the observation that\n", - "if $r$ is the remainder when $a$ is divided by $b$, then $gcd(a,\n", - "b) = gcd(b, r)$. As a base case, we can use $gcd(a, 0) = a$.\n", + "Una forma de encontrar el MCD de dos números se basa en la observación de que\n", + "si $r$ es el resto cuando $a$ se divide por $b$, entonces $gcd(a,\n", + "b) = gcd(b, r)$. Como caso base, podemos usar $gcd(a, 0) = a$.\n", "\n", - "Write a function called `gcd` that takes parameters `a` and `b` and\n", - "returns their greatest common divisor." + "Escribe una función llamada `gcd` que tome los parámetros `a` y `b`, y\n", + "devuelva su máximo común divisor." ] }, { @@ -1939,7 +1941,7 @@ "tags": [] }, "source": [ - "You can use these examples to test your function." + "Puedes usar estos ejemplos para probar tu función." ] }, { @@ -1985,9 +1987,11 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", + "\n", + "Licencia del código: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del texto: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/chapters/chap07.ipynb b/chapters/chap07.ipynb index 9d9c634..2f7fa5f 100644 --- a/chapters/chap07.ipynb +++ b/chapters/chap07.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes comprar versiones impresas y libro electrónico de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -43,15 +43,15 @@ "tags": [] }, "source": [ - "# Iteration and Search\n", + "# Iteración y búsqueda\n", "\n", - "In 1939 Ernest Vincent Wright published a 50,000 word novel called *Gadsby* that does not contain the letter \"e\". Since \"e\" is the most common letter in English, writing even a few words without using it is difficult.\n", - "To get a sense of how difficult, in this chapter we'll compute the fraction of English words have at least one \"e\".\n", + "En 1939, Ernest Vincent Wright publicó una novela de 50.000 palabras llamada *Gadsby* que no contiene la letra \"e\". Como \"e\" es la letra más común en inglés, escribir incluso unas pocas palabras sin usarla es difícil.\n", + "Para hacernos una idea de lo difícil que es, en este capítulo calcularemos la fracción de palabras en inglés que tienen al menos una \"e\".\n", "\n", - "For that, we'll use `for` statements to loop through the letters in a string and the words in a file, and we'll update variables in a loop to count the number of words that contain an \"e\".\n", - "We'll use the `in` operator to check whether a letter appears in a word, and you'll learn a programming pattern called a \"linear search\".\n", + "Para ello, usaremos sentencias `for` para recorrer las letras de una cadena y las palabras de un archivo, y actualizaremos variables en un bucle para contar el número de palabras que contienen una \"e\".\n", + "Usaremos el operador `in` para comprobar si una letra aparece en una palabra, y aprenderás un patrón de programación llamado \"búsqueda lineal\".\n", "\n", - "As an exercise, you'll use these tools to solve a word puzzle called \"Spelling Bee\"." + "Como ejercicio, usarás estas herramientas para resolver un juego de palabras llamado \"Spelling Bee\"." ] }, { @@ -59,9 +59,9 @@ "id": "389f5162-0a8c-4cc7-99f1-a261e0b39006", "metadata": {}, "source": [ - "## Loops and strings\n", + "## Bucles y cadenas\n", "\n", - "In Chapter 3 we saw a `for` loop that uses the `range` function to display a sequence of numbers." + "En el capítulo 3 vimos un bucle `for` que usa la función `range` para mostrar una secuencia de números." ] }, { @@ -80,9 +80,9 @@ "id": "937a0af9-5486-4195-8e59-6f819db1cf3f", "metadata": {}, "source": [ - "This version uses the keyword argument `end` so the `print` function puts a space after each number rather than a newline.\n", + "Esta versión usa el argumento de palabra clave `end` para que la función `print` añada un espacio después de cada número en lugar de un salto de línea.\n", "\n", - "We can also use a `for` loop to display the letters in a string." + "También podemos usar un bucle `for` para mostrar las letras de una cadena." ] }, { @@ -101,10 +101,10 @@ "id": "72044436-ed85-407b-8821-9696648ec29c", "metadata": {}, "source": [ - "Notice that I changed the name of the variable from `i` to `letter`, which provides more information about the value it refers to.\n", - "The variable defined in a `for` loop is called the **loop variable**.\n", + "Fíjate en que he cambiado el nombre de la variable de `i` a `letter`, lo que proporciona más información sobre el valor al que se refiere.\n", + "La variable definida en un bucle `for` se llama **variable de bucle**.\n", "\n", - "Now that we can loop through the letters in a word, we can check whether it contains the letter \"e\"." + "Ahora que podemos recorrer las letras de una palabra, podemos comprobar si contiene la letra \"e\"." ] }, { @@ -124,7 +124,7 @@ "id": "644b7df2-4528-48d9-a003-2d21fbefbaab", "metadata": {}, "source": [ - "Before we go on, let's encapsulate that loop in a function." + "Antes de seguir, encapsulemos ese bucle en una función." ] }, { @@ -145,7 +145,7 @@ "id": "31cfacd9-5721-457a-be40-80cf002723b2", "metadata": {}, "source": [ - "And let's make it a pure function that return `True` if the word contains an \"e\" and `False` otherwise." + "Y convirtámosla en una función pura que devuelva `True` si la palabra contiene una \"e\" y `False` en caso contrario." ] }, { @@ -167,7 +167,7 @@ "id": "8f45502e-6db3-4fcc-802c-c97398787dbd", "metadata": {}, "source": [ - "We can generalize it to take the word as a parameter." + "Podemos generalizarla para que tome la palabra como parámetro." ] }, { @@ -189,7 +189,7 @@ "id": "590f4399-16d3-4f1c-93bc-b1fe7ce46633", "metadata": {}, "source": [ - "Now we can test it like this:" + "Ahora podemos probarla así:" ] }, { @@ -217,10 +217,10 @@ "id": "8adf1e92-435e-4b54-837a-bad603ebcafd", "metadata": {}, "source": [ - "## Reading the word list\n", + "## Leer la lista de palabras\n", "\n", - "To see how many words contain an \"e\", we'll need a word list.\n", - "The one we'll use is a list of about 114,000 official crosswords; that is, words that are considered valid in crossword puzzles and other word games. " + "Para ver cuántas palabras contienen una \"e\", necesitaremos una lista de palabras.\n", + "La que usaremos es una lista de unas 114.000 palabras oficiales de crucigramas; es decir, palabras que se consideran válidas en crucigramas y otros juegos de palabras." ] }, { @@ -230,7 +230,7 @@ "tags": [] }, "source": [ - "The following cell downloads the word list, which is a modified version of a list collected and contributed to the public domain by Grady Ward as part of the Moby lexicon project (see )." + "La siguiente celda descarga la lista de palabras, que es una versión modificada de una lista recopilada y aportada al dominio público por Grady Ward como parte del proyecto léxico Moby (consulta )." ] }, { @@ -250,8 +250,8 @@ "id": "5b383a3c-d173-4a66-bf86-23b329032004", "metadata": {}, "source": [ - "The word list is in a file called `words.txt`, which is downloaded in the notebook for this chapter.\n", - "To read it, we'll use the built-in function `open`, which takes the name of the file as a parameter and returns a **file object** we can use to read the file." + "La lista de palabras está en un archivo llamado `words.txt`, que se descarga en el notebook de este capítulo.\n", + "Para leerlo, usaremos la función integrada `open`, que toma el nombre del archivo como parámetro y devuelve un **objeto de archivo** que podemos usar para leer el archivo." ] }, { @@ -269,7 +269,7 @@ "id": "4414d9b1-cb8e-472e-818c-0555e29b1ad5", "metadata": {}, "source": [ - "The file object provides a function called `readline`, which reads characters from the file until it gets to a newline and returns the result as a string:" + "El objeto de archivo proporciona un método llamado `readline`, que lee caracteres del archivo hasta llegar a un salto de línea y devuelve el resultado como una cadena:" ] }, { @@ -287,14 +287,15 @@ "id": "d74e9fe9-117e-436a-ade3-3d08dfda2a00", "metadata": {}, "source": [ - "Notice that the syntax for calling `readline` is different from functions we've seen so far. That's because it is a **method**, which is a function associated with an object.\n", - "In this case `readline` is associated with the file object, so we call it using the name of the object, the dot operator, and the name of the method.\n", + "Fíjate en que la sintaxis para llamar a `readline` es diferente de la de las funciones que hemos visto hasta ahora. Eso se debe a que es un **método**, que es una función asociada a un objeto.\n", + "En este caso `readline` está asociado al objeto de archivo, así que lo llamamos usando el nombre del objeto, el operador punto y el nombre del método.\n", "\n", - "The first word in the list is \"aa\", which is a kind of lava.\n", - "The sequence `\\n` represents the newline character that separates this word from the next.\n", + "La primera palabra de la lista es \"aa\", que es un tipo de lava.\n", + "La secuencia `\n", + "` representa el carácter de salto de línea que separa esta palabra de la siguiente.\n", "\n", - "The file object keeps track of where it is in the file, so if you call\n", - "`readline` again, you get the next word:" + "El objeto de archivo lleva la cuenta de en qué parte del archivo está, así que si llamas a\n", + "`readline` de nuevo, obtienes la siguiente palabra:" ] }, { @@ -313,7 +314,7 @@ "id": "cd466fdb-38ce-4e5b-92c7-05dc23922005", "metadata": {}, "source": [ - "To remove the newline from the end of the word, we can use `strip`, which is a method associated with strings, so we can call it like this." + "Para eliminar el salto de línea del final de la palabra, podemos usar `strip`, que es un método asociado con las cadenas, así que podemos llamarlo así." ] }, { @@ -332,10 +333,10 @@ "id": "6dda6bac-e02e-47ee-9bab-70cef8c27d7a", "metadata": {}, "source": [ - "`strip` removes whitespace characters -- including spaces, tabs, and newlines -- from the beginning and end of the string.\n", + "`strip` elimina caracteres de espacio en blanco -- incluidos espacios, tabulaciones y saltos de línea -- del principio y el final de la cadena.\n", "\n", - "You can also use a file object as part of a `for` loop. \n", - "This program reads `words.txt` and prints each word, one per line:" + "También puedes usar un objeto de archivo como parte de un bucle `for`.\n", + "Este programa lee `words.txt` e imprime cada palabra, una por línea:" ] }, { @@ -357,8 +358,8 @@ "id": "93e320a5-4827-487e-a8ce-216392f398a8", "metadata": {}, "source": [ - "Now that we can read the word list, the next step is to count them.\n", - "For that, we will need the ability to update variables." + "Ahora que podemos leer la lista de palabras, el siguiente paso es contarlas.\n", + "Para eso, necesitaremos la capacidad de actualizar variables." ] }, { @@ -366,13 +367,12 @@ "id": "b63a6877", "metadata": {}, "source": [ - "## Updating variables\n", + "## Actualizar variables\n", "\n", - "As you may have discovered, it is legal to make more than one assignment\n", - "to the same variable.\n", - "A new assignment makes an existing variable refer to a new value (and stop referring to the old value).\n", + "Como quizá hayas descubierto, es legal hacer más de una asignación a la misma variable.\n", + "Una nueva asignación hace que una variable existente se refiera a un valor nuevo (y deje de referirse al valor anterior).\n", "\n", - "For example, here is an initial assignment that creates a variable." + "Por ejemplo, aquí hay una asignación inicial que crea una variable." ] }, { @@ -391,7 +391,7 @@ "id": "c9735982", "metadata": {}, "source": [ - "And here is an assignment that changes the value of a variable." + "Y aquí hay una asignación que cambia el valor de una variable." ] }, { @@ -410,7 +410,7 @@ "id": "fbcd1092-ce06-47fc-9204-fce1c9a100a5", "metadata": {}, "source": [ - "The following figure shows what these assignments looks like in a state diagram." + "La siguiente figura muestra cómo se ven estas asignaciones en un diagrama de estado." ] }, { @@ -449,11 +449,11 @@ "id": "42b7b044-f83b-4483-9a24-64980c688c94", "metadata": {}, "source": [ - "The dotted arrow indicates that `x` no longer refers to `5`.\n", - "The solid arrow indicates that it now refers to `7`.\n", + "La flecha punteada indica que `x` ya no se refiere a `5`.\n", + "La flecha sólida indica que ahora se refiere a `7`.\n", "\n", - "A common kind of assignment is an **update**, where the new value of\n", - "the variable depends on the old." + "Un tipo común de asignación es una **actualización**, donde el nuevo valor de\n", + "la variable depende del anterior." ] }, { @@ -484,9 +484,9 @@ "id": "d3025706", "metadata": {}, "source": [ - "This statement means \"get the current value of `x`, add one, and assign the result back to `x`.\"\n", + "Esta sentencia significa \"obtén el valor actual de `x`, suma uno y asigna el resultado de nuevo a `x`.\"\n", "\n", - "If you try to update a variable that doesn't exist, you get an error, because Python evaluates the expression on the right before it assigns a value to the variable on the left." + "Si intentas actualizar una variable que no existe, obtienes un error, porque Python evalúa la expresión de la derecha antes de asignar un valor a la variable de la izquierda." ] }, { @@ -508,8 +508,8 @@ "id": "03d3959f", "metadata": {}, "source": [ - "Before you can update a variable, you have to **initialize** it, usually\n", - "with a simple assignment:" + "Antes de poder actualizar una variable, tienes que **inicializarla**, normalmente\n", + "con una asignación sencilla:" ] }, { @@ -529,9 +529,9 @@ "id": "374fb3d5", "metadata": {}, "source": [ - "Increasing the value of a variable is called an **increment**; decreasing the value is called a **decrement**.\n", - "Because these operations are so common, Python provides **augmented assignment operators** that update a variable more concisely.\n", - "For example, the `+=` operator increments a variable by the given amount." + "Aumentar el valor de una variable se llama **incremento**; disminuir el valor se llama **decremento**.\n", + "Como estas operaciones son tan comunes, Python proporciona **operadores de asignación aumentada** que actualizan una variable de forma más concisa.\n", + "Por ejemplo, el operador `+=` incrementa una variable en la cantidad dada." ] }, { @@ -550,7 +550,7 @@ "id": "3f4eedf1", "metadata": {}, "source": [ - "There are augmented assignment operators for the other arithmetic operators, including `-=` and `*=`." + "Hay operadores de asignación aumentada para los otros operadores aritméticos, incluidos `-=` y `*=`." ] }, { @@ -558,9 +558,9 @@ "id": "70eeef60-6a34-403a-96bb-aa5c4574a5fe", "metadata": {}, "source": [ - "## Looping and counting\n", + "## Recorrer y contar\n", "\n", - "The following program counts the number of words in the word list." + "El siguiente programa cuenta el número de palabras en la lista de palabras." ] }, { @@ -582,9 +582,9 @@ "id": "9bd83ddd", "metadata": {}, "source": [ - "It starts by initializing `total` to `0`.\n", - "Each time through the loop, it increments `total` by `1`.\n", - "So when the loop exits, `total` refers to the total number of words." + "Empieza inicializando `total` a `0`.\n", + "Cada vez que pasa por el bucle, incrementa `total` en `1`.\n", + "Así que cuando el bucle termina, `total` se refiere al número total de palabras." ] }, { @@ -602,9 +602,9 @@ "id": "54904394", "metadata": {}, "source": [ - "A variable like this, used to count the number of times something happens, is called a **counter**.\n", + "Una variable como esta, usada para contar el número de veces que ocurre algo, se llama **contador**.\n", "\n", - "We can add a second counter to the program to keep track of the number of words that contain an \"e\"." + "Podemos añadir un segundo contador al programa para llevar la cuenta del número de palabras que contienen una \"e\"." ] }, { @@ -629,7 +629,7 @@ "id": "ab73c1e3", "metadata": {}, "source": [ - "Let's see how many words contain an \"e\"." + "Veamos cuántas palabras contienen una \"e\"." ] }, { @@ -647,7 +647,7 @@ "id": "d2262e64", "metadata": {}, "source": [ - "As a percentage of `total`, about two-thirds of the words use the letter \"e\"." + "Como porcentaje de `total`, alrededor de dos tercios de las palabras usan la letra \"e\"." ] }, { @@ -665,7 +665,7 @@ "id": "fe002dde", "metadata": {}, "source": [ - "So you can understand why it's difficult to craft a book without using any such words." + "Así puedes entender por qué es difícil escribir un libro sin usar ninguna de esas palabras." ] }, { @@ -673,10 +673,10 @@ "id": "632a992f", "metadata": {}, "source": [ - "## The in operator\n", + "## El operador in\n", "\n", - "The version of `has_e` we wrote in this chapter is more complicated than it needs to be.\n", - "Python provides an operator, `in`, that checks whether a character appears in a string." + "La versión de `has_e` que escribimos en este capítulo es más complicada de lo necesario.\n", + "Python proporciona un operador, `in`, que comprueba si un carácter aparece en una cadena." ] }, { @@ -695,7 +695,7 @@ "id": "ede36fe9", "metadata": {}, "source": [ - "So we can rewrite `has_e` like this." + "Así que podemos reescribir `has_e` así." ] }, { @@ -717,7 +717,7 @@ "id": "f86f6fc7", "metadata": {}, "source": [ - "And because the conditional of the `if` statement has a boolean value, we can eliminate the `if` statement and return the boolean directly." + "Y como la condición de la sentencia `if` tiene un valor booleano, podemos eliminar la sentencia `if` y devolver el valor booleano directamente." ] }, { @@ -736,8 +736,8 @@ "id": "f2a05319", "metadata": {}, "source": [ - "We can simplify this function even more using the method `lower`, which converts the letters in a string to lowercase.\n", - "Here's an example." + "Podemos simplificar esta función todavía más usando el método `lower`, que convierte las letras de una cadena a minúsculas.\n", + "Aquí tienes un ejemplo." ] }, { @@ -755,7 +755,7 @@ "id": "57aa625a", "metadata": {}, "source": [ - "`lower` makes a new string -- it does not modify the existing string -- so the value of `word` is unchanged. " + "`lower` crea una cadena nueva -- no modifica la cadena existente -- así que el valor de `word` no cambia." ] }, { @@ -773,7 +773,7 @@ "id": "9f0bd075", "metadata": {}, "source": [ - "Here's how we can use `lower` in `has_e`." + "Así es como podemos usar `lower` en `has_e`." ] }, { @@ -812,10 +812,10 @@ "id": "1c39cb6b", "metadata": {}, "source": [ - "## Search\n", + "## Búsqueda\n", "\n", - "Based on this simpler version of `has_e`, let's write a more general function called `uses_any` that takes a second parameter that is a string of letters.\n", - "It returns `True` if the word uses any of the letters and `False` otherwise." + "Basándonos en esta versión más sencilla de `has_e`, escribamos una función más general llamada `uses_any` que recibe un segundo parámetro que es una cadena de letras.\n", + "Devuelve `True` si la palabra usa cualquiera de las letras y `False` en caso contrario." ] }, { @@ -837,7 +837,7 @@ "id": "dc2d6290", "metadata": {}, "source": [ - "Here's an example where the result is `True`." + "Aquí tienes un ejemplo donde el resultado es `True`." ] }, { @@ -855,7 +855,7 @@ "id": "2c3c1553", "metadata": {}, "source": [ - "And another where it is `False`." + "Y otro donde es `False`." ] }, { @@ -873,7 +873,7 @@ "id": "b2acc611", "metadata": {}, "source": [ - "`uses_any` converts `word` and `letters` to lowercase, so it works with any combination of cases. " + "`uses_any` convierte `word` y `letters` a minúsculas, así que funciona con cualquier combinación de mayúsculas y minúsculas." ] }, { @@ -891,13 +891,13 @@ "id": "673786a5", "metadata": {}, "source": [ - "The structure of `uses_any` is similar to `has_e`.\n", - "It loops through the letters in `word` and checks them one at a time.\n", - "If it finds one that appears in `letters`, it returns `True` immediately.\n", - "If it gets all the way through the loop without finding any, it returns `False`.\n", + "La estructura de `uses_any` es similar a la de `has_e`.\n", + "Recorre las letras de `word` y las comprueba una por una.\n", + "Si encuentra una que aparece en `letters`, devuelve `True` inmediatamente.\n", + "Si llega hasta el final del bucle sin encontrar ninguna, devuelve `False`.\n", "\n", - "This pattern is called a **linear search**.\n", - "In the exercises at the end of this chapter, you'll write more functions that use this pattern." + "Este patrón se llama **búsqueda lineal**.\n", + "En los ejercicios al final de este capítulo, escribirás más funciones que usan este patrón." ] }, { @@ -907,9 +907,9 @@ "source": [ "## Doctest\n", "\n", - "In [Chapter 4](section_docstring) we used a docstring to document a function -- that is, to explain what it does.\n", - "It is also possible to use a docstring to *test* a function.\n", - "Here's a version of `uses_any` with a docstring that includes tests." + "En el [capítulo 4](section_docstring) usamos un docstring para documentar una función -- es decir, para explicar qué hace.\n", + "También es posible usar un docstring para *probar* una función.\n", + "Aquí tienes una versión de `uses_any` con un docstring que incluye pruebas." ] }, { @@ -938,15 +938,15 @@ "id": "2871d018", "metadata": {}, "source": [ - "Each test begins with `>>>`, which is used as a prompt in some Python environments to indicate where the user can type code.\n", - "In a doctest, the prompt is followed by an expression, usually a function call.\n", - "The following line indicates the value the expression should have if the function works correctly.\n", + "Cada prueba empieza con `>>>`, que se usa como indicador en algunos entornos de Python para indicar dónde el usuario puede escribir código.\n", + "En un doctest, al indicador le sigue una expresión, normalmente una llamada a función.\n", + "La línea siguiente indica el valor que debería tener la expresión si la función funciona correctamente.\n", "\n", - "In the first example, `'banana'` uses `'a'`, so the result should be `True`.\n", - "In the second example, `'apple'` does not use any of `'xyz'`, so the result should be `False`.\n", + "En el primer ejemplo, `'banana'` usa `'a'`, así que el resultado debería ser `True`.\n", + "En el segundo ejemplo, `'apple'` no usa ninguna de `'xyz'`, así que el resultado debería ser `False`.\n", "\n", - "To run these tests, we have to import the `doctest` module and run a function called `run_docstring_examples`.\n", - "To make this function easier to use, I wrote the following function, which takes a function object as an argument." + "Para ejecutar estas pruebas, tenemos que importar el módulo `doctest` y ejecutar una función llamada `run_docstring_examples`.\n", + "Para que esta función sea más fácil de usar, escribí la siguiente función, que toma un objeto que representa una función como argumento." ] }, { @@ -967,8 +967,8 @@ "id": "79e3de21", "metadata": {}, "source": [ - "We haven't learned about `globals` and `__name__` yet -- you can ignore them.\n", - "Now we can test `uses_any` like this." + "Todavía no hemos aprendido sobre `globals` y `__name__` -- puedes ignorarlos.\n", + "Ahora podemos probar `uses_any` así." ] }, { @@ -986,12 +986,11 @@ "id": "432d8c31", "metadata": {}, "source": [ - "`run_doctests` finds the expressions in the docstring and evaluates them.\n", - "If the result is the expected value, the test **passes**.\n", - "Otherwise it **fails**.\n", - "\n", - "If all tests pass, `run_doctests` displays no output -- in that case, no news is good news.\n", - "To see what happens when a test fails, here's an incorrect version of `uses_any`." + "`run_doctests` encuentra las expresiones en el docstring y las evalúa.\n", + "Si el resultado es el valor esperado, la prueba **pasa**.\n", + "En caso contrario, **falla**.\n", + "Si todas las pruebas pasan, `run_doctests` no muestra ninguna salida -- en ese caso, no tener noticias es buena señal.\n", + "Para ver qué ocurre cuando una prueba falla, aquí tienes una versión incorrecta de `uses_any`." ] }, { @@ -1021,7 +1020,7 @@ "id": "34b78be4", "metadata": {}, "source": [ - "And here's what happens when we test it." + "Y esto es lo que ocurre cuando la probamos." ] }, { @@ -1039,9 +1038,9 @@ "id": "473aa6ec", "metadata": {}, "source": [ - "The output includes the example that failed, the value the function was expected to produce, and the value the function actually produced.\n", + "La salida incluye el ejemplo que falló, el valor que se esperaba que devolviera la función y el valor que produjo realmente.\n", "\n", - "If you are not sure why this test failed, you'll have a chance to debug it as an exercise." + "Si no tienes claro por qué falló esta prueba, tendrás la oportunidad de depurarla como ejercicio." ] }, { @@ -1049,40 +1048,40 @@ "id": "382c134e", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**loop variable:**\n", - "A variable defined in the header of a `for` loop.\n", + "**variable de bucle:**\n", + "Una variable definida en la cabecera de un bucle `for`.\n", "\n", - "**file object:**\n", - "An object that represents an open file and keeps track of which parts of the file have been read or written.\n", + "**objeto de archivo:**\n", + "Un objeto que representa un archivo abierto y lleva la cuenta de qué partes del archivo se han leído o escrito.\n", "\n", - "**method:**\n", - " A function that is associated with an object and called using the dot operator.\n", + "**método:**\n", + " Una función asociada a un objeto que se llama usando el operador punto.\n", "\n", - "**update:**\n", - "An assignment statement that give a new value to a variable that already exists, rather than creating a new variables.\n", + "**actualización:**\n", + "Una sentencia de asignación que da un valor nuevo a una variable que ya existe, en lugar de crear una variable nueva.\n", "\n", - "**initialize:**\n", - "Create a new variable and give it a value.\n", + "**inicializar:**\n", + "Crear una variable nueva y darle un valor.\n", "\n", - "**increment:**\n", - "Increase the value of a variable.\n", + "**incremento:**\n", + "Aumentar el valor de una variable.\n", "\n", - "**decrement:**\n", - "Decrease the value of a variable.\n", + "**decremento:**\n", + "Disminuir el valor de una variable.\n", "\n", - "**counter:**\n", - " A variable used to count something, usually initialized to zero and then incremented.\n", + "**contador:**\n", + " Una variable usada para contar algo, normalmente inicializada a cero y luego incrementada.\n", "\n", - "**linear search:**\n", - "A computational pattern that searches through a sequence of elements and stops when it finds what it is looking for.\n", + "**búsqueda lineal:**\n", + "Un patrón computacional que busca en una secuencia de elementos y se detiene cuando encuentra lo que está buscando.\n", "\n", - "**pass:**\n", - "If a test runs and the result is as expected, the test passes.\n", + "**pasar:**\n", + "Si una prueba se ejecuta y el resultado es el esperado, la prueba pasa.\n", "\n", - "**fail:**\n", - "If a test runs and the result is not as expected, the test fails." + "**fallar:**\n", + "Si una prueba se ejecuta y el resultado no es el esperado, la prueba falla." ] }, { @@ -1090,7 +1089,7 @@ "id": "0a2b3510-e8d3-439b-a771-a4a58db6ac59", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1113,9 +1112,9 @@ "id": "8e8606b8-9a48-4cbd-a0b0-ea848666c77d", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "In `uses_any`, you might have noticed that the first `return` statement is inside the loop and the second is outside." + "En `uses_any`, quizá hayas notado que la primera sentencia `return` está dentro del bucle y la segunda está fuera." ] }, { @@ -1137,7 +1136,7 @@ "id": "e1920737-b485-4823-ac20-c1e35aa93e7f", "metadata": {}, "source": [ - "When people first write functions like this, it is a common error to put both `return` statements inside the loop, like this." + "Cuando la gente escribe por primera vez funciones como esta, es un error común poner ambas sentencias `return` dentro del bucle, así." ] }, { @@ -1160,7 +1159,7 @@ "id": "d9b46591-6c80-4ff8-9378-e9318ce5e429", "metadata": {}, "source": [ - "Ask a virtual assistant what's wrong with this version." + "Pregunta a un asistente virtual qué está mal en esta versión." ] }, { @@ -1168,12 +1167,12 @@ "id": "99eff99e", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function named `uses_none` that takes a word and a string of forbidden letters, and returns `True` if the word does not use any of the forbidden letters.\n", + "Escribe una función llamada `uses_none` que reciba una palabra y una cadena de letras prohibidas, y devuelva `True` si la palabra no usa ninguna de las letras prohibidas.\n", "\n", - "Here's an outline of the function that includes two doctests.\n", - "Fill in the function so it passes these tests, and add at least one more doctest." + "Aquí tienes un esquema de la función que incluye dos doctests.\n", + "Completa la función para que pase estas pruebas, y añade al menos un doctest más." ] }, { @@ -1221,12 +1220,12 @@ "id": "9465b09f-0c62-49f6-bbe2-365ecf1717ef", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `uses_only` that takes a word and a string of letters, and that returns `True` if the word contains only letters in the string.\n", + "Escribe una función llamada `uses_only` que reciba una palabra y una cadena de letras, y que devuelva `True` si la palabra contiene solo letras de la cadena.\n", "\n", - "Here's an outline of the function that includes two doctests.\n", - "Fill in the function so it passes these tests, and add at least one more doctest." + "Aquí tienes un esquema de la función que incluye dos doctests.\n", + "Completa la función para que pase estas pruebas, y añade al menos un doctest más." ] }, { @@ -1274,12 +1273,12 @@ "id": "74259f36", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `uses_all` that takes a word and a string of letters, and that returns `True` if the word contains all of the letters in the string at least once.\n", + "Escribe una función llamada `uses_all` que reciba una palabra y una cadena de letras, y que devuelva `True` si la palabra contiene todas las letras de la cadena al menos una vez.\n", "\n", - "Here's an outline of the function that includes two doctests.\n", - "Fill in the function so it passes these tests, and add at least one more doctest." + "Aquí tienes un esquema de la función que incluye dos doctests.\n", + "Completa la función para que pase estas pruebas, y añade al menos un doctest más." ] }, { @@ -1327,21 +1326,21 @@ "id": "7210adfa", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "*The New York Times* publishes a daily puzzle called \"Spelling Bee\" that challenges readers to spell as many words as possible using only seven letters, where one of the letters is required.\n", - "The words must have at least four letters.\n", + "*The New York Times* publica un juego diario llamado \"Spelling Bee\" que reta a los lectores a formar tantas palabras como sea posible usando solo siete letras, donde una de las letras es obligatoria.\n", + "Las palabras deben tener al menos cuatro letras.\n", "\n", - "For example, on the day I wrote this, the letters were `ACDLORT`, with `R` as the required letter.\n", - "So \"color\" is an acceptable word, but \"told\" is not, because it does not use `R`, and \"rat\" is not because it has only three letters.\n", - "Letters can be repeated, so \"ratatat\" is acceptable.\n", + "Por ejemplo, el día que escribí esto, las letras eran `ACDLORT`, con `R` como letra obligatoria.\n", + "Así que \"color\" es una palabra aceptable, pero \"told\" no, porque no usa `R`, y \"rat\" tampoco porque solo tiene tres letras.\n", + "Las letras se pueden repetir, así que \"ratatat\" es aceptable.\n", "\n", - "Write a function called `check_word` that checks whether a given word is acceptable.\n", - "It should take as parameters the word to check, a string of seven available letters, and a string containing the single required letter.\n", - "You can use the functions you wrote in previous exercises.\n", + "Escribe una función llamada `check_word` que compruebe si una palabra dada es aceptable.\n", + "Debe recibir como parámetros la palabra que se va a comprobar, una cadena de siete letras disponibles y una cadena que contiene la única letra obligatoria.\n", + "Puedes usar las funciones que escribiste en ejercicios anteriores.\n", "\n", - "Here's an outline of the function that includes doctests.\n", - "Fill in the function and then check that all tests pass." + "Aquí tienes un esquema de la función que incluye doctests.\n", + "Completa la función y luego comprueba que todas las pruebas pasan." ] }, { @@ -1395,18 +1394,18 @@ "id": "0b9589fc", "metadata": {}, "source": [ - "According to the \"Spelling Bee\" rules,\n", + "Según las reglas de \"Spelling Bee\",\n", "\n", - "* Four-letter words are worth 1 point each.\n", + "* Las palabras de cuatro letras valen 1 punto cada una.\n", "\n", - "* Longer words earn 1 point per letter.\n", + "* Las palabras más largas obtienen 1 punto por letra.\n", "\n", - "* Each puzzle includes at least one \"pangram\" which uses every letter. These are worth 7 extra points!\n", + "* Cada juego incluye al menos un \"pangram\" que usa todas las letras. ¡Estos valen 7 puntos extra!\n", "\n", - "Write a function called `score_word` that takes a word and a string of available letters and returns its score.\n", - "You can assume that the word is acceptable.\n", + "Escribe una función llamada `score_word` que reciba una palabra y una cadena de letras disponibles y devuelva su puntuación.\n", + "Puedes asumir que la palabra es aceptable.\n", "\n", - "Again, here's an outline of the function with doctests." + "De nuevo, aquí tienes un esquema de la función con doctests." ] }, { @@ -1458,7 +1457,7 @@ "tags": [] }, "source": [ - "When all of your functions pass their tests, use the following loop to search the word list for acceptable words and add up their scores." + "Cuando todas tus funciones pasen sus pruebas, usa el siguiente bucle para buscar palabras aceptables en la lista de palabras y sumar sus puntuaciones." ] }, { @@ -1493,9 +1492,9 @@ "tags": [] }, "source": [ - "Visit the \"Spelling Bee\" page at and type in the available letters for the day. The letter in the middle is required.\n", + "Visita la página de \"Spelling Bee\" en y escribe las letras disponibles del día. La letra del centro es obligatoria.\n", "\n", - "I found a set of letters that spells words with a total score of 5820. Can you beat that? Finding the best set of letters might be too hard -- you have to be a realist." + "Encontré un conjunto de letras que forma palabras con una puntuación total de 5820. ¿Puedes superarlo? Encontrar el mejor conjunto de letras podría ser demasiado difícil -- hay que ser realista." ] }, { @@ -1503,12 +1502,12 @@ "id": "9ae466ed", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "You might have noticed that the functions you wrote in the previous exercises had a lot in common.\n", - "In fact, they are so similar you can often use one function to write another.\n", + "Quizá hayas notado que las funciones que escribiste en los ejercicios anteriores tenían mucho en común.\n", + "De hecho, son tan parecidas que a menudo puedes usar una función para escribir otra.\n", "\n", - "For example, if a word uses none of a set forbidden letters, that means it doesn't use any. So we can write a version of `uses_none` like this." + "Por ejemplo, si una palabra no usa ninguna letra de un conjunto de letras prohibidas, eso significa que no usa ninguna. Así que podemos escribir una versión de `uses_none` así." ] }, { @@ -1548,8 +1547,8 @@ "id": "32aa2c09", "metadata": {}, "source": [ - "There is also a similarity between `uses_only` and `uses_all` that you can take advantage of.\n", - "If you have a working version of `uses_only`, see if you can write a version of `uses_all` that calls `uses_only`." + "También hay una similitud entre `uses_only` y `uses_all` que puedes aprovechar.\n", + "Si tienes una versión funcional de `uses_only`, mira si puedes escribir una versión de `uses_all` que llame a `uses_only`." ] }, { @@ -1557,11 +1556,11 @@ "id": "fa758462", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "If you got stuck on the previous question, try asking a virtual assistant, \"Given a function, `uses_only`, which takes two strings and checks that the first uses only the letters in the second, use it to write `uses_all`, which takes two strings and checks whether the first uses all the letters in the second, allowing repeats.\"\n", + "Si te atascaste en la pregunta anterior, prueba a preguntar a un asistente virtual: \"Dada una función, `uses_only`, que recibe dos cadenas y comprueba que la primera usa solo las letras del segundo, úsala para escribir `uses_all`, que recibe dos cadenas y comprueba si la primera usa todas las letras del segundo, permitiendo repeticiones.\"\n", "\n", - "Use `run_doctests` to check the answer." + "Usa `run_doctests` para comprobar la respuesta." ] }, { @@ -1591,13 +1590,13 @@ "id": "18f407b3", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Now let's see if we can write `uses_all` based on `uses_any`.\n", + "Ahora veamos si podemos escribir `uses_all` basándonos en `uses_any`.\n", "\n", - "Ask a virtual assistant, \"Given a function, `uses_any`, which takes two strings and checks whether the first uses any of the letters in the second, can you use it to write `uses_all`, which takes two strings and checks whether the first uses all the letters in the second, allowing repeats.\"\n", + "Pregunta a un asistente virtual: \"Dada una función, `uses_any`, que recibe dos cadenas y comprueba si la primera usa cualquiera de las letras del segundo, ¿puedes usarla para escribir `uses_all`, que recibe dos cadenas y comprueba si la primera usa todas las letras del segundo, permitiendo repeticiones?\"\n", "\n", - "If it says it can, be sure to test the result!" + "Si dice que puede, ¡asegúrate de probar el resultado!" ] }, { @@ -1649,9 +1648,11 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", + "\n", + "Licencia del código: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del texto: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/chapters/chap08.ipynb b/chapters/chap08.ipynb index 0108312..c216e66 100644 --- a/chapters/chap08.ipynb +++ b/chapters/chap08.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes comprar versiones impresas y libro electrónico de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -41,14 +41,14 @@ "id": "9d97603b", "metadata": {}, "source": [ - "# Strings and Regular Expressions\n", + "# Cadenas y expresiones regulares\n", "\n", - "Strings are not like integers, floats, and booleans. A string is a **sequence**, which means it contains multiple values in a particular order.\n", - "In this chapter we'll see how to access the values that make up a string, and we'll use functions that process strings.\n", + "Las cadenas no son como los enteros, los flotantes y los booleanos. Una cadena es una **secuencia**, lo que significa que contiene múltiples valores en un orden particular.\n", + "En este capítulo veremos cómo acceder a los valores que componen una cadena, y usaremos funciones que procesan cadenas.\n", "\n", - "We'll also use regular expressions, which are a powerful tool for finding patterns in a string and performing operations like search and replace.\n", + "También usaremos expresiones regulares, que son una herramienta poderosa para encontrar patrones en una cadena y realizar operaciones como búsqueda y reemplazo.\n", "\n", - "As an exercise, you'll have a chance to apply these tools to a word game called Wordle." + "Como ejercicio, tendrás la oportunidad de aplicar estas herramientas a un juego de palabras llamado Wordle." ] }, { @@ -56,13 +56,13 @@ "id": "1280dd83", "metadata": {}, "source": [ - "## A string is a sequence\n", + "## Una cadena es una secuencia\n", "\n", - "A string is a sequence of characters. A **character** can be a letter (in almost any alphabet), a digit, a punctuation mark, or white space.\n", + "Una cadena es una secuencia de caracteres. Un **carácter** puede ser una letra (en casi cualquier alfabeto), un dígito, un signo de puntuación o un espacio en blanco.\n", "\n", - "You can select a character from a string with the bracket operator.\n", - "This example statement selects character number 1 from `fruit` and\n", - "assigns it to `letter`:" + "Puedes seleccionar un carácter de una cadena con el operador de corchetes.\n", + "Esta sentencia de ejemplo selecciona el carácter número 1 de `fruit` y\n", + "lo asigna a `letter`:" ] }, { @@ -81,8 +81,8 @@ "id": "a307e429", "metadata": {}, "source": [ - "The expression in brackets is an **index**, so called because it *indicates* which character in the sequence to select.\n", - "But the result might not be what you expect." + "La expresión entre corchetes es un **índice**, llamado así porque *indica* qué carácter de la secuencia seleccionar.\n", + "Pero el resultado quizá no sea lo que esperas." ] }, { @@ -100,8 +100,8 @@ "id": "57c13319", "metadata": {}, "source": [ - "The letter with index `1` is actually the second letter of the string.\n", - "An index is an offset from the beginning of the string, so the offset of the first letter is `0`." + "La letra con índice `1` es en realidad la segunda letra de la cadena.\n", + "Un índice es un desplazamiento desde el principio de la cadena, así que el desplazamiento de la primera letra es `0`." ] }, { @@ -119,9 +119,9 @@ "id": "57d8e54c", "metadata": {}, "source": [ - "You can think of `'b'` as the 0th letter of `'banana'` -- pronounced \"zero-eth\".\n", + "Puedes pensar en `'b'` como la letra 0 de `'banana'` -- pronunciada \"ceroésima\".\n", "\n", - "The index in brackets can be a variable." + "El índice entre corchetes puede ser una variable." ] }, { @@ -140,7 +140,7 @@ "id": "9630e2e7", "metadata": {}, "source": [ - "Or an expression that contains variables and operators." + "O una expresión que contiene variables y operadores." ] }, { @@ -158,7 +158,7 @@ "id": "939b602d", "metadata": {}, "source": [ - "But the value of the index has to be an integer -- otherwise you get a `TypeError`." + "Pero el valor del índice tiene que ser un entero -- de lo contrario obtienes un `TypeError`." ] }, { @@ -180,7 +180,7 @@ "id": "3f0f7e3a", "metadata": {}, "source": [ - "As we saw in Chapter 1, we can use the built-in function `len` to get the length of a string." + "Como vimos en el capítulo 1, podemos usar la función integrada `len` para obtener la longitud de una cadena." ] }, { @@ -199,7 +199,7 @@ "id": "29013c47", "metadata": {}, "source": [ - "To get the last letter of a string, you might be tempted to write this:" + "Para obtener la última letra de una cadena, podrías sentir la tentación de escribir esto:" ] }, { @@ -221,7 +221,7 @@ "id": "b87e09bd", "metadata": {}, "source": [ - "But that causes an `IndexError` because there is no letter in `'banana'` with the index 6. Because we started counting at `0`, the six letters are numbered `0` to `5`. To get the last character, you have to subtract `1` from `n`:" + "Pero eso causa un `IndexError` porque no hay ninguna letra en `'banana'` con el índice 6. Como empezamos a contar en `0`, las seis letras están numeradas de `0` a `5`. Para obtener el último carácter, tienes que restar `1` a `n`:" ] }, { @@ -239,8 +239,8 @@ "id": "3c79dcec", "metadata": {}, "source": [ - "But there's an easier way.\n", - "To get the last letter in a string, you can use a negative index, which counts backward from the end. " + "Pero hay una forma más sencilla.\n", + "Para obtener la última letra de una cadena, puedes usar un índice negativo, que cuenta hacia atrás desde el final." ] }, { @@ -258,7 +258,7 @@ "id": "5677b727", "metadata": {}, "source": [ - "The index `-1` selects the last letter, `-2` selects the second to last, and so on." + "El índice `-1` selecciona la última letra, `-2` selecciona la penúltima, y así sucesivamente." ] }, { @@ -266,10 +266,10 @@ "id": "8392a12a", "metadata": {}, "source": [ - "## String slices\n", + "## Segmentos de cadenas\n", "\n", - "A segment of a string is called a **slice**.\n", - "Selecting a slice is similar to selecting a character." + "Un segmento de una cadena se llama **segmento**.\n", + "Seleccionar un segmento es similar a seleccionar un carácter." ] }, { @@ -288,9 +288,9 @@ "id": "5cc12531", "metadata": {}, "source": [ - "The operator `[n:m]` returns the part of the string from the `n`th\n", - "character to the `m`th character, including the first but excluding the second.\n", - "This behavior is counterintuitive, but it might help to imagine the indices pointing *between* the characters, as in this figure:" + "El operador `[n:m]` devuelve la parte de la cadena desde el carácter `n`-ésimo\n", + "hasta el carácter `m`-ésimo, incluyendo el primero pero excluyendo el segundo.\n", + "Este comportamiento es contraintuitivo, pero puede ayudar imaginar que los índices apuntan *entre* los caracteres, como en esta figura:" ] }, { @@ -348,10 +348,10 @@ "id": "c391abbf", "metadata": {}, "source": [ - "For example, the slice `[3:6]` selects the letters `ana`, which means that `6` is legal as part of a slice, but not legal as an index.\n", + "Por ejemplo, el segmento `[3:6]` selecciona las letras `ana`, lo que significa que `6` es legal como parte de un segmento, pero no como índice.\n", "\n", "\n", - "If you omit the first index, the slice starts at the beginning of the string." + "Si omites el primer índice, el segmento empieza al principio de la cadena." ] }, { @@ -369,7 +369,7 @@ "id": "1bd7dcb1", "metadata": {}, "source": [ - "If you omit the second index, the slice goes to the end of the string:" + "Si omites el segundo índice, el segmento va hasta el final de la cadena:" ] }, { @@ -387,7 +387,7 @@ "id": "4701123b", "metadata": {}, "source": [ - "If the first index is greater than or equal to the second, the result is an **empty string**, represented by two quotation marks:" + "Si el primer índice es mayor o igual que el segundo, el resultado es una **cadena vacía**, representado por dos comillas:" ] }, { @@ -405,10 +405,10 @@ "id": "d12735ab", "metadata": {}, "source": [ - "An empty string contains no characters and has length 0.\n", + "Una cadena vacío no contiene caracteres y tiene longitud 0.\n", "\n", - "Continuing this example, what do you think `fruit[:]` means? Try it and\n", - "see." + "Continuando con este ejemplo, ¿qué crees que significa `fruit[:]`? Pruébalo y\n", + "mira." ] }, { @@ -428,10 +428,10 @@ "id": "918d3dd0", "metadata": {}, "source": [ - "## Strings are immutable\n", + "## Las cadenas son inmutables\n", "\n", - "It is tempting to use the `[]` operator on the left side of an\n", - "assignment, with the intention of changing a character in a string, like this:" + "Es tentador usar el operador `[]` en el lado izquierdo de una\n", + "asignación, con la intención de cambiar un carácter en una cadena, así:" ] }, { @@ -454,13 +454,13 @@ "id": "df3dd7d1", "metadata": {}, "source": [ - "The result is a `TypeError`.\n", - "In the error message, the \"object\" is the string and the \"item\" is the character\n", - "we tried to assign.\n", - "For now, an **object** is the same thing as a value, but we will refine that definition later.\n", + "El resultado es un `TypeError`.\n", + "En el mensaje de error, el \"objeto\" es la cadena y el \"item\" es el carácter\n", + "que intentamos asignar.\n", + "Por ahora, un **objeto** es lo mismo que un valor, pero refinaremos esa definición más adelante.\n", "\n", - "The reason for this error is that strings are **immutable**, which means you can't change an existing string.\n", - "The best you can do is create a new string that is a variation of the original." + "La razón de este error es que las cadenas son **inmutables**, lo que significa que no puedes cambiar una cadena existente.\n", + "Lo máximo que puedes hacer es crear una cadena nueva que sea una variación del original." ] }, { @@ -479,8 +479,8 @@ "id": "2848546f", "metadata": {}, "source": [ - "This example concatenates a new first letter onto a slice of `greeting`.\n", - "It has no effect on the original string." + "Este ejemplo concatena una nueva primera letra con un segmento de `greeting`.\n", + "No tiene ningún efecto sobre la cadena original." ] }, { @@ -498,10 +498,10 @@ "id": "49e4da57", "metadata": {}, "source": [ - "## String comparison\n", + "## Comparación de cadenas\n", "\n", - "The relational operators work on strings. To see if two strings are\n", - "equal, we can use the `==` operator." + "Los operadores relacionales funcionan con cadenas. Para ver si dos cadenas son\n", + "iguales, podemos usar el operador `==`." ] }, { @@ -522,8 +522,7 @@ "id": "e9be6097", "metadata": {}, "source": [ - "Other relational operations are useful for putting words in alphabetical\n", - "order:" + "Otras operaciones relacionales son útiles para poner palabras en orden alfabético:" ] }, { @@ -557,9 +556,9 @@ "id": "b66f449a", "metadata": {}, "source": [ - "Python does not handle uppercase and lowercase letters the same way\n", - "people do. All the uppercase letters come before all the lowercase\n", - "letters, so:" + "Python no trata las letras mayúsculas y minúsculas de la misma manera que\n", + "lo hacen las personas. Todas las letras mayúsculas van antes que todas las\n", + "minúsculas, así que:" ] }, { @@ -577,8 +576,8 @@ "id": "f9b916c9", "metadata": {}, "source": [ - "To solve this problem, we can convert strings to a standard format, such as all lowercase, before performing the comparison.\n", - "Keep that in mind if you have to defend yourself against a man armed with a Pineapple." + "Para resolver este problema, podemos convertir las cadenas a un formato estándar, como todo en minúsculas, antes de realizar la comparación.\n", + "Tenlo en cuenta si tienes que defenderte de un hombre armado con una piña." ] }, { @@ -586,13 +585,13 @@ "id": "531069f1", "metadata": {}, "source": [ - "## String methods\n", + "## Métodos de cadenas\n", "\n", - "Strings provide methods that perform a variety of useful operations. \n", - "A method is similar to a function -- it takes arguments and returns a value -- but the syntax is different.\n", - "For example, the method `upper` takes a string and returns a new string with all uppercase letters.\n", + "Las cadenas proporcionan métodos que realizan una variedad de operaciones útiles.\n", + "Un método es similar a una función -- recibe argumentos y devuelve un valor -- pero la sintaxis es diferente.\n", + "Por ejemplo, el método `upper` recibe una cadena y devuelve una cadena nueva con todas las letras en mayúsculas.\n", "\n", - "Instead of the function syntax `upper(word)`, it uses the method syntax `word.upper()`." + "En lugar de la sintaxis de función `upper(word)`, usa la sintaxis de método `word.upper()`." ] }, { @@ -612,10 +611,10 @@ "id": "1ac41744", "metadata": {}, "source": [ - "This use of the dot operator specifies the name of the method, `upper`, and the name of the string to apply the method to, `word`.\n", - "The empty parentheses indicate that this method takes no arguments.\n", + "Este uso del operador punto especifica el nombre del método, `upper`, y el nombre de la cadena al que aplicar el método, `word`.\n", + "Los paréntesis vacíos indican que este método no toma argumentos.\n", "\n", - "A method call is called an **invocation**; in this case, we would say that we are invoking `upper` on `word`." + "Una llamada a método se llama **invocación**; en este caso, diríamos que estamos invocando `upper` sobre `word`." ] }, { @@ -625,10 +624,10 @@ "tags": [] }, "source": [ - "## Writing files\n", + "## Escribir archivos\n", "\n", - "String operators and methods are useful for reading and writing text files.\n", - "As an example, we'll work with the text of *Dracula*, a novel by Bram Stoker that is available from Project Gutenberg ()." + "Los operadores y métodos de cadena son útiles para leer y escribir archivos de texto.\n", + "Como ejemplo, trabajaremos con el texto de *Dracula*, una novela de Bram Stoker que está disponible en Project Gutenberg ()." ] }, { @@ -651,7 +650,7 @@ "id": "963dda79", "metadata": {}, "source": [ - "I've downloaded the book in a plain text file called `pg345.txt`, which we can open for reading like this:" + "He descargado el libro en un archivo de texto plano llamado `pg345.txt`, que podemos abrir para lectura así:" ] }, { @@ -669,11 +668,11 @@ "id": "b5d99e8c", "metadata": {}, "source": [ - "In addition to the text of the book, this file contains a section at the beginning with information about the book and a section at the end with information about the license.\n", - "Before we process the text, we can remove this extra material by finding the special lines at the beginning and end that begin with `'***'`.\n", + "Además del texto del libro, este archivo contiene una sección al principio con información sobre el libro y una sección al final con información sobre la licencia.\n", + "Antes de procesar el texto, podemos eliminar este material extra encontrando las líneas especiales al principio y al final que empiezan con `'***'`.\n", "\n", - "The following function takes a line and checks whether it is one of the special lines.\n", - "It uses the `startswith` method, which checks whether a string starts with a given sequence of characters." + "La siguiente función recibe una línea y comprueba si es una de las líneas especiales.\n", + "Usa el método `startswith`, que comprueba si una cadena empieza con una secuencia determinada de caracteres." ] }, { @@ -692,7 +691,7 @@ "id": "2efdfe35", "metadata": {}, "source": [ - "We can use this function to loop through the lines in the file and print only the special lines." + "Podemos usar esta función para recorrer las líneas del archivo e imprimir solo las líneas especiales." ] }, { @@ -712,9 +711,9 @@ "id": "07fb5992", "metadata": {}, "source": [ - "Now let's create a new file, called `pg345_cleaned.txt`, that contains only the text of the book.\n", - "In order to loop through the book again, we have to open it again for reading.\n", - "And, to write a new file, we can open it for writing." + "Ahora creemos un archivo nuevo, llamado `pg345_cleaned.txt`, que contenga solo el texto del libro.\n", + "Para recorrer el libro de nuevo, tenemos que abrirlo otra vez para lectura.\n", + "Y, para escribir un archivo nuevo, podemos abrirlo para escritura." ] }, { @@ -733,10 +732,10 @@ "id": "96d881aa", "metadata": {}, "source": [ - "`open` takes an optional parameters that specifies the \"mode\" -- in this example, `'w'` indicates that we're opening the file for writing.\n", - "If the file doesn't exist, it will be created; if it already exists, the contents will be replaced.\n", + "`open` recibe un parámetro opcional que especifica el \"modo\" -- en este ejemplo, `'w'` indica que estamos abriendo el archivo para escritura.\n", + "Si el archivo no existe, se creará; si ya existe, el contenido será reemplazado.\n", "\n", - "As a first step, we'll loop through the file until we find the first special line." + "Como primer paso, recorreremos el archivo hasta encontrar la primera línea especial." ] }, { @@ -756,9 +755,9 @@ "id": "1989d5a1", "metadata": {}, "source": [ - "The `break` statement \"breaks\" out of the loop -- that is, it causes the loop to end immediately, before we get to the end of the file.\n", + "La sentencia `break` \"rompe\" el bucle -- es decir, hace que el bucle termine inmediatamente, antes de llegar al final del archivo.\n", "\n", - "When the loop exits, `line` contains the special line that made the conditional true." + "Cuando el bucle termina, `line` contiene la línea especial que hizo que la condición fuera verdadera." ] }, { @@ -776,11 +775,11 @@ "id": "9f28c3b4", "metadata": {}, "source": [ - "Because `reader` keeps track of where it is in the file, we can use a second loop to pick up where we left off.\n", + "Como `reader` lleva la cuenta de en qué parte del archivo está, podemos usar un segundo bucle para continuar donde lo dejamos.\n", "\n", - "The following loop reads the rest of the file, one line at a time.\n", - "When it finds the special line that indicates the end of the text, it breaks out of the loop.\n", - "Otherwise, it writes the line to the output file." + "El siguiente bucle lee el resto del archivo, una línea cada vez.\n", + "Cuando encuentra la línea especial que indica el final del texto, rompe el bucle.\n", + "En caso contrario, escribe la línea en el archivo de salida." ] }, { @@ -801,7 +800,7 @@ "id": "c07032a4", "metadata": {}, "source": [ - "When this loop exits, `line` contains the second special line." + "Cuando este bucle termina, `line` contiene la segunda línea especial." ] }, { @@ -819,8 +818,8 @@ "id": "0c30b41c", "metadata": {}, "source": [ - "At this point `reader` and `writer` are still open, which means we could keep reading lines from `reader` or writing lines to `writer`.\n", - "To indicate that we're done, we can close both files by invoking the `close` method." + "En este punto `reader` y `writer` siguen abiertos, lo que significa que podríamos seguir leyendo líneas de `reader` o escribiendo líneas en `writer`.\n", + "Para indicar que hemos terminado, podemos cerrar ambos archivos invocando el método `close`." ] }, { @@ -839,7 +838,7 @@ "id": "d5084cdc", "metadata": {}, "source": [ - "To check whether this process was successful, we can read the first few lines from the new file we just created." + "Para comprobar si este proceso tuvo éxito, podemos leer las primeras líneas del archivo nuevo que acabamos de crear." ] }, { @@ -862,7 +861,7 @@ "id": "34c93df3", "metadata": {}, "source": [ - "The `endswith` method checks whether a string ends with a given sequence of characters." + "El método `endswith` comprueba si una cadena termina con una secuencia determinada de caracteres." ] }, { @@ -870,12 +869,12 @@ "id": "fcdb4bbf", "metadata": {}, "source": [ - "## Find and replace\n", + "## Buscar y reemplazar\n", "\n", - "In the Icelandic translation of *Dracula* from 1901, the name of one of the characters was changed from \"Jonathan\" to \"Thomas\".\n", - "To make this change in the English version, we can loop through the book, use the `replace` method to replace one name with another, and write the result to a new file.\n", + "En la traducción islandesa de *Dracula* de 1901, el nombre de uno de los personajes se cambió de \"Jonathan\" a \"Thomas\".\n", + "Para hacer este cambio en la versión inglesa, podemos recorrer el libro, usar el método `replace` para reemplazar un nombre por otro y escribir el resultado en un archivo nuevo.\n", "\n", - "We'll start by counting the lines in the cleaned version of the file." + "Empezaremos contando las líneas en la versión limpia del archivo." ] }, { @@ -897,7 +896,7 @@ "id": "8ba9b9ca", "metadata": {}, "source": [ - "To see whether a line contains \"Jonathan\", we can use the `in` operator, which checks whether this sequence of characters appears anywhere in the line." + "Para ver si una línea contiene \"Jonathan\", podemos usar el operador `in`, que comprueba si esta secuencia de caracteres aparece en cualquier parte de la línea." ] }, { @@ -920,8 +919,8 @@ "id": "27805245", "metadata": {}, "source": [ - "There are 199 lines that contain the name, but that's not quite the total number of times it appears, because it can appear more than once in a line.\n", - "To get the total, we can use the `count` method, which returns the number of times a sequence appears in a string." + "Hay 199 líneas que contienen el nombre, pero ese no es exactamente el número total de veces que aparece, porque puede aparecer más de una vez en una línea.\n", + "Para obtener el total, podemos usar el método `count`, que devuelve el número de veces que una secuencia aparece en una cadena." ] }, { @@ -943,7 +942,7 @@ "id": "68026797", "metadata": {}, "source": [ - "Now we can replace `'Jonathan'` with `'Thomas'` like this:" + "Ahora podemos reemplazar `'Jonathan'` por `'Thomas'` así:" ] }, { @@ -965,7 +964,7 @@ "id": "57ba56f3", "metadata": {}, "source": [ - "The result is a new file called `pg345_replaced.txt` that contains a version of *Dracula* where Jonathan Harker is called Thomas." + "El resultado es un archivo nuevo llamado `pg345_replaced.txt` que contiene una versión de *Dracula* donde Jonathan Harker se llama Thomas." ] }, { @@ -989,15 +988,15 @@ "id": "cc9af187", "metadata": {}, "source": [ - "## Regular expressions\n", + "## Expresiones regulares\n", "\n", - "If we know exactly what sequence of characters we're looking for, we can use the `in` operator to find it and the `replace` method to replace it.\n", - "But there is another tool, called a **regular expression** that can also perform these operations -- and a lot more.\n", + "Si sabemos exactamente qué secuencia de caracteres estamos buscando, podemos usar el operador `in` para encontrarla y el método `replace` para reemplazarla.\n", + "Pero hay otra herramienta, llamada **expresión regular**, que también puede realizar estas operaciones -- y muchas más.\n", "\n", - "To demonstrate, I'll start with a simple example and we'll work our way up.\n", - "Suppose, again, that we want to find all lines that contain a particular word.\n", - "For a change, let's look for references to the titular character of the book, Count Dracula.\n", - "Here's a line that mentions him." + "Para demostrarlo, empezaré con un ejemplo sencillo y avanzaremos poco a poco.\n", + "Supongamos, otra vez, que queremos encontrar todas las líneas que contienen una palabra concreta.\n", + "Para variar, busquemos referencias al personaje titular del libro, el conde Dracula.\n", + "Aquí tienes una línea que lo menciona." ] }, { @@ -1015,7 +1014,7 @@ "id": "d4fd6d11", "metadata": {}, "source": [ - "And here's the **pattern** we'll use to search." + "Y aquí está el **patrón** que usaremos para buscar." ] }, { @@ -1033,8 +1032,8 @@ "id": "268f647c", "metadata": {}, "source": [ - "A module called `re` provides functions related to regular expressions.\n", - "We can import it like this and use the `search` function to check whether the pattern appears in the text." + "Un módulo llamado `re` proporciona funciones relacionadas con expresiones regulares.\n", + "Podemos importarlo así y usar la función `search` para comprobar si el patrón aparece en el texto." ] }, { @@ -1055,8 +1054,8 @@ "id": "e17f6731", "metadata": {}, "source": [ - "If the pattern appears in the text, `search` returns a `Match` object that contains the results of the search.\n", - "Among other information, it has a variable named `string` that contains the text that was searched." + "Si el patrón aparece en el texto, `search` devuelve un objeto `Match` que contiene los resultados de la búsqueda.\n", + "Entre otra información, tiene una variable llamada `string` que contiene el texto en el que se buscó." ] }, { @@ -1074,7 +1073,7 @@ "id": "a8eab0f6", "metadata": {}, "source": [ - "It also provides a method called `group` that returns the part of the text that matched the pattern." + "También proporciona un método llamado `group` que devuelve la parte del texto que coincidió con el patrón." ] }, { @@ -1092,7 +1091,7 @@ "id": "b6962a7d", "metadata": {}, "source": [ - "And it provides a method called `span` that returns the index in the text where the pattern starts and ends." + "Y proporciona un método llamado `span` que devuelve el índice en el texto donde empieza y termina el patrón." ] }, { @@ -1110,7 +1109,7 @@ "id": "8f1e5261", "metadata": {}, "source": [ - "If the pattern doesn't appear in the text, the return value from `search` is `None`." + "Si el patrón no aparece en el texto, el valor de retorno de `search` es `None`." ] }, { @@ -1129,7 +1128,7 @@ "id": "d5ed33ff", "metadata": {}, "source": [ - "So we can check whether the search was successful by checking whether the result is `None`." + "Así que podemos comprobar si la búsqueda tuvo éxito comprobando si el resultado es `None`." ] }, { @@ -1147,7 +1146,7 @@ "id": "a08e38f6", "metadata": {}, "source": [ - "Putting all that together, here's a function that loops through the lines in the book until it finds one that matches the given pattern, and returns the `Match` object." + "Juntando todo eso, aquí tienes una función que recorre las líneas del libro hasta encontrar una que coincida con el patrón dado, y devuelve el objeto `Match`." ] }, { @@ -1169,7 +1168,7 @@ "id": "96570515", "metadata": {}, "source": [ - "We can use it to find the first mention of a character." + "Podemos usarla para encontrar la primera mención de un personaje." ] }, { @@ -1188,12 +1187,12 @@ "id": "3f687fdc", "metadata": {}, "source": [ - "For this example, we didn't have to use regular expressions -- we could have done the same thing more easily with the `in` operator.\n", - "But regular expressions can do things the `in` operator cannot.\n", + "Para este ejemplo, no tuvimos que usar expresiones regulares -- podríamos haber hecho lo mismo más fácilmente con el operador `in`.\n", + "Pero las expresiones regulares pueden hacer cosas que el operador `in` no puede.\n", "\n", - "For example, if the pattern includes the vertical bar character, `'|'`, it can match either the sequence on the left or the sequence on the right.\n", - "Suppose we want to find the first mention of Mina Murray in the book, but we are not sure whether she is referred to by first name or last.\n", - "We can use the following pattern, which matches either name." + "Por ejemplo, si el patrón incluye el carácter de barra vertical, `'|'`, puede coincidir con la secuencia de la izquierda o con la secuencia de la derecha.\n", + "Supongamos que queremos encontrar la primera mención de Mina Murray en el libro, pero no estamos seguros de si se la menciona por su nombre o por su apellido.\n", + "Podemos usar el siguiente patrón, que coincide con cualquiera de los dos nombres." ] }, { @@ -1213,8 +1212,8 @@ "id": "8bea66a6", "metadata": {}, "source": [ - "We can use a pattern like this to see how many times a character is mentioned by either name.\n", - "Here's a function that loops through the book and counts the number of lines that match the given pattern." + "Podemos usar un patrón como este para ver cuántas veces se menciona a un personaje por cualquiera de los dos nombres.\n", + "Aquí tienes una función que recorre el libro y cuenta el número de líneas que coinciden con el patrón dado." ] }, { @@ -1238,7 +1237,7 @@ "id": "0e753a5b", "metadata": {}, "source": [ - "Now let's see how many times Mina is mentioned." + "Ahora veamos cuántas veces se menciona a Mina." ] }, { @@ -1256,7 +1255,7 @@ "id": "780c9fab", "metadata": {}, "source": [ - "The special character `'^'` matches the beginning of a string, so we can find a line that starts with a given pattern." + "El carácter especial `'^'` coincide con el principio de una cadena, así que podemos encontrar una línea que empieza con un patrón dado." ] }, { @@ -1275,7 +1274,7 @@ "id": "332bad2e", "metadata": {}, "source": [ - "And the special character `'$'` matches the end of a string, so we can find a line that ends with a given pattern (ignoring the newline at the end)." + "Y el carácter especial `'$'` coincide con el final de una cadena, así que podemos encontrar una línea que termina con un patrón dado (ignorando el salto de línea del final)." ] }, { @@ -1294,11 +1293,11 @@ "id": "d4b22b6e", "metadata": {}, "source": [ - "## String substitution\n", + "## Sustitución de cadenas\n", "\n", - "Bram Stoker was born in Ireland, and when *Dracula* was published in 1897, he was living in England.\n", - "So we would expect him to use the British spelling of words like \"centre\" and \"colour\".\n", - "To check, we can use the following pattern, which matches either \"centre\" or the American spelling \"center\"." + "Bram Stoker nació en Irlanda, y cuando *Dracula* se publicó en 1897, vivía en Inglaterra.\n", + "Así que esperaríamos que usara la ortografía británica de palabras como \"centre\" y \"colour\".\n", + "Para comprobarlo, podemos usar el siguiente patrón, que coincide con \"centre\" o con la ortografía estadounidense \"center\"." ] }, { @@ -1316,8 +1315,8 @@ "id": "35abfd7d", "metadata": {}, "source": [ - "In this pattern, the parentheses enclose the part of the pattern the vertical bar applies to.\n", - "So this pattern matches a sequence that starts with `'cent'` and ends with either `'er'` or `'re'`." + "En este patrón, los paréntesis encierran la parte del patrón a la que se aplica la barra vertical.\n", + "Así que este patrón coincide con una secuencia que empieza con `'cent'` y termina con `'er'` o con `'re'`." ] }, { @@ -1336,10 +1335,10 @@ "id": "e5703c18", "metadata": {}, "source": [ - "As expected, he used the British spelling.\n", + "Como esperábamos, usó la ortografía británica.\n", "\n", - "We can also check whether he used the British spelling of \"colour\".\n", - "The following pattern uses the special character `'?'`, which means that the previous character is optional." + "También podemos comprobar si usó la ortografía británica de \"colour\".\n", + "El siguiente patrón usa el carácter especial `'?'`, que significa que el carácter anterior es opcional." ] }, { @@ -1357,7 +1356,7 @@ "id": "beed9a7b", "metadata": {}, "source": [ - "This pattern matches either \"colour\" with the `'u'` or \"color\" without it." + "Este patrón coincide con \"colour\" con la `'u'` o con \"color\" sin ella." ] }, { @@ -1377,10 +1376,10 @@ "id": "1a31f179", "metadata": {}, "source": [ - "Again, as expected, he used the British spelling.\n", + "De nuevo, como esperábamos, usó la ortografía británica.\n", "\n", - "Now suppose we want to produce an edition of the book with American spellings.\n", - "We can use the `sub` function in the `re` module, which does **string substitution**." + "Ahora supongamos que queremos producir una edición del libro con ortografía estadounidense.\n", + "Podemos usar la función `sub` del módulo `re`, que hace **sustitución de cadenas**." ] }, { @@ -1398,8 +1397,8 @@ "id": "04a80fc6", "metadata": {}, "source": [ - "The first argument is the pattern we want to find and replace, the second is what we want to replace it with, and the third is the string we want to search.\n", - "In the result, you can see that \"colour\" has been replaced with \"color\"." + "El primer argumento es el patrón que queremos encontrar y reemplazar, el segundo es aquello con lo que queremos reemplazarlo, y el tercero es la cadena en el que queremos buscar.\n", + "En el resultado, puedes ver que \"colour\" ha sido reemplazado por \"color\"." ] }, { @@ -1441,11 +1440,11 @@ "id": "0318507d", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "When you are reading and writing files, debugging can be tricky.\n", - "If you are working in a Jupyter notebook, you can use **shell commands** to help.\n", - "For example, to display the first few lines of a file, you can use the command `!head`, like this:" + "Cuando lees y escribes archivos, depurar puede ser complicado.\n", + "Si trabajas en un Jupyter notebook, puedes usar **comandos de shell** para ayudar.\n", + "Por ejemplo, para mostrar las primeras líneas de un archivo, puedes usar el comando `!head`, así:" ] }, { @@ -1465,8 +1464,8 @@ "id": "1d480c02", "metadata": {}, "source": [ - "The initial exclamation point, `!`, indicates that this is a shell command, which is not part of Python.\n", - "To display the last few lines, you can use `!tail`." + "El signo de exclamación inicial, `!`, indica que esto es un comando de shell, que no forma parte de Python.\n", + "Para mostrar las últimas líneas, puedes usar `!tail`." ] }, { @@ -1486,10 +1485,10 @@ "id": "6874023a", "metadata": {}, "source": [ - "When you are working with large files, debugging can be difficult because there might be too much output to check by hand.\n", - "A good debugging strategy is to start with just part of the file, get the program working, and then run it with the whole file.\n", + "Cuando trabajas con archivos grandes, depurar puede ser difícil porque puede haber demasiada salida para revisarla a mano.\n", + "Una buena estrategia de depuración es empezar con solo una parte del archivo, hacer que el programa funcione, y luego ejecutarlo con el archivo completo.\n", "\n", - "To make a small file that contains part of a larger file, we can use `!head` again with the redirect operator, `>`, which indicates that the results should be written to a file rather than displayed." + "Para crear un archivo pequeño que contenga parte de un archivo más grande, podemos usar `!head` de nuevo con el operador de redirección, `>`, que indica que los resultados deben escribirse en un archivo en lugar de mostrarse." ] }, { @@ -1507,7 +1506,7 @@ "id": "3fc851f8", "metadata": {}, "source": [ - "By default, `!head` reads the first 10 lines, but it takes an optional argument that indicates the number of lines to read." + "Por defecto, `!head` lee las primeras 10 líneas, pero recibe un argumento opcional que indica el número de líneas a leer." ] }, { @@ -1525,11 +1524,11 @@ "id": "24871c78", "metadata": {}, "source": [ - "This shell command reads the first 100 lines from `pg345_cleaned.txt` and writes them to a file called `pg345_cleaned_100_lines.txt`.\n", + "Este comando de shell lee las primeras 100 líneas de `pg345_cleaned.txt` y las escribe en un archivo llamado `pg345_cleaned_100_lines.txt`.\n", "\n", - "Note: The shell commands `!head` and `!tail` are not available on all operating systems.\n", - "If they don't work for you, we can write similar functions in Python.\n", - "See the first exercise at the end of this chapter for suggestions." + "Nota: Los comandos de shell `!head` y `!tail` no están disponibles en todos los sistemas operativos.\n", + "Si no te funcionan, podemos escribir funciones similares en Python.\n", + "Consulta el primer ejercicio al final de este capítulo para ver sugerencias." ] }, { @@ -1537,43 +1536,43 @@ "id": "c842524d", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**sequence:**\n", - " An ordered collection of values where each value is identified by an integer index.\n", + "**secuencia:**\n", + " Una colección ordenada de valores donde cada valor se identifica mediante un índice entero.\n", "\n", - "**character:**\n", - "An element of a string, including letters, numbers, and symbols.\n", + "**carácter:**\n", + "Un elemento de una cadena, incluidas letras, números y símbolos.\n", "\n", - "**index:**\n", - " An integer value used to select an item in a sequence, such as a character in a string. In Python indices start from `0`.\n", + "**índice:**\n", + " Un valor entero usado para seleccionar un elemento en una secuencia, como un carácter en una cadena. En Python los índices empiezan desde `0`.\n", "\n", - "**slice:**\n", - " A part of a string specified by a range of indices.\n", + "**segmento:**\n", + " Una parte de una cadena especificada por un rango de índices.\n", "\n", - "**empty string:**\n", - "A string that contains no characters and has length `0`.\n", + "**cadena vacía:**\n", + "Una cadena que no contiene caracteres y tiene longitud `0`.\n", "\n", - "**object:**\n", - " Something a variable can refer to. An object has a type and a value.\n", + "**objeto:**\n", + " Algo a lo que una variable puede referirse. Un objeto tiene un tipo y un valor.\n", "\n", - "**immutable:**\n", - "If the elements of an object cannot be changed, the object is immutable.\n", + "**inmutable:**\n", + "Si los elementos de un objeto no se pueden cambiar, el objeto es inmutable.\n", "\n", - "**invocation:**\n", - " An expression -- or part of an expression -- that calls a method.\n", + "**invocación:**\n", + " Una expresión -- o parte de una expresión -- que llama a un método.\n", "\n", - "**regular expression:**\n", - "A sequence of characters that defines a search pattern.\n", + "**expresión regular:**\n", + "Una secuencia de caracteres que define un patrón de búsqueda.\n", "\n", - "**pattern:**\n", - "A rule that specifies the requirements a string has to meet to constitute a match.\n", + "**patrón:**\n", + "Una regla que especifica los requisitos que una cadena debe cumplir para constituir una coincidencia.\n", "\n", - "**string substitution:**\n", - "Replacement of a string, or part of a string, with another string.\n", + "**sustitución de cadenas:**\n", + "Reemplazo de una cadena, o parte de una cadena, por otra cadena.\n", "\n", - "**shell command:**\n", - "A statement in a shell language, which is a language used to interact with an operating system." + "**comando de shell:**\n", + "Una sentencia en un lenguaje de shell, que es un lenguaje usado para interactuar con un sistema operativo." ] }, { @@ -1581,7 +1580,7 @@ "id": "4306e765", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1616,24 +1615,24 @@ "id": "5be97ddc", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "In this chapter, we only scratched the surface of what regular expressions can do.\n", - "To get an idea of what's possible, ask a virtual assistant, \"What are the most common special characters used in Python regular expressions?\"\n", + "En este capítulo, apenas hemos arañado la superficie de lo que pueden hacer las expresiones regulares.\n", + "Para hacerte una idea de lo que es posible, pregunta a un asistente virtual: \"¿Cuáles son los caracteres especiales más comunes que se usan en las expresiones regulares de Python?\"\n", "\n", - "You can also ask for a pattern that matches particular kinds of strings.\n", - "For example, try asking:\n", + "También puedes pedir un patrón que coincida con tipos concretos de cadenas.\n", + "Por ejemplo, prueba a preguntar:\n", "\n", - "* Write a Python regular expression that matches a 10-digit phone number with hyphens.\n", + "* Escribe una expresión regular de Python que coincida con un número de teléfono de 10 dígitos con guiones.\n", "\n", - "* Write a Python regular expression that matches a street address with a number and a street name, followed by `ST` or `AVE`.\n", + "* Escribe una expresión regular de Python que coincida con una dirección con un número y un nombre de calle, seguida de `ST` o `AVE`.\n", "\n", - "* Write a Python regular expression that matches a full name with any common title like `Mr` or `Mrs` followed by any number of names beginning with capital letters, possibly with hyphens between some names.\n", + "* Escribe una expresión regular de Python que coincida con un nombre completo con cualquier título común como `Mr` o `Mrs`, seguido de cualquier número de nombres que empiecen con mayúsculas, posiblemente con guiones entre algunos nombres.\n", "\n", - "And if you want to see something more complicated, try asking for a regular expression that matches any legal URL.\n", + "Y si quieres ver algo más complicado, prueba a pedir una expresión regular que coincida con cualquier URL legal.\n", "\n", - "A regular expression often has the letter `r` before the quotation mark, which indicates that it is a \"raw string\".\n", - "For more information, ask a virtual assistant, \"What is a raw string in Python?\"" + "Una expresión regular a menudo tiene la letra `r` antes de la comilla, lo que indica que es una \"cadena sin procesar\".\n", + "Para más información, pregunta a un asistente virtual: \"¿Qué es una cadena sin procesar en Python?\"" ] }, { @@ -1656,13 +1655,13 @@ "id": "20dcbbb3", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "See if you can write a function that does the same thing as the shell command `!head`.\n", - "It should take as arguments the name of a file to read, the number of lines to read, and the name of the file to write the lines into.\n", - "If the third parameter is `None`, it should display the lines rather than write them to a file.\n", + "Mira si puedes escribir una función que haga lo mismo que el comando de shell `!head`.\n", + "Debe recibir como argumentos el nombre de un archivo que leer, el número de líneas que leer y el nombre del archivo donde escribir las líneas.\n", + "Si el tercer parámetro es `None`, debe mostrar las líneas en lugar de escribirlas en un archivo.\n", "\n", - "Consider asking a virtual assistant for help, but if you do, tell it not to use a `with` statement or a `try` statement." + "Considera pedir ayuda a un asistente virtual, pero si lo haces, dile que no use una sentencia `with` ni una sentencia `try`." ] }, { @@ -1682,7 +1681,7 @@ "tags": [] }, "source": [ - "You can use the following examples to test your function." + "Puedes usar los siguientes ejemplos para probar tu función." ] }, { @@ -1726,18 +1725,18 @@ "id": "adb78357", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "\"Wordle\" is an online word game where the objective is to guess a five-letter word in six or fewer attempts.\n", - "Each attempt has to be recognized as a word, not including proper nouns.\n", - "After each attempt, you get information about which of the letters you guessed appear in the target word, and which ones are in the correct position.\n", + "\"Wordle\" es un juego de palabras online donde el objetivo es adivinar una palabra de cinco letras en seis intentos o menos.\n", + "Cada intento tiene que ser reconocido como una palabra, sin incluir nombres propios.\n", + "Después de cada intento, obtienes información sobre cuáles de las letras que adivinaste aparecen en la palabra objetivo, y cuáles están en la posición correcta.\n", "\n", - "For example, suppose the target word is `MOWER` and you guess `TRIED`.\n", - "You would learn that `E` is in the word and in the correct position, `R` is in the word but not in the correct position, and `T`, `I`, and `D` are not in the word.\n", + "Por ejemplo, supongamos que la palabra objetivo es `MOWER` y que intentas `TRIED`.\n", + "Aprenderías que `E` está en la palabra y en la posición correcta, `R` está en la palabra pero no en la posición correcta, y `T`, `I` y `D` no están en la palabra.\n", "\n", - "As a different example, suppose you have guessed the words `SPADE` and `CLERK`, and you've learned that `E` is in the word, but not in either of those positions, and none of the other letters appear in the word.\n", - "Of the words in the word list, how many could be the target word?\n", - "Write a function called `check_word` that takes a five-letter word and checks whether it could be the target word, given these guesses." + "Como ejemplo distinto, supongamos que has intentado las palabras `SPADE` y `CLERK`, y has aprendido que `E` está en la palabra, pero no en ninguna de esas posiciones, y que ninguna de las otras letras aparece en la palabra.\n", + "De las palabras de la lista, ¿cuántas podrían ser la palabra objetivo?\n", + "Escribe una función llamada `check_word` que reciba una palabra de cinco letras y compruebe si podría ser la palabra objetivo, dadas estas conjeturas." ] }, { @@ -1755,7 +1754,7 @@ "id": "87fdf676", "metadata": {}, "source": [ - "You can use any of the functions from the previous chapter, like `uses_any`." + "Puedes usar cualquiera de las funciones del capítulo anterior, como `uses_any`." ] }, { @@ -1781,7 +1780,7 @@ "tags": [] }, "source": [ - "You can use the following loop to test your function." + "Puedes usar el siguiente bucle para probar tu función." ] }, { @@ -1804,9 +1803,9 @@ "id": "d009cb52", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Continuing the previous exercise, suppose you guess the work `TOTEM` and learn that the `E` is *still* not in the right place, but the `M` is. How many words are left?" + "Continuando con el ejercicio anterior, supongamos que intentas la palabra `TOTEM` y aprendes que la `E` *todavía* no está en el lugar correcto, pero la `M` sí. ¿Cuántas palabras quedan?" ] }, { @@ -1834,16 +1833,16 @@ "id": "c1d0f892", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "*The Count of Monte Cristo* is a novel by Alexandre Dumas that is considered a classic.\n", - "Nevertheless, in the introduction of an English translation of the book, the writer Umberto Eco confesses that he found the book to be \"one of the most badly written novels of all time\".\n", + "*The Count of Monte Cristo* es una novela de Alexandre Dumas que se considera un clásico.\n", + "Sin embargo, en la introducción de una traducción inglesa del libro, el escritor Umberto Eco confiesa que le pareció \"una de las novelas peor escritas de todos los tiempos\".\n", "\n", - "In particular, he says it is \"shameless in its repetition of the same adjective,\" and mentions in particular the number of times \"its characters either shudder or turn pale.\"\n", + "En particular, dice que es \"desvergonzada en su repetición del mismo adjetivo\", y menciona en particular el número de veces que \"sus personajes se estremecen o palidecen\".\n", "\n", - "To see whether his objection is valid, let's count the number number of lines that contain the word `pale` in any form, including `pale`, `pales`, `paled`, and `paleness`, as well as the related word `pallor`. \n", - "Use a single regular expression that matches any of these words.\n", - "As an additional challenge, make sure that it doesn't match any other words, like `impale` -- you might want to ask a virtual assistant for help." + "Para ver si su objeción es válida, contemos el número de líneas que contienen la palabra `pale` en cualquier forma, incluidas `pale`, `pales`, `paled` y `paleness`, así como la palabra relacionada `pallor`.\n", + "Usa una sola expresión regular que coincida con cualquiera de estas palabras.\n", + "Como desafío adicional, asegúrate de que no coincida con otras palabras, como `impale` -- quizá quieras pedir ayuda a un asistente virtual." ] }, { @@ -1853,7 +1852,7 @@ "tags": [] }, "source": [ - "The following cell downloads the book from Project Gutenberg ." + "La siguiente celda descarga el libro de Project Gutenberg ." ] }, { @@ -1878,7 +1877,7 @@ "tags": [] }, "source": [ - "The following cell runs a function that reads the file from Project Gutenberg and writes a file that contains only the text of the book, not the added information about the book." + "La siguiente celda ejecuta una función que lee el archivo de Project Gutenberg y escribe un archivo que contiene solo el texto del libro, no la información añadida sobre el libro." ] }, { @@ -1946,7 +1945,7 @@ "tags": [] }, "source": [ - "By this count, these words appear on `223` lines of the book, so Mr. Eco might have a point." + "Según este recuento, estas palabras aparecen en `223` líneas del libro, así que el señor Eco quizá tenga razón." ] }, { @@ -1960,9 +1959,11 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], diff --git a/chapters/chap09.ipynb b/chapters/chap09.ipynb index 755c656..c850bb8 100644 --- a/chapters/chap09.ipynb +++ b/chapters/chap09.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -41,12 +41,12 @@ "id": "3c25ca7e", "metadata": {}, "source": [ - "# Lists\n", + "# Listas\n", "\n", - "This chapter presents one of Python's most useful built-in types, lists.\n", - "You will also learn more about objects and what can happen when multiple variables refer to the same object.\n", + "Este capítulo presenta uno de los tipos integrados más útiles de Python: las listas.\n", + "También aprenderás más sobre objetos y lo que puede ocurrir cuando varias variables se refieren al mismo objeto.\n", "\n", - "In the exercises at the end of the chapter, we'll make a word list and use it to search for special words like palindromes and anagrams." + "En los ejercicios al final del capítulo, construiremos una lista de palabras y la usaremos para buscar palabras especiales como palíndromos y anagramas." ] }, { @@ -54,14 +54,14 @@ "id": "4d32b3e2", "metadata": {}, "source": [ - "## A list is a sequence\n", + "## Una lista es una secuencia\n", "\n", - "Like a string, a **list** is a sequence of values. In a string, the\n", - "values are characters; in a list, they can be any type.\n", - "The values in a list are called **elements**.\n", + "Como un string, una **lista** es una secuencia de valores. En un string, los\n", + "valores son caracteres; en una lista, pueden ser de cualquier tipo.\n", + "Los valores en una lista se llaman **elementos**.\n", "\n", - "There are several ways to create a new list; the simplest is to enclose the elements in square brackets (`[` and `]`).\n", - "For example, here is a list of two integers. " + "Hay varias formas de crear una nueva lista; la más simple es encerrar los elementos entre corchetes (`[` y `]`).\n", + "Por ejemplo, aquí tienes una lista de dos enteros." ] }, { @@ -79,7 +79,7 @@ "id": "b5d6112c", "metadata": {}, "source": [ - "And here's a list of three strings." + "Y aquí tienes una lista de tres strings." ] }, { @@ -97,8 +97,8 @@ "id": "dda58c67", "metadata": {}, "source": [ - "The elements of a list don't have to be the same type.\n", - "The following list contains a string, a float, an integer, and even another list." + "Los elementos de una lista no tienen que ser del mismo tipo.\n", + "La siguiente lista contiene un string, un float, un entero e incluso otra lista." ] }, { @@ -116,10 +116,10 @@ "id": "147fa217", "metadata": {}, "source": [ - "A list within another list is **nested**.\n", + "Una lista dentro de otra lista está **anidada**.\n", "\n", - "A list that contains no elements is called an empty list; you can create\n", - "one with empty brackets, `[]`." + "Una lista que no contiene elementos se llama lista vacía; puedes crear\n", + "una con corchetes vacíos, `[]`." ] }, { @@ -137,7 +137,7 @@ "id": "f95381bc", "metadata": {}, "source": [ - "The `len` function returns the length of a list." + "La función `len` devuelve la longitud de una lista." ] }, { @@ -155,7 +155,7 @@ "id": "371403a3", "metadata": {}, "source": [ - "The length of an empty list is `0`." + "La longitud de una lista vacía es `0`." ] }, { @@ -175,7 +175,7 @@ "id": "d3589a5d", "metadata": {}, "source": [ - "The following figure shows the state diagram for `cheeses`, `numbers` and `empty`." + "La siguiente figura muestra el diagrama de estado de `cheeses`, `numbers` y `empty`." ] }, { @@ -225,7 +225,7 @@ "id": "503f25d8", "metadata": {}, "source": [ - "Lists are represented by boxes with the word \"list\" outside and the numbered elements of the list inside." + "Las listas se representan con cajas con la palabra \"lista\" fuera y los elementos numerados de la lista dentro." ] }, { @@ -233,10 +233,10 @@ "id": "e0b8ff01", "metadata": {}, "source": [ - "## Lists are mutable\n", + "## Las listas son mutables\n", "\n", - "To read an element of a list, we can use the bracket operator.\n", - "The index of the first element is `0`." + "Para leer un elemento de una lista, podemos usar el operador de corchetes.\n", + "El índice del primer elemento es `0`." ] }, { @@ -254,9 +254,9 @@ "id": "9747e951", "metadata": {}, "source": [ - "Unlike strings, lists are mutable. When the bracket operator appears on\n", - "the left side of an assignment, it identifies the element of the list\n", - "that will be assigned." + "A diferencia de los strings, las listas son mutables. Cuando el operador de corchetes aparece en\n", + "el lado izquierdo de una asignación, identifica el elemento de la lista\n", + "al que se asignará el valor." ] }, { @@ -275,19 +275,19 @@ "id": "5097a517", "metadata": {}, "source": [ - "The second element of `numbers`, which used to be `123`, is now `17`.\n", + "El segundo elemento de `numbers`, que antes era `123`, ahora es `17`.\n", "\n", - "List indices work the same way as string indices:\n", + "Los índices de lista funcionan igual que los índices de string:\n", "\n", - "- Any integer expression can be used as an index.\n", + "- Cualquier expresión entera puede usarse como índice.\n", "\n", - "- If you try to read or write an element that does not exist, you get\n", - " an `IndexError`.\n", + "- Si intentas leer o escribir un elemento que no existe, obtienes\n", + " un `IndexError`.\n", "\n", - "- If an index has a negative value, it counts backward from the end of\n", - " the list.\n", + "- Si un índice tiene un valor negativo, cuenta hacia atrás desde el final de\n", + " la lista.\n", "\n", - "The `in` operator works on lists -- it checks whether a given element appears anywhere in the list." + "El operador `in` funciona con listas: comprueba si un elemento dado aparece en algún lugar de la lista." ] }, { @@ -315,7 +315,7 @@ "id": "89d01ebf", "metadata": {}, "source": [ - "Although a list can contain another list, the nested list still counts as a single element -- so in the following list, there are only four elements." + "Aunque una lista puede contener otra lista, la lista anidada sigue contando como un solo elemento; por eso, en la siguiente lista, solo hay cuatro elementos." ] }, { @@ -334,7 +334,7 @@ "id": "4e0ea41d", "metadata": {}, "source": [ - "And `10` is not considered to be an element of `t` because it is an element of a nested list, not `t`." + "Y `10` no se considera un elemento de `t` porque es un elemento de una lista anidada, no de `t`." ] }, { @@ -352,10 +352,10 @@ "id": "1ee7a4d9", "metadata": {}, "source": [ - "## List slices\n", + "## Porciones de lista\n", "\n", - "The slice operator works on lists the same way it works on strings.\n", - "The following example selects the second and third elements from a list of four letters." + "El operador de porción funciona con listas igual que con strings.\n", + "El siguiente ejemplo selecciona el segundo y el tercer elemento de una lista de cuatro letras." ] }, { @@ -374,7 +374,7 @@ "id": "bc59d952", "metadata": {}, "source": [ - "If you omit the first index, the slice starts at the beginning. " + "Si omites el primer índice, la porción empieza al principio." ] }, { @@ -392,7 +392,7 @@ "id": "1aaaae86", "metadata": {}, "source": [ - "If you omit the second, the slice goes to the end. " + "Si omites el segundo, la porción llega hasta el final." ] }, { @@ -410,7 +410,7 @@ "id": "67ad02e8", "metadata": {}, "source": [ - "So if you omit both, the slice is a copy of the whole list." + "Así que, si omites ambos, la porción es una copia de toda la lista." ] }, { @@ -428,7 +428,7 @@ "id": "9232c1ef", "metadata": {}, "source": [ - "Another way to copy a list is to use the `list` function." + "Otra forma de copiar una lista es usar la función `list`." ] }, { @@ -446,7 +446,7 @@ "id": "50e4b182", "metadata": {}, "source": [ - "Because `list` is the name of a built-in function, you should avoid using it as a variable name.\n" + "Como `list` es el nombre de una función integrada, deberías evitar usarlo como nombre de variable.\n" ] }, { @@ -454,9 +454,9 @@ "id": "1b057c0c", "metadata": {}, "source": [ - "## List operations\n", + "## Operaciones con listas\n", "\n", - "The `+` operator concatenates lists." + "El operador `+` concatena listas." ] }, { @@ -476,7 +476,7 @@ "id": "474a5c40", "metadata": {}, "source": [ - "The `*` operator repeats a list a given number of times." + "El operador `*` repite una lista un número determinado de veces." ] }, { @@ -494,7 +494,7 @@ "id": "5b33bc51", "metadata": {}, "source": [ - "No other mathematical operators work with lists, but the built-in function `sum` adds up the elements." + "Ningún otro operador matemático funciona con listas, pero la función integrada `sum` suma los elementos." ] }, { @@ -512,7 +512,7 @@ "id": "f216a14d", "metadata": {}, "source": [ - "And `min` and `max` find the smallest and largest elements." + "Y `min` y `max` encuentran el elemento más pequeño y el más grande." ] }, { @@ -540,10 +540,10 @@ "id": "533a2009", "metadata": {}, "source": [ - "## List methods\n", + "## Métodos de lista\n", "\n", - "Python provides methods that operate on lists. For example, `append`\n", - "adds a new element to the end of a list:" + "Python proporciona métodos que operan sobre listas. Por ejemplo, `append`\n", + "añade un nuevo elemento al final de una lista:" ] }, { @@ -562,7 +562,7 @@ "id": "ccc57f77", "metadata": {}, "source": [ - "`extend` takes a list as an argument and appends all of the elements:" + "`extend` toma una lista como argumento y añade todos sus elementos:" ] }, { @@ -581,8 +581,8 @@ "id": "0f39d9f6", "metadata": {}, "source": [ - "There are two methods that remove elements from a list.\n", - "If you know the index of the element you want, you can use `pop`." + "Hay dos métodos que eliminan elementos de una lista.\n", + "Si conoces el índice del elemento que quieres, puedes usar `pop`." ] }, { @@ -601,8 +601,8 @@ "id": "6729415a", "metadata": {}, "source": [ - "The return value is the element that was removed.\n", - "And we can confirm that the list has been modified." + "El valor de retorno es el elemento que se eliminó.\n", + "Y podemos confirmar que la lista se ha modificado." ] }, { @@ -620,7 +620,7 @@ "id": "1e97ee7d", "metadata": {}, "source": [ - "If you know the element you want to remove (but not the index), you can use `remove`:" + "Si conoces el elemento que quieres eliminar (pero no el índice), puedes usar `remove`:" ] }, { @@ -639,8 +639,8 @@ "id": "60e710fe", "metadata": {}, "source": [ - "The return value from `remove` is `None`.\n", - "But we can confirm that the list has been modified." + "El valor de retorno de `remove` es `None`.\n", + "Pero podemos confirmar que la lista se ha modificado." ] }, { @@ -658,7 +658,7 @@ "id": "2a9448a8", "metadata": {}, "source": [ - "If the element you ask for is not in the list, that's a ValueError." + "Si el elemento que pides no está en la lista, eso es un ValueError." ] }, { @@ -680,11 +680,11 @@ "id": "18305f96", "metadata": {}, "source": [ - "## Lists and strings\n", + "## Listas y strings\n", "\n", - "A string is a sequence of characters and a list is a sequence of values,\n", - "but a list of characters is not the same as a string. \n", - "To convert from a string to a list of characters, you can use the `list` function." + "Un string es una secuencia de caracteres y una lista es una secuencia de valores,\n", + "pero una lista de caracteres no es lo mismo que un string.\n", + "Para convertir un string en una lista de caracteres, puedes usar la función `list`." ] }, { @@ -704,8 +704,8 @@ "id": "0291ef69", "metadata": {}, "source": [ - "The `list` function breaks a string into individual letters.\n", - "If you want to break a string into words, you can use the `split` method:" + "La función `list` divide un string en letras individuales.\n", + "Si quieres dividir un string en palabras, puedes usar el método `split`:" ] }, { @@ -725,7 +725,7 @@ "id": "0e16909d", "metadata": {}, "source": [ - "An optional argument called a **delimiter** specifies which characters to use as word boundaries. The following example uses a hyphen as a delimiter." + "Un argumento opcional llamado **delimitador** especifica qué caracteres se usan como límites entre palabras. El siguiente ejemplo usa un guion como delimitador." ] }, { @@ -745,8 +745,8 @@ "id": "7c61f916", "metadata": {}, "source": [ - "If you have a list of strings, you can concatenate them into a single string using `join`.\n", - "`join` is a string method, so you have to invoke it on the delimiter and pass the list as an argument." + "Si tienes una lista de strings, puedes concatenarlos en un solo string usando `join`.\n", + "`join` es un método de string, así que tienes que invocarlo sobre el delimitador y pasar la lista como argumento." ] }, { @@ -767,9 +767,9 @@ "id": "bedd842b", "metadata": {}, "source": [ - "In this case the delimiter is a space character, so `join` puts a space\n", - "between words.\n", - "To join strings without spaces, you can use the empty string, `''`, as a delimiter." + "En este caso el delimitador es un carácter de espacio, así que `join` pone un espacio\n", + "entre las palabras.\n", + "Para unir strings sin espacios, puedes usar el string vacío, `''`, como delimitador." ] }, { @@ -777,9 +777,9 @@ "id": "181215ce", "metadata": {}, "source": [ - "## Looping through a list\n", + "## Recorrer una lista con un bucle\n", "\n", - "You can use a `for` statement to loop through the elements of a list." + "Puedes usar una sentencia `for` para recorrer los elementos de una lista." ] }, { @@ -798,7 +798,7 @@ "id": "c0e53a09", "metadata": {}, "source": [ - "For example, after using `split` to make a list of words, we can use `for` to loop through them." + "Por ejemplo, después de usar `split` para crear una lista de palabras, podemos usar `for` para recorrerlas." ] }, { @@ -819,7 +819,7 @@ "id": "0857b55b", "metadata": {}, "source": [ - "A `for` loop over an empty list never runs the indented statements." + "Un bucle `for` sobre una lista vacía nunca ejecuta las sentencias indentadas." ] }, { @@ -838,9 +838,9 @@ "id": "6e5f55c9", "metadata": {}, "source": [ - "## Sorting lists\n", + "## Ordenar listas\n", "\n", - "Python provides a built-in function called `sorted` that sorts the elements of a list." + "Python proporciona una función integrada llamada `sorted` que ordena los elementos de una lista." ] }, { @@ -859,7 +859,7 @@ "id": "44e028cf", "metadata": {}, "source": [ - "The original list is unchanged." + "La lista original no cambia." ] }, { @@ -877,7 +877,7 @@ "id": "530146af", "metadata": {}, "source": [ - "`sorted` works with any kind of sequence, not just lists. So we can sort the letters in a string like this." + "`sorted` funciona con cualquier tipo de secuencia, no solo con listas. Así que podemos ordenar las letras de un string así." ] }, { @@ -895,8 +895,8 @@ "id": "f90bd9ea", "metadata": {}, "source": [ - "The result is a list.\n", - "To convert the list to a string, we can use `join`." + "El resultado es una lista.\n", + "Para convertir la lista en un string, podemos usar `join`." ] }, { @@ -914,7 +914,7 @@ "id": "a57084e2", "metadata": {}, "source": [ - "With an empty string as the delimiter, the elements of the list are joined with nothing between them." + "Con un string vacío como delimitador, los elementos de la lista se unen sin nada entre ellos." ] }, { @@ -922,9 +922,9 @@ "id": "ce98b3d5", "metadata": {}, "source": [ - "## Objects and values\n", + "## Objetos y valores\n", "\n", - "If we run these assignment statements:" + "Si ejecutamos estas sentencias de asignación:" ] }, { @@ -943,8 +943,8 @@ "id": "33d020aa", "metadata": {}, "source": [ - "We know that `a` and `b` both refer to a string, but we don't know whether they refer to the *same* string. \n", - "There are two possible states, shown in the following figure." + "Sabemos que `a` y `b` se refieren ambos a un string, pero no sabemos si se refieren al *mismo* string.\n", + "Hay dos estados posibles, mostrados en la siguiente figura." ] }, { @@ -989,9 +989,9 @@ "id": "2f0b0431", "metadata": {}, "source": [ - "In the diagram on the left, `a` and `b` refer to two different objects that have the\n", - "same value. In the diagram on the right, they refer to the same object.\n", - "To check whether two variables refer to the same object, you can use the `is` operator." + "En el diagrama de la izquierda, `a` y `b` se refieren a dos objetos diferentes que tienen el\n", + "mismo valor. En el diagrama de la derecha, se refieren al mismo objeto.\n", + "Para comprobar si dos variables se refieren al mismo objeto, puedes usar el operador `is`." ] }, { @@ -1011,9 +1011,9 @@ "id": "d1eb0e36", "metadata": {}, "source": [ - "In this example, Python only created one string object, and both `a`\n", - "and `b` refer to it.\n", - "But when you create two lists, you get two objects." + "En este ejemplo, Python solo creó un objeto string, y tanto `a`\n", + "como `b` se refieren a él.\n", + "Pero cuando creas dos listas, obtienes dos objetos." ] }, { @@ -1033,7 +1033,7 @@ "id": "a8d4c3d4", "metadata": {}, "source": [ - "So the state diagram looks like this." + "Así que el diagrama de estado se ve así." ] }, { @@ -1071,8 +1071,8 @@ "id": "cc115a9f", "metadata": {}, "source": [ - "In this case we would say that the two lists are **equivalent**, because they have the same elements, but not **identical**, because they are not the same object. \n", - "If two objects are identical, they are also equivalent, but if they are equivalent, they are not necessarily identical." + "En este caso diríamos que las dos listas son **equivalentes**, porque tienen los mismos elementos, pero no **idénticos**, porque no son el mismo objeto.\n", + "Si dos objetos son idénticos, también son equivalentes, pero si son equivalentes, no necesariamente son idénticos." ] }, { @@ -1082,7 +1082,7 @@ "source": [ "## Aliasing\n", "\n", - "If `a` refers to an object and you assign `b = a`, then both variables refer to the same object." + "Si `a` se refiere a un objeto y asignas `b = a`, entonces ambas variables se refieren al mismo objeto." ] }, { @@ -1102,7 +1102,7 @@ "id": "f6ab3262", "metadata": {}, "source": [ - "So the state diagram looks like this." + "Así que el diagrama de estado se ve así." ] }, { @@ -1140,12 +1140,12 @@ "id": "c676fde9", "metadata": {}, "source": [ - "The association of a variable with an object is called a **reference**.\n", - "In this example, there are two references to the same object.\n", + "La asociación de una variable con un objeto se llama **referencia**.\n", + "En este ejemplo, hay dos referencias al mismo objeto.\n", "\n", - "An object with more than one reference has more than one name, so we say the object is **aliased**.\n", - "If the aliased object is mutable, changes made with one name affect the other.\n", - "In this example, if we change the object `b` refers to, we are also changing the object `a` refers to." + "Un objeto con más de una referencia tiene más de un nombre, así que decimos que el objeto está **aliased**.\n", + "Si el aliased objeto es mutable, los cambios hechos con un nombre afectan al otro.\n", + "En este ejemplo, si cambiamos el objeto al que se refiere `b`, también estamos cambiando el objeto al que se refiere `a`." ] }, { @@ -1164,12 +1164,12 @@ "id": "e3ef0537", "metadata": {}, "source": [ - "So we would say that `a` \"sees\" this change.\n", - "Although this behavior can be useful, it is error-prone.\n", - "In general, it is safer to avoid aliasing when you are working with mutable objects.\n", + "Así que diríamos que `a` \"ve\" este cambio.\n", + "Aunque este comportamiento puede ser útil, es propenso a errores.\n", + "En general, es más seguro evitar el aliasing cuando trabajas con objetos mutables.\n", "\n", - "For immutable objects like strings, aliasing is not as much of a problem.\n", - "In this example:" + "Para objetos inmutables como strings, el aliasing no supone tanto problema.\n", + "En este ejemplo:" ] }, { @@ -1188,8 +1188,8 @@ "id": "952bbf60", "metadata": {}, "source": [ - "It almost never makes a difference whether `a` and `b` refer to the same\n", - "string or not." + "Casi nunca importa si `a` y `b` se refieren al mismo\n", + "string o no." ] }, { @@ -1197,11 +1197,11 @@ "id": "35045bef", "metadata": {}, "source": [ - "## List arguments\n", + "## Listas como argumentos\n", "\n", - "When you pass a list to a function, the function gets a reference to the\n", - "list. If the function modifies the list, the caller sees the change. For\n", - "example, `pop_first` uses the list method `pop` to remove the first element from a list." + "Cuando pasas una lista a una función, la función recibe una referencia a la\n", + "lista. Si la función modifica la lista, el código que llama ve el cambio. Por\n", + "ejemplo, `pop_first` usa el método de lista `pop` para eliminar el primer elemento de una lista." ] }, { @@ -1220,7 +1220,7 @@ "id": "4953b0f9", "metadata": {}, "source": [ - "We can use it like this." + "Podemos usarla así." ] }, { @@ -1239,7 +1239,7 @@ "id": "ef5d3c1e", "metadata": {}, "source": [ - "The return value is the first element, which has been removed from the list -- as we can see by displaying the modified list." + "El valor de retorno es el primer elemento, que se ha eliminado de la lista, como podemos ver al mostrar la lista modificada." ] }, { @@ -1257,7 +1257,7 @@ "id": "e5288e08", "metadata": {}, "source": [ - "In this example, the parameter `lst` and the variable `letters` are aliases for the same object, so the state diagram looks like this:" + "En este ejemplo, el parameter `lst` y la variable `letters` son aliases del mismo objeto, así que el diagrama de estado se ve así:" ] }, { @@ -1301,8 +1301,8 @@ "id": "c1a093d2", "metadata": {}, "source": [ - "Passing a reference to an object as an argument to a function creates a form of aliasing.\n", - "If the function modifies the object, those changes persist after the function is done." + "Pasar una referencia a un objeto como argumento a una función crea una forma de aliasing.\n", + "Si la función modifica el objeto, esos cambios persisten después de que la función termine." ] }, { @@ -1312,12 +1312,12 @@ "tags": [] }, "source": [ - "## Making a word list\n", + "## Crear una lista de palabras\n", "\n", - "In the previous chapter, we read the file `words.txt` and searched for words with certain properties, like using the letter `e`.\n", - "But we read the entire file many times, which is not efficient.\n", - "It is better to read the file once and put the words in a list.\n", - "The following loop shows how." + "En el capítulo anterior, leímos el archivo `words.txt` y buscamos palabras con ciertas propiedades, como usar la letra `e`.\n", + "Pero leímos el archivo completo muchas veces, lo cual no es eficiente.\n", + "Es mejor leer el archivo una vez y poner las palabras en una lista.\n", + "El siguiente bucle muestra cómo hacerlo." ] }, { @@ -1353,11 +1353,11 @@ "id": "44450ffa", "metadata": {}, "source": [ - "Before the loop, `word_list` is initialized with an empty list.\n", - "Each time through the loop, the `append` method adds a word to the end.\n", - "When the loop is done, there are more than 113,000 words in the list.\n", + "Antes del bucle, `word_list` se inicializa con una lista vacía.\n", + "Cada vez que pasa por el bucle, el método `append` añade una palabra al final.\n", + "Cuando termina el bucle, hay más de 113 000 palabras en la lista.\n", "\n", - "Another way to do the same thing is to use `read` to read the entire file into a string." + "Otra forma de hacer lo mismo es usar `read` para leer todo el archivo en un string." ] }, { @@ -1376,8 +1376,8 @@ "id": "65718c7f", "metadata": {}, "source": [ - "The result is a single string with more than a million characters.\n", - "We can use the `split` method to split it into a list of words." + "El resultado es un único string con más de un millón de caracteres.\n", + "Podemos usar el método `split` para dividirlo en una lista de palabras." ] }, { @@ -1396,8 +1396,8 @@ "id": "1b5b25a3", "metadata": {}, "source": [ - "Now, to check whether a string appears in the list, we can use the `in` operator.\n", - "For example, `'demotic'` is in the list." + "Ahora, para comprobar si un string aparece en la lista, podemos usar el operador `in`.\n", + "Por ejemplo, `'demotic'` está en la lista." ] }, { @@ -1415,7 +1415,7 @@ "id": "9df6674d", "metadata": {}, "source": [ - "But `'contrafibularities'` is not." + "Pero `'contrafibularities'` no está." ] }, { @@ -1433,7 +1433,7 @@ "id": "243c25b6", "metadata": {}, "source": [ - "And I have to say, I'm anaspeptic about it." + "Y tengo que decir que eso me deja anaspeptic." ] }, { @@ -1441,12 +1441,12 @@ "id": "ce9ffd79", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "Note that most list methods modify the argument and return `None`.\n", - "This is the opposite of the string methods, which return a new string and leave the original alone.\n", + "Ten en cuenta que la mayoría de métodos de lista modifican el argumento y devuelven `None`.\n", + "Esto es lo contrario de los métodos de string, que devuelven un nuevo string y dejan el original intacto.\n", "\n", - "If you are used to writing string code like this:" + "Si estás acostumbrado a escribir código con strings así:" ] }, { @@ -1466,7 +1466,7 @@ "id": "d2117582", "metadata": {}, "source": [ - "It is tempting to write list code like this:" + "Es tentador escribir código con listas así:" ] }, { @@ -1485,7 +1485,7 @@ "id": "991c439d", "metadata": {}, "source": [ - "`remove` modifies the list and returns `None`, so next operation you perform with `t` is likely to fail." + "`remove` modifica la lista y devuelve `None`, así que la siguiente operación que realices con `t` probablemente fallará." ] }, { @@ -1507,11 +1507,11 @@ "id": "c500e2d8", "metadata": {}, "source": [ - "This error message takes some explaining.\n", - "An **attribute** of an object is a variable or method associated with it.\n", - "In this case, the value of `t` is `None`, which is a `NoneType` object, which does not have a attribute named `remove`, so the result is an `AttributeError`.\n", + "Este mensaje de error requiere algo de explicación.\n", + "Un **atributo** de un objeto es una variable o método asociado con él.\n", + "En este caso, el valor de `t` es `None`, que es un objeto `NoneType`, que no tiene un atributo llamado `remove`, así que el resultado es un `AttributeError`.\n", "\n", - "If you see an error message like this, you should look backward through the program and see if you might have called a list method incorrectly." + "Si ves un mensaje de error como este, deberías mirar hacia atrás en el programa y ver si podrías haber llamado incorrectamente a un método de lista." ] }, { @@ -1519,34 +1519,34 @@ "id": "f90db780", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**list:**\n", - " An object that contains a sequence of values.\n", + "**lista:**\n", + " Un objeto que contiene una secuencia de valores.\n", "\n", - "**element:**\n", - " One of the values in a list or other sequence.\n", + "**elemento:**\n", + " Uno de los valores de una lista u otra secuencia.\n", "\n", - "**nested list:**\n", - "A list that is an element of another list.\n", + "**lista anidada:**\n", + "Una lista que es un elemento de otra lista.\n", "\n", - "**delimiter:**\n", - " A character or string used to indicate where a string should be split.\n", + "**delimitador:**\n", + " Un carácter o string usado para indicar dónde debe dividirse un string.\n", "\n", - "**equivalent:**\n", - " Having the same value.\n", + "**equivalentes:**\n", + " Tener el mismo valor.\n", "\n", - "**identical:**\n", - " Being the same object (which implies equivalence).\n", + "**idénticos:**\n", + " Ser el mismo objeto (lo que implica equivalencia).\n", "\n", - "**reference:**\n", - " The association between a variable and its value.\n", + "**referencia:**\n", + " La asociación entre una variable y su valor.\n", "\n", "**aliased:**\n", - "If there is more than one variable that refers to an object, the object is aliased.\n", + "Si hay más de una variable que se refiere a un objeto, el objeto está aliased.\n", "\n", - "**attribute:**\n", - " One of the named values associated with an object." + "**atributo:**\n", + " Uno de los valores con nombre asociados con un objeto." ] }, { @@ -1554,7 +1554,7 @@ "id": "e67864e5", "metadata": {}, "source": [ - "## Exercises\n", + "## Ejercicios\n", "\n" ] }, @@ -1578,24 +1578,24 @@ "id": "ae9c42da", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "In this chapter, I used the words \"contrafibularities\" and \"anaspeptic\", but they are not actually English words.\n", - "They were used in the British television show *Black Adder*, Season 3, Episode 2, \"Ink and Incapability\".\n", + "En este capítulo, usé las palabras \"contrafibularities\" y \"anaspeptic\", pero en realidad no son palabras en inglés.\n", + "Se usaron en la serie de televisión británica *Black Adder*, temporada 3, episodio 2, \"Ink and Incapability\".\n", "\n", - "However, when I asked ChatGPT 3.5 (August 3, 2023 version) where those words came from, it initially claimed they are from Monty Python, and later claimed they are from the Tom Stoppard play *Rosencrantz and Guildenstern Are Dead*.\n", + "Sin embargo, cuando pregunté a ChatGPT 3.5 (versión del 3 de agosto de 2023) de dónde venían esas palabras, al principio afirmó que eran de Monty Python, y después afirmó que eran de la obra de Tom Stoppard *Rosencrantz and Guildenstern Are Dead*.\n", "\n", - "If you ask now, you might get different results.\n", - "But this example is a reminder that virtual assistants are not always accurate, so you should check whether the results are correct.\n", - "As you gain experience, you will get a sense of which questions virtual assistants can answer reliably.\n", - "In this example, a conventional web search can identify the source of these words quickly.\n", + "Si preguntas ahora, podrías obtener resultados diferentes.\n", + "Pero este ejemplo es un recordatorio de que los asistentes virtuales no siempre son precisos, así que deberías comprobar si los resultados son correctos.\n", + "A medida que ganes experiencia, desarrollarás intuición sobre qué preguntas pueden responder de forma fiable los asistentes virtuales.\n", + "En este ejemplo, una búsqueda web convencional puede identificar rápidamente el origen de estas palabras.\n", "\n", - "If you get stuck on any of the exercises in this chapter, consider asking a virtual assistant for help.\n", - "If you get a result that uses features we haven't learned yet, you can assign the VA a \"role\".\n", + "Si te quedas atascado en alguno de los ejercicios de este capítulo, considera pedir ayuda a un asistente virtual.\n", + "Si obtienes un resultado que usa características que todavía no hemos aprendido, puedes asignar un \"role\" al asistente virtual.\n", "\n", - "For example, before you ask a question try typing \"Role: Basic Python Programming Instructor\".\n", - "After that, the responses you get should use only basic features.\n", - "If you still see features we you haven't learned, you can follow up with \"Can you write that using only basic Python features?\"" + "Por ejemplo, antes de hacer una pregunta prueba a escribir \"Role: Basic Python Programming Instructor\".\n", + "Después de eso, las respuestas que obtengas deberían usar solo características básicas.\n", + "Si todavía ves características que no hemos aprendido, puedes continuar con \"Can you write that using only basic Python features?\"" ] }, { @@ -1603,15 +1603,15 @@ "id": "31d5b304", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Two words are anagrams if you can rearrange the letters from one to spell the other.\n", - "For example, `tops` is an anagram of `stop`.\n", + "Dos palabras son anagramas si puedes reordenar las letras de una para escribir la otra.\n", + "Por ejemplo, `tops` es un anagrama de `stop`.\n", "\n", - "One way to check whether two words are anagrams is to sort the letters in both words.\n", - "If the lists of sorted letters are the same, the words are anagrams.\n", + "Una forma de comprobar si dos palabras son anagramas es ordenar las letras de ambas palabras.\n", + "Si las listas de letras ordenadas son iguales, las palabras son anagramas.\n", "\n", - "Write a function called `is_anagram` that takes two strings and returns `True` if they are anagrams." + "Escribe una función llamada `is_anagram` que tome dos strings y devuelva `True` si son anagramas." ] }, { @@ -1621,7 +1621,7 @@ "tags": [] }, "source": [ - "To get you started, here's an outline of the function with doctests." + "Para empezar, aquí tienes un esquema de la función con doctests." ] }, { @@ -1665,7 +1665,7 @@ "tags": [] }, "source": [ - "You can use `doctest` to test your function." + "Puedes usar `doctest` para probar tu función." ] }, { @@ -1690,7 +1690,7 @@ "id": "8501f3ba", "metadata": {}, "source": [ - "Using your function and the word list, find all the anagrams of `takes`." + "Usando tu función y la lista de palabras, encuentra todos los anagramas de `takes`." ] }, { @@ -1708,9 +1708,9 @@ "id": "7f279f2f", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Python provides a built-in function called `reversed` that takes as an argument a sequence of elements -- like a list or string -- and returns a `reversed` object that contains the elements in reverse order." + "Python proporciona una función integrada llamada `reversed` que toma como argumento una secuencia de elementos, como una lista o un string, y devuelve un objeto `reversed` que contiene los elementos en orden inverso." ] }, { @@ -1728,7 +1728,7 @@ "id": "0f95c76f", "metadata": {}, "source": [ - "If you want the reversed elements in a list, you can use the `list` function." + "Si quieres los elementos invertidos en una lista, puedes usar la función `list`." ] }, { @@ -1746,7 +1746,7 @@ "id": "8fc79a2f", "metadata": {}, "source": [ - "Or if you want them in a string, you can use the `join` method." + "O si los quieres en un string, puedes usar el método `join`." ] }, { @@ -1764,7 +1764,7 @@ "id": "ec4ce196", "metadata": {}, "source": [ - "So we can write a function that reverses a word like this." + "Así podemos escribir una función que invierte una palabra así." ] }, { @@ -1783,8 +1783,8 @@ "id": "21550b5f", "metadata": {}, "source": [ - "A palindrome is a word that is spelled the same backward and forward, like \"noon\" and \"rotator\".\n", - "Write a function called `is_palindrome` that takes a string argument and returns `True` if it is a palindrome and `False` otherwise." + "Un palíndromo es una palabra que se escribe igual hacia atrás y hacia adelante, como \"noon\" y \"rotator\".\n", + "Escribe una función llamada `is_palindrome` que tome un string argumento y devuelva `True` si es un palíndromo y `False` en caso contrario." ] }, { @@ -1794,7 +1794,7 @@ "tags": [] }, "source": [ - "Here's an outline of the function with doctests you can use to check your function." + "Aquí tienes un esquema de la función con doctests que puedes usar para comprobar tu función." ] }, { @@ -1848,7 +1848,7 @@ "id": "ad857abf", "metadata": {}, "source": [ - "You can use the following loop to find all of the palindromes in the word list with at least 7 letters." + "Puedes usar el siguiente bucle para encontrar todos los palíndromos en la lista de palabras con al menos 7 letras." ] }, { @@ -1870,13 +1870,13 @@ "id": "11386f70", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `reverse_sentence` that takes as an argument a string that contains any number of words separated by spaces.\n", - "It should return a new string that contains the same words in reverse order.\n", - "For example, if the argument is \"Reverse this sentence\", the result should be \"Sentence this reverse\".\n", + "Escribe una función llamada `reverse_sentence` que tome como argumento un string que contiene cualquier número de palabras separadas por espacios.\n", + "Debe devolver un nuevo string que contiene las mismas palabras en orden inverso.\n", + "Por ejemplo, si el argumento es \"Reverse this sentence\", el resultado debería ser \"Sentence this reverse\".\n", "\n", - "Hint: You can use the `capitalize` methods to capitalize the first word and convert the other words to lowercase. " + "Pista: Puedes usar los métodos `capitalize` para poner en mayúscula la primera palabra y convertir las demás palabras a minúsculas." ] }, { @@ -1886,7 +1886,7 @@ "tags": [] }, "source": [ - "To get you started, here's an outline of the function with doctests." + "Para empezar, aquí tienes un esquema de la función con doctests." ] }, { @@ -1943,10 +1943,10 @@ "id": "fb5f24b1", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `total_length` that takes a list of strings and returns the total length of the strings.\n", - "The total length of the words in `word_list` should be $902{,}728$." + "Escribe una función llamada `total_length` que tome una lista de strings y devuelva la longitud total de los strings.\n", + "La longitud total de las palabras en `word_list` debería ser $902{,}728$." ] }, { @@ -1988,7 +1988,9 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", + "\n", + "Código license: [MIT License](https://mit-license.org/)\n", "\n", "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] diff --git a/chapters/chap10.ipynb b/chapters/chap10.ipynb index 742da86..58738fc 100644 --- a/chapters/chap10.ipynb +++ b/chapters/chap10.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -41,13 +41,13 @@ "id": "737e79eb", "metadata": {}, "source": [ - "# Dictionaries\n", + "# Diccionarios\n", "\n", - "This chapter presents a built-in type called a dictionary.\n", - "It is one of Python's best features -- and the building block of many efficient and elegant algorithms.\n", + "Este capítulo presenta un tipo integrado llamado diccionario.\n", + "Es una de las mejores características de Python, y el bloque de construcción de muchos algoritmos eficientes y elegantes.\n", "\n", - "We'll use dictionaries to compute the number of unique words in a book and the number of times each one appears.\n", - "And in the exercises, we'll use dictionaries to solve word puzzles." + "Usaremos diccionarios para calcular el número de palabras únicas en un libro y el número de veces que aparece cada una.\n", + "Y en los ejercicios, usaremos diccionarios para resolver juegos de palabras." ] }, { @@ -55,11 +55,11 @@ "id": "be7467bb", "metadata": {}, "source": [ - "## A dictionary is a mapping\n", + "## Un diccionario es un mapeo\n", "\n", - "A **dictionary** is like a list, but more general.\n", - "In a list, the indices have to be integers; in a dictionary they can be (almost) any type.\n", - "For example, suppose we make a list of number words, like this." + "Un **diccionario** es como una lista, pero más general.\n", + "En una lista, los índices tienen que ser enteros; en un diccionario pueden ser de (casi) cualquier tipo.\n", + "Por ejemplo, supongamos que hacemos una lista de palabras numéricas, así." ] }, { @@ -77,7 +77,7 @@ "id": "aa626f88", "metadata": {}, "source": [ - "We can use an integer as an index to get the corresponding word." + "Podemos usar un entero como índice para obtener la palabra correspondiente." ] }, { @@ -95,9 +95,9 @@ "id": "c38e143b", "metadata": {}, "source": [ - "But suppose we want to go in the other direction, and look up a word to get the corresponding integer.\n", - "We can't do that with a list, but we can with a dictionary.\n", - "We'll start by creating an empty dictionary and assigning it to `numbers`." + "Pero supongamos que queremos ir en la otra dirección, y buscar una palabra para obtener el entero correspondiente.\n", + "No podemos hacerlo con una lista, pero sí con un diccionario.\n", + "Empezaremos creando un diccionario vacío y asignándolo a `numbers`." ] }, { @@ -116,8 +116,8 @@ "id": "3acce992", "metadata": {}, "source": [ - "The curly braces, `{}`, represent an empty dictionary.\n", - "To add items to the dictionary, we'll use square brackets." + "Las llaves, `{}`, representan un diccionario vacío.\n", + "Para añadir elementos al diccionario, usaremos corchetes." ] }, { @@ -135,9 +135,9 @@ "id": "1dbe12c3", "metadata": {}, "source": [ - "This assignment adds to the dictionary an **item**, which represents the association of a **key** and a **value**.\n", - "In this example, the key is the string `'zero'` and the value is the integer `0`.\n", - "If we display the dictionary, we see that it contains one item, which contains a key and a value separated by a colon, `:`." + "Esta asignación añade al diccionario un **elemento**, que representa la asociación de una **clave** y un **valor**.\n", + "En este ejemplo, la clave es el string `'zero'` y el valor es el entero `0`.\n", + "Si mostramos el diccionario, vemos que contiene un elemento, que contiene una clave y un valor separados por dos puntos, `:`." ] }, { @@ -155,7 +155,7 @@ "id": "ad32c23d", "metadata": {}, "source": [ - "We can add more items like this." + "Podemos añadir más elementos así." ] }, { @@ -175,9 +175,9 @@ "id": "278901e5", "metadata": {}, "source": [ - "Now the dictionary contains three items.\n", + "Ahora el diccionario contiene tres elementos.\n", "\n", - "To look up a key and get the corresponding value, we use the bracket operator." + "Para buscar una clave y obtener el valor correspondiente, usamos el operador de corchetes." ] }, { @@ -195,7 +195,7 @@ "id": "df5724e6", "metadata": {}, "source": [ - "If the key isn't in the dictionary, we get a `KeyError`." + "Si la clave no está en el diccionario, obtenemos un `KeyError`." ] }, { @@ -216,7 +216,7 @@ "id": "2a027a6b", "metadata": {}, "source": [ - "The `len` function works on dictionaries; it returns the number of items." + "La función `len` funciona con diccionarios; devuelve el número de elementos." ] }, { @@ -234,10 +234,10 @@ "id": "58221e96", "metadata": {}, "source": [ - "In mathematical language, a dictionary represents a **mapping** from keys to values, so you can also say that each key \"maps to\" a value.\n", - "In this example, each number word maps to the corresponding integer.\n", + "En lenguaje matemático, un diccionario representa un **mapeo** de claves a valores, así que también puedes decir que cada clave \"mapea a\" un valor.\n", + "En este ejemplo, cada palabra numérica mapea al entero correspondiente.\n", "\n", - "The following figure shows the state diagram for `numbers`." + "La siguiente figura muestra el diagrama de estado de `numbers`." ] }, { @@ -277,9 +277,9 @@ "id": "b092aa61", "metadata": {}, "source": [ - "A dictionary is represented by a box with the word \"dict\" outside and the items inside.\n", - "Each item is represented by a key and an arrow pointing to a value.\n", - "The quotation marks indicate that the keys here are strings, not variable names." + "Un diccionario se representa con una caja con la palabra \"dict\" fuera y los elementos dentro.\n", + "Cada elemento se representa con una clave y una flecha que apunta a un valor.\n", + "Las comillas indican que las claves aquí son strings, no nombres de variables." ] }, { @@ -287,10 +287,10 @@ "id": "2a0a128a", "metadata": {}, "source": [ - "## Creating dictionaries\n", + "## Crear diccionarios\n", "\n", - "In the previous section we created an empty dictionary and added items one at a time using the bracket operator.\n", - "Instead, we could have created the dictionary all at once like this." + "En la sección anterior creamos un diccionario vacío y añadimos elementos uno por uno usando el operador de corchetes.\n", + "En su lugar, podríamos haber creado el diccionario de una vez así." ] }, { @@ -308,11 +308,11 @@ "id": "31ded5b2", "metadata": {}, "source": [ - "Each item consists of a key and a value separated by a colon.\n", - "The items are separated by commas and enclosed in curly braces.\n", + "Cada elemento consiste en una clave y un valor separados por dos puntos.\n", + "Los elementos se separan con comas y se encierran entre llaves.\n", "\n", - "Another way to create a dictionary is to use the `dict` function.\n", - "We can make an empty dictionary like this." + "Otra forma de crear un diccionario es usar la función `dict`.\n", + "Podemos crear un diccionario vacío así." ] }, { @@ -331,7 +331,7 @@ "id": "bfb215c9", "metadata": {}, "source": [ - "And we can make a copy of a dictionary like this." + "Y podemos hacer una copia de un diccionario así." ] }, { @@ -350,7 +350,7 @@ "id": "966c5539", "metadata": {}, "source": [ - "It is often useful to make a copy before performing operations that modify dictionaries." + "A menudo es útil hacer una copia antes de realizar operaciones que modifican diccionarios." ] }, { @@ -360,9 +360,9 @@ "tags": [] }, "source": [ - "## The in operator\n", + "## El operador in\n", "\n", - "The `in` operator works on dictionaries, too; it tells you whether something appears as a *key* in the dictionary." + "El operador `in` también funciona con diccionarios; te dice si algo aparece como *clave* en el diccionario." ] }, { @@ -380,7 +380,7 @@ "id": "80f6b264", "metadata": {}, "source": [ - "The `in` operator does *not* check whether something appears as a value." + "El operador `in` *no* comprueba si algo aparece como valor." ] }, { @@ -398,7 +398,7 @@ "id": "84856c8b", "metadata": {}, "source": [ - "To see whether something appears as a value in a dictionary, you can use the method `values`, which returns a sequence of values, and then use the `in` operator." + "Para ver si algo aparece como valor en un diccionario, puedes usar el método `values`, que devuelve una secuencia de valores, y luego usar el operador `in`." ] }, { @@ -416,8 +416,8 @@ "id": "45dc3d16", "metadata": {}, "source": [ - "The items in a Python dictionary are stored in a **hash table**, which is a way of organizing data that has a remarkable property: the `in` operator takes about the same amount of time no matter how many items are in the dictionary.\n", - "That makes it possible to write some remarkably efficient algorithms." + "Los elementos de un diccionario de Python se almacenan en una **hash table**, que es una forma de organizar datos con una propiedad notable: el operador `in` tarda aproximadamente la misma cantidad de tiempo sin importar cuántos elementos haya en el diccionario.\n", + "Eso hace posible escribir algunos algoritmos notablemente eficientes." ] }, { @@ -437,8 +437,8 @@ "id": "bba0522c", "metadata": {}, "source": [ - "To demonstrate, we'll compare two algorithms for finding pairs of words where one is the reverse of another -- like `stressed` and `desserts`.\n", - "We'll start by reading the word list." + "Para demostrarlo, compararemos dos algoritmos para encontrar pares de palabras donde una es la inversa de la otra, como `stressed` y `desserts`.\n", + "Empezaremos leyendo la lista de palabras." ] }, { @@ -457,7 +457,7 @@ "id": "ab29fb8a", "metadata": {}, "source": [ - "And here's `reverse_word` from the previous chapter." + "Y aquí está `reverse_word` del capítulo anterior." ] }, { @@ -476,8 +476,8 @@ "id": "93f7ac1b", "metadata": {}, "source": [ - "The following function loops through the words in the list.\n", - "For each one, it reverses the letters and then checks whether the reversed word is in the word list." + "La siguiente función recorre las palabras de la lista.\n", + "Para cada una, invierte las letras y luego comprueba si la palabra invertida está en la palabra lista." ] }, { @@ -500,9 +500,9 @@ "id": "d4ebb84d", "metadata": {}, "source": [ - "This function takes more than a minute to run.\n", - "The problem is that the `in` operator checks the words in the list one at a time, starting at the beginning.\n", - "If it doesn't find what it's looking for -- which happens most of the time -- it has to search all the way to the end." + "Esta función tarda más de un minuto en ejecutarse.\n", + "El problema es que el operador `in` comprueba las palabras de la lista una por una, empezando por el principio.\n", + "Si no encuentra lo que busca, que ocurre la mayor parte del tiempo, tiene que buscar hasta el final." ] }, { @@ -512,8 +512,8 @@ "tags": [] }, "source": [ - "To measure how long a function takes, we can use `%time` which is one of Jupyter's \"built-in magic commands\".\n", - "These commands are not part of the Python language, so they might not work in other development environments." + "Para medir cuánto tarda una función, podemos usar `%time`, que es uno de los \"built-in magic commands\" de Jupyter.\n", + "Estos comandos no forman parte del lenguaje Python, así que puede que no funcionen en otros entornos de desarrollo." ] }, { @@ -533,8 +533,8 @@ "id": "2acb6c50", "metadata": {}, "source": [ - "And the `in` operator is inside the loop, so it runs once for each word.\n", - "Since there are more than 100,000 words in the list, and for each one we check more than 100,000 words, the total number of comparisons is the number of words squared -- roughly -- which is almost 13 billion. " + "Y el operador `in` está dentro del bucle, así que se ejecuta una vez por cada palabra.\n", + "Como hay más de 100 000 palabras en la lista, y para cada una comprobamos más de 100 000 palabras, el número total de comparaciones es el número de palabras al cuadrado -- aproximadamente --, que es casi 13 mil millones." ] }, { @@ -552,8 +552,8 @@ "id": "5dbf01b7", "metadata": {}, "source": [ - "We can make this function much faster with a dictionary.\n", - "The following loop creates a dictionary that contains the words as keys." + "Podemos hacer que esta función sea mucho más rápida con un diccionario.\n", + "El siguiente bucle crea un diccionario que contiene las palabras como claves." ] }, { @@ -573,9 +573,9 @@ "id": "b7f6a1b7", "metadata": {}, "source": [ - "The values in `word_dict` are all `1`, but they could be anything, because we won't ever look them up -- we will only use this dictionary to check whether a key exists.\n", + "Los valores en `word_dict` son todos `1`, pero podrían ser cualquier cosa, porque nunca los vamos a buscar; solo usaremos este diccionario para comprobar si existe una clave.\n", "\n", - "Now here's a version of the previous function that replaces `word_list` with `word_dict`." + "Ahora aquí tienes una versión de la función anterior que reemplaza `word_list` por `word_dict`." ] }, { @@ -598,7 +598,7 @@ "id": "5f41e54c", "metadata": {}, "source": [ - "This function takes less than one hundredth of a second, so it's about 10,000 times faster than the previous version." + "Esta función tarda menos de una centésima de segundo, así que es unas 10 000 veces más rápida que la versión anterior." ] }, { @@ -606,8 +606,8 @@ "id": "4cd91c99", "metadata": {}, "source": [ - "In general, the time it takes to find an element in a list is proportional to the length of the list.\n", - "The time it takes to find a key in a dictionary is almost constant -- regardless of the number of items." + "En general, el tiempo que se tarda en encontrar un elemento en una lista es proporcional a la longitud de la lista.\n", + "El tiempo que se tarda en encontrar una clave en un diccionario es casi constante, independientemente del número de elementos." ] }, { @@ -627,11 +627,11 @@ "id": "b3bfa8a5", "metadata": {}, "source": [ - "## A collection of counters\n", + "## Una colección de contadores\n", "\n", - "Suppose you are given a string and you want to count how many times each letter appears.\n", - "A dictionary is a good tool for this job.\n", - "We'll start with an empty dictionary." + "Supongamos que recibes un string y quieres contar cuántas veces aparece cada letra.\n", + "Un diccionario es una buena herramienta para este trabajo.\n", + "Empezaremos con un diccionario vacío." ] }, { @@ -649,8 +649,8 @@ "id": "34a9498a", "metadata": {}, "source": [ - "As we loop through the letters in the string, suppose we see the letter `'a'` for the first time.\n", - "We can add it to the dictionary like this." + "Mientras recorremos las letras del string, supongamos que vemos la letra `'a'` por primera vez.\n", + "Podemos añadirla al diccionario así." ] }, { @@ -668,8 +668,8 @@ "id": "bca9fa11", "metadata": {}, "source": [ - "The value `1` indicates that we have seen the letter once.\n", - "Later, if we see the same letter again, we can increment the counter like this." + "El valor `1` indica que hemos visto la letra una vez.\n", + "Más tarde, si volvemos a ver la misma letra, podemos incrementar el contador así." ] }, { @@ -687,7 +687,7 @@ "id": "274ea014", "metadata": {}, "source": [ - "Now the value associated with `'a'` is `2`, because we've seen the letter twice." + "Ahora el valor asociado con `'a'` es `2`, porque hemos visto la letra dos veces." ] }, { @@ -705,7 +705,7 @@ "id": "2ca8f99d", "metadata": {}, "source": [ - "The following function uses these features to count the number of times each letter appears in a string." + "La siguiente función usa estas características para contar el número de veces que aparece cada letra en un string." ] }, { @@ -730,10 +730,10 @@ "id": "735c758b", "metadata": {}, "source": [ - "Each time through the loop, if `letter` is not in the dictionary, we create a new item with key `letter` and value `1`.\n", - "If `letter` is already in the dictionary we increment the value associated with `letter`.\n", + "Cada vez que pasa por el bucle, si `letter` no está en el diccionario, creamos un nuevo elemento con clave `letter` y valor `1`.\n", + "Si `letter` ya está en el diccionario, incrementamos el valor asociado con `letter`.\n", "\n", - "Here's an example." + "Aquí tienes un ejemplo." ] }, { @@ -752,7 +752,7 @@ "id": "8ac1fea4", "metadata": {}, "source": [ - "The items in `counter` show that the letter `'b'` appears once, `'r'` appears twice, and so on." + "Los elementos de `counter` muestran que la letra `'b'` aparece una vez, `'r'` aparece dos veces, y así sucesivamente." ] }, { @@ -760,10 +760,10 @@ "id": "912bdf5d", "metadata": {}, "source": [ - "## Looping and dictionaries\n", + "## Looping y diccionarios\n", "\n", - "If you use a dictionary in a `for` statement, it traverses the keys of the dictionary.\n", - "To demonstrate, let's make a dictionary that counts the letters in `'banana'`." + "Si usas un diccionario en una sentencia `for`, recorre las claves del diccionario.\n", + "Para demostrarlo, hagamos un diccionario que cuente las letras de `'banana'`." ] }, { @@ -782,7 +782,7 @@ "id": "fe263f3d", "metadata": {}, "source": [ - "The following loop prints the keys, which are the letters." + "El siguiente bucle imprime las claves, que son las letras." ] }, { @@ -801,7 +801,7 @@ "id": "bf1b7824", "metadata": {}, "source": [ - "To print the values, we can use the `values` method." + "Para imprimir los valores, podemos usar el método `values`." ] }, { @@ -820,7 +820,7 @@ "id": "721135be", "metadata": {}, "source": [ - "To print the keys and values, we can loop through the keys and look up the corresponding values." + "Para imprimir las claves y los valores, podemos recorrer las claves y buscar los valores correspondientes." ] }, { @@ -840,7 +840,7 @@ "id": "efa1bce5", "metadata": {}, "source": [ - "In the next chapter, we'll see a more concise way to do the same thing." + "En el próximo capítulo, veremos una forma más concisa de hacer lo mismo." ] }, { @@ -848,10 +848,10 @@ "id": "a160c0ef", "metadata": {}, "source": [ - "## Lists and dictionaries\n", + "## Listas y diccionarios\n", "\n", - "You can put a list in a dictionary as a value.\n", - "For example, here's a dictionary that maps from the number `4` to a list of four letters." + "Puedes poner una lista en un diccionario como valor.\n", + "Por ejemplo, aquí tienes un diccionario que mapea el número `4` a una lista de cuatro letras." ] }, { @@ -870,8 +870,8 @@ "id": "815a829f", "metadata": {}, "source": [ - "But you can't put a list in a dictionary as a key.\n", - "Here's what happens if we try." + "Pero no puedes poner una lista en un diccionario como clave.\n", + "Esto es lo que ocurre si lo intentamos." ] }, { @@ -893,17 +893,17 @@ "id": "2469b08a", "metadata": {}, "source": [ - "I mentioned earlier that dictionaries use hash tables, and that means that the keys have to be **hashable**.\n", + "Mencioné antes que los diccionarios usan hash tables, y eso significa que las claves tienen que ser **hasheable**.\n", "\n", - "A **hash** is a function that takes a value (of any kind) and returns an integer.\n", - "Dictionaries use these integers, called hash values, to store and look up keys.\n", + "Un **hash** es una función que toma un valor (de cualquier tipo) y devuelve un entero.\n", + "Los diccionarios usan estos enteros, llamados hash valores, para almacenar y buscar claves.\n", "\n", - "This system only works if a key is immutable, so its hash value is always the same.\n", - "But if a key is mutable, its hash value could change, and the dictionary would not work.\n", - "That's why keys have to be hashable, and why mutable types like lists aren't.\n", + "Este sistema solo funciona si una clave es inmutable, de modo que su hash valor siempre sea el mismo.\n", + "Pero si una clave es mutable, su hash valor podría cambiar, y el diccionario no funcionaría.\n", + "Por eso las claves tienen que ser hasheables, y por eso tipos mutables como las listas no lo son.\n", "\n", - "Since dictionaries are mutable, they can't be used as keys, either.\n", - "But they *can* be used as values." + "Como los diccionarios son mutables, tampoco pueden usarse como claves.\n", + "Pero *sí* pueden usarse como valores." ] }, { @@ -913,13 +913,13 @@ "tags": [] }, "source": [ - "## Accumulating a list\n", + "## Acumular una lista\n", "\n", - "For many programming tasks, it is useful to loop through one list or dictionary while building another.\n", - "As an example, we'll loop through the words in `word_dict` and make a list of palindromes -- that is, words that are spelled the same backward and forward, like \"noon\" and \"rotator\".\n", + "Para muchas tareas de programación, es útil recorrer una lista o diccionario mientras se construye otro.\n", + "Como ejemplo, recorreremos las palabras en `word_dict` y haremos una lista de palíndromos, es decir, palabras que se escriben igual hacia atrás y hacia adelante, como \"noon\" y \"rotator\".\n", "\n", - "In the previous chapter, one of the exercises asked you to write a function that checks whether a word is a palindrome.\n", - "Here's a solution that uses `reverse_word`." + "En el capítulo anterior, uno de los ejercicios te pidió escribir una función que comprueba si una palabra es un palíndromo.\n", + "Aquí tienes una solución que usa `reverse_word`." ] }, { @@ -939,7 +939,7 @@ "id": "af545fcd", "metadata": {}, "source": [ - "If we loop through the words in `word_dict`, we can count the number of palindromes like this." + "Si recorremos las palabras en `word_dict`, podemos contar el número de palíndromos así." ] }, { @@ -963,15 +963,15 @@ "id": "73c1ce1e", "metadata": {}, "source": [ - "By now, this pattern is familiar.\n", + "A estas alturas, este patrón resulta familiar.\n", "\n", - "* Before the loop, `count` is initialized to `0`.\n", + "* Antes del bucle, `count` se inicializa a `0`.\n", "\n", - "* Inside the loop, if `word` is a palindrome, we increment `count`.\n", + "* Dentro del bucle, si `word` es un palíndromo, incrementamos `count`.\n", "\n", - "* When the loop ends, `count` contains the total number of palindromes.\n", + "* Cuando termina el bucle, `count` contiene el número total de palíndromos.\n", "\n", - "We can use a similar pattern to make a list of palindromes." + "Podemos usar un patrón similar para hacer una lista de palíndromos." ] }, { @@ -995,18 +995,18 @@ "id": "be909f3b", "metadata": {}, "source": [ - "Here's how it works:\n", + "Así es como funciona:\n", "\n", - "* Before the loop, `palindromes` is initialized with an empty list.\n", + "* Antes del bucle, `palindromes` se inicializa con una lista vacía.\n", "\n", - "* Inside the loop, if `word` is a palindrome, we append it to the end of `palindromes`.\n", + "* Dentro del bucle, si `word` es un palíndromo, lo añadimos al final de `palindromes`.\n", "\n", - "* When the loop ends, `palindromes` is a list of palindromes.\n", + "* Cuando termina el bucle, `palindromes` es una lista de palíndromos.\n", "\n", - "In this loop, `palindromes` is used as an **accumulator**, which is a variable that collects or accumulates data during a computation.\n", + "En este bucle, `palindromes` se usa como **accumulator**, que es una variable que recoge o acumula datos durante una computación.\n", "\n", - "Now suppose we want to select only palindromes with seven or more letters.\n", - "We can loop through `palindromes` and make a new list that contains only long palindromes." + "Ahora supongamos que queremos seleccionar solo palíndromos con siete o más letras.\n", + "Podemos recorrer `palindromes` y hacer una nueva lista que contenga solo palíndromos largos." ] }, { @@ -1030,7 +1030,7 @@ "id": "fa8ed275", "metadata": {}, "source": [ - "Looping through a list like this, selecting some elements and omitting others, is called **filtering**." + "Recorrer una lista así, seleccionando algunos elementos y omitiendo otros, se llama **filtrado**." ] }, { @@ -1042,7 +1042,7 @@ "source": [ "## Memos\n", "\n", - "If you ran the `fibonacci` function from [Chapter 6](section_fibonacci), maybe you noticed that the bigger the argument you provide, the longer the function takes to run." + "Si ejecutaste la función `fibonacci` del [Capítulo 6](section_fibonacci), quizá notaste que cuanto mayor es el argumento que proporcionas, más tarda la función en ejecutarse." ] }, { @@ -1067,9 +1067,9 @@ "id": "1b5203c2", "metadata": {}, "source": [ - "Furthermore, the run time increases quickly.\n", - "To understand why, consider the following figure, which shows the **call graph** for\n", - "`fibonacci` with `n=4`:" + "Además, el tiempo de ejecución aumenta rápidamente.\n", + "Para entender por qué, considera la siguiente figura, que muestra el **call graph** de\n", + "`fibonacci` con `n=4`:" ] }, { @@ -1165,16 +1165,16 @@ "id": "4ee2a87c", "metadata": {}, "source": [ - "A call graph shows a set of function frames, with lines connecting each frame to the frames of the functions it calls.\n", - "At the top of the graph, `fibonacci` with `n=4` calls `fibonacci` with ` n=3` and `n=2`.\n", - "In turn, `fibonacci` with `n=3` calls `fibonacci` with `n=2` and `n=1`. And so on.\n", + "Un call graph muestra un conjunto de función frames, con líneas que conectan cada frame con los frames de las funciones que llama.\n", + "En la parte superior del graph, `fibonacci` con `n=4` llama a `fibonacci` con ` n=3` y `n=2`.\n", + "A su vez, `fibonacci` con `n=3` llama a `fibonacci` con `n=2` y `n=1`. Y así sucesivamente.\n", "\n", - "Count how many times `fibonacci(0)` and `fibonacci(1)` are called. \n", - "This is an inefficient solution to the problem, and it gets worse as the argument gets bigger.\n", + "Cuenta cuántas veces se llama a `fibonacci(0)` y `fibonacci(1)`.\n", + "Esta es una solución ineficiente al problema, y empeora a medida que el argumento crece.\n", "\n", - "One solution is to keep track of values that have already been computed by storing them in a dictionary.\n", - "A previously computed value that is stored for later use is called a **memo**.\n", - "Here is a \"memoized\" version of `fibonacci`:" + "Una solución es llevar un registro de los valores que ya se han calculado almacenándolos en un diccionario.\n", + "Un valor calculado previamente que se almacena para usarlo más tarde se llama **memo**.\n", + "Aquí tienes una versión \"memoized\" de `fibonacci`:" ] }, { @@ -1200,16 +1200,16 @@ "id": "d2ac4dd7", "metadata": {}, "source": [ - "`known` is a dictionary that keeps track of the Fibonacci numbers we already know\n", - "It starts with two items: `0` maps to `0` and `1` maps to `1`.\n", + "`known` es un diccionario que lleva el registro de los números de Fibonacci que ya conocemos.\n", + "Empieza con dos elementos: `0` mapea a `0` y `1` mapea a `1`.\n", "\n", - "Whenever `fibonacci_memo` is called, it checks `known`.\n", - "If the result is already there, it can return immediately.\n", - "Otherwise it has to compute the new value, add it to the dictionary, and return it.\n", + "Cada vez que se llama a `fibonacci_memo`, comprueba `known`.\n", + "Si el resultado ya está ahí, puede devolverlo inmediatamente.\n", + "De lo contrario, tiene que calcular el nuevo valor, añadirlo al diccionario y devolverlo.\n", "\n", - "Comparing the two functions, `fibonacci(40)` takes about 30 seconds to run.\n", - "`fibonacci_memo(40)` takes about 30 microseconds, so it's a million times faster.\n", - "In the notebook for this chapter, you'll see where these measurements come from." + "Comparando las dos funciones, `fibonacci(40)` tarda unos 30 segundos en ejecutarse.\n", + "`fibonacci_memo(40)` tarda unos 30 microsegundos, así que es un millón de veces más rápida.\n", + "En el notebook de este capítulo, verás de dónde vienen estas mediciones." ] }, { @@ -1241,18 +1241,18 @@ "id": "ec969e51", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "As you work with bigger datasets it can become unwieldy to debug by printing and checking the output by hand. Here are some suggestions for debugging large datasets:\n", + "A medida que trabajas con datasets más grandes, puede volverse inmanejable depurar imprimiendo y comprobando la salida a mano. Aquí tienes algunas sugerencias para depurar datasets grandes:\n", "\n", - "1. Scale down the input: If possible, reduce the size of the dataset. For example if the\n", - " program reads a text file, start with just the first 10 lines, or\n", - " with the smallest example you can find. You can either edit the\n", - " files themselves, or (better) modify the program so it reads only\n", - " the first `n` lines.\n", + "1. Reduce el tamaño de la entrada: Si es posible, reduce el tamaño del dataset. Por ejemplo, si el\n", + " programa lee un archivo de texto, empieza solo con las primeras 10 líneas, o\n", + " con el ejemplo más pequeño que puedas encontrar. Puedes editar los\n", + " archivos directamente o, mejor, modificar el programa para que lea solo\n", + " las primeras `n` líneas.\n", "\n", - " If there is an error, you can reduce `n` to the smallest value where the error occurs.\n", - " As you find and correct errors, you can increase `n` gradually." + " Si hay un error, puedes reducir `n` al valor más pequeño donde ocurre el error.\n", + " A medida que encuentres y corrijas errores, puedes aumentar `n` gradualmente." ] }, { @@ -1260,11 +1260,11 @@ "id": "1a62288b", "metadata": {}, "source": [ - "2. Check summaries and types: Instead of printing and checking the entire dataset, consider\n", - " printing summaries of the data -- for example, the number of items in\n", - " a dictionary or the total of a list of numbers.\n", + "2. Comprueba resúmenes y tipos: En lugar de imprimir y comprobar el dataset completo, considera\n", + " imprimir resúmenes de los datos; por ejemplo, el número de elementos en\n", + " un diccionario o el total de una lista de números.\n", "\n", - " A common cause of runtime errors is a value that is not the right type. For debugging this kind of error, it is often enough to print the type of a value." + " Una causa común de errores en tiempo de ejecución es un valor que no tiene el tipo correcto. Para depurar de este tipo de error, a menudo basta con imprimir el tipo de un valor." ] }, { @@ -1272,13 +1272,13 @@ "id": "c749ea3c", "metadata": {}, "source": [ - "3. Write self-checks: Sometimes you can write code to check for errors automatically. For\n", - " example, if you are computing the average of a list of numbers, you\n", - " could check that the result is not greater than the largest element\n", - " in the list or less than the smallest. This is called a \"sanity\n", - " check\" because it detects results that are \"insane\".\n", + "3. Escribe autocomprobaciones: A veces puedes escribir código para comprobar errores automáticamente. Por\n", + " ejemplo, si estás calculando la media de una lista de números, podrías\n", + " comprobar que el resultado no sea mayor que el elemento más grande\n", + " de la lista ni menor que el más pequeño. Esto se llama una \"sanity\n", + " check\" porque detecta resultados que son \"insane\".\n", "\n", - " Another kind of check compares the results of two different computations to see if they are consistent. This is called a \"consistency check\"." + " Otro tipo de comprobación compara los resultados de dos computaciones diferentes para ver si son consistentes. Esto se llama una \"consistency check\"." ] }, { @@ -1286,9 +1286,9 @@ "id": "749b91e9", "metadata": {}, "source": [ - "4. Format the output: Formatting debugging output can make it easier to spot an error. We saw an example in [Chapter 6](section_debugging_factorial). Another tool you might find useful is the `pprint` module, which provides a `pprint` function that displays built-in types in a more human-readable format (`pprint` stands for \"pretty print\").\n", + "4. Formatea la salida: Formatear la salida de depuración puede facilitar detectar un error. Vimos un ejemplo en [Capítulo 6](section_depuración_factorial). Otra herramienta que puede resultarte útil es el módulo `pprint`, que proporciona una función `pprint` que muestra tipos integrados en un formato más legible para humanos (`pprint` significa \"pretty print\").\n", "\n", - " Again, time you spend building scaffolding can reduce the time you spend debugging." + " De nuevo, el tiempo que dediques a construir código de apoyo puede reducir el tiempo que dedicas a depurar." ] }, { @@ -1296,44 +1296,44 @@ "id": "9820175f", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**dictionary:**\n", - " An object that contains key-value pairs, also called items.\n", + "**diccionario:**\n", + " Un objeto que contiene pares clave-valor, también llamados elementos.\n", "\n", - "**item:**\n", - " In a dictionary, another name for a key-value pair.\n", + "**elemento:**\n", + " En un diccionario, otro nombre para un par clave-valor.\n", "\n", - "**key:**\n", - " An object that appears in a dictionary as the first part of a key-value pair.\n", + "**clave:**\n", + " Un objeto que aparece en un diccionario como la primera parte de un par clave-valor.\n", "\n", - "**value:**\n", - " An object that appears in a dictionary as the second part of a key-value pair. This is more specific than our previous use of the word \"value\".\n", + "**valor:**\n", + " Un objeto que aparece en un diccionario como la segunda parte de un par clave-valor. Esto es más específico que nuestro uso anterior de la palabra \"valor\".\n", "\n", - "**mapping:**\n", - " A relationship in which each element of one set corresponds to an element of another set.\n", + "**mapeo:**\n", + " Una relación en la que cada elemento de un conjunto corresponde a un elemento de otro conjunto.\n", "\n", "**hash table:**\n", - "A collection of key-value pairs organized so that we can look up a key and find its value efficiently.\n", + "Una colección de pares clave-valor organizada para que podamos buscar una clave y encontrar su valor de forma eficiente.\n", "\n", - "**hashable:**\n", - " Immutable types like integers, floats and strings are hashable.\n", - " Mutable types like lists and dictionaries are not.\n", + "**hasheable:**\n", + "Tipos inmutables como enteros, floats y strings son hasheable.\n", + "Tipos mutables como listas y diccionarios no lo son.\n", "\n", - "**hash function:**\n", - "A function that takes an object and computes an integer that is used to locate a key in a hash table.\n", + "**función hash:**\n", + "Una función que toma un objeto y calcula un entero que se usa para localizar una clave en una hash table.\n", "\n", "**accumulator:**\n", - " A variable used in a loop to add up or accumulate a result.\n", + " Una variable usada en un bucle para sumar o acumular un resultado.\n", "\n", - "**filtering:**\n", - "Looping through a sequence and selecting or omitting elements.\n", + "**filtrado:**\n", + "Recorrer una secuencia y seleccionar u omitir elementos.\n", "\n", "**call graph:**\n", - "A diagram that shows every frame created during the execution of a program, with an arrow from each caller to each callee.\n", + "Un diagrama que muestra cada frame creado durante la ejecución de un programa, con una flecha desde cada código que llama hacia cada callee.\n", "\n", "**memo:**\n", - " A computed value stored to avoid unnecessary future computation." + " Un valor calculado almacenado para evitar computación futura innecesaria." ] }, { @@ -1341,7 +1341,7 @@ "id": "906c1236", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1364,13 +1364,13 @@ "id": "170f1deb", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "In this chapter, I said the keys in a dictionary have to be hashable and I gave a short explanation. If you would like more details, ask a virtual assistant, \"Why do keys in Python dictionaries have to be hashable?\"\n", + "En este capítulo, dije que las claves de un diccionario tienen que ser hasheabless y di una explicación breve. Si quieres más detalles, pregunta a un asistente virtual: \"¿Por qué las claves de los diccionarios de Python tienen que ser hasheabless?\"\n", "\n", - "In [a previous section](section_dictionary_in_operator), we stored a list of words as keys in a dictionary so that we could use an efficient version of the `in` operator.\n", - "We could have done the same thing using a `set`, which is another built-in data type.\n", - "Ask a virtual assistant, \"How do I make a Python set from a list of strings and check whether a string is an element of the set?\"" + "En [una sección anterior](section_dictionary_in_operator), almacenamos una lista de palabras como claves en un diccionario para poder usar una versión eficiente del operador `in`.\n", + "Podríamos haber hecho lo mismo usando un `set`, que es otro tipo de dato integrado.\n", + "Pregunta a un asistente virtual: \"How do I make a Python set from a lista of strings and check whether a string is an elemento of the set?\"" ] }, { @@ -1378,11 +1378,11 @@ "id": "badf7d65", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Dictionaries have a method called `get` that takes a key and a default value. \n", - "If the key appears in the dictionary, `get` returns the corresponding value; otherwise it returns the default value.\n", - "For example, here's a dictionary that maps from the letters in a string to the number of times they appear." + "Los diccionarios tienen un método llamado `get` que toma una clave y un valor por defecto.\n", + "Si la clave aparece en el diccionario, `get` devuelve el valor correspondiente; de lo contrario devuelve el valor por defecto.\n", + "Por ejemplo, aquí tienes un diccionario que mapea las letras de un string al número de veces que aparecen." ] }, { @@ -1400,7 +1400,7 @@ "id": "c3f6458d", "metadata": {}, "source": [ - "If we look up a letter that appears in the word, `get` returns the number of times it appears." + "Si buscamos una letra que aparece en la palabra, `get` devuelve el número de veces que aparece." ] }, { @@ -1418,7 +1418,7 @@ "id": "49bbff3e", "metadata": {}, "source": [ - "If we look up a letter that doesn't appear, we get the default value, `0`." + "Si buscamos una letra que no aparece, obtenemos el valor por defecto, `0`." ] }, { @@ -1436,8 +1436,8 @@ "id": "4ac3210f", "metadata": {}, "source": [ - "Use `get` to write a more concise version of `value_counts`.\n", - "You should be able to eliminate the `if` statement." + "Usa `get` para escribir una versión más concisa de `value_counts`.\n", + "Deberías poder eliminar la sentencia `if`." ] }, { @@ -1445,12 +1445,12 @@ "id": "5413af6e", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "What is the longest word you can think of where each letter appears only once?\n", - "Let's see if we can find one longer than `unpredictably`.\n", + "¿Cuál es la palabra más larga que se te ocurre donde cada letra aparece solo una vez?\n", + "Veamos si podemos encontrar una más larga que `unpredictably`.\n", "\n", - "Write a function named `has_duplicates` that takes a sequence -- like a list or string -- as a parameter and returns `True` if there is any element that appears in the sequence more than once." + "Escribe una función llamada `has_duplicates` que tome una secuencia, como una lista o string, como parameter y devuelva `True` si hay algún elemento que aparece en la secuencia más de una vez." ] }, { @@ -1460,7 +1460,7 @@ "tags": [] }, "source": [ - "To get you started, here's an outline of the function with doctests." + "Para empezar, aquí tienes un esquema de la función con doctests." ] }, { @@ -1504,7 +1504,7 @@ "tags": [] }, "source": [ - "You can use `doctest` to test your function." + "Puedes usar `doctest` para probar tu función." ] }, { @@ -1531,7 +1531,7 @@ "tags": [] }, "source": [ - "You can use this loop to find the longest words with no repeated letters." + "Puedes usar este bucle para encontrar las palabras más largas sin letras repetidas." ] }, { @@ -1557,11 +1557,11 @@ "id": "afd5f3b6", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `find_repeats` that takes a dictionary that maps from each key to a counter, like the result from `value_counts`.\n", - "It should loop through the dictionary and return a list of keys that have counts greater than `1`.\n", - "You can use the following outline to get started." + "Escribe una función llamada `find_repeats` que tome un diccionario que mapea cada clave a un contador, como el resultado de `value_counts`.\n", + "Debe recorrer el diccionario y devolver una lista de claves que tengan recuentos mayores que `1`.\n", + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1598,8 +1598,8 @@ "tags": [] }, "source": [ - "You can use the following examples to test your code.\n", - "First, we'll make a dictionary that maps from letters to counts." + "Puedes usar los siguientes ejemplos para probar tu código.\n", + "Primero, haremos un diccionario que mapea letras a recuentos." ] }, { @@ -1622,7 +1622,7 @@ "tags": [] }, "source": [ - "The result from `find_repeats` should be `['a', 'n']`." + "El resultado de `find_repeats` debería ser `['a', 'n']`." ] }, { @@ -1645,8 +1645,8 @@ "tags": [] }, "source": [ - "Here's another example that starts with a list of numbers.\n", - "The result should be `[1, 2]`." + "Aquí tienes otro ejemplo que empieza con una lista de números.\n", + "El resultado debería ser `[1, 2]`." ] }, { @@ -1668,9 +1668,9 @@ "id": "1c700d84", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Suppose you run `value_counts` with two different words and save the results in two dictionaries." + "Supongamos que ejecutas `value_counts` con dos palabras diferentes y guardas los resultados en dos diccionarios." ] }, { @@ -1689,11 +1689,11 @@ "id": "deb14c7a", "metadata": {}, "source": [ - "Each dictionary maps from a set of letters to the number of times they appear.\n", - "Write a function called `add_counters` that takes two dictionaries like this and returns a new dictionary that contains all of the letters and the total number of times they appear in either word.\n", + "Cada diccionario mapea un conjunto de letras al número de veces que aparecen.\n", + "Escribe una función llamada `add_counters` que tome dos diccionarios como estos y devuelva un nuevo diccionario que contenga todas las letras y el número total de veces que aparecen en cualquiera de las dos palabras.\n", "\n", - "There are many ways to solve this problem.\n", - "Once you have a working solution, consider asking a virtual assistant for different solutions." + "Hay muchas formas de resolver este problema.\n", + "Cuando tengas una solución que funcione, considera pedir a un asistente virtual soluciones diferentes." ] }, { @@ -1721,16 +1721,16 @@ "id": "f88110a9", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "A word is \"interlocking\" if we can split it into two words by taking alternating letters.\n", - "For example, \"schooled\" is an interlocking word because it can be split into \"shoe\" and \"cold\".\n", + "Una palabra es \"interlocking\" si podemos dividirla en dos palabras tomando letras alternas.\n", + "Por ejemplo, \"schooled\" es una palabra interlocking porque puede dividirse en \"shoe\" y \"cold\".\n", "\n", - "To select alternating letters from a string, you can use a slice operator with three components that indicate where to start, where to stop, and the \"step size\" between the letters.\n", + "Para seleccionar letras alternas de un string, puedes usar un operador de porción con tres componentes que indican dónde empezar, dónde detenerse y el \"step size\" entre las letras.\n", "\n", - "In the following slice, the first component is `0`, so we start with the first letter.\n", - "The second component is `None`, which means we should go all the way to the end of the string.\n", - "And the third component is `2`, so there are two steps between the letters we select." + "En el siguiente porción, el primer componente es `0`, así que empezamos con la primera letra.\n", + "El segundo componente es `None`, lo que significa que debemos llegar hasta el final del string.\n", + "Y el tercer componente es `2`, así que hay dos pasos entre las letras que seleccionamos." ] }, { @@ -1750,8 +1750,8 @@ "id": "d432332d", "metadata": {}, "source": [ - "Instead of providing `None` as the second component, we can get the same effect by leaving it out altogether.\n", - "For example, the following slice selects alternating letters, starting with the second letter." + "En lugar de proporcionar `None` como segundo componente, podemos obtener el mismo efecto omitiéndolo por completo.\n", + "Por ejemplo, el siguiente porción selecciona letras alternas, empezando por la segunda letra." ] }, { @@ -1770,7 +1770,7 @@ "id": "c8c4e3ba", "metadata": {}, "source": [ - "Write a function called `is_interlocking` that takes a word as an argument and returns `True` if it can be split into two interlocking words." + "Escribe una función llamada `is_interlocking` que tome una palabra como argumento y devuelva `True` si puede dividirse en dos palabras interlocking." ] }, { @@ -1790,7 +1790,7 @@ "tags": [] }, "source": [ - "You can use the following loop to find the interlocking words in the word list." + "Puedes usar el siguiente bucle para encontrar las palabras interlocking en la palabra lista." ] }, { @@ -1828,7 +1828,9 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", + "\n", + "Código license: [MIT License](https://mit-license.org/)\n", "\n", "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] diff --git a/chapters/chap11.ipynb b/chapters/chap11.ipynb index e10980c..67b115c 100644 --- a/chapters/chap11.ipynb +++ b/chapters/chap11.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -43,16 +43,16 @@ "tags": [] }, "source": [ - "# Tuples\n", + "# Tuplas\n", "\n", - "This chapter introduces one more built-in type, the tuple, and then shows how lists, dictionaries, and tuples work together.\n", - "It also presents tuple assignment and a useful feature for functions with variable-length argument lists: the packing and unpacking operators.\n", + "Este capítulo presenta un tipo integrado más, la tupla, y luego muestra cómo listas, diccionarios y tuplas trabajan juntos.\n", + "También presenta la asignación de tuplas y una característica útil para funciones con listas de argumentos de longitud variable: los operadores de empaquetado y desempaquetado.\n", "\n", - "In the exercises, we'll use tuples, along with lists and dictionaries, to solve more word puzzles and implement efficient algorithms.\n", + "En los ejercicios, usaremos tuplas, junto con listas y diccionarios, para resolver más puzles de palabras e implementar algoritmos eficientes.\n", "\n", - "One note: There are two ways to pronounce \"tuple\".\n", - "Some people say \"tuh-ple\", which rhymes with \"supple\".\n", - "But in the context of programming, most people say \"too-ple\", which rhymes with \"quadruple\"." + "Una nota: hay dos maneras de pronunciar \"tupla\".\n", + "Algunas personas dicen \"tuh-ple\", que rima con \"supple\".\n", + "Pero en el contexto de la programación, la mayoría dice \"too-ple\", que rima con \"quadruple\"." ] }, { @@ -60,12 +60,12 @@ "id": "19474596", "metadata": {}, "source": [ - "## Tuples are like lists\n", + "## Las tuplas son como listas\n", "\n", - "A tuple is a sequence of values. The values can be any type, and they are indexed by integers, so tuples are a lot like lists.\n", - "The important difference is that tuples are immutable.\n", + "Una tupla es una secuencia de valores. Los valores pueden ser de cualquier tipo, y se indexan con enteros, así que las tuplas se parecen mucho a las listas.\n", + "La diferencia importante es que las tuplas son inmutables.\n", "\n", - "To create a tuple, you can write a comma-separated list of values." + "Para crear una tupla, puedes escribir una lista de valores separados por comas." ] }, { @@ -84,7 +84,7 @@ "id": "a2ec15d8", "metadata": {}, "source": [ - "Although it is not necessary, it is common to enclose tuples in parentheses." + "Aunque no es necesario, es común encerrar las tuplas entre paréntesis." ] }, { @@ -103,7 +103,7 @@ "id": "9194a159", "metadata": {}, "source": [ - "To create a tuple with a single element, you have to include a final comma." + "Para crear una tupla con un solo elemento, tienes que incluir una coma final." ] }, { @@ -122,7 +122,7 @@ "id": "e39b95a5", "metadata": {}, "source": [ - "A single value in parentheses is not a tuple." + "Un único valor entre paréntesis no es una tupla." ] }, { @@ -141,8 +141,7 @@ "id": "a64bfb64", "metadata": {}, "source": [ - "Another way to create a tuple is the built-in function `tuple`. With no\n", - "argument, it creates an empty tuple." + "Otra forma de crear una tupla es la función integrada `tuple`. Sin argumentos, crea una tupla vacío." ] }, { @@ -161,8 +160,7 @@ "id": "f3447831", "metadata": {}, "source": [ - "If the argument is a sequence (string, list or tuple), the result is a\n", - "tuple with the elements of the sequence." + "Si el argumento es una secuencia (string, lista o tupla), el resultado es una tupla con los elementos de la secuencia." ] }, { @@ -181,10 +179,10 @@ "id": "2e48b980", "metadata": {}, "source": [ - "Because `tuple` is the name of a built-in function, you should avoid using it as a variable name.\n", + "Como `tuple` es el nombre de una función integrada, deberías evitar usarlo como nombre de variable.\n", "\n", - "Most list operators also work with tuples.\n", - "For example, the bracket operator indexes an element." + "La mayoría de los operadores de lista también funcionan con tuplas.\n", + "Por ejemplo, el operador de corchetes indexa un elemento." ] }, { @@ -202,7 +200,7 @@ "id": "2f702785", "metadata": {}, "source": [ - "And the slice operator selects a range of elements." + "Y el operador de porción selecciona un rango de elementos." ] }, { @@ -220,7 +218,7 @@ "id": "c9ed9af2", "metadata": {}, "source": [ - "The `+` operator concatenates tuples." + "El operador `+` concatena tuplas." ] }, { @@ -238,7 +236,7 @@ "id": "1d7dcd6d", "metadata": {}, "source": [ - "And the `*` operator duplicates a tuple a given number of times." + "Y el operador `*` duplica una tupla un número dado de veces." ] }, { @@ -256,7 +254,7 @@ "id": "a53ce8bd", "metadata": {}, "source": [ - "The `sorted` function works with tuples -- but the result is a list, not a tuple." + "La función `sorted` funciona con tuplas -- pero el resultado es una lista, no una tupla." ] }, { @@ -274,7 +272,7 @@ "id": "50e5cadc", "metadata": {}, "source": [ - "The `reversed` function also works with tuples." + "La función `reversed` también funciona con tuplas." ] }, { @@ -292,7 +290,7 @@ "id": "f6d973c5", "metadata": {}, "source": [ - "The result is a `reversed` object, which we can convert to a list or tuple." + "El resultado es un objeto `reversed`, que podemos convertir en una lista o en una tupla." ] }, { @@ -310,7 +308,7 @@ "id": "a7cb9ee6", "metadata": {}, "source": [ - "Based on the examples so far, it might seem like tuples are the same as lists." + "Según los ejemplos hasta ahora, podría parecer que las tuplas son iguales que las listas." ] }, { @@ -318,9 +316,9 @@ "id": "8c3f381e", "metadata": {}, "source": [ - "## But tuples are immutable\n", + "## Pero las tuplas son inmutables\n", "\n", - "If you try to modify a tuple with the bracket operator, you get a `TypeError`." + "Si intentas modificar una tupla con el operador de corchetes, obtienes un `TypeError`." ] }, { @@ -341,7 +339,7 @@ "id": "592ce99c", "metadata": {}, "source": [ - "And tuples don't have any of the methods that modify lists, like `append` and `remove`." + "Y las tuplas no tienen ninguno de los métodos que modifican listas, como `append` y `remove`." ] }, { @@ -363,10 +361,10 @@ "id": "70772ba2", "metadata": {}, "source": [ - "Recall that an \"attribute\" is a variable or method associated with an object -- this error message means that tuples don't have a method named `remove`.\n", + "Recuerda que un \"atributo\" es una variable o método asociado con un objeto -- este mensaje de error significa que las tuplas no tienen un método llamado `remove`.\n", "\n", - "Because tuples are immutable, they are hashable, which means they can be used as keys in a dictionary.\n", - "For example, the following dictionary contains two tuples as keys that map to integers." + "Como las tuplas son inmutables, son hasheables, lo que significa que pueden usarse como claves en un diccionario.\n", + "Por ejemplo, el siguiente diccionario contiene dos tuplas como claves que se asocian con enteros." ] }, { @@ -386,7 +384,7 @@ "id": "47ba17ab", "metadata": {}, "source": [ - "We can look up a tuple in a dictionary like this:" + "Podemos buscar una tupla en un diccionario así:" ] }, { @@ -404,7 +402,7 @@ "id": "f2c0a354", "metadata": {}, "source": [ - "Or if we have a variable that refers to a tuple, we can use it as a key." + "O, si tenemos una variable que se refiere a una tupla, podemos usarla como clave." ] }, { @@ -423,7 +421,7 @@ "id": "2ea8fc3c", "metadata": {}, "source": [ - "Tuples can also appear as values in a dictionary." + "Las tuplas también pueden aparecer como valores en un diccionario." ] }, { @@ -443,9 +441,9 @@ "id": "25655ab3", "metadata": {}, "source": [ - "## Tuple assignment\n", + "## Asignación de tupla\n", "\n", - "You can put a tuple of variables on the left side of an assignment, and a tuple of values on the right." + "Puedes poner una tupla de variables en el lado izquierdo de una asignación, y una tupla de valores en el lado derecho." ] }, { @@ -463,8 +461,8 @@ "id": "92c00ceb", "metadata": {}, "source": [ - "The values are assigned to the variables from left to right -- in this example, `a` gets the value `1` and `b` gets the value `2`.\n", - "We can display the results like this:" + "Los valores se asignan a las variables de izquierda a derecha -- en este ejemplo, `a` recibe el valor `1` y `b` recibe el valor `2`.\n", + "Podemos mostrar los resultados así:" ] }, { @@ -482,8 +480,8 @@ "id": "6362b36e", "metadata": {}, "source": [ - "More generally, if the left side of an assignment is a tuple, the right side can be any kind of sequence -- string, list or tuple. \n", - "For example, to split an email address into a user name and a domain, you could write:" + "De forma más general, si el lado izquierdo de una asignación es una tupla, el lado derecho puede ser cualquier tipo de secuencia -- string, lista o tupla. \n", + "Por ejemplo, para dividir una dirección de email en un nombre de usuario y un dominio, podrías escribir:" ] }, { @@ -502,7 +500,7 @@ "id": "d134a94c", "metadata": {}, "source": [ - "The return value from `split` is a list with two elements -- the first element is assigned to `username`, the second to `domain`." + "El valor de retorno de `split` es una lista con dos elementos -- el primer elemento se asigna a `username`, el segundo a `domain`." ] }, { @@ -520,8 +518,7 @@ "id": "5a7e3c62", "metadata": {}, "source": [ - "The number of variables on the left and the number of values on the\n", - "right have to be the same -- otherwise you get a `ValueError`." + "El número de variables a la izquierda y el número de valores a la derecha tienen que ser iguales -- de lo contrario obtienes un `ValueError`." ] }, { @@ -542,8 +539,8 @@ "id": "808c2928", "metadata": {}, "source": [ - "Tuple assignment is useful if you want to swap the values of two variables.\n", - "With conventional assignments, you have to use a temporary variable, like this:" + "La asignación de tupla es útil si quieres intercambiar los valores de dos variables.\n", + "Con asignaciones convencionales, tienes que usar una variable temporal, así:" ] }, { @@ -563,7 +560,7 @@ "id": "98496d02", "metadata": {}, "source": [ - "That works, but with tuple assignment we can do the same thing without a temporary variable." + "Eso funciona, pero con la asignación de tupla podemos hacer lo mismo sin una variable temporal." ] }, { @@ -581,10 +578,10 @@ "id": "a66a87bc", "metadata": {}, "source": [ - "This works because all of the expressions on the right side are evaluated before any of the assignments.\n", + "Esto funciona porque todas las expresiones del lado derecho se evalúan antes de hacer cualquiera de las asignaciones.\n", "\n", - "We can also use tuple assignment in a `for` statement.\n", - "For example, to loop through the items in a dictionary, we can use the `items` method." + "También podemos usar asignación de tupla en una sentencia `for`.\n", + "Por ejemplo, para hacer un bucle por los elementos de un diccionario, podemos usar el método `items`." ] }, { @@ -606,9 +603,9 @@ "id": "dd0d4feb", "metadata": {}, "source": [ - "Each time through the loop, `item` is assigned a tuple that contains a key and the corresponding value.\n", + "Cada vez que pasa por el bucle, `item` se asigna a una tupla que contiene una clave y el valor correspondiente.\n", "\n", - "We can write this loop more concisely, like this:" + "Podemos escribir este bucle de forma más concisa, así:" ] }, { @@ -627,7 +624,7 @@ "id": "f0513578", "metadata": {}, "source": [ - "Each time through the loop, a key and the corresponding value are assigned directly to `key` and `value`." + "Cada vez que pasa por el bucle, una clave y el valor correspondiente se asignan directamente a `key` y `value`." ] }, { @@ -635,16 +632,12 @@ "id": "efedeb37", "metadata": {}, "source": [ - "## Tuples as return values\n", + "## Tuplas como valores de retorno\n", "\n", - "Strictly speaking, a function can only return one value, but if the\n", - "value is a tuple, the effect is the same as returning multiple values.\n", - "For example, if you want to divide two integers and compute the quotient\n", - "and remainder, it is inefficient to compute `x//y` and then `x%y`. It is\n", - "better to compute them both at the same time.\n", + "Estrictamente hablando, una función solo puede devolver un valor, pero si el valor es una tupla, el efecto es el mismo que devolver múltiples valores.\n", + "Por ejemplo, si quieres dividir dos enteros y calcular el cociente y el resto, es ineficiente calcular `x//y` y luego `x%y`. Es mejor calcular ambos al mismo tiempo.\n", "\n", - "The built-in function `divmod` takes two arguments and returns a tuple\n", - "of two values, the quotient and remainder." + "La función integrada `divmod` toma dos argumentos y devuelve una tupla de dos valores, el cociente y el resto." ] }, { @@ -662,7 +655,7 @@ "id": "33f3c57d", "metadata": {}, "source": [ - "We can use tuple assignment to store the elements of the tuple in two variables. " + "Podemos usar asignación de tupla para guardar los elementos dla tupla en dos variables. " ] }, { @@ -691,7 +684,7 @@ "id": "15079805", "metadata": {}, "source": [ - "Here is an example of a function that returns a tuple." + "Aquí tienes un ejemplo de una función que devuelve una tupla." ] }, { @@ -710,8 +703,8 @@ "id": "43c4e1e0", "metadata": {}, "source": [ - "`max` and `min` are built-in functions that find the largest and smallest elements of a sequence. \n", - "`min_max` computes both and returns a tuple of two values." + "`max` y `min` son funciones integradas que encuentran los elementos mayor y menor de una secuencia. \n", + "`min_max` calcula ambos y devuelve una tupla de dos valores." ] }, { @@ -729,7 +722,7 @@ "id": "86b60e71", "metadata": {}, "source": [ - "We can assign the results to variables like this:" + "Podemos asignar los resultados a variables así:" ] }, { @@ -750,11 +743,11 @@ "tags": [] }, "source": [ - "## Argument packing\n", + "## Empaquetado de argumentos\n", "\n", - "Functions can take a variable number of arguments. \n", - "A parameter name that begins with the `*` operator **packs** arguments into a tuple.\n", - "For example, the following function takes any number of arguments and computes their arithmetic mean -- that is, their sum divided by the number of arguments. " + "Las funciones pueden tomar un número variable de argumentos. \n", + "Un nombre de parámetro que empieza con el operador `*` **empaqueta** argumentos en una tupla.\n", + "Por ejemplo, la siguiente función toma cualquier número de argumentos y calcula su media aritmética -- es decir, su suma dividida por el número de argumentos. " ] }, { @@ -773,8 +766,8 @@ "id": "6044fc1b", "metadata": {}, "source": [ - "The parameter can have any name you like, but `args` is conventional.\n", - "We can call the function like this:" + "El parámetro puede tener cualquier nombre que quieras, pero `args` es convencional.\n", + "Podemos llamar a la función así:" ] }, { @@ -792,8 +785,8 @@ "id": "a5e8b158", "metadata": {}, "source": [ - "If you have a sequence of values and you want to pass them to a function as multiple arguments, you can use the `*` operator to **unpack** the tuple.\n", - "For example, `divmod` takes exactly two arguments -- if you pass a tuple as a parameter, you get an error." + "Si tienes una secuencia de valores y quieres pasarlos a una función como múltiples argumentos, puedes usar el operador `*` para **desempaquetar** la tupla.\n", + "Por ejemplo, `divmod` toma exactamente dos argumentos -- si pasas una tupla como parámetro, obtienes un error." ] }, { @@ -815,8 +808,8 @@ "id": "5a9110db", "metadata": {}, "source": [ - "Even though the tuple contains two elements, it counts as a single argument.\n", - "But if you unpack the tuple, it is treated as two arguments." + "Aunque la tupla contiene dos elementos, cuenta como un único argumento.\n", + "Pero si desempaquetas la tupla, se trata como dos argumentos." ] }, { @@ -834,8 +827,8 @@ "id": "da554863", "metadata": {}, "source": [ - "Packing and unpacking can be useful if you want to adapt the behavior of an existing function.\n", - "For example, this function takes any number of arguments, removes the lowest and highest, and computes the mean of the rest." + "Empaquetado y desempaquetado pueden ser útiles si quieres adaptar el comportamiento de una función existente.\n", + "Por ejemplo, esta función toma cualquier número de argumentos, elimina el menor y el mayor, y calcula la media del resto." ] }, { @@ -858,11 +851,11 @@ "id": "d1e05e49", "metadata": {}, "source": [ - "First it uses `min_max` to find the lowest and highest elements.\n", - "Then it converts `args` to a list so it can use the `remove` method.\n", - "Finally it unpacks the list so the elements are passed to `mean` as separate arguments, rather than as a single list.\n", + "Primero usa `min_max` para encontrar los elementos menor y mayor.\n", + "Luego convierte `args` en una lista para poder usar el método `remove`.\n", + "Finalmente desempaqueta la lista para que los elementos se pasen a `mean` como argumentos separados, en lugar de como una única lista.\n", "\n", - "Here's an example that shows the effect." + "Aquí tienes un ejemplo que muestra el efecto." ] }, { @@ -890,7 +883,7 @@ "id": "35e04996", "metadata": {}, "source": [ - "This kind of \"trimmed\" mean is used in some sports with subjective judging -- like diving and gymnastics -- to reduce the effect of a judge whose score deviates from the others. " + "Este tipo de media \"recortada\" se usa en algunos deportes con puntuación subjetiva -- como saltos y gimnasia -- para reducir el efecto de un juez cuya puntuación se desvía de las demás. " ] }, { @@ -900,8 +893,8 @@ "source": [ "## Zip\n", "\n", - "Tuples are useful for looping through the elements of two sequences and performing operations on corresponding elements.\n", - "For example, suppose two teams play a series of seven games, and we record their scores in two lists, one for each team." + "Las tuplas son útiles para hacer un bucle por los elementos de dos secuencias y realizar operaciones sobre elementos correspondientes.\n", + "Por ejemplo, supongamos que dos equipos juegan una serie de siete partidos, y registramos sus puntuaciones en dos listas, una para cada equipo." ] }, { @@ -920,8 +913,8 @@ "id": "b44f228b", "metadata": {}, "source": [ - "Let's see how many games each team won.\n", - "We'll use `zip`, which is a built-in function that takes two or more sequences and returns a **zip object**, so-called because it pairs up the elements of the sequences like the teeth of a zipper." + "Veamos cuántos partidos ganó cada equipo.\n", + "Usaremos `zip`, que es una función integrada que toma dos o más secuencias y devuelve un **zip objeto**, llamado así porque empareja los elementos de las secuencias como los dientes de una cremallera." ] }, { @@ -939,7 +932,7 @@ "id": "9adcf8f9", "metadata": {}, "source": [ - "We can use the zip object to loop through the values in the sequences pairwise." + "Podemos usar el zip objeto para hacer un bucle por los valores de las secuencias por pares." ] }, { @@ -958,8 +951,8 @@ "id": "51d1dabb", "metadata": {}, "source": [ - "Each time through the loop, `pair` gets assigned a tuple of scores.\n", - "So we can assign the scores to variables, and count the victories for the first team, like this:" + "Cada vez que pasa por el bucle, `pair` recibe una tupla de puntuaciones.\n", + "Así que podemos asignar las puntuaciones a variables y contar las victorias del primer equipo, así:" ] }, { @@ -982,9 +975,9 @@ "id": "ad740fcd", "metadata": {}, "source": [ - "Sadly, the first team won only three games and lost the series.\n", + "Tristemente, el primer equipo ganó solo tres partidos y perdió la serie.\n", "\n", - "If you have two lists and you want a list of pairs, you can use `zip` and `list`." + "Si tienes dos listas y quieres una lista de pares, puedes usar `zip` y `list`." ] }, { @@ -1003,7 +996,7 @@ "id": "ec4249fa", "metadata": {}, "source": [ - "The result is a list of tuples, so we can get the result of the last game like this:" + "El resultado es una lista de tuplas, así que podemos obtener el resultado del último partido así:" ] }, { @@ -1021,8 +1014,8 @@ "id": "436486b9", "metadata": {}, "source": [ - "If you have a list of keys and a list of values, you can use `zip` and `dict` to make a dictionary.\n", - "For example, here's how we can make a dictionary that maps from each letter to its position in the alphabet." + "Si tienes una lista de claves y una lista de valores, puedes usar `zip` y `dict` para crear un diccionario.\n", + "Por ejemplo, así podemos crear un diccionario que asocia cada letra con su posición en el alfabeto." ] }, { @@ -1042,7 +1035,7 @@ "id": "b4de6974", "metadata": {}, "source": [ - "Now we can look up a letter and get its index in the alphabet." + "Ahora podemos buscar una letra y obtener su índice en el alfabeto." ] }, { @@ -1060,9 +1053,9 @@ "id": "cc632542", "metadata": {}, "source": [ - "In this mapping, the index of `'a'` is `0` and the index of `'z'` is `25`.\n", + "En este mapeo, el índice de `'a'` es `0` y el índice de `'z'` es `25`.\n", "\n", - "If you need to loop through the elements of a sequence and their indices, you can use the built-in function `enumerate`." + "Si necesitas hacer un bucle por los elementos de una secuencia y sus índices, puedes usar la función integrada `enumerate`." ] }, { @@ -1080,7 +1073,7 @@ "id": "92ad45bb", "metadata": {}, "source": [ - "The result is an **enumerate object** that loops through a sequence of pairs, where each pair contains an index (starting from 0) and an element from the given sequence." + "El resultado es un **enumerate objeto** que hace un bucle por una secuencia de pares, donde cada par contiene un índice (empezando en 0) y un elemento de la secuencia dada." ] }, { @@ -1099,11 +1092,11 @@ "id": "cf0b55d7", "metadata": {}, "source": [ - "## Comparing and Sorting\n", + "## Comparación y ordenación\n", "\n", - "The relational operators work with tuples and other sequences.\n", - "For example, if you use the `<` operator with tuples, it starts by comparing the first element from each sequence.\n", - "If they are equal, it goes on to the next pair of elements, and so on, until it finds a pair that differ. " + "Los operadores relacionales funcionan con tuplas y otras secuencias.\n", + "Por ejemplo, si usas el operador `<` con tuplas, empieza comparando el primer elemento de cada secuencia.\n", + "Si son iguales, continúa con el siguiente par de elementos, y así sucesivamente, hasta que encuentra un par que difiere. " ] }, { @@ -1121,7 +1114,7 @@ "id": "65ceea86", "metadata": {}, "source": [ - "Subsequent elements are not considered -- even if they are really big." + "Los elementos posteriores no se tienen en cuenta -- aunque sean realmente grandes." ] }, { @@ -1139,9 +1132,9 @@ "id": "55e4a35e", "metadata": {}, "source": [ - "This way of comparing tuples is useful for sorting a list of tuples, or finding the minimum or maximum.\n", - "As an example, let's find the most common letter in a word.\n", - "In the previous chapter, we wrote `value_counts`, which takes a string and returns a dictionary that maps from each letter to the number of times it appears." + "Esta forma de comparar tuplas es útil para ordenar una lista de tuplas, o para encontrar el mínimo o el máximo.\n", + "Como ejemplo, encontremos la letra más común en una palabra.\n", + "En el capítulo anterior, escribimos `value_counts`, que toma un string y devuelve un diccionario que asocia cada letra con el número de veces que aparece." ] }, { @@ -1166,7 +1159,7 @@ "id": "a80012c1", "metadata": {}, "source": [ - "Here is the result for the string `'banana'`." + "Aquí está el resultado para el string `'banana'`." ] }, { @@ -1185,10 +1178,10 @@ "id": "cc1ea4a7", "metadata": {}, "source": [ - "With only three items, we can easily see that the most frequent letter is `'a'`, which appears three times.\n", - "But if there were more items, it would be useful to sort them automatically.\n", + "Con solo tres elementos, podemos ver fácilmente que la letra más frecuente es `'a'`, que aparece tres veces.\n", + "Pero si hubiera más elementos, sería útil ordenarlos automáticamente.\n", "\n", - "We can get the items from `counter` like this." + "Podemos obtener los elementos de `counter` así." ] }, { @@ -1207,7 +1200,7 @@ "id": "ac8dea7a", "metadata": {}, "source": [ - "The result is a `dict_items` object that behaves like a list of tuples, so we can sort it like this." + "El resultado es un objeto `dict_items` que se comporta como una lista de tuplas, así que podemos ordenarlo así." ] }, { @@ -1225,10 +1218,10 @@ "id": "b690d17a", "metadata": {}, "source": [ - "The default behavior is to use the first element from each tuple to sort the list, and use the second element to break ties.\n", + "El comportamiento por defecto es usar el primer elemento de cada tupla para ordenar la lista, y usar el segundo elemento para desempatar.\n", "\n", - "However, to find the items with the highest counts, we want to use the second element to sort the list.\n", - "We can do that by writing a function that takes a tuple and returns the second element." + "Sin embargo, para encontrar los elementos con los conteos más altos, queremos usar el segundo elemento para ordenar la lista.\n", + "Podemos hacerlo escribiendo una función que toma una tupla y devuelve el segundo elemento." ] }, { @@ -1247,7 +1240,7 @@ "id": "b964aa14", "metadata": {}, "source": [ - "Then we can pass that function to `sorted` as an optional argument called `key`, which indicates that this function should be used to compute the **sort key** for each item." + "Luego podemos pasar esa función a `sorted` como un argumento opcional llamado `key`, que indica que esta función debe usarse para calcular la **sort clave** de cada elemento." ] }, { @@ -1266,9 +1259,9 @@ "id": "4dc96848", "metadata": {}, "source": [ - "The sort key determines the order of the items in the list.\n", - "The letter with the lowest count appears first, and the letter with the highest count appears last.\n", - "So we can find the most common letter like this." + "La sort clave determina el orden de los elementos en la lista.\n", + "La letra con el conteo más bajo aparece primero, y la letra con el conteo más alto aparece al final.\n", + "Así podemos encontrar la letra más común." ] }, { @@ -1286,8 +1279,8 @@ "id": "d0d8b999", "metadata": {}, "source": [ - "If we only want the maximum, we don't have to sort the list.\n", - "We can use `max`, which also takes `key` as an optional argument." + "Si solo queremos el máximo, no tenemos que ordenar la lista.\n", + "Podemos usar `max`, que también toma `key` como argumento opcional." ] }, { @@ -1305,7 +1298,7 @@ "id": "8a8327df", "metadata": {}, "source": [ - "To find the letter with the lowest count, we could use `min` the same way." + "Para encontrar la letra con el conteo más bajo, podríamos usar `min` de la misma manera." ] }, { @@ -1313,15 +1306,15 @@ "id": "a62394a5", "metadata": {}, "source": [ - "## Inverting a dictionary\n", + "## Invertir un diccionario\n", "\n", - "Suppose you want to invert a dictionary so you can look up a value and get the corresponding key.\n", - "For example, if you have a word counter that maps from each word to the number of times it appears, you could make a dictionary that maps from integers to the words that appear that number of times.\n", + "Supongamos que quieres invertir un diccionario para poder buscar un valor y obtener la clave correspondiente.\n", + "Por ejemplo, si tienes un contador de palabras que asocia cada palabra con el número de veces que aparece, podrías crear un diccionario que asocia enteros con las palabras que aparecen ese número de veces.\n", "\n", - "But there's a problem -- the keys in a dictionary have to be unique, but the values don't. For example, in a word counter, there could be many words with the same count.\n", + "Pero hay un problema -- las claves de un diccionario tienen que ser únicas, pero los valores no. Por ejemplo, en un contador de palabras, podría haber muchas palabras con el mismo conteo.\n", "\n", - "So one way to invert a dictionary is to create a new dictionary where the values are lists of keys from the original.\n", - "As an example, let's count the letters in `parrot`." + "Así que una forma de invertir un diccionario es crear un nuevo diccionario donde los valores son listas de claves del original.\n", + "Como ejemplo, contemos las letras en `parrot`." ] }, { @@ -1340,9 +1333,9 @@ "id": "f4570eae", "metadata": {}, "source": [ - "If we invert this dictionary, the result should be `{1: ['p', 'a', 'o', 't'], 2: ['r']}`, which indicates that the letters that appear once are `'p'`, `'a'`, `'o'`, and `'t'`, and the letter than appears twice is `'r'`.\n", + "Si invertimos este diccionario, el resultado debería ser `{1: ['p', 'a', 'o', 't'], 2: ['r']}`, lo que indica que las letras que aparecen una vez son `'p'`, `'a'`, `'o'` y `'t'`, y la letra que aparece dos veces es `'r'`.\n", "\n", - "The following function takes a dictionary and returns its inverse as a new dictionary." + "La siguiente función toma un diccionario y devuelve su inverso como un nuevo diccionario." ] }, { @@ -1367,11 +1360,11 @@ "id": "ca5fa025", "metadata": {}, "source": [ - "The `for` statement loops through the keys and values in `d`.\n", - "If the value is not already in the new dictionary, it is added and associated with a list that contains a single element.\n", - "Otherwise it is appended to the existing list.\n", + "La sentencia `for` hace un bucle por las claves y los valores de `d`.\n", + "Si el valor todavía no está en el nuevo diccionario, se añade y se asocia con una lista que contiene un único elemento.\n", + "De lo contrario, se añade a la lista existente.\n", "\n", - "We can test it like this:" + "Podemos probarlo así:" ] }, { @@ -1389,10 +1382,10 @@ "id": "4cfb1693", "metadata": {}, "source": [ - "And we get the result we expected.\n", + "Y obtenemos el resultado que esperábamos.\n", "\n", - "This is the first example we've seen where the values in the dictionary are lists.\n", - "We will see more!" + "Este es el primer ejemplo que hemos visto donde los valores en el diccionario son listas.\n", + "¡Veremos más!" ] }, { @@ -1402,16 +1395,15 @@ "tags": [] }, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "Lists, dictionaries and tuples are **data structures**.\n", - "In this chapter we are starting to see compound data structures, like lists of tuples, or dictionaries that contain tuples as keys and lists as values.\n", - "Compound data structures are useful, but they are prone to errors caused when a data structure has the wrong type, size, or structure.\n", - "For example, if a function expects a list of integers and you give it a plain old integer\n", - "(not in a list), it probably won't work.\n", + "Listas, diccionarios y tuplas son **estructuras de datos**.\n", + "En este capítulo estamos empezando a ver estructuras de datos compuestas, como listas de tuplas, o diccionarios que contienen tuplas como claves y listas como valores.\n", + "Las estructuras de datos compuestas son útiles, pero son propensas a errores cuando una estructura de datos tiene el tipo, tamaño o estructura equivocados.\n", + "Por ejemplo, si una función espera una lista de enteros y le das un entero sin más (no dentro de una lista), probablemente no funcionará.\n", "\n", - "To help debug these kinds of errors, I wrote a module called `structshape` that provides a function, also called `structshape`, that takes any kind of data structure as an argument and returns a string that summarizes its structure.\n", - "You can download it from\n", + "Para ayudar a depurar este tipo de errores, escribí un módulo llamado `structshape` que proporciona una función, también llamada `structshape`, que toma cualquier tipo de estructura de datos como argumento y devuelve un string que resume su estructura.\n", + "Puedes descargarlo desde\n", "." ] }, @@ -1432,7 +1424,7 @@ "id": "646f4d55", "metadata": {}, "source": [ - "We can import it like this." + "Podemos importarlo así." ] }, { @@ -1450,7 +1442,7 @@ "id": "86cc6ccc", "metadata": {}, "source": [ - "Here's an example with a simple list." + "Aquí tienes un ejemplo con una lista simple." ] }, { @@ -1469,7 +1461,7 @@ "id": "9de4f6ec", "metadata": {}, "source": [ - "Here's a list of lists." + "Aquí tienes una lista de listas." ] }, { @@ -1488,8 +1480,7 @@ "id": "aced9984", "metadata": {}, "source": [ - "If the elements of the list are not the same type, `structshape` groups\n", - "them by type." + "Si los elementos de la lista no son del mismo tipo, `structshape` los agrupa por tipo." ] }, { @@ -1508,7 +1499,7 @@ "id": "f63ff690", "metadata": {}, "source": [ - "Here's a list of tuples." + "Aquí tienes una lista de tuplas." ] }, { @@ -1528,7 +1519,7 @@ "id": "c9ec67eb", "metadata": {}, "source": [ - "And here's a dictionary with three items that map integers to strings." + "Y aquí tienes un diccionario con tres elementos que asocian enteros con strings." ] }, { @@ -1547,8 +1538,7 @@ "id": "f29bb82b", "metadata": {}, "source": [ - "If you are having trouble keeping track of your data structures,\n", - "`structshape` can help." + "Si tienes problemas para seguir la pista de tus estructuras de datos, `structshape` puede ayudar." ] }, { @@ -1556,25 +1546,25 @@ "id": "79d93082", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", "**pack:**\n", - "Collect multiple arguments into a tuple.\n", + "Reunir múltiples argumentos en una tupla.\n", "\n", "**unpack:**\n", - "Treat a tuple (or other sequence) as multiple arguments.\n", + "Tratar una tupla (u otra secuencia) como múltiples argumentos.\n", "\n", - "**zip object:**\n", - "The result of calling the built-in function `zip`, can be used to loop through a sequence of tuples.\n", + "**zip objeto:**\n", + "El resultado de llamar a la función integrada `zip`; se puede usar para hacer un bucle por una secuencia de tuplas.\n", "\n", - "**enumerate object:**\n", - "The result of calling the built-in function `enumerate`, can be used to loop through a sequence of tuples.\n", + "**enumerate objeto:**\n", + "El resultado de llamar a la función integrada `enumerate`; se puede usar para hacer un bucle por una secuencia de tuplas.\n", "\n", - "**sort key:**\n", - "A value, or function that computes a value, used to sort the elements of a collection.\n", + "**sort clave:**\n", + "Un valor, o una función que calcula un valor, usado para ordenar los elementos de una colección.\n", "\n", - "**data structure:**\n", - "A collection of values, organized to perform certain operations efficiently." + "**estructura de datos:**\n", + "Una colección de valores, organizada para realizar ciertas operaciones de manera eficiente." ] }, { @@ -1582,7 +1572,7 @@ "id": "1471b3c0", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1605,17 +1595,17 @@ "id": "97a0352d", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "The exercises in this chapter might be more difficult than exercises in previous chapters, so I encourage you to get help from a virtual assistant.\n", - "When you pose more difficult questions, you might find that the answers are not correct on the first attempt, so this is a chance to practice crafting good prompts and following up with good refinements.\n", + "Los ejercicios de este capítulo pueden ser más difíciles que los de capítulos anteriores, así que te animo a pedir ayuda a un asistente virtual.\n", + "Cuando planteas preguntas más difíciles, puede que las respuestas no sean correctas al primer intento, así que esta es una oportunidad para practicar cómo crear buenos prompts y hacer buenos refinamientos.\n", "\n", - "One strategy you might consider is to break a big problems into pieces that can be solved with simple functions.\n", - "Ask the virtual assistant to write the functions and test them.\n", - "Then, once they are working, ask for a solution to the original problem.\n", + "Una estrategia que podrías considerar es dividir un problema grande en piezas que puedan resolverse con funciones simples.\n", + "Pide al asistente virtual que escriba las funciones y las pruebe.\n", + "Luego, cuando funcionen, pide una solución al problema original.\n", "\n", - "For some of the exercises below, I make suggestions about which data structures and algorithms to use.\n", - "You might find these suggestions useful when you work on the problems, but they are also good prompts to pass along to a virtual assistant." + "Para algunos de los ejercicios siguientes, sugiero qué estructuras de datos y algoritmos usar.\n", + "Puede que estas sugerencias te resulten útiles cuando trabajes en los problemas, pero también son buenos prompts para pasárselos a un asistente virtual." ] }, { @@ -1623,12 +1613,12 @@ "id": "f90e011f", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In this chapter I said that tuples can be used as keys in dictionaries because they are hashable, and they are hashable because they are immutable.\n", - "But that is not always true.\n", + "En este capítulo dije que las tuplas pueden usarse como claves en diccionarios porque son hasheables, y son hasheables porque son inmutables.\n", + "Pero eso no siempre es cierto.\n", "\n", - "If a tuple contains a mutable value, like a list or a dictionary, the tuple is no longer hashable because it contains elements that are not hashable. As an example, here's a tuple that contains two lists of integers." + "Si una tupla contiene un valor mutable, como una lista o un diccionario, la tupla ya no es hasheable porque contiene elementos que no son hasheablesss. Como ejemplo, aquí tienes una tupla que contiene dos listas de enteros." ] }, { @@ -1650,7 +1640,7 @@ "id": "02799077", "metadata": {}, "source": [ - "Write a line of code that appends the value `6` to the end of the second list in `t`. If you display `t`, the result should be `([1, 2, 3], [4, 5, 6])`." + "Escribe una línea de código que añada el valor `6` al final de la segunda lista en `t`. Si muestras `t`, el resultado debería ser `([1, 2, 3], [4, 5, 6])`." ] }, { @@ -1670,7 +1660,7 @@ "id": "644b1dfb", "metadata": {}, "source": [ - "Try to create a dictionary that maps from `t` to a string, and confirm that you get a `TypeError`." + "Intenta crear un diccionario que asocie `t` con un string, y confirma que obtienes un `TypeError`." ] }, { @@ -1690,7 +1680,7 @@ "id": "fb77a352", "metadata": {}, "source": [ - "For more on this topic, ask a virtual assistant, \"Are Python tuples always hashable?\"" + "Para saber más sobre este tema, pregunta a un asistente virtual: \"Are Python tuplas always hasheable?" ] }, { @@ -1700,9 +1690,9 @@ "tags": [] }, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In this chapter we made a dictionary that maps from each letter to its index in the alphabet." + "En este capítulo hicimos un diccionario que asocia cada letra con su índice en el alfabeto." ] }, { @@ -1722,7 +1712,7 @@ "id": "a8cd720b", "metadata": {}, "source": [ - "For example, the index of `'a'` is `0`." + "Por ejemplo, el índice de `'a'` es `0`." ] }, { @@ -1740,8 +1730,8 @@ "id": "a04c25db", "metadata": {}, "source": [ - "To go in the other direction, we can use list indexing.\n", - "For example, the letter at index `1` is `'b'`." + "Para ir en la otra dirección, podemos usar indexación de lista.\n", + "Por ejemplo, la letra en el índice `1` es `'b'`." ] }, { @@ -1759,18 +1749,17 @@ "id": "165ab770", "metadata": {}, "source": [ - "We can use `letter_map` and `letters` to encode and decode words using a Caesar cipher.\n", + "Podemos usar `letter_map` y `letters` para codificar y decodificar palabras usando un cifrado César.\n", "\n", - "A Caesar cipher is a weak form of encryption that involves shifting each letter\n", - "by a fixed number of places in the alphabet, wrapping around to the beginning if necessary. For example, `'a'` shifted by 2 is `'c'` and `'z'` shifted by 1 is `'a'`.\n", + "Un cifrado César es una forma débil de cifrado que consiste en desplazar cada letra un número fijo de posiciones en el alfabeto, volviendo al principio si es necesario. Por ejemplo, `'a'` desplazada 2 posiciones es `'c'` y `'z'` desplazada 1 posición es `'a'`.\n", "\n", - "Write a function called `shift_word` that takes as parameters a string and an integer, and returns a new string that contains the letters from the string shifted by the given number of places.\n", + "Escribe una función llamada `shift_word` que tome como parámetros un string y un entero, y devuelva un nuevo string que contiene las letras del string desplazadas el número de posiciones dado.\n", "\n", - "To test your function, confirm that \"cheer\" shifted by 7 is \"jolly\" and \"melon\" shifted by 16 is \"cubed\".\n", + "Para probar tu función, confirma que \"cheer\" desplazada 7 posiciones es \"jolly\" y \"melon\" desplazada 16 posiciones es \"cubed\".\n", "\n", - "Hints: Use the modulus operator to wrap around from `'z'` back to `'a'`. \n", - "Loop through the letters of the word, shift each one, and append the result to a list of letters.\n", - "Then use `join` to concatenate the letters into a string." + "Pistas: usa el operador módulo para volver de `'z'` a `'a'`. \n", + "Haz un bucle por las letras de la palabra, desplaza cada una y añade el resultado a una lista de letras.\n", + "Luego usa `join` para concatenar las letras en un string." ] }, { @@ -1780,7 +1769,7 @@ "tags": [] }, "source": [ - "You can use this outline to get started." + "Puedes usar este esquema para empezar." ] }, { @@ -1844,7 +1833,7 @@ "tags": [] }, "source": [ - "You can use `doctest` to test your function." + "Puedes usar `doctest` para probar tu función." ] }, { @@ -1869,11 +1858,11 @@ "id": "779f13af", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `most_frequent_letters` that takes a string and prints the letters in decreasing order of frequency.\n", + "Escribe una función llamada `most_frequent_letters` que tome un string e imprima las letras en orden decreciente de frecuencia.\n", "\n", - "To get the items in decreasing order, you can use `reversed` along with `sorted` or you can pass `reverse=True` as a keyword parameter to `sorted`." + "Para obtener los elementos en orden decreciente, puedes usar `reversed` junto con `sorted` o puedes pasar `reverse=True` como keyword parameter a `sorted`." ] }, { @@ -1883,7 +1872,7 @@ "tags": [] }, "source": [ - "You can use this outline of the function to get started." + "Puedes usar este esquema de la función para empezar." ] }, { @@ -1916,7 +1905,7 @@ "tags": [] }, "source": [ - "And this example to test your function." + "Y este ejemplo para probar tu función." ] }, { @@ -1938,7 +1927,7 @@ "tags": [] }, "source": [ - "Once your function is working, you can use the following code to print the most common letters in *Dracula*, which we can download from Project Gutenberg." + "Cuando tu función funcione, puedes usar el siguiente código para imprimir las letras más comunes en *Dracula*, que podemos descargar de Project Gutenberg." ] }, { @@ -1973,8 +1962,8 @@ "tags": [] }, "source": [ - "According to Zim's \"Codes and Secret Writing\", the sequence of letters in decreasing order of frequency in English starts with \"ETAONRISH\".\n", - "How does this sequence compare with the results from *Dracula*?" + "Según *Codes and Secret Writing* de Zim, la secuencia de letras en orden decreciente de frecuencia en inglés empieza con \"ETAONRISH\".\n", + "¿Cómo se compara esta secuencia con los resultados de *Dracula*?" ] }, { @@ -1982,20 +1971,20 @@ "id": "cbe9933e", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In a previous exercise, we tested whether two strings are anagrams by sorting the letters in both words and checking whether the sorted letters are the same.\n", - "Now let's make the problem a little more challenging.\n", + "En un ejercicio anterior, probamos si dos strings son anagramas ordenando las letras de ambas palabras y comprobando si las letras ordenadas son iguales.\n", + "Ahora hagamos el problema un poco más desafiante.\n", "\n", - "We'll write a program that takes a list of words and prints all the sets of words that are anagrams.\n", - "Here is an example of what the output might look like:\n", + "Escribiremos un programa que toma una lista de palabras e imprime todos los conjuntos de palabras que son anagramas.\n", + "Aquí tienes un ejemplo de cómo podría verse la salida:\n", "\n", " ['deltas', 'desalt', 'lasted', 'salted', 'slated', 'staled']\n", " ['retainers', 'ternaries']\n", " ['generating', 'greatening']\n", " ['resmelts', 'smelters', 'termless']\n", "\n", - "Hint: For each word in the word list, sort the letters and join them back into a string. Make a dictionary that maps from this sorted string to a list of words that are anagrams of it." + "Pista: para cada palabra de la lista de palabras, ordena las letras y vuelve a unirlas en un string. Crea un diccionario que asocie este string ordenado con una lista de palabras que son anagramas de él." ] }, { @@ -2005,7 +1994,7 @@ "tags": [] }, "source": [ - "The following cells download `words.txt` and read the words into a list." + "Las siguientes celdas descargan `words.txt` y leen las palabras en una lista." ] }, { @@ -2039,7 +2028,7 @@ "tags": [] }, "source": [ - "Here's the `sort_word` function we've used before." + "Aquí está la función `sort_word` que hemos usado antes." ] }, { @@ -2072,8 +2061,8 @@ "tags": [] }, "source": [ - "To find the longest list of anagrams, you can use the following function, which takes a key-value pair where the key is a string and the value is a list of words.\n", - "It returns the length of the list." + "Para encontrar la lista más larga de anagramas, puedes usar la siguiente función, que toma un par clave-valor donde la clave es un string y el valor es una lista de palabras.\n", + "Devuelve la longitud de la lista." ] }, { @@ -2097,7 +2086,7 @@ "tags": [] }, "source": [ - "We can use this function as a sort key to find the longest lists of anagrams." + "Podemos usar esta función como sort clave para encontrar las listas más largas de anagramas." ] }, { @@ -2121,7 +2110,7 @@ "tags": [] }, "source": [ - "If you want to know the longest words that have anagrams, you can use the following loop to print some of them." + "Si quieres saber cuáles son las palabras más largas que tienen anagramas, puedes usar el siguiente bucle para imprimir algunas." ] }, { @@ -2148,11 +2137,11 @@ "id": "4fbe939e", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `word_distance` that takes two words with the same length and returns the number of places where the two words differ.\n", + "Escribe una función llamada `word_distance` que tome dos palabras con la misma longitud y devuelva el número de posiciones donde las dos palabras difieren.\n", "\n", - "Hint: Use `zip` to loop through the corresponding letters of the words." + "Pista: usa `zip` para hacer un bucle por las letras correspondientes de las palabras." ] }, { @@ -2162,7 +2151,7 @@ "tags": [] }, "source": [ - "Here's an outline of the function with doctests you can use to check your function." + "Aquí tienes un esquema de la función con doctests que puedes usar para comprobar tu función." ] }, { @@ -2219,15 +2208,15 @@ "id": "066eec59", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "\"Metathesis\" is the transposition of letters in a word.\n", - "Two words form a \"metathesis pair\" if you can transform one into the other by swapping two letters, like `converse` and `conserve`.\n", - "Write a program that finds all of the metathesis pairs in the word list. \n", + "\"Metathesis\" es la transposición de letras en una palabra.\n", + "Dos palabras forman una \"metathesis pair\" si puedes transformar una en la otra intercambiando dos letras, como `converse` y `conserve`.\n", + "Escribe un programa que encuentre todos los pares de metathesis en la lista de palabras. \n", "\n", - "Hint: The words in a metathesis pair must be anagrams of each other.\n", + "Pista: las palabras de un par de metathesis deben ser anagramas entre sí.\n", "\n", - "Credit: This exercise is inspired by an example at ." + "Crédito: este ejercicio está inspirado en un ejemplo de ." ] }, { @@ -2247,49 +2236,47 @@ "tags": [] }, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "This is a bonus exercise that is not in the book.\n", - "It is more challenging than the other exercises in this chapter, so you might want to ask a virtual assistant for help, or come back to it after you've read a few more chapters.\n", + "Este es un ejercicio extra que no está en el libro.\n", + "Es más desafiante que los otros ejercicios de este capítulo, así que quizá quieras pedir ayuda a un asistente virtual, o volver a él después de leer algunos capítulos más.\n", "\n", - "Here's another Car Talk Puzzler\n", + "Aquí tienes otro Car Talk Puzzler\n", "():\n", "\n", - "> What is the longest English word, that remains a valid English word,\n", - "> as you remove its letters one at a time?\n", + "> ¿Cuál es la palabra inglesa más larga que sigue siendo una palabra inglesa válida\n", + "> mientras le quitas letras una a una?\n", ">\n", - "> Now, letters can be removed from either end, or the middle, but you\n", - "> can't rearrange any of the letters. Every time you drop a letter, you\n", - "> wind up with another English word. If you do that, you're eventually\n", - "> going to wind up with one letter and that too is going to be an\n", - "> English word---one that's found in the dictionary. I want to know\n", - "> what's the longest word and how many letters does it have?\n", + "> Ahora, las letras se pueden quitar de cualquiera de los extremos o del medio, pero\n", + "> no puedes reordenar ninguna de las letras. Cada vez que quitas una letra,\n", + "> terminas con otra palabra inglesa. Si haces eso, al final\n", + "> terminarás con una letra, y esa también será una palabra inglesa -- una que\n", + "> aparece en el diccionario. Quiero saber cuál es la palabra más larga\n", + "> y cuántas letras tiene.\n", ">\n", - "> I'm going to give you a little modest example: Sprite. Ok? You start\n", - "> off with sprite, you take a letter off, one from the interior of the\n", - "> word, take the r away, and we're left with the word spite, then we\n", - "> take the e off the end, we're left with spit, we take the s off, we're\n", - "> left with pit, it, and I.\n", + "> Te voy a dar un ejemplo pequeño: Sprite. ¿Ok? Empiezas\n", + "> con sprite, le quitas una letra, una del interior de la\n", + "> palabra, quitas la r, y nos queda la palabra spite; luego\n", + "> quitamos la e del final, nos queda spit; quitamos la s,\n", + "> nos queda pit, it e I.\n", "\n", - "Write a program to find all words that can be reduced in this way, and\n", - "then find the longest one.\n", + "Escribe un programa para encontrar todas las palabras que pueden reducirse de esta manera, y luego encuentra la más larga.\n", "\n", - "This exercise is a little more challenging than most, so here are some\n", - "suggestions:\n", + "Este ejercicio es un poco más desafiante que la mayoría, así que aquí tienes algunas sugerencias:\n", "\n", - "1. You might want to write a function that takes a word and computes a\n", - " list of all the words that can be formed by removing one letter.\n", - " These are the \"children\" of the word.\n", + "1. Quizá quieras escribir una función que tome una palabra y calcule una\n", + " lista de todas las palabras que pueden formarse quitando una letra.\n", + " Estas son las \"children\" de la palabra.\n", "\n", - "2. Recursively, a word is reducible if any of its children are\n", - " reducible. As a base case, you can consider the empty string\n", + "2. Recursivamente, una palabra es reducible si cualquiera de sus children es\n", + " reducible. Como caso base, puedes considerar que el string vacío es\n", " reducible.\n", "\n", - "3. The word list we've been using doesn't contain single letter\n", - " words. So you might have to add \"I\" and \"a\".\n", + "3. La lista de palabras que hemos estado usando no contiene palabras de una sola letra.\n", + " Así que quizá tengas que añadir \"I\" y \"a\".\n", "\n", - "4. To improve the performance of your program, you might want to\n", - " memoize the words that are known to be reducible." + "4. Para mejorar el rendimiento de tu programa, quizá quieras\n", + " memoizar las palabras que se sabe que son reducibles." ] }, { @@ -2353,7 +2340,9 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", + "\n", + "Código license: [MIT License](https://mit-license.org/)\n", "\n", "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] diff --git a/chapters/chap12.ipynb b/chapters/chap12.ipynb index f2d5d23..87d82b4 100644 --- a/chapters/chap12.ipynb +++ b/chapters/chap12.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -41,20 +41,20 @@ "id": "59a8621b", "metadata": {}, "source": [ - "# Text Analysis and Generation\n", + "# Análisis y generación de texto\n", "\n", - "At this point we have covered Python's core data structures -- lists, dictionaries, and tuples -- and some algorithms that use them.\n", - "In this chapter, we'll use them to explore text analysis and Markov generation:\n", + "A estas alturas hemos cubierto las estructuras de datos principales de Python -- listas, diccionarios y tuplas -- y algunos algoritmos que las usan.\n", + "En este capítulo, las usaremos para explorar el análisis de texto y la generación de Markov:\n", "\n", - "* Text analysis is a way to describe the statistical relationships between the words in a document, like the probability that one word is followed by another, and\n", + "* El análisis de texto es una forma de describir las relaciones estadísticas entre las palabras de un documento, como la probabilidad de que una palabra vaya seguida de otra, y\n", "\n", - "* Markov generation is a way to generate new text with words and phrases similar to the original text.\n", + "* La generación de Markov es una forma de generar texto nuevo con palabras y frases similares a las del texto original.\n", "\n", - "These algorithms are similar to parts of a Large Language Model (LLM), which is the key component of a chatbot.\n", + "Estos algoritmos son similares a partes de un Large Language Model (LLM), que es el componente clave de un chatbot.\n", "\n", - "We'll start by counting the number of times each word appears in a book.\n", - "Then we'll look at pairs of words, and make a list of the words that can follow each word.\n", - "We'll make a simple version of a Markov generator, and as an exercise, you'll have a chance to make a more general version." + "Empezaremos contando el número de veces que aparece cada palabra en un libro.\n", + "Luego veremos pares de palabras y haremos una lista de las palabras que pueden seguir a cada palabra.\n", + "Haremos una versión simple de un generador de Markov y, como ejercicio, tendrás la oportunidad de hacer una versión más general." ] }, { @@ -62,10 +62,10 @@ "id": "0e3811b8", "metadata": {}, "source": [ - "## Unique words\n", + "## Palabras únicas\n", "\n", - "As a first step toward text analysis, let's read a book -- *The Strange Case Of Dr. Jekyll And Mr. Hyde* by Robert Louis Stevenson -- and count the number of unique words.\n", - "Instructions for downloading the book are in the notebook for this chapter." + "Como primer paso hacia el análisis de texto, leamos un libro -- *The Strange Case Of Dr. Jekyll And Mr. Hyde* de Robert Louis Stevenson -- y contemos el número de palabras únicas.\n", + "Las instrucciones para descargar el libro están en el notebook de este capítulo." ] }, { @@ -75,7 +75,7 @@ "tags": [] }, "source": [ - "The following cell downloads the book from Project Gutenberg." + "La siguiente celda descarga el libro desde Project Gutenberg." ] }, { @@ -97,8 +97,8 @@ "tags": [] }, "source": [ - "The version available from Project Gutenberg includes information about the book at the beginning and license information at the end.\n", - "We'll use `clean_file` from Chapter 8 to remove this material and write a \"clean\" file that contains only the text of the book." + "La versión disponible en Project Gutenberg incluye información sobre el libro al principio e información de licencia al final.\n", + "Usaremos `clean_file` del Capítulo 8 para eliminar este material y escribir un archivo \"limpio\" que contiene solo el texto del libro." ] }, { @@ -167,8 +167,8 @@ "id": "bc66d7e2", "metadata": {}, "source": [ - "We'll use a `for` loop to read lines from the file and `split` to divide the lines into words.\n", - "Then, to keep track of unique words, we'll store each word as a key in a dictionary." + "Usaremos un bucle `for` para leer líneas del archivo y `split` para dividir las líneas en palabras.\n", + "Luego, para llevar la cuenta de las palabras únicas, guardaremos cada palabra como una clave en un diccionario." ] }, { @@ -192,11 +192,11 @@ "id": "85171a3a", "metadata": {}, "source": [ - "The length of the dictionary is the number of unique words -- about `6000` by this way of counting.\n", - "But if we inspect them, we'll see that some are not valid words.\n", + "La longitud del diccionario es el número de palabras únicas -- unas `6000` con esta forma de contar.\n", + "Pero si las inspeccionamos, veremos que algunas no son palabras válidas.\n", "\n", - "For example, let's look at the longest words in `unique_words`.\n", - "We can use `sorted` to sort the words, passing the `len` function as a keyword argument so the words are sorted by length." + "Por ejemplo, veamos las palabras más largas en `unique_words`.\n", + "Podemos usar `sorted` para ordenar las palabras, pasando la función `len` como keyword argumento para que las palabras se ordenen por longitud." ] }, { @@ -214,13 +214,13 @@ "id": "795f5327", "metadata": {}, "source": [ - "The slice index, `[-5:]`, selects the last `5` elements of the sorted list, which are the longest words. \n", + "El índice de porción, `[-5:]`, selecciona los últimos `5` elementos de la lista ordenada, que son las palabras más largas. \n", "\n", - "The list includes some legitimately long words, like \"circumscription\", and some hyphenated words, like \"chocolate-coloured\".\n", - "But some of the longest \"words\" are actually two words separated by a dash.\n", - "And other words include punctuation like periods, exclamation points, and quotation marks.\n", + "La lista incluye algunas palabras legítimamente largas, como \"circumscription\", y algunas palabras con guion, como \"chocolate-coloured\".\n", + "Pero algunas de las \"palabras\" más largas son en realidad dos palabras separadas por una raya.\n", + "Y otras palabras incluyen puntuación como puntos, signos de exclamación y comillas.\n", "\n", - "So, before we move on, let's deal with dashes and other punctuation." + "Así que, antes de seguir, ocupémonos de las rayas y otros signos de puntuación." ] }, { @@ -228,15 +228,15 @@ "id": "bf89fafa", "metadata": {}, "source": [ - "## Punctuation\n", + "## Puntuación\n", "\n", - "To identify the words in the text, we need to deal with two issues:\n", + "Para identificar las palabras del texto, tenemos que resolver dos cuestiones:\n", "\n", - "* When a dash appears in a line, we should replace it with a space -- then when we use `split`, the words will be separated.\n", + "* Cuando aparece una raya en una línea, deberíamos reemplazarla por un espacio -- así, cuando usemos `split`, las palabras quedarán separadas.\n", "\n", - "* After splitting the words, we can use `strip` to remove punctuation.\n", + "* Después de separar las palabras, podemos usar `strip` para eliminar la puntuación.\n", "\n", - "To handle the first issue, we can use the following function, which takes a string, replaces dashes with spaces, splits the string, and returns the resulting list." + "Para manejar la primera cuestión, podemos usar la siguiente función, que toma un string, reemplaza las rayas por espacios, divide el string y devuelve la lista resultante." ] }, { @@ -255,8 +255,8 @@ "id": "d5decdec", "metadata": {}, "source": [ - "Notice that `split_line` only replaces dashes, not hyphens.\n", - "Here's an example." + "Observa que `split_line` solo reemplaza rayas, no guiones.\n", + "Aquí tienes un ejemplo." ] }, { @@ -274,11 +274,11 @@ "id": "0d9eb318", "metadata": {}, "source": [ - "Now, to remove punctuation from the beginning and end of each word, we can use `strip`, but we need a list of characters that are considered punctuation.\n", + "Ahora, para eliminar la puntuación del principio y del final de cada palabra, podemos usar `strip`, pero necesitamos una lista de caracteres que se consideran puntuación.\n", "\n", - "Characters in Python strings are in Unicode, which is an international standard used to represent letters in nearly every alphabet, numbers, symbols, punctuation marks, and more.\n", - "The `unicodedata` module provides a `category` function we can use to tell which characters are punctuation.\n", - "Given a letter, it returns a string with information about what category the letter is in." + "Los caracteres en los strings de Python están en Unicode, que es un estándar internacional usado para representar letras de casi todos los alfabetos, números, símbolos, signos de puntuación y más.\n", + "El módulo `unicodedata` proporciona una función `category` que podemos usar para saber qué caracteres son puntuación.\n", + "Dada una letra, devuelve un string con información sobre la categoría a la que pertenece." ] }, { @@ -298,9 +298,9 @@ "id": "994835ea", "metadata": {}, "source": [ - "The category string of `'A'` is `'Lu'` -- the `'L'` means it is a letter and the `'u'` means it is uppercase.\n", + "El string de categoría de `'A'` es `'Lu'` -- la `'L'` significa que es una letra y la `'u'` significa que es mayúscula.\n", "\n", - "The category string of `'.'` is `'Po'` -- the `'P'` means it is punctuation and the `'o'` means its subcategory is \"other\"." + "El string de categoría de `'.'` es `'Po'` -- la `'P'` significa que es puntuación y la `'o'` significa que su subcategoría es \"other\"." ] }, { @@ -318,8 +318,8 @@ "id": "03773b9b", "metadata": {}, "source": [ - "We can find the punctuation marks in the book by checking for characters with categories that begin with `'P'`.\n", - "The following loop stores the unique punctuation marks in a dictionary." + "Podemos encontrar los signos de puntuación del libro comprobando los caracteres con categorías que empiezan por `'P'`.\n", + "El siguiente bucle guarda los signos de puntuación únicos en un diccionario." ] }, { @@ -342,7 +342,7 @@ "id": "e6741dfa", "metadata": {}, "source": [ - "To make a list of punctuation marks, we can join the keys of the dictionary into a string." + "Para crear una lista de signos de puntuación, podemos unir las claves del diccionario en un string." ] }, { @@ -361,7 +361,7 @@ "id": "6af8d5a2", "metadata": {}, "source": [ - "Now that we know which characters in the book are punctuation, we can write a function that takes a word, strips punctuation from the beginning and end, and converts it to lower case." + "Ahora que sabemos qué caracteres del libro son puntuación, podemos escribir una función que toma una palabra, elimina la puntuación del principio y del final, y la convierte a minúsculas." ] }, { @@ -380,7 +380,7 @@ "id": "58a78cb1", "metadata": {}, "source": [ - "Here's an example." + "Aquí tienes un ejemplo." ] }, { @@ -398,7 +398,7 @@ "id": "314e4fbd", "metadata": {}, "source": [ - "Because `strip` removes characters from the beginning and end, it leaves hyphenated words alone." + "Como `strip` elimina caracteres del principio y del final, deja intactas las palabras con guion." ] }, { @@ -416,7 +416,7 @@ "id": "99050f8a", "metadata": {}, "source": [ - "Now here's a loop that uses `split_line` and `clean_word` to identify the unique words in the book." + "Ahora aquí tienes un bucle que usa `split_line` y `clean_word` para identificar las palabras únicas del libro." ] }, { @@ -440,8 +440,8 @@ "id": "992e5466", "metadata": {}, "source": [ - "With this stricter definition of what a word is, there are about 4000 unique words.\n", - "And we can confirm that the list of longest words has been cleaned up." + "Con esta definición más estricta de lo que es una palabra, hay unas 4000 palabras únicas.\n", + "Y podemos confirmar que la lista de palabras más largas se ha limpiado." ] }, { @@ -459,7 +459,7 @@ "id": "8014c330", "metadata": {}, "source": [ - "Now let's see how many times each word is used." + "Ahora veamos cuántas veces se usa cada palabra." ] }, { @@ -467,9 +467,9 @@ "id": "7ef40180", "metadata": {}, "source": [ - "## Word frequencies\n", + "## Frecuencias de palabras\n", "\n", - "The following loop computes the frequency of each unique word." + "El siguiente bucle calcula la frecuencia de cada palabra única." ] }, { @@ -494,10 +494,10 @@ "id": "bd680b81", "metadata": {}, "source": [ - "The first time we see a word, we initialize its frequency to `1`. If we see the same word again later, we increment its frequency.\n", + "La primera vez que vemos una palabra, inicializamos su frecuencia a `1`. Si volvemos a ver la misma palabra más adelante, incrementamos su frecuencia.\n", "\n", - "To see which words appear most often, we can use `items` to get the key-value pairs from `word_counter`, and sort them by the second element of the pair, which is the frequency.\n", - "First we'll define a function that selects the second element." + "Para ver qué palabras aparecen con más frecuencia, podemos usar `items` para obtener los pares clave-valor de `word_counter`, y ordenarlos por el segundo elemento del par, que es la frecuencia.\n", + "Primero definiremos una función que selecciona el segundo elemento." ] }, { @@ -516,11 +516,11 @@ "id": "b15a5bd6", "metadata": {}, "source": [ - "Now we can use `sorted` with two keyword arguments:\n", + "Ahora podemos usar `sorted` con dos keyword argumentos:\n", "\n", - "* `key=second_element` means the items will be sorted according to the frequencies of the words.\n", + "* `key=second_element` significa que los elementos se ordenarán según las frecuencias de las palabras.\n", "\n", - "* `reverse=True` means the items will be sorted in reverse order, with the most frequent words first." + "* `reverse=True` significa que los elementos se ordenarán en orden inverso, con las palabras más frecuentes primero." ] }, { @@ -538,7 +538,7 @@ "id": "db6812e2", "metadata": {}, "source": [ - "Here are the five most frequent words." + "Aquí están las cinco palabras más frecuentes." ] }, { @@ -557,8 +557,8 @@ "id": "551e81bb", "metadata": {}, "source": [ - "In the next section, we'll encapsulate this loop in a function.\n", - "And we'll use it to demonstrate a new feature -- optional parameters." + "En la siguiente sección, encapsularemos este bucle en una función.\n", + "Y la usaremos para demostrar una nueva característica -- parámetros opcionales." ] }, { @@ -566,10 +566,10 @@ "id": "45243ccc", "metadata": {}, "source": [ - "## Optional parameters\n", + "## Parámetros opcionales\n", "\n", - "We've used built-in functions that take optional parameters.\n", - "For example, `round` takes an optional parameters called `ndigits` that indicates how many decimal places to keep." + "Hemos usado funciones integradas que toman parámetros opcionales.\n", + "Por ejemplo, `round` toma un parámetro opcional llamado `ndigits` que indica cuántos decimales conservar." ] }, { @@ -587,8 +587,8 @@ "id": "6ae60945", "metadata": {}, "source": [ - "But it's not just built-in functions -- we can write functions with optional parameters, too.\n", - "For example, the following function takes two parameters, `word_counter` and `num`." + "Pero no son solo las funciones integradas -- también podemos escribir funciones con parámetros opcionales.\n", + "Por ejemplo, la siguiente función toma dos parámetros, `word_counter` y `num`." ] }, { @@ -610,9 +610,9 @@ "id": "78cb1531", "metadata": {}, "source": [ - "The second parameter looks like an assignment statement, but it's not -- it's an optional parameter.\n", + "El segundo parámetro parece una sentencia de asignación, pero no lo es -- es un parámetro opcional.\n", "\n", - "If you call this function with one argument, `num` gets the **default value**, which is `5`." + "Si llamas a esta función con un argumento, `num` recibe el **valor por defecto**, que es `5`." ] }, { @@ -630,7 +630,7 @@ "id": "29753ad6", "metadata": {}, "source": [ - "If you call this function with two arguments, the second argument gets assigned to `num` instead of the default value." + "Si llamas a esta función con dos argumentos, el segundo argumento se asigna a `num` en lugar del valor por defecto." ] }, { @@ -648,9 +648,9 @@ "id": "e9bf907b", "metadata": {}, "source": [ - "In that case, we would say the optional argument **overrides** the default value.\n", + "En ese caso, diríamos que el argumento opcional **override** el valor por defecto.\n", "\n", - "If a function has both required and optional parameters, all of the required parameters have to come first, followed by the optional ones." + "Si una función tiene parámetros requeridos y opcionales, todos los parámetros requeridos tienen que ir primero, seguidos por los opcionales." ] }, { @@ -675,14 +675,14 @@ "tags": [] }, "source": [ - "## Dictionary subtraction\n", + "## Resta de diccionarios\n", "\n", - "Suppose we want to spell-check a book -- that is, find a list of words that might be misspelled.\n", - "One way to do that is to find words in the book that don't appear in a list of valid words.\n", - "In previous chapters, we've used a list of words that are considered valid in word games like Scrabble.\n", - "Now we'll use this list to spell-check Robert Louis Stevenson.\n", + "Supongamos que queremos revisar la ortografía de un libro -- es decir, encontrar una lista de palabras que podrían estar mal escritas.\n", + "Una forma de hacerlo es encontrar palabras del libro que no aparecen en una lista de palabras válidas.\n", + "En capítulos anteriores, hemos usado una lista de palabras que se consideran válidas en juegos de palabras como Scrabble.\n", + "Ahora usaremos esta lista para revisar la ortografía de Robert Louis Stevenson.\n", "\n", - "We can think of this problem as set subtraction -- that is, we want to find all the words from one set (the words in the book) that are not in the other (the words in the list)." + "Podemos pensar en este problema como una resta de conjuntos -- es decir, queremos encontrar todas las palabras de un conjunto (las palabras del libro) que no están en el otro (las palabras de la lista)." ] }, { @@ -692,7 +692,7 @@ "tags": [] }, "source": [ - "The following cell downloads the word list." + "La siguiente celda descarga la lista de palabras." ] }, { @@ -712,7 +712,7 @@ "id": "2a46556c", "metadata": {}, "source": [ - "As we've done before, we can read the contents of `words.txt` and split it into a list of strings." + "Como hemos hecho antes, podemos leer el contenido de `words.txt` y dividirlo en una lista de strings." ] }, { @@ -730,7 +730,7 @@ "id": "22becbab", "metadata": {}, "source": [ - "Then we'll store the words as keys in a dictionary so we can use the `in` operator to check quickly whether a word is valid." + "Luego guardaremos las palabras como claves en un diccionario para poder usar el operador `in` y comprobar rápidamente si una palabra es válida." ] }, { @@ -750,7 +750,7 @@ "id": "94cc7c61", "metadata": {}, "source": [ - "Now, to identify words that appear in the book but not in the word list, we'll use `subtract`, which takes two dictionaries as parameters and returns a new dictionary that contains all the keys from one that are not in the other." + "Ahora, para identificar palabras que aparecen en el libro pero no en la lista de palabras, usaremos `subtract`, que toma dos diccionarios como parámetros y devuelve un nuevo diccionario que contiene todas las claves de uno que no están en el otro." ] }, { @@ -773,7 +773,7 @@ "id": "e70c63b4", "metadata": {}, "source": [ - "Here's how we use it." + "Así es como lo usamos." ] }, { @@ -791,7 +791,7 @@ "id": "f8ada7bd", "metadata": {}, "source": [ - "To get a sample of words that might be misspelled, we can print the most common words in `diff`." + "Para obtener una muestra de palabras que podrían estar mal escritas, podemos imprimir las palabras más comunes en `diff`." ] }, { @@ -809,10 +809,10 @@ "id": "deeec418", "metadata": {}, "source": [ - "The most common \"misspelled\" words are mostly names and a few single-letter words (Mr. Utterson is Dr. Jekyll's friend and lawyer).\n", + "Las \"palabras mal escritas\" más comunes son en su mayoría nombres y algunas palabras de una sola letra (Mr. Utterson es el amigo y abogado del Dr. Jekyll).\n", "\n", - "If we select words that only appear once, they are more likely to be actual misspellings.\n", - "We can do that by looping through the items and making a list of words with frequency `1`." + "Si seleccionamos palabras que solo aparecen una vez, es más probable que sean errores ortográficos reales.\n", + "Podemos hacerlo haciendo un bucle por los elementos y creando una lista de palabras con frecuencia `1`." ] }, { @@ -833,7 +833,7 @@ "id": "98ae9281", "metadata": {}, "source": [ - "Here are the last few elements of the list." + "Aquí están los últimos elementos de la lista." ] }, { @@ -851,8 +851,8 @@ "id": "c5040834", "metadata": {}, "source": [ - "Most of them are valid words that are not in the word list.\n", - "But `'reindue'` appears to be a misspelling of `'reinduce'`, so at least we found one legitimate error." + "La mayoría son palabras válidas que no están en la lista de palabras.\n", + "Pero `'reindue'` parece ser un error ortográfico de `'reinduce'`, así que al menos encontramos un error legítimo." ] }, { @@ -860,22 +860,22 @@ "id": "afcbbe19", "metadata": {}, "source": [ - "## Random numbers\n", + "## Números aleatorios\n", "\n", - "As a step toward Markov text generation, next we'll choose a random sequence of words from `word_counter`.\n", - "But first let's talk about randomness.\n", + "Como paso hacia la generación de texto de Markov, a continuación elegiremos una secuencia aleatoria de palabras de `word_counter`.\n", + "Pero primero hablemos de aleatoriedad.\n", "\n", - "Given the same inputs, most computer programs are **deterministic**, which means they generate the same outputs every time.\n", - "Determinism is usually a good thing, since we expect the same calculation to yield the same result.\n", - "For some applications, though, we want the computer to be unpredictable.\n", - "Games are one example, but there are more.\n", + "Dados los mismos inputs, la mayoría de los programas de computadora son **determinista**, lo que significa que generan los mismos outputs cada vez.\n", + "El determinismo suele ser algo bueno, ya que esperamos que el mismo cálculo produzca el mismo resultado.\n", + "Para algunas aplicaciones, sin embargo, queremos que la computadora sea impredecible.\n", + "Los juegos son un ejemplo, pero hay más.\n", "\n", - "Making a program truly nondeterministic turns out to be difficult, but there are ways to fake it.\n", - "One is to use algorithms that generate **pseudorandom** numbers.\n", - "Pseudorandom numbers are not truly random because they are generated by a deterministic computation, but just by looking at the numbers it is all but impossible to distinguish them from random.\n", + "Hacer que un programa sea verdaderamente no determinista resulta ser difícil, pero hay formas de simularlo.\n", + "Una es usar algoritmos que generan números **pseudorandom**.\n", + "Los números pseudorandom no son verdaderamente aleatorios porque se generan mediante un cálculo determinista, pero con solo mirar los números es prácticamente imposible distinguirlos de números aleatorios.\n", "\n", - "The `random` module provides functions that generate pseudorandom numbers -- which I will simply call \"random\" from here on.\n", - "We can import it like this." + "El módulo `random` proporciona funciones que generan números pseudorandom -- a los que de aquí en adelante simplemente llamaré \"random\".\n", + "Podemos importarlo así." ] }, { @@ -908,7 +908,7 @@ "id": "8cbbd7f8", "metadata": {}, "source": [ - "The `random` module provides a function called `choice` that chooses an element from a list at random, with every element having the same probability of being chosen." + "El módulo `random` proporciona una función llamada `choice` que elige un elemento de una lista al azar, con la misma probabilidad de elegir cada elemento." ] }, { @@ -927,7 +927,7 @@ "id": "57c15af2", "metadata": {}, "source": [ - "If you call the function again, you might get the same element again, or a different one." + "Si llamas a la función otra vez, podrías obtener el mismo elemento de nuevo, o uno diferente." ] }, { @@ -945,9 +945,9 @@ "id": "6f0c2572", "metadata": {}, "source": [ - "In the long run, we expect to get every element about the same number of times.\n", + "A largo plazo, esperamos obtener cada elemento aproximadamente el mismo número de veces.\n", "\n", - "If you use `choice` with a dictionary, you get a `KeyError`." + "Si usas `choice` con un diccionario, obtienes un `KeyError`." ] }, { @@ -969,7 +969,7 @@ "id": "592722f3", "metadata": {}, "source": [ - "To choose a random key, you have to put the keys in a list and then call `choice`." + "Para elegir una clave aleatoria, tienes que poner las claves en una lista y luego llamar a `choice`." ] }, { @@ -988,7 +988,7 @@ "id": "172d72f6", "metadata": {}, "source": [ - "If we generate a random sequence of words, it doesn't make much sense." + "Si generamos una secuencia aleatoria de palabras, no tiene mucho sentido." ] }, { @@ -1008,10 +1008,10 @@ "id": "e0e2fbc4", "metadata": {}, "source": [ - "Part of the problem is that we are not taking into account that some words are more common than others.\n", - "The results will be better if we choose words with different \"weights\", so that some are chosen more often than others.\n", + "Parte del problema es que no estamos teniendo en cuenta que algunas palabras son más comunes que otras.\n", + "Los resultados serán mejores si elegimos palabras con distintos \"weights\", de modo que algunas se elijan más a menudo que otras.\n", "\n", - "If we use the values from `word_counter` as weights, each word is chosen with a probability that depends on its frequency." + "Si usamos los valores de `word_counter` como weights, cada palabra se elige con una probabilidad que depende de su frecuencia." ] }, { @@ -1029,7 +1029,7 @@ "id": "5098bf93", "metadata": {}, "source": [ - "The `random` module provides another function called `choices` that takes weights as an optional argument." + "El módulo `random` proporciona otra función llamada `choices` que toma weights como argumento opcional." ] }, { @@ -1047,7 +1047,7 @@ "id": "a3341e84", "metadata": {}, "source": [ - "And it takes another optional argument, `k`, that specifies the number of words to select." + "Y toma otro argumento opcional, `k`, que especifica el número de palabras a seleccionar." ] }, { @@ -1066,7 +1066,7 @@ "id": "e57e6f3d", "metadata": {}, "source": [ - "The result is a list of strings that we can join into something that's looks more like a sentence." + "El resultado es una lista de strings que podemos unir en algo que se parece más a una oración." ] }, { @@ -1084,9 +1084,9 @@ "id": "c7a35dff", "metadata": {}, "source": [ - "If you choose words from the book at random, you get a sense of the vocabulary, but a series of random words seldom makes sense because there is no relationship between successive words.\n", - "For example, in a real sentence you expect an article like \"the\" to be followed by an adjective or a noun, and probably not a verb or adverb.\n", - "So the next step is to look at these relationships between words." + "Si eliges palabras del libro al azar, obtienes una idea del vocabulario, pero una serie de palabras aleatorias rara vez tiene sentido porque no hay relación entre palabras sucesivas.\n", + "Por ejemplo, en una oración real esperas que un artículo como \"the\" vaya seguido de un adjetivo o un sustantivo, y probablemente no de un verbo o adverbio.\n", + "Así que el siguiente paso es observar estas relaciones entre palabras." ] }, { @@ -1094,19 +1094,19 @@ "id": "0921dd53", "metadata": {}, "source": [ - "## Bigrams\n", + "## Bigramas\n", "\n", - "Instead of looking at one word at a time, now we'll look at sequences of two words, which are called **bigrams**.\n", - "A sequence of three words is called a **trigram**, and a sequence with some unspecified number of words is called an **n-gram**.\n", + "En lugar de mirar una palabra cada vez, ahora miraremos secuencias de dos palabras, que se llaman **bigramas**.\n", + "Una secuencia de tres palabras se llama **trigram**, y una secuencia con un número no especificado de palabras se llama **n-gram**.\n", "\n", - "Let's write a program that finds all of the bigrams in the book and the number of times each one appears.\n", - "To store the results, we'll use a dictionary where\n", + "Escribamos un programa que encuentre todos los bigramas del libro y el número de veces que aparece cada uno.\n", + "Para guardar los resultados, usaremos un diccionario donde\n", "\n", - "* The keys are tuples of strings that represent bigrams, and \n", + "* Las claves son tuplas de strings que representan bigramas, y \n", "\n", - "* The values are integers that represent frequencies.\n", + "* Los valores son enteros que representan frecuencias.\n", "\n", - "Let's call it `bigram_counter`." + "Llamémoslo `bigram_counter`." ] }, { @@ -1124,9 +1124,9 @@ "id": "33f97a2a", "metadata": {}, "source": [ - "The following function takes a list of two strings as a parameter.\n", - "First it makes a tuple of the two strings, which can be used as a key in a dictionary.\n", - "Then it adds the key to `bigram_counter`, if it doesn't exist, or increments the frequency if it does." + "La siguiente función toma una lista de dos strings como parámetro.\n", + "Primero crea una tupla con los dos strings, que puede usarse como clave en un diccionario.\n", + "Luego añade la clave a `bigram_counter`, si no existe, o incrementa la frecuencia si existe." ] }, { @@ -1149,11 +1149,11 @@ "id": "5c30f429", "metadata": {}, "source": [ - "As we go through the book, we have to keep track of each pair of consecutive words.\n", - "So if we see the sequence \"man is not truly one\", we would add the bigrams \"man is\", \"is not\", \"not truly\", and so on.\n", + "A medida que recorremos el libro, tenemos que llevar la cuenta de cada par de palabras consecutivas.\n", + "Así que si vemos la secuencia \"man is not truly one\", añadiríamos los bigramas \"man is\", \"is not\", \"not truly\", y así sucesivamente.\n", "\n", - "To keep track of these bigrams, we'll use a list called `window`, because it is like a window that slides over the pages of the book, showing only two words at a time.\n", - "Initially, `window` is empty." + "Para llevar la cuenta de estos bigramas, usaremos una lista llamada `window`, porque es como una ventana que se desliza sobre las páginas del libro, mostrando solo dos palabras a la vez.\n", + "Inicialmente, `window` está vacía." ] }, { @@ -1171,7 +1171,7 @@ "id": "9376558c", "metadata": {}, "source": [ - "We'll use the following function to process the words one at a time." + "Usaremos la siguiente función para procesar las palabras una por una." ] }, { @@ -1194,14 +1194,14 @@ "id": "56895591", "metadata": {}, "source": [ - "The first time this function is called, it appends the given word to `window`.\n", - "Since there is only one word in the window, we don't have a bigram yet, so the function ends.\n", + "La primera vez que se llama a esta función, añade la palabra dada a `window`.\n", + "Como solo hay una palabra en la window, todavía no tenemos un bigrama, así que la función termina.\n", "\n", - "The second time it's called -- and every time thereafter -- it appends a second word to `window`.\n", - "Since there are two words in the window, it calls `count_bigram` to keep track of how many times each bigram appears.\n", - "Then it uses `pop` to remove the first word from the window.\n", + "La segunda vez que se llama -- y todas las veces después -- añade una segunda palabra a `window`.\n", + "Como hay dos palabras en la window, llama a `count_bigram` para llevar la cuenta de cuántas veces aparece cada bigrama.\n", + "Luego usa `pop` para eliminar la primera palabra de la window.\n", "\n", - "The following program loops through the words in the book and processes them one at a time." + "El siguiente programa hace un bucle por las palabras del libro y las procesa una a una." ] }, { @@ -1222,8 +1222,8 @@ "id": "20c4627a", "metadata": {}, "source": [ - "The result is a dictionary that maps from each bigram to the number of times it appears.\n", - "We can use `print_most_common` to see the most common bigrams." + "El resultado es un diccionario que asocia cada bigrama con el número de veces que aparece.\n", + "Podemos usar `print_most_common` para ver los bigramas más comunes." ] }, { @@ -1241,8 +1241,8 @@ "id": "757bd309", "metadata": {}, "source": [ - "Looking at these results, we can get a sense of which pairs of words are most likely to appear together.\n", - "We can also use the results to generate random text, like this." + "Al mirar estos resultados, podemos hacernos una idea de qué pares de palabras tienen más probabilidad de aparecer juntos.\n", + "También podemos usar los resultados para generar texto aleatorio, así." ] }, { @@ -1274,10 +1274,10 @@ "id": "eda80407", "metadata": {}, "source": [ - "`bigrams` is a list of the bigrams that appear in the books.\n", - "`weights` is a list of their frequencies, so `random_bigrams` is a sample where the probability a bigram is selected is proportional to its frequency. \n", + "`bigrams` es una lista de los bigramas que aparecen en los libros.\n", + "`weights` es una lista de sus frecuencias, así que `random_bigrams` es una muestra donde la probabilidad de que se seleccione un bigrama es proporcional a su frecuencia. \n", "\n", - "Here are the results." + "Aquí están los resultados." ] }, { @@ -1296,7 +1296,7 @@ "id": "5f24c3b6", "metadata": {}, "source": [ - "This way of generating text is better than choosing random words, but still doesn't make a lot of sense." + "Esta forma de generar texto es mejor que elegir palabras aleatorias, pero todavía no tiene mucho sentido." ] }, { @@ -1304,10 +1304,10 @@ "id": "a13d93b5", "metadata": {}, "source": [ - "## Markov analysis\n", + "## Análisis de Markov\n", "\n", - "We can do better with Markov chain text analysis, which computes, for each word in a text, the list of words that come next.\n", - "As an example, we'll analyze these lyrics from the Monty Python song *Eric, the Half a Bee*:" + "Podemos hacerlo mejor con el análisis de texto mediante cadenas de Markov, que calcula, para cada palabra de un texto, la lista de palabras que vienen después.\n", + "Como ejemplo, analizaremos esta letra de la canción de Monty Python *Eric, the Half a Bee*:" ] }, { @@ -1330,7 +1330,7 @@ "id": "583ab9f0", "metadata": {}, "source": [ - "To store the results, we'll use a dictionary that maps from each word to the list of words that follow it." + "Para guardar los resultados, usaremos un diccionario que asocia cada palabra con la lista de palabras que la siguen." ] }, { @@ -1348,7 +1348,7 @@ "id": "d5d85b09", "metadata": {}, "source": [ - "As an example, let's start with the first two words of the song." + "Como ejemplo, empecemos con las dos primeras palabras de la canción." ] }, { @@ -1367,7 +1367,7 @@ "id": "0349fe78", "metadata": {}, "source": [ - "If the first word is not in `successor_map`, we have to add a new item that maps from the first word to a list containing the second word." + "Si la primera palabra no está en `successor_map`, tenemos que añadir un nuevo elemento que asocie la primera palabra con una lista que contiene la segunda palabra." ] }, { @@ -1386,7 +1386,7 @@ "id": "55bb8df9", "metadata": {}, "source": [ - "If the first word is already in the dictionary, we can look it up to get the list of successors we've seen so far, and append the new one." + "Si la primera palabra ya está en el diccionario, podemos buscarla para obtener la lista de sucesores que hemos visto hasta ahora, y añadir el nuevo." ] }, { @@ -1408,7 +1408,7 @@ "id": "6289cc32", "metadata": {}, "source": [ - "The following function encapsulates these steps." + "La siguiente función encapsula estos pasos." ] }, { @@ -1432,11 +1432,11 @@ "id": "74a51700", "metadata": {}, "source": [ - "If the same bigram appears more that once, the second word is added to the list more than once.\n", - "In this way, `successor_map` keeps track of how many times each successor appears.\n", + "Si el mismo bigrama aparece más de una vez, la segunda palabra se añade a la lista más de una vez.\n", + "De esta manera, `successor_map` lleva la cuenta de cuántas veces aparece cada sucesor.\n", "\n", - "As we did in the previous section, we'll use a list called `window` to store pairs of consecutive words.\n", - "And we'll use the following function to process the words one at a time." + "Como hicimos en la sección anterior, usaremos una lista llamada `window` para guardar pares de palabras consecutivas.\n", + "Y usaremos la siguiente función para procesar las palabras una por una." ] }, { @@ -1459,7 +1459,7 @@ "id": "861a60d9", "metadata": {}, "source": [ - "Here's how we use it to process the words in the song." + "Así es como la usamos para procesar las palabras de la canción." ] }, { @@ -1482,7 +1482,7 @@ "id": "bf490d67", "metadata": {}, "source": [ - "And here are the results." + "Y aquí están los resultados." ] }, { @@ -1500,11 +1500,11 @@ "id": "ff7bad74", "metadata": {}, "source": [ - "The word `'half'` can be followed by `'a'`, `'not'`, or `'the'`.\n", - "The word `'a'` can be followed by `'bee'` or `'vis'`.\n", - "Most of the other words appear only once, so they are followed by only a single word.\n", + "La palabra `'half'` puede ir seguida de `'a'`, `'not'` o `'the'`.\n", + "La palabra `'a'` puede ir seguida de `'bee'` o `'vis'`.\n", + "La mayoría de las demás palabras aparecen solo una vez, así que van seguidas de una única palabra.\n", "\n", - "Now let's analyze the book." + "Ahora analicemos el libro." ] }, { @@ -1528,7 +1528,7 @@ "id": "2676e2fb", "metadata": {}, "source": [ - "We can look up any word and find the words that can follow it." + "Podemos buscar cualquier palabra y encontrar las palabras que pueden seguirla." ] }, { @@ -1566,7 +1566,7 @@ "id": "7b777a9c", "metadata": {}, "source": [ - "In this list of successors, notice that the word `'to'` appears three times -- the other successors only appear once." + "En esta lista de sucesores, observa que la palabra `'to'` aparece tres veces -- los demás sucesores aparecen solo una vez." ] }, { @@ -1574,18 +1574,18 @@ "id": "e8bf85fc", "metadata": {}, "source": [ - "## Generating text\n", + "## Generar texto\n", "\n", - "We can use the results from the previous section to generate new text with the same relationships between consecutive words as in the original.\n", - "Here's how it works:\n", + "Podemos usar los resultados de la sección anterior para generar texto nuevo con las mismas relaciones entre palabras consecutivas que en el original.\n", + "Así funciona:\n", "\n", - "* Starting with any word that appears in the text, we look up its possible successors and choose one at random.\n", + "* Empezando con cualquier palabra que aparezca en el texto, buscamos sus posibles sucesores y elegimos uno al azar.\n", "\n", - "* Then, using the chosen word, we look up its possible successors, and choose one at random.\n", + "* Luego, usando la palabra elegida, buscamos sus posibles sucesores y elegimos uno al azar.\n", "\n", - "We can repeat this process to generate as many words as we want.\n", - "As an example, let's start with the word `'although'`.\n", - "Here are the words that can follow it." + "Podemos repetir este proceso para generar tantas palabras como queramos.\n", + "Como ejemplo, empecemos con la palabra `'although'`.\n", + "Estas son las palabras que pueden seguirla." ] }, { @@ -1621,7 +1621,7 @@ "id": "b26a2ead", "metadata": {}, "source": [ - "We can use `choice` to choose from the list with equal probability." + "Podemos usar `choice` para elegir de la lista con la misma probabilidad." ] }, { @@ -1640,9 +1640,9 @@ "id": "9741beca", "metadata": {}, "source": [ - "If the same word appears more than once in the list, it is more likely to be selected.\n", + "Si la misma palabra aparece más de una vez en la lista, es más probable que sea seleccionada.\n", "\n", - "Repeating these steps, we can use the following loop to generate a longer series." + "Repitiendo estos pasos, podemos usar el siguiente bucle para generar una serie más larga." ] }, { @@ -1663,11 +1663,11 @@ "id": "38a2d79a", "metadata": {}, "source": [ - "The result sounds more like a real sentence, but it still doesn't make much sense.\n", + "El resultado suena más como una oración real, pero todavía no tiene mucho sentido.\n", "\n", - "We can do better using more than one word as a key in `successor_map`.\n", - "For example, we can make a dictionary that maps from each bigram -- or trigram -- to the list of words that come next.\n", - "As an exercise, you'll have a chance to implement this analysis and see what the results look like." + "Podemos hacerlo mejor usando más de una palabra como clave en `successor_map`.\n", + "Por ejemplo, podemos crear un diccionario que asocie cada bigrama -- o trigram -- con la lista de palabras que vienen después.\n", + "Como ejercicio, tendrás la oportunidad de implementar este análisis y ver cómo son los resultados." ] }, { @@ -1677,32 +1677,32 @@ "tags": [] }, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "At this point we are writing more substantial programs, and you might find that you are spending more time debugging.\n", - "If you are stuck on a difficult bug, here are a few things to try:\n", + "A estas alturas estamos escribiendo programas más sustanciales, y puede que descubras que pasas más tiempo depurando.\n", + "Si estás atascado con un bug difícil, aquí tienes algunas cosas que puedes probar:\n", "\n", - "* Reading: Examine your code, read it back to yourself, and check that it says what you meant to say.\n", + "* Leer: examina tu código, léelo en voz alta para ti y comprueba que dice lo que querías decir.\n", "\n", - "* Running: Experiment by making changes and running different versions. Often if you display the right thing at the right place in the program, the problem becomes obvious, but sometimes you have to build scaffolding.\n", + "* Ejecutar: experimenta haciendo cambios y ejecutando versiones diferentes. A menudo, si muestras lo correcto en el lugar correcto del programa, el problema se vuelve obvio, pero a veces tienes que construir código de apoyo.\n", "\n", - "* Ruminating: Take some time to think! What kind of error is it: syntax, runtime,\n", - " or semantic? What information can you get from the error messages,\n", - " or from the output of the program? What kind of error could cause\n", - " the problem you're seeing? What did you change last, before the\n", - " problem appeared?\n", + "* Rumiar: ¡tómate tiempo para pensar! ¿Qué tipo de error es: de sintaxis, de runtime,\n", + " o semántico? ¿Qué información puedes obtener de los mensajes de error,\n", + " o del output del programa? ¿Qué tipo de error podría causar\n", + " el problema que estás viendo? ¿Qué cambiaste por última vez, antes de que\n", + " apareciera el problema?\n", "\n", - "* Rubberducking: If you explain the problem to someone else, you sometimes find the\n", - " answer before you finish asking the question. Often you don't need\n", - " the other person; you could just talk to a rubber duck. And that's\n", - " the origin of the well-known strategy called **rubber duck\n", - " debugging**. I am not making this up -- see\n", - " .\n", + "* Rubberducking: si explicas el problema a otra persona, a veces encuentras la\n", + " respuesta antes de terminar de hacer la pregunta. A menudo no necesitas\n", + " a la otra persona; podrías hablarle a un patito de goma. Y ese es\n", + " el origen de la estrategia conocida como **rubber duck\n", + " depuración**. No me lo estoy inventando -- ver\n", + " .\n", "\n", - "* Retreating: At some point, the best thing to do is back up -- undoing recent\n", - " changes -- until you get to a program that works. Then you can start rebuilding.\n", + "* Retirarse: en algún momento, lo mejor es retroceder -- deshacer cambios\n", + " recientes -- hasta llegar a un programa que funcione. Luego puedes empezar a reconstruir.\n", " \n", - "* Resting: If you give your brain a break, sometime it will find the problem for you." + "* Descansar: si le das un respiro a tu cerebro, a veces encontrará el problema por ti." ] }, { @@ -1710,15 +1710,15 @@ "id": "12c2cd32", "metadata": {}, "source": [ - "Beginning programmers sometimes get stuck on one of these activities and forget the others. Each activity comes with its own failure mode.\n", + "Los programadores principiantes a veces se quedan atascados en una de estas actividades y olvidan las demás. Cada actividad tiene su propio modo de fallo.\n", "\n", - "For example, reading your code works if the problem is a typographical error, but not if the problem is a conceptual misunderstanding.\n", - "If you don't understand what your program does, you can read it 100 times and never see the error, because the error is in your head.\n", + "Por ejemplo, leer tu código funciona si el problema es un error tipográfico, pero no si el problema es un malentendido conceptual.\n", + "Si no entiendes lo que hace tu programa, puedes leerlo 100 veces y nunca ver el error, porque el error está en tu cabeza.\n", "\n", - "Running experiments can work, especially if you run small, simple tests.\n", - "But if you run experiments without thinking or reading your code, it can take a long time to figure out what's happening.\n", + "Ejecutar experimentos puede funcionar, especialmente si ejecutas tests pequeños y simples.\n", + "Pero si haces experimentos sin pensar ni leer tu código, puede llevar mucho tiempo averiguar qué está pasando.\n", "\n", - "You have to take time to think. Debugging is like an experimental science. You should have at least one hypothesis about what the problem is. If there are two or more possibilities, try to think of a test that would eliminate one of them." + "Tienes que tomarte tiempo para pensar. Depurar es como una ciencia experimental. Deberías tener al menos una hipótesis sobre cuál es el problema. Si hay dos o más posibilidades, intenta pensar en un test que elimine una de ellas." ] }, { @@ -1726,18 +1726,13 @@ "id": "a55036e1", "metadata": {}, "source": [ - "But even the best debugging techniques will fail if there are too many\n", - "errors, or if the code you are trying to fix is too big and complicated.\n", - "Sometimes the best option is to retreat, simplifying the program until\n", - "you get back to something that works.\n", + "Pero incluso las mejores técnicas de depuración fallarán si hay demasiados errores, o si el código que intentas arreglar es demasiado grande y complicado.\n", + "A veces la mejor opción es retirarse, simplificando el programa hasta volver a algo que funcione.\n", "\n", - "Beginning programmers are often reluctant to retreat because they can't\n", - "stand to delete a line of code (even if it's wrong). If it makes you\n", - "feel better, copy your program into another file before you start\n", - "stripping it down. Then you can copy the pieces back one at a time.\n", + "Los programadores principiantes a menudo se resisten a retirarse porque no soportan borrar una línea de código (aunque esté mal). Si te hace sentir mejor, copia tu programa en otro archivo antes de empezar a recortarlo. Luego puedes copiar las piezas de vuelta una por una.\n", "\n", - "Finding a hard bug requires reading, running, ruminating, retreating, and sometimes resting.\n", - "If you get stuck on one of these activities, try the others." + "Encontrar un bug difícil requiere leer, ejecutar, rumiar, retirarse y a veces descansar.\n", + "Si te atascas en una de estas actividades, prueba las otras." ] }, { @@ -1745,31 +1740,31 @@ "id": "25d091af", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**default value:**\n", - "The value assigned to a parameter if no argument is provided.\n", + "**valor por defecto:**\n", + "El valor asignado a un parámetro si no se proporciona ningún argumento.\n", "\n", "**override:**\n", - " To replace a default value with an argument.\n", + " Reemplazar un valor por defecto por un argumento.\n", "\n", - "**deterministic:**\n", - " A deterministic program does the same thing each time it runs, given the same inputs.\n", + "**determinista:**\n", + " Un programa determinista hace lo mismo cada vez que se ejecuta, dados los mismos inputs.\n", "\n", "**pseudorandom:**\n", - " A pseudorandom sequence of numbers appears to be random, but is generated by a deterministic program.\n", + " Una secuencia pseudorandom de números parece aleatoria, pero es generada por un programa determinista.\n", "\n", - "**bigram:**\n", - "A sequence of two elements, often words.\n", + "**bigrama:**\n", + "Una secuencia de dos elementos, a menudo palabras.\n", "\n", "**trigram:**\n", - "A sequence of three elements.\n", + "Una secuencia de tres elementos.\n", "\n", "**n-gram:**\n", - "A sequence of an unspecified number of elements.\n", + "Una secuencia de un número no especificado de elementos.\n", "\n", - "**rubber duck debugging:**\n", - "A way of debugging by explaining a problem aloud to an inanimate object." + "**rubber duck depuración:**\n", + "Una forma de depurar explicando un problema en voz alta a un objeto inanimado." ] }, { @@ -1777,7 +1772,7 @@ "id": "cde18229", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1800,9 +1795,9 @@ "id": "9b0efab8", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "In `add_bigram`, the `if` statement creates a new list or appends an element to an existing list, depending on whether the key is already in the dictionary." + "En `add_bigram`, la sentencia `if` crea una nueva lista o añade un elemento a una lista existente, dependiendo de si la clave ya está en el diccionario." ] }, { @@ -1826,13 +1821,13 @@ "id": "30d9e549", "metadata": {}, "source": [ - "Dictionaries provide a method called `setdefault` that we can use to do the same thing more concisely.\n", - "Ask a virtual assistant how it works, or copy `add_bigram` into a virtual assistant and ask \"Can you rewrite this using `setdefault`?\"\n", + "Diccionarios proporcionan un método llamado `setdefault` que podemos usar para hacer lo mismo de forma más concisa.\n", + "Pregunta a un asistente virtual cómo funciona, o copia `add_bigram` en un asistente virtual y pregunta \"Can you rewrite this using `setdefault`?\"\n", "\n", - "In this chapter we implemented Markov chain text analysis and generation.\n", - "If you are curious, you can ask a virtual assistant for more information on the topic.\n", - "One of the things you might learn is that virtual assistants use algorithms that are similar in many ways -- but also different in important ways.\n", - "Ask a VA, \"What are the differences between large language models like GPT and Markov chain text analysis?\"" + "En este capítulo implementamos análisis y generación de texto con cadenas de Markov.\n", + "Si tienes curiosidad, puedes pedirle a un asistente virtual más información sobre el tema.\n", + "Una de las cosas que podrías aprender es que los asistentes virtuales usan algoritmos que son similares en muchos aspectos -- pero también diferentes en aspectos importantes.\n", + "Pregunta a un VA: \"What are the differences between large language models like GPT and Markov chain text analysis?" ] }, { @@ -1840,12 +1835,12 @@ "id": "060c9ef6", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function that counts the number of times each trigram (sequence of three words) appears. \n", - "If you test your function with the text of _Dr. Jekyll and Mr. Hyde_, you should find that the most common trigram is \"said the lawyer\".\n", + "Escribe una función que cuente el número de veces que aparece cada trigram (secuencia de tres palabras). \n", + "Si pruebas tu función con el texto de _Dr. Jekyll and Mr. Hyde_, deberías encontrar que el trigram más común es \"said the lawyer\".\n", "\n", - "Hint: Write a function called `count_trigram` that is similar to `count_bigram`. Then write a function called `process_word_trigram` that is similar to `process_word_bigram`." + "Pista: escribe una función llamada `count_trigram` que sea similar a `count_bigram`. Luego escribe una función llamada `process_word_trigram` que sea similar a `process_word_bigram`." ] }, { @@ -1875,7 +1870,7 @@ "tags": [] }, "source": [ - "You can use the following loop to read the book and process the words." + "Puedes usar el siguiente bucle para leer el libro y procesar las palabras." ] }, { @@ -1903,7 +1898,7 @@ "tags": [] }, "source": [ - "Then use `print_most_common` to find the most common trigrams in the book." + "Luego usa `print_most_common` para encontrar los trigrams más comunes del libro." ] }, { @@ -1923,11 +1918,11 @@ "id": "4bd07bb7", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Now let's implement Markov chain text analysis with a mapping from each bigram to a list of possible successors.\n", + "Ahora implementemos análisis de texto con cadenas de Markov usando un mapeo de cada bigrama a una lista de posibles sucesores.\n", "\n", - "Starting with `add_bigram`, write a function called `add_trigram` that takes a list of three words and either adds or updates an item in `successor_map`, using the first two words as the key and the third word as a possible successor." + "Empezando con `add_bigram`, escribe una función llamada `add_trigram` que tome una lista de tres palabras y añada o actualice un elemento en `successor_map`, usando las dos primeras palabras como clave y la tercera palabra como posible sucesor." ] }, { @@ -1945,7 +1940,7 @@ "id": "94d683fe", "metadata": {}, "source": [ - "Here's a version of `process_word_trigram` that calls `add_trigram`." + "Aquí tienes una versión de `process_word_trigram` que llama a `add_trigram`." ] }, { @@ -1970,7 +1965,7 @@ "tags": [] }, "source": [ - "You can use the following loop to test your function with the lyrics of \"Eric, the Half a Bee\"." + "Puedes usar el siguiente bucle para probar tu función con la letra de \"Eric, the Half a Bee\"." ] }, { @@ -1997,8 +1992,8 @@ "tags": [] }, "source": [ - "If your function works as intended, the predecessor `('half', 'a')` should map to a list with the single element `'bee'`.\n", - "In fact, as it happens, each bigram in this song appear only once, so all of the values in `successor_map` have a single element." + "Si tu función funciona como se espera, el predecesor `('half', 'a')` debería asociarse con una lista cuyo único elemento es `'bee'`.\n", + "De hecho, resulta que cada bigrama de esta canción aparece solo una vez, así que todos los valores de `successor_map` tienen un único elemento." ] }, { @@ -2018,7 +2013,7 @@ "id": "886212b5", "metadata": {}, "source": [ - "You can use the following loop to test your function with the words from the book." + "Puedes usar el siguiente bucle para probar tu función con las palabras del libro." ] }, { @@ -2042,7 +2037,7 @@ "id": "3e1d073e", "metadata": {}, "source": [ - "In the next exercise, you'll use the results to generate new random text." + "En el siguiente ejercicio, usarás los resultados para generar nuevo texto aleatorio." ] }, { @@ -2050,9 +2045,9 @@ "id": "04d7a6ee", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "For this exercise, we'll assume that `successor_map` is a dictionary that maps from each bigram to the list of words that follow it." + "Para este ejercicio, asumiremos que `successor_map` es un diccionario que asocia cada bigrama con la lista de palabras que lo siguen." ] }, { @@ -2076,7 +2071,7 @@ "id": "fb0f8f7d", "metadata": {}, "source": [ - "To generate random text, we'll start by choosing a random key from `successor_map`." + "Para generar texto aleatorio, empezaremos eligiendo una clave aleatoria de `successor_map`." ] }, { @@ -2096,15 +2091,15 @@ "id": "83ed6c7e", "metadata": {}, "source": [ - "Now write a loop that generates 50 more words following these steps:\n", + "Ahora escribe un bucle que genere 50 palabras más siguiendo estos pasos:\n", "\n", - "1. In `successor_map`, look up the list of words that can follow `bigram`.\n", + "1. En `successor_map`, busca la lista de palabras que pueden seguir a `bigram`.\n", "\n", - "2. Choose one of them at random and print it.\n", + "2. Elige una de ellas al azar e imprímela.\n", "\n", - "3. For the next iteration, make a new bigram that contains the second word from `bigram` and the chosen successor.\n", + "3. Para la siguiente iteración, crea un nuevo bigrama que contenga la segunda palabra de `bigram` y el sucesor elegido.\n", "\n", - "For example, if we start with the bigram `('doubted', 'if')` and choose `'from'` as its successor, the next bigram is `('if', 'from')`." + "Por ejemplo, si empezamos con el bigrama `('doubted', 'if')` y elegimos `'from'` como sucesor, el siguiente bigrama es `('if', 'from')`." ] }, { @@ -2122,9 +2117,9 @@ "id": "c71d8a89", "metadata": {}, "source": [ - "If everything is working, you should find that the generated text is recognizably similar in style to the original, and some phrases make sense, but the text might wander from one topic to another.\n", + "Si todo funciona, deberías encontrar que el texto generado es reconociblemente similar en estilo al original, y algunas frases tienen sentido, pero el texto podría saltar de un tema a otro.\n", "\n", - "As a bonus exercise, modify your solution to the last two exercises to use trigrams as keys in `successor_map`, and see what effect it has on the results." + "Como ejercicio extra, modifica tu solución a los dos últimos ejercicios para usar trigrams como claves en `successor_map`, y mira qué efecto tiene en los resultados." ] }, { @@ -2146,7 +2141,9 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", + "\n", + "Código license: [MIT License](https://mit-license.org/)\n", "\n", "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] diff --git a/chapters/chap13.ipynb b/chapters/chap13.ipynb index fe8f516..0d594ab 100644 --- a/chapters/chap13.ipynb +++ b/chapters/chap13.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -43,8 +43,8 @@ "tags": [] }, "source": [ - "Credit: Photos downloaded from [Lorem Picsum](https://picsum.photos/), a service that provides placeholder images.\n", - "The name is a reference to \"lorem ipsum\", which is a name for placeholder text.\n" + "Crédito: las fotos se descargaron de [Lorem Picsum](https://picsum.photos/), un servicio que proporciona imágenes de marcador de posición.\n", + "El nombre es una referencia a \"lorem ipsum\", que es un nombre para texto de marcador de posición.\n" ] }, { @@ -94,19 +94,19 @@ "id": "92934cb0", "metadata": {}, "source": [ - "# Files and Databases\n", + "# Archivos y bases de datos\n", "\n", - "Most of the programs we have seen so far are **ephemeral** in the sense that they run for a short time and produce output, but when they end, their data disappears.\n", - "Each time you run an ephemeral program, it starts with a clean slate.\n", + "La mayoría de los programas que hemos visto hasta ahora son **efímeros** en el sentido de que se ejecutan durante poco tiempo y producen output, pero cuando terminan, sus datos desaparecen.\n", + "Cada vez que ejecutas un programa efímero, empieza desde cero.\n", "\n", - "Other programs are **persistent**: they run for a long time (or all the time); they keep at least some of their data in long-term storage; and if they shut down and restart, they pick up where they left off.\n", + "Otros programas son **persistentes**: se ejecutan durante mucho tiempo (o todo el tiempo); mantienen al menos parte de sus datos en almacenamiento a largo plazo; y, si se cierran y se reinician, continúan donde lo dejaron.\n", "\n", - "A simple way for programs to maintain their data is by reading and writing text files.\n", - "A more versatile alternative is to store data in a database.\n", - "Databases are specialized files that can be read and written more efficiently than text files, and they provide additional capabilities.\n", + "Una forma sencilla de que los programas mantengan sus datos es leer y escribir archivos de texto.\n", + "Una alternativa más versátil es almacenar datos en una base de datos.\n", + "Las bases de datos son archivos especializados que se pueden leer y escribir de forma más eficiente que los archivos de texto, y proporcionan capacidades adicionales.\n", "\n", - "In this chapter, we'll write programs that read and write text files and databases, and as an exercise you'll write a program that searches a collection of photos for duplicates.\n", - "But before you can work with a file, you have to find it, so we'll start with file names, paths, and directories." + "En este capítulo escribiremos programas que leen y escriben archivos de texto y bases de datos, y como ejercicio escribirás un programa que busca duplicados en una colección de fotos.\n", + "Pero antes de poder trabajar con un archivo, tienes que encontrarlo, así que empezaremos con nombres de archivo, rutas y directorios." ] }, { @@ -114,14 +114,14 @@ "id": "75cec7ca", "metadata": {}, "source": [ - "## Filenames and paths\n", + "## Nombres de archivo y rutas\n", "\n", - "Files are organized into **directories**, also called \"folders\".\n", - "Every running program has a **current working directory**, which is the default directory for most operations.\n", - "For example, when you open a file, Python looks for it in the current working directory.\n", + "Los archivos se organizan en **directorios**, también llamados \"carpetas\".\n", + "Todo programa en ejecución tiene un **directorio de trabajo actual**, que es el directorio por defecto para la mayoría de operaciones.\n", + "Por ejemplo, cuando abres un archivo, Python lo busca en el directorio de trabajo actual.\n", "\n", - "The `os` module provides functions for working with files and directories (\"os\" stands for \"operating system\"). \n", - "It provides a function called `getcwd` that gets the name of the current working directory." + "El módulo `os` proporciona funciones para trabajar con archivos y directorios (\"os\" significa \"operating system\"). \n", + "Proporciona una función llamada `getcwd` que obtiene el nombre del directorio de trabajo actual." ] }, { @@ -160,14 +160,14 @@ "id": "6c55575f", "metadata": {}, "source": [ - "The result in this example is the home directory of a user named `dinsdale`.\n", - "A string like `'/home/dinsdale'` that identifies a file or directory is called a **path**.\n", + "El resultado en este ejemplo es el directorio personal de un usuario llamado `dinsdale`.\n", + "Una string como `'/home/dinsdale'` que identifica un archivo o directorio se llama **ruta**.\n", "\n", - "A simple filename like `'memo.txt'` is also considered a path, but it is a **relative path** because it specifies a file name relative to the current directory.\n", - "In this example, the current directory is `/home/dinsdale`, so `'memo.txt'` is equivalent to the complete path `'/home/dinsdale/memo.txt'`.\n", + "Un nombre de archivo sencillo como `'memo.txt'` también se considera una ruta, pero es un **ruta relativa** porque especifica un nombre de archivo relativo al directorio actual.\n", + "En este ejemplo, el directorio actual es `/home/dinsdale`, así que `'memo.txt'` equivale a la ruta completa `'/home/dinsdale/memo.txt'`.\n", "\n", - "A path that begins with `/` does not depend on the current directory -- it is called an **absolute path**. \n", - "To find the absolute path to a file, you can use `abspath`." + "Un ruta que empieza con `/` no depende del directorio actual -- se llama **ruta absoluta**. \n", + "Para encontrar la ruta absoluta de un archivo, puedes usar `abspath`." ] }, { @@ -185,9 +185,9 @@ "id": "f1a0cf04", "metadata": {}, "source": [ - "The `os` module provides other functions for working with filenames and paths.\n", - "`listdir` returns a list of the contents of the given directory, including files and other directories.\n", - "Here's an example that lists the contents of a directory named `photos`." + "El módulo `os` proporciona otras funciones para trabajar con nombres de archivo y rutas.\n", + "`listdir` devuelve una lista con el contenido del directorio indicado, incluyendo archivos y otros directorios.\n", + "Aquí tienes un ejemplo que lista el contenido de un directorio llamado `photos`." ] }, { @@ -205,8 +205,8 @@ "id": "ab160f29", "metadata": {}, "source": [ - "This directory contains a text file named `notes.txt` and three directories.\n", - "The directories contain image files in the JPEG format." + "Este directorio contiene un archivo de texto llamado `notes.txt` y tres directorios.\n", + "Los directorios contienen archivos de imagen en formato JPEG." ] }, { @@ -224,7 +224,7 @@ "id": "06b27c85", "metadata": {}, "source": [ - "To check whether a file or directory exists, we can use `os.path.exists`." + "Para comprobar si existe un archivo o directorio, podemos usar `os.path.exists`." ] }, { @@ -252,7 +252,7 @@ "id": "d41f235c", "metadata": {}, "source": [ - "To check whether a path refers to a file or directory, we can use `isdir`, which return `True` if a path refers to a directory." + "Para comprobar si una ruta se refiere a un archivo o a un directorio, podemos usar `isdir`, que devuelve `True` si una ruta se refiere a un directorio." ] }, { @@ -270,7 +270,7 @@ "id": "4bd70cc9", "metadata": {}, "source": [ - "And `isfile` which returns `True` if a path refers to a file." + "Y `isfile`, que devuelve `True` si una ruta se refiere a un archivo." ] }, { @@ -288,12 +288,12 @@ "id": "c6933c18", "metadata": {}, "source": [ - "One challenge of working with paths is that they look different on different operating systems.\n", - "On macOS and UNIX systems like Linux, the directory and file names in a path are separated by a forward slash, `/`.\n", - "Windows uses a backward slash, `\\`.\n", - "So, if you you run these examples on Windows, you will see backward slashes in the paths, and you'll have to replace the forward slashes in the examples.\n", + "Un desafío al trabajar con rutas es que se ven distintos en diferentes sistemas operativos.\n", + "En macOS y sistemas UNIX como Linux, los nombres de directorios y archivos en una ruta se separan con una barra inclinada, `/`.\n", + "Windows usa una barra invertida, `\\`.\n", + "Así que, si ejecutas estos ejemplos en Windows, verás barras invertidas en los rutas y tendrás que reemplazar las barras inclinadas de los ejemplos.\n", "\n", - "Or, to write code that works on both systems, you can use `os.path.join`, which joins directory and filenames into a path using a forward or backward slash, depending on which operating system you are using." + "O, para escribir código que funcione en ambos sistemas, puedes usar `os.path.join`, que une nombres de directorio y de archivo en una ruta usando una barra inclinada o invertida, según el sistema operativo que estés usando." ] }, { @@ -311,7 +311,7 @@ "id": "0a665cf9", "metadata": {}, "source": [ - "Later in this chapter we'll use these functions to search a set of directories and find all of the image files." + "Más adelante en este capítulo usaremos estas funciones para buscar en un conjunto de directorios y encontrar todos los archivos de imagen." ] }, { @@ -321,10 +321,10 @@ "source": [ "## f-strings\n", "\n", - "One way for programs to store data is to write it to a text file.\n", - "For example, suppose you are a camel spotter, and you want to record the number of camels you have seen during a period of observation.\n", - "And suppose that in one and a half years, you have spotted `23` camels.\n", - "The data in your camel-spotting book might look like this." + "Una forma en que los programas almacenan datos es escribirlos en un archivo de texto.\n", + "Por ejemplo, supón que observas camellos y quieres registrar el número de camellos que has visto durante un periodo de observación.\n", + "Y supón que en un año y medio has visto `23` camellos.\n", + "Los datos de tu cuaderno de observación de camellos podrían verse así." ] }, { @@ -343,11 +343,11 @@ "id": "f652aaac", "metadata": {}, "source": [ - "To write this data to a file, you can use the `write` method, which we saw in Chapter 8.\n", - "The argument of `write` has to be a string, so if we want to put other values in a file, we have to convert them to strings.\n", - "The easiest way to do that is with the built-in function `str`.\n", + "Para escribir estos datos en un archivo, puedes usar el método `write`, que vimos en el Capítulo 8.\n", + "El argumento de `write` tiene que ser una string, así que si queremos poner otros valores en un archivo, tenemos que convertirlos a strings.\n", + "La forma más sencilla de hacerlo es con la función integrada `str`.\n", "\n", - "Here's what that looks like:" + "Así es como se ve:" ] }, { @@ -368,8 +368,8 @@ "id": "307c22d2", "metadata": {}, "source": [ - "That works, but `write` doesn't add a space or newline unless you include it explicitly.\n", - "If we read back the file, we see that the two numbers are run together." + "Eso funciona, pero `write` no añade un espacio ni una nueva línea a menos que lo incluyas explícitamente.\n", + "Si volvemos a leer el archivo, vemos que los dos números quedan pegados." ] }, { @@ -387,11 +387,11 @@ "id": "8008ecdc", "metadata": {}, "source": [ - "At the very least, we should add whitespace between the numbers.\n", - "And while we're at it, let's add some explanatory text.\n", + "Como mínimo, deberíamos añadir espacios en blanco entre los números.\n", + "Y ya que estamos, añadamos algo de texto explicativo.\n", "\n", - "To write a combination of strings and other values, we can use an **f-string**, which is a string that has the letter `f` before the opening quotation mark, and contains one or more Python expressions in curly braces.\n", - "The following f-string contains one expression, which is a variable name." + "Para escribir una combinación de strings y otros valores, podemos usar una **f-string**, que es una string que tiene la letra `f` antes de la comilla de apertura y contiene una o más expresiones de Python entre llaves.\n", + "La siguiente f-string contiene una expresión, que es el nombre de una variable." ] }, { @@ -409,8 +409,8 @@ "id": "a3fb0556", "metadata": {}, "source": [ - "The result is a string where the expression has been evaluated and replaced with the result.\n", - "There can be more than one expression." + "El resultado es una string donde la expresión se ha evaluado y se ha reemplazado por el resultado.\n", + "Puede haber más de una expresión." ] }, { @@ -428,7 +428,7 @@ "id": "bace1539", "metadata": {}, "source": [ - "And the expressions can contain operators and function calls." + "Y las expresiones pueden contener operadores y llamadas a función." ] }, { @@ -447,7 +447,7 @@ "id": "bc6fa094", "metadata": {}, "source": [ - "So we could write the data to a text file like this." + "Así que podríamos escribir los datos en un archivo de texto así." ] }, { @@ -468,9 +468,9 @@ "id": "f916d561", "metadata": {}, "source": [ - "Both f-strings end with the sequence `\\n`, which adds a newline character.\n", + "Ambas f-strings terminan con la secuencia `\\n`, que añade un carácter de nueva línea.\n", "\n", - "We can read the file back like this:" + "Podemos volver a leer el archivo así:" ] }, { @@ -489,7 +489,7 @@ "id": "c3bf6913", "metadata": {}, "source": [ - "In an f-string, an expression in curly brace is converted to a string, so you can include lists, dictionaries, and other types." + "En una f-string, una expresión entre llaves se convierte en una string, así que puedes incluir listas, diccionarios y otros tipos." ] }, { @@ -511,7 +511,7 @@ "tags": [] }, "source": [ - "If a f-string contains an invalid expression, the result is an error." + "Si una f-string contiene una expresión no válida, el resultado es un error." ] }, { @@ -535,11 +535,11 @@ "source": [ "## YAML\n", "\n", - "One of the reasons programs read and write files is to store **configuration data**, which is information that specifies what the program should do and how.\n", + "Una de las razones por las que los programas leen y escriben archivos es para almacenar **datos de configuración**, que son información que especifica qué debe hacer el programa y cómo.\n", "\n", - "For example, in a program that searches for duplicate photos, we might have a dictionary called `config` that contains the name of the directory to search, the name of another directory where it should store the results, and a list of file extensions it should use to identify image files.\n", + "Por ejemplo, en un programa que busca fotos duplicadas, podríamos tener un diccionario llamado `config` que contiene el nombre del directorio donde buscar, el nombre de otro directorio donde debería almacenar los resultados y una lista de extensiones de archivo que debería usar para identificar archivos de imagen.\n", "\n", - "Here's what it might look like:" + "Así podría verse:" ] }, { @@ -561,11 +561,11 @@ "id": "1667bb96", "metadata": {}, "source": [ - "To write this data in a text file, we could use f-strings, as in the previous section. But it is easier to use a module called `yaml` that is designed for just this sort of thing.\n", + "Para escribir estos datos en un archivo de texto, podríamos usar f-strings, como en la sección anterior. Pero es más fácil usar un módulo llamado `yaml` que está diseñado justo para este tipo de cosas.\n", "\n", - "The `yaml` module provides functions to work with YAML files, which are text files formatted to be easy for humans *and* programs to read and write.\n", + "El módulo `yaml` proporciona funciones para trabajar con archivos YAML, que son archivos de texto con un formato pensado para que sean fáciles de leer y escribir tanto para humanos *como* para programas.\n", "\n", - "Here's an example that uses the `dump` function to write the `config` dictionary to a YAML file. " + "Aquí tienes un ejemplo que usa la función `dump` para escribir el diccionario `config` en un archivo YAML. " ] }, { @@ -605,7 +605,7 @@ "id": "92d1b7ff", "metadata": {}, "source": [ - "If we read back the contents of the file, we can see what the YAML format looks like." + "Si volvemos a leer el contenido del archivo, podemos ver cómo es el formato YAML." ] }, { @@ -624,7 +624,7 @@ "id": "33cdfd2c", "metadata": {}, "source": [ - "Now, we can use `safe_load` to read back the YAML file." + "Ahora podemos usar `safe_load` para volver a leer el archivo YAML." ] }, { @@ -644,7 +644,7 @@ "id": "ca55764f", "metadata": {}, "source": [ - "The result is new dictionary that contains the same information as the original, but it is not the same dictionary." + "El resultado es un nuevo diccionario que contiene la misma información que el original, pero no es el mismo diccionario." ] }, { @@ -662,9 +662,9 @@ "id": "969ad306", "metadata": {}, "source": [ - "Converting an object like a dictionary to a string is called **serialization**.\n", - "Converting the string back to an object is called **deserialization**.\n", - "If you serialize and then deserialize an object, the result should be equivalent to the original." + "Convertir un objeto como un diccionario en una string se llama **serialización**.\n", + "Convertir la string de vuelta en un objeto se llama **deserialización**.\n", + "Si serializas y luego deserializas un objeto, el resultado debería ser equivalente al original." ] }, { @@ -674,14 +674,14 @@ "source": [ "## Shelve\n", "\n", - "So far we've been reading and writing text files -- now let's consider databases.\n", - "A **database** is a file that is organized for storing data.\n", - "Some databases are organized like a table with rows and columns of information.\n", - "Others are organized like a dictionary that maps from keys to values; they are sometimes called **key-value stores**.\n", + "Hasta ahora hemos estado leyendo y escribiendo archivos de texto -- ahora consideremos las bases de datos.\n", + "Una **base de datos** es un archivo organizado para almacenar datos.\n", + "Algunas bases de datos se organizan como una tabla con filas y columnas de información.\n", + "Otras se organizan como un diccionario que mapea claves a valores; a veces se llaman **almacenes clave-valor**.\n", "\n", - "The `shelve` module provides functions for creating and updating a key-value store called a \"shelf\".\n", - "As an example, we'll create a shelf to contain captions for the figures in the `photos` directory.\n", - "We'll use the `config` dictionary to get the name of the directory where we should put the shelf." + "El módulo `shelve` proporciona funciones para crear y actualizar un almacén clave-valor llamado \"shelf\".\n", + "Como ejemplo, crearemos un shelf para contener captions de las figuras del directorio `photos`.\n", + "Usaremos el diccionario `config` para obtener el nombre del directorio donde deberíamos poner el shelf." ] }, { @@ -699,7 +699,7 @@ "id": "3e6cfb65", "metadata": {}, "source": [ - "We can use `os.makedirs` to create this directory, if it doesn't already exist." + "Podemos usar `os.makedirs` para crear este directorio, si todavía no existe." ] }, { @@ -717,7 +717,7 @@ "id": "6352f83f", "metadata": {}, "source": [ - "And `os.path.join` to make a path that includes the name of the directory and the name of the shelf file, `captions`." + "Y `os.path.join` para crear una ruta que incluya el nombre del directorio y el nombre del archivo del shelf, `captions`." ] }, { @@ -736,8 +736,8 @@ "id": "cbb08679", "metadata": {}, "source": [ - "Now we can use `shelve.open` to open the shelf file.\n", - "The argument `c` indicates that the file should be created if necessary." + "Ahora podemos usar `shelve.open` para abrir el archivo del shelf.\n", + "El argumento `c` indica que el archivo debería crearse si es necesario." ] }, { @@ -760,9 +760,9 @@ "tags": [] }, "source": [ - "If you get an error like `db type could not be determined`, the most likely cause is that a file with the same name already exists but is not a valid shelve database (for example, it may be corrupted or created by something else).\n", + "Si obtienes un error como `db type could not be determined`, la causa más probable es que ya exista un archivo con el mismo nombre, pero que no sea una base de datos shelve válida (por ejemplo, puede estar corrupto o haber sido creado por otra cosa).\n", "\n", - "In that case, the simplest solution is to delete the existing file and run the code again so that `shelve.open` can create a new database." + "En ese caso, la solución más sencilla es eliminar el archivo existente y volver a ejecutar el código para que `shelve.open` pueda crear una base de datos nueva." ] }, { @@ -770,10 +770,10 @@ "id": "0e4a2fb3", "metadata": {}, "source": [ - "The return value is officially a `DbfilenameShelf` object, more casually called a shelf object.\n", + "El valor de retorno es oficialmente un objeto `DbfilenameShelf`, llamado de manera más informal un objeto shelf.\n", "\n", - "The shelf object behaves in many ways like a dictionary.\n", - "For example, we can use the bracket operator to add an item, which is a mapping from a key to a value." + "El objeto shelf se comporta de muchas maneras como un diccionario.\n", + "Por ejemplo, podemos usar el operador de corchetes para añadir un elemento, que es un mapeo de una clave a un valor." ] }, { @@ -792,9 +792,9 @@ "id": "36fd5e3a", "metadata": {}, "source": [ - "In this example, the key is the path to an image file and the value is a string that describes the image.\n", + "En este ejemplo, la clave es la ruta a un archivo de imagen y el valor es una string que describe la imagen.\n", "\n", - "We also use the bracket operator to look up a key and get the corresponding value." + "También usamos el operador de corchetes para buscar una clave y obtener el valor correspondiente." ] }, { @@ -813,7 +813,7 @@ "id": "e9b252a7", "metadata": {}, "source": [ - "If you make another assignment to an existing key, `shelve` replaces the old value." + "Si haces otra asignación a una clave existente, `shelve` reemplaza el valor anterior." ] }, { @@ -832,7 +832,7 @@ "id": "003eacbc", "metadata": {}, "source": [ - "Some dictionary methods, like `keys`, `values` and `items`, also work with shelf objects." + "Algunos métodos de diccionario, como `keys`, `values` e `items`, también funcionan con objetos shelf." ] }, { @@ -860,7 +860,7 @@ "id": "056e0bd9", "metadata": {}, "source": [ - "We can use the `in` operator to check whether a key appears in the shelf." + "Podemos usar el operador `in` para comprobar si una clave aparece en el shelf." ] }, { @@ -878,7 +878,7 @@ "id": "982740b4", "metadata": {}, "source": [ - "And we can use a `for` statement to loop through the keys." + "Y podemos usar una sentencia `for` para iterar sobre las claves." ] }, { @@ -897,7 +897,7 @@ "id": "b67a0ddc", "metadata": {}, "source": [ - "As with other files, you should close the database when you are done." + "Como con otros archivos, deberías cerrar la base de datos cuando termines." ] }, { @@ -915,7 +915,7 @@ "id": "a1e08b41", "metadata": {}, "source": [ - "Now if we list the contents of the data directory, we see two files." + "Ahora, si listamos el contenido del directorio de datos, vemos dos archivos." ] }, { @@ -949,9 +949,9 @@ "id": "97453006", "metadata": {}, "source": [ - "`captions.dat` contains the data we just stored.\n", - "`captions.dir` contains information about the organization of the database that makes it more efficient to access.\n", - "The suffix `dir` stands for \"directory\", but it has nothing to do with the directories we've been working with that contain files." + "`captions.dat` contiene los datos que acabamos de almacenar.\n", + "`captions.dir` contiene información sobre la organización de la base de datos que hace que el acceso sea más eficiente.\n", + "El sufijo `dir` significa \"directorio\", pero no tiene nada que ver con los directorios con los que hemos estado trabajando y que contienen archivos." ] }, { @@ -961,17 +961,17 @@ "tags": [] }, "source": [ - "## Storing data structures\n", + "## Almacenar estructuras de datos\n", "\n", - "In the previous example, the keys and values in the shelf are strings.\n", - "But we can also use a shelf to contain data structures like lists and dictionaries.\n", + "En el ejemplo anterior, las claves y valores del shelf son strings.\n", + "Pero también podemos usar un shelf para contener estructuras de datos como listas y diccionarios.\n", "\n", - "As an example, let's revisit the anagram example from an exercise in [Chapter 11](section_exercise_11).\n", - "Recall that we made a dictionary that maps from a sorted string of letters to the\n", - "list of words that can be spelled with those letters.\n", - "For example, the key `'opst'` maps to the list `['opts', 'post', 'pots', 'spot', 'stop', 'tops']`.\n", + "Como ejemplo, volvamos al ejemplo de anagramas de un ejercicio en el [Capítulo 11](section_exercise_11).\n", + "Recuerda que hicimos un diccionario que mapea una string ordenada de letras a la\n", + "lista de palabras que se pueden formar con esas letras.\n", + "Por ejemplo, la clave `'opst'` mapea a la lista `['opts', 'post', 'pots', 'spot', 'stop', 'tops']`.\n", "\n", - "We'll use the following function to sort the letters in a word." + "Usaremos la siguiente función para ordenar las letras de una palabra." ] }, { @@ -990,7 +990,7 @@ "id": "8c24316c", "metadata": {}, "source": [ - "And here's an example." + "Y aquí tienes un ejemplo." ] }, { @@ -1010,8 +1010,8 @@ "id": "7c5d7555", "metadata": {}, "source": [ - "Now let's open a shelf called `anagram_map`.\n", - "The argument `'n'` means we should always create a new, empty shelf, even if one already exists." + "Ahora abramos un shelf llamado `anagram_map`.\n", + "El argumento `'n'` significa que siempre deberíamos crear un shelf nuevo y vacío, aunque ya exista uno." ] }, { @@ -1029,7 +1029,7 @@ "id": "6b495e79", "metadata": {}, "source": [ - "Now we can add an item to the shelf like this." + "Ahora podemos añadir un elemento al shelf así." ] }, { @@ -1048,9 +1048,9 @@ "id": "f058dff1", "metadata": {}, "source": [ - "In this item, the key is a string and the value is a list of strings.\n", + "En este elemento, la clave es una string y el valor es una lista de strings.\n", "\n", - "Now suppose we find another word that contains the same letters, like `tops`" + "Ahora supón que encontramos otra palabra que contiene las mismas letras, como `tops`" ] }, { @@ -1070,8 +1070,8 @@ "id": "a215367d", "metadata": {}, "source": [ - "The key is the same as in the previous example, so we want to append a second word to the same list of strings.\n", - "Here's how we would do it if `db` were a dictionary." + "La clave es la misma que en el ejemplo anterior, así que queremos añadir una segunda palabra a la misma lista de strings.\n", + "Así es como lo haríamos si `db` fuera un diccionario." ] }, { @@ -1089,7 +1089,7 @@ "id": "e1a83f39", "metadata": {}, "source": [ - "But if we run that and then look up the key in the shelf, it looks like it has not been updated." + "Pero si lo ejecutamos y luego buscamos la clave en el shelf, parece que no se ha actualizado." ] }, { @@ -1107,8 +1107,8 @@ "id": "32a56de9", "metadata": {}, "source": [ - "Here's the problem: when we look up the key, we get a list of strings, but if we modify the list of strings, it does not affect the shelf.\n", - "If we want to update the shelf, we have to read the old value, update it, and then write the new value back to the shelf." + "Este es el problema: cuando buscamos la clave, obtenemos una lista de strings, pero si modificamos la lista de strings, eso no afecta al shelf.\n", + "Si queremos actualizar el shelf, tenemos que leer el valor antiguo, actualizarlo y luego escribir el nuevo valor de vuelta en el shelf." ] }, { @@ -1128,7 +1128,7 @@ "id": "a054f537", "metadata": {}, "source": [ - "Now the value in the shelf is updated." + "Ahora el valor del shelf está actualizado." ] }, { @@ -1146,7 +1146,7 @@ "id": "ca02c0d7", "metadata": {}, "source": [ - "As an exercise, you can finish this example by reading the word list and storing all of the anagrams in a shelf." + "Como ejercicio, puedes terminar este ejemplo leyendo la lista de palabras y almacenando todos los anagramas en un shelf." ] }, { @@ -1168,15 +1168,15 @@ "tags": [] }, "source": [ - "## Checking for equivalent files\n", + "## Comprobar archivos equivalentes\n", "\n", - "Now let's get back to the goal of this chapter: searching for different files that contain the same data.\n", - "One way to check is to read the contents of both files and compare.\n", + "Ahora volvamos al objetivo de este capítulo: buscar archivos diferentes que contienen los mismos datos.\n", + "Una forma de comprobarlo es leer el contenido de ambos archivos y compararlo.\n", "\n", - "If the files contain images, we have to open them with mode `'rb'`, where `'r'` means we want to read the contents and `'b'` indicates **binary mode**.\n", - "In binary mode, the contents are not interpreted as text -- they are treated as a sequence of bytes.\n", + "Si los archivos contienen imágenes, tenemos que abrirlos con el modo `'rb'`, donde `'r'` significa que queremos leer el contenido y `'b'` indica **modo binario**.\n", + "En modo binario, el contenido no se interpreta como texto -- se trata como una secuencia de bytes.\n", "\n", - "Here's an example that opens and reads an image file." + "Aquí tienes un ejemplo que abre y lee un archivo de imagen." ] }, { @@ -1196,10 +1196,10 @@ "id": "36687da2", "metadata": {}, "source": [ - "The result from `read` is a `bytes` object -- as the name suggests, it contains a sequence of bytes.\n", + "El resultado de `read` es un objeto `bytes` -- como sugiere el nombre, contiene una secuencia de bytes.\n", "\n", - "In general the contents of an image file and not human-readable.\n", - "But if we read the contents from a second file, we can use the `==` operator to compare." + "En general, el contenido de un archivo de imagen no es legible para humanos.\n", + "Pero si leemos el contenido de un segundo archivo, podemos usar el operador `==` para comparar." ] }, { @@ -1219,9 +1219,9 @@ "id": "36006cd4", "metadata": {}, "source": [ - "These two files are not equivalent.\n", + "Estos dos archivos no son equivalentes.\n", "\n", - "Let's encapsulate what we have so far in a function." + "Encapsulemos lo que tenemos hasta ahora en una función." ] }, { @@ -1242,16 +1242,16 @@ "id": "b4e08850", "metadata": {}, "source": [ - "If we have only two files, this function is a good option.\n", - "But suppose we have a large number of files and we want to know whether any two of them contain the same data.\n", - "It would be inefficient to compare every pair of files.\n", + "Si solo tenemos dos archivos, esta función es una buena opción.\n", + "Pero supón que tenemos un gran número de archivos y queremos saber si dos cualesquiera contienen los mismos datos.\n", + "Sería ineficiente comparar cada par de archivos.\n", "\n", - "An alternative is to use a **hash function**, which takes the contents of a file and computes a **digest**, which is usually a large integer.\n", - "If two files contain the same data, they will have the same digest.\n", - "If two files differ, they will *almost always* have different digests.\n", + "Una alternativa es usar una **función hash**, que toma el contenido de un archivo y calcula un **digest**, que normalmente es un entero grande.\n", + "Si dos archivos contienen los mismos datos, tendrán el mismo digest.\n", + "Si dos archivos son diferentes, *casi siempre* tendrán digests diferentes.\n", "\n", - "The `hashlib` module provides several hash functions -- the one we'll use is called `md5`.\n", - "We'll start by using `hashlib.md5` to create a `HASH` object." + "El módulo `hashlib` proporciona varias hash funciones -- la que usaremos se llama `md5`.\n", + "Empezaremos usando `hashlib.md5` para crear un objeto `HASH`." ] }, { @@ -1272,7 +1272,7 @@ "id": "a8e480f0", "metadata": {}, "source": [ - "The `HASH` object provides an `update` method that takes the contents of the file as an argument." + "El objeto `HASH` proporciona un método `update` que toma el contenido del archivo como argumento." ] }, { @@ -1290,7 +1290,7 @@ "id": "86bd6bc0", "metadata": {}, "source": [ - "Now we can use `hexdigest` to get the digest as a string of hexadecimal digits that represent an integer in base 16." + "Ahora podemos usar `hexdigest` para obtener el digest como una string de dígitos hexadecimales que representan un entero en base 16." ] }, { @@ -1309,7 +1309,7 @@ "id": "b9b4b347", "metadata": {}, "source": [ - "The following function encapsulates these steps." + "La siguiente función encapsula estos pasos." ] }, { @@ -1332,7 +1332,7 @@ "id": "914b85b2", "metadata": {}, "source": [ - "If we hash the contents of a different file, we can confirm that we get a different digest." + "Si hacemos hash del contenido de un archivo diferente, podemos confirmar que obtenemos un digest distinto." ] }, { @@ -1351,8 +1351,8 @@ "id": "deeabdde", "metadata": {}, "source": [ - "Now we have almost everything we need to find equivalent files.\n", - "The last step is to search a directory and find all of the images files." + "Ahora tenemos casi todo lo que necesitamos para encontrar archivos equivalentes.\n", + "El último paso es buscar en un directorio y encontrar todos los archivos de imagen." ] }, { @@ -1362,12 +1362,12 @@ "tags": [] }, "source": [ - "## Walking directories\n", + "## Recorrer directorios\n", "\n", - "The following function takes as an argument the directory we want to search.\n", - "It uses `listdir` to loop through the contents of the directory.\n", - "When it finds a file, it prints its complete path.\n", - "When it finds a directory, it calls itself recursively to search the subdirectory." + "La siguiente función toma como argumento el directorio donde queremos buscar.\n", + "Usa `listdir` para iterar sobre el contenido del directorio.\n", + "Cuando encuentra un archivo, imprime su ruta completa.\n", + "Cuando encuentra un directorio, se llama a sí misma recursivamente para buscar en el subdirectorio." ] }, { @@ -1392,7 +1392,7 @@ "id": "faaf5b25", "metadata": {}, "source": [ - "We can use it like this:" + "Podemos usarla así:" ] }, { @@ -1410,7 +1410,7 @@ "id": "897c66bf", "metadata": {}, "source": [ - "The order of the results depends on details of the operating system." + "El orden de los resultados depende de detalles del sistema operativo." ] }, { @@ -1418,12 +1418,12 @@ "id": "c7853f18", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "When you are reading and writing files, you might run into problems with whitespace.\n", - "These errors can be hard to debug because whitespace characters are normally invisible.\n", - "For example, here's a string that contains spaces, a tab represented by the sequence `\\t`, and a newline represented by the sequence `\\n`.\n", - "When we print it, we don't see the whitespace characters." + "Cuando lees y escribes archivos, puedes encontrarte con problemas relacionados con espacios en blanco.\n", + "Estos errores pueden ser difíciles de depurar porque los caracteres de espacio en blanco normalmente son invisibles.\n", + "Por ejemplo, aquí tienes una string que contiene espacios, un tab representado por la secuencia `\\t` y una nueva línea representada por la secuencia `\\n`.\n", + "Cuando la imprimimos, no vemos los caracteres de espacio en blanco." ] }, { @@ -1442,8 +1442,8 @@ "id": "49bbebe6", "metadata": {}, "source": [ - "The built-in function `repr` can help. It takes any object as an argument and returns a string representation of the object.\n", - "For strings, it represents whitespace characters with backslash sequences." + "La función integrada `repr` puede ayudar. Toma cualquier objeto como argumento y devuelve una representación en string del objeto.\n", + "Para strings, representa los caracteres de espacio en blanco con secuencias de barra invertida." ] }, { @@ -1461,15 +1461,15 @@ "id": "790cf8dd", "metadata": {}, "source": [ - "This can be helpful for debugging.\n", + "Esto puede ser útil para depurar.\n", "\n", - "One other problem you might run into is that different systems use different characters to indicate the end of a line. Some systems use a newline, represented `\\n`. Others use a return character, represented `\\r`. \n", - "Some use both. If you move files between different systems, these\n", - "inconsistencies can cause problems.\n", + "Otro problema que puedes encontrar es que distintos sistemas usan distintos caracteres para indicar el final de una línea. Algunos sistemas usan una nueva línea, representada como `\\n`. Otros usan un carácter de retorno, representado como `\\r`. \n", + "Algunos usan ambos. Si mueves archivos entre sistemas diferentes, estas\n", + "inconsistencias pueden causar problemas.\n", "\n", - "File name capitalization is another issue you might encounter if you work with different operating systems.\n", - "In macOS and UNIX, file names can contain lowercase and uppercase letters, digits, and most symbols.\n", - "But many Windows applications ignore the difference between lowercase and uppercase letters, and several symbols that are allowed in macOS and UNIX are not allowed in Windows." + "La capitalización de los nombres de archivo es otro problema que puedes encontrar si trabajas con distintos sistemas operativos.\n", + "En macOS y UNIX, los nombres de archivo pueden contener letras minúsculas y mayúsculas, dígitos y la mayoría de símbolos.\n", + "Pero muchas aplicaciones de Windows ignoran la diferencia entre letras minúsculas y mayúsculas, y varios símbolos que se permiten en macOS y UNIX no se permiten en Windows." ] }, { @@ -1477,55 +1477,55 @@ "id": "cf063639", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**ephemeral:**\n", - "An ephemeral program typically runs for a short time and, when it ends, its data are lost.\n", + "**efímero:**\n", + "Un programa efímero normalmente se ejecuta durante poco tiempo y, cuando termina, sus datos se pierden.\n", "\n", - "**persistent:**\n", - " A persistent program runs indefinitely and keeps at least some of its data in permanent storage.\n", + "**persistente:**\n", + " Un programa persistente se ejecuta indefinidamente y mantiene al menos parte de sus datos en almacenamiento permanente.\n", "\n", - "**directory:**\n", - "A collection of files and other directories.\n", + "**directorio:**\n", + "Una colección de archivos y otros directorios.\n", "\n", - "**current working directory:**\n", - "The default directory used by a program unless another directory is specified.\n", + "**directorio de trabajo actual:**\n", + "El directorio por defecto usado por un programa a menos que se especifique otro directorio.\n", "\n", - "**path:**\n", - " A string that specifies a sequence of directories, often leading to a file.\n", + "**ruta:**\n", + " Una string que especifica una secuencia de directorios, que a menudo conduce a un archivo.\n", "\n", - "**relative path:**\n", - "A path that starts from the current working directory, or some other specified directory.\n", + "**ruta relativa:**\n", + "Un ruta que empieza desde el directorio de trabajo actual, o desde algún otro directorio especificado.\n", "\n", - "**absolute path:**\n", - "A path that does not depend on the current directory.\n", + "**ruta absoluta:**\n", + "Un ruta que no depende del directorio actual.\n", "\n", "**f-string:**\n", - "A string that has the letter `f` before the opening quotation mark, and contains one or more expressions in curly braces.\n", + "Una string que tiene la letra `f` antes de la comilla de apertura y contiene una o más expresiones entre llaves.\n", "\n", - "**configuration data:**\n", - "Data, often stored in a file, that specifies what a program should do and how.\n", + "**datos de configuración:**\n", + "Datos, a menudo almacenados en un archivo, que especifican qué debe hacer un programa y cómo.\n", "\n", - "**serialization:**\n", - "Converting an object to a string.\n", + "**serialización:**\n", + "Convertir un objeto en una string.\n", "\n", - "**deserialization:**\n", - "Converting a string to an object.\n", + "**deserialización:**\n", + "Convertir una string en un objeto.\n", "\n", - "**database:**\n", - " A file whose contents are organized to perform certain operations efficiently.\n", + "**base de datos:**\n", + " Un archivo cuyo contenido está organizado para realizar ciertas operaciones de manera eficiente.\n", "\n", - "**key-value stores:**\n", - "A database whose contents are organized like a dictionary with keys that correspond to values.\n", + "**almacenes clave-valor:**\n", + "Una base de datos cuyo contenido está organizado como un diccionario con claves que corresponden a valores.\n", "\n", - "**binary mode:**\n", - "A way of opening a file so the contents are interpreted as sequence of bytes rather than a sequence of characters.\n", + "**modo binario:**\n", + "Una forma de abrir un archivo para que el contenido se interprete como una secuencia de bytes en lugar de como una secuencia de caracteres.\n", "\n", - "**hash function:**\n", - "A function that takes and object and computes an integer, which is sometimes called a digest.\n", + "**función hash:**\n", + "Una función que toma un objeto y calcula un entero, que a veces se llama digest.\n", "\n", "**digest:**\n", - "The result of a hash function, especially when it is used to check whether two objects are the same." + "El resultado de una función hash, especialmente cuando se usa para comprobar si dos objetos son iguales." ] }, { @@ -1533,7 +1533,7 @@ "id": "67941fdd", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1556,32 +1556,32 @@ "id": "9a537173", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "There are several topics that came up in this chapter that I did not explain in detail.\n", - "Here are some questions you can ask a virtual assistant to get more information. \n", + "Hay varios temas que surgieron en este capítulo que no expliqué en detalle.\n", + "Aquí tienes algunas preguntas que puedes hacerle a un asistente virtual para obtener más información. \n", "\n", - "* \"What are the differences between ephemeral and persistent programs?\"\n", + "* \"¿Cuáles son las diferencias entre programas efímeros y persistentes?\"\n", "\n", - "* \"What are some examples of persistent programs?\"\n", + "* \"¿Cuáles son algunos ejemplos de programas persistentes?\"\n", "\n", - "* \"What's the difference between a relative path and an absolute path?\"\n", + "* \"¿Cuál es la diferencia entre una ruta relativa y una ruta absoluta?\"\n", "\n", - "* \"Why does the `yaml` module have functions called `load` and `safe_load`?\"\n", + "* \"¿Por qué el módulo `yaml` tiene funciones llamadas `load` y `safe_load`?\"\n", "\n", - "* \"When I write a Python shelf, what are the files with suffixes `dat` and `dir`?\"\n", + "* \"Cuando escribo un shelf de Python, ¿qué son los archivos con sufijos `dat` y `dir`?\"\n", "\n", - "* \"Other than key-values stores, what other kinds of databases are there?\"\n", + "* \"Además de los almacenes clave-valor, ¿qué otros tipos de bases de datos existen?\"\n", "\n", - "* \"When I read a file, what's the difference between binary mode and text mode?\"\n", + "* \"Cuando leo un archivo, ¿cuál es la diferencia entre modo binario y modo texto?\"\n", "\n", - "* \"What are the differences between a bytes object and a string?\"\n", + "* \"¿Cuáles son las diferencias entre un objeto bytes y una string?\"\n", "\n", - "* \"What is a hash function?\"\n", + "* \"¿Qué es una función hash?\"\n", "\n", - "* \"What is an MD5 digest?\"\n", + "* \"¿Qué es un digest MD5?\"\n", "\n", - "As always, if you get stuck on any of the following exercises, consider asking a VA for help. Along with your question, you might want to paste in the relevant functions from this chapter." + "Como siempre, si te quedas atascado en alguno de los ejercicios siguientes, considera pedir ayuda a un AV. Junto con tu pregunta, quizá quieras pegar las funciones relevantes de este capítulo." ] }, { @@ -1589,11 +1589,11 @@ "id": "7586e1e9", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `replace_all` that takes as arguments a pattern string, a replacement string, and two filenames.\n", - "It should read the first file and write the contents into the second file (creating it if necessary).\n", - "If the pattern string appears anywhere in the contents, it should be replaced with the replacement string." + "Escribe una función llamada `replace_all` que tome como argumentos una string patrón, una string de reemplazo y dos nombres de archivo.\n", + "Debería leer el primer archivo y escribir el contenido en el segundo archivo (creándolo si es necesario).\n", + "Si la string patrón aparece en cualquier parte del contenido, debería reemplazarse por la string de reemplazo." ] }, { @@ -1601,7 +1601,7 @@ "id": "85844afb", "metadata": {}, "source": [ - "Here's an outline of the function to get you started." + "Aquí tienes un esquema de la función para empezar." ] }, { @@ -1636,7 +1636,7 @@ "id": "7f37245c", "metadata": {}, "source": [ - "To test your function, read the file `photos/notes.txt`, replace `'photos'` with `'images'`, and write the result to the file `photos/new_notes.txt`." + "Para probar tu función, lee el archivo `photos/notes.txt`, reemplaza `'photos'` por `'images'` y escribe el resultado en el archivo `photos/new_notes.txt`." ] }, { @@ -1684,12 +1684,12 @@ "id": "7b2589a4", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In [a previous section](section_storing_data_structure), we used the `shelve` module to make a key-value store that maps from a sorted string of letters to a list of anagrams.\n", - "To finish the example, write a function called `add_word` that takes as arguments a string and a shelf object.\n", + "En [una sección anterior](section_storing_data_structure), usamos el módulo `shelve` para crear un almacén clave-valor que mapea una string ordenada de letras a una lista de anagramas.\n", + "Para terminar el ejemplo, escribe una función llamada `add_word` que tome como argumentos una string y un objeto shelf.\n", "\n", - "It should sort the letters of the word to make a key, then check whether the key is already in the shelf. If not, it should make a list that contains the new word and add it to the shelf. If so, it should append the new word to the existing value. " + "Debería ordenar las letras de la palabra para crear una clave, y luego comprobar si la clave ya está en el shelf. Si no, debería crear una lista que contenga la nueva palabra y añadirla al shelf. Si sí, debería añadir la nueva palabra al valor existente. " ] }, { @@ -1709,7 +1709,7 @@ "tags": [] }, "source": [ - "You can use this loop to test your function." + "Puedes usar este bucle para probar tu función." ] }, { @@ -1747,7 +1747,7 @@ "tags": [] }, "source": [ - "If everything is working, you should be able to look up a key like `'opst'` and get a list of words that can be spelled with those letters." + "Si todo funciona, deberías poder buscar una clave como `'opst'` y obtener una lista de palabras que se pueden formar con esas letras." ] }, { @@ -1793,23 +1793,23 @@ "id": "228e977c", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In a large collection of files, there may be more than one copy of the same file, stored in different directories or with different file names.\n", - "The goal of this exercise is to search for duplicates.\n", - "As an example, we'll work with image files in the `photos` directory.\n", + "En una colección grande de archivos, puede haber más de una copia del mismo archivo, almacenada en distintos directorios o con distintos nombres de archivo.\n", + "El objetivo de este ejercicio es buscar duplicados.\n", + "Como ejemplo, trabajaremos con archivos de imagen en el directorio `photos`.\n", "\n", - "Here's how it will work:\n", + "Así es como funcionará:\n", "\n", - "* We'll use the `walk` function from [](section_walking_directories) to search this directory for files that end with one of the extensions in `config['extensions']`.\n", + "* Usaremos la función `walk` de [](section_walking_directories) para buscar en este directorio archivos que terminen con una de las extensiones en `config['extensions']`.\n", "\n", - "* For each file, we'll use `md5_digest` from [](section_md5_digest) to compute a digest of the contents.\n", + "* Para cada archivo, usaremos `md5_digest` de [](section_md5_digest) para calcular un digest del contenido.\n", "\n", - "* Using a shelf, we'll make a mapping from each digest to a list of paths with that digest.\n", + "* Usando un shelf, haremos un mapeo de cada digest a una lista de rutas con ese digest.\n", "\n", - "* Finally, we'll search the shelf for any digests that map to multiple files.\n", + "* Finalmente, buscaremos en el shelf cualquier digest que mapee a múltiples archivos.\n", "\n", - "* If we find any, we'll use `same_contents` to confirm that the files contain the same data." + "* Si encontramos alguno, usaremos `same_contents` para confirmar que los archivos contienen los mismos datos." ] }, { @@ -1817,9 +1817,9 @@ "id": "8f5365da", "metadata": {}, "source": [ - "I'll suggest some functions to write first, then we'll bring it all together.\n", + "Voy a sugerir algunas funciones para escribir primero, y luego lo juntaremos todo.\n", "\n", - "1. To identify image files, write a function called `is_image` that takes a path and a list of file extensions, and returns `True` if the path ends with one of the extensions in the list. Hint: Use `os.path.splitext` -- or ask a virtual assistant to write this function for you." + "1. Para identificar archivos de imagen, escribe una función llamada `is_image` que tome una ruta y una lista de extensiones de archivo, y devuelva `True` si la ruta termina con una de las extensiones de la lista. Pista: usa `os.path.splitext` -- o pide a un asistente virtual que escriba esta función por ti." ] }, { @@ -1839,7 +1839,7 @@ "tags": [] }, "source": [ - "You can use `doctest` to test your function." + "Puedes usar `doctest` para probar tu función." ] }, { @@ -1864,7 +1864,7 @@ "id": "1a7c8f49", "metadata": {}, "source": [ - "2. Write a function called `add_path` that takes as arguments a path and a shelf. It should use `md5_digest` to compute a digest of the file contents. Then it should update the shelf, either creating a new item that maps from the digest to a list containing the path, or appending the path to the list if it exists." + "2. Escribe una función llamada `add_path` que tome como argumentos una ruta y un shelf. Debería usar `md5_digest` para calcular un digest del contenido del archivo. Luego debería actualizar el shelf, ya sea creando un nuevo elemento que mapee el digest a una lista que contenga la ruta, o añadiendo la ruta a la lista si ya existe." ] }, { @@ -1882,7 +1882,7 @@ "id": "08223a21", "metadata": {}, "source": [ - "3. Write a version of `walk` called `walk_images` that takes a directory and walks through the files in the directory and its subdirectories. For each file, it should use `is_image` to check whether it's an image file and `add_path` to add it to the shelf." + "3. Escribe una versión de `walk` llamada `walk_images` que tome un directorio y recorra los archivos del directorio y sus subdirectorios. Para cada archivo, debería usar `is_image` para comprobar si es un archivo de imagen y `add_path` para añadirlo al shelf." ] }, { @@ -1900,7 +1900,7 @@ "id": "1ea76a52", "metadata": {}, "source": [ - "When everything is working, you can use the following program to create the shelf, search the `photos` directory and add paths to the shelf, and then check whether there are multiple files with the same digest." + "Cuando todo funcione, puedes usar el siguiente programa para crear el shelf, buscar en el directorio `photos` y añadir rutas al shelf, y luego comprobar si hay múltiples archivos con el mismo digest." ] }, { @@ -1925,8 +1925,8 @@ "id": "102d4d10", "metadata": {}, "source": [ - "You should find one pair of files that have the same digest.\n", - "Use `same_contents` to check whether they contain the same data." + "Deberías encontrar un par de archivos que tienen el mismo digest.\n", + "Usa `same_contents` para comprobar si contienen los mismos datos." ] }, { @@ -1958,9 +1958,11 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Código license: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] } ], diff --git a/chapters/chap14.ipynb b/chapters/chap14.ipynb index f0f9998..035d8ca 100644 --- a/chapters/chap14.ipynb +++ b/chapters/chap14.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -41,14 +41,14 @@ "id": "e826e661", "metadata": {}, "source": [ - "# Classes and Functions\n", + "# Clases y funciones\n", "\n", - "At this point you know how to use functions to organize code and how to use built-in types to organize data.\n", - "The next step is **object-oriented programming**, which uses programmer-defined types to organize both code and data.\n", + "A estas alturas sabes cómo usar funciones para organizar código y cómo usar tipos integrados para organizar datos.\n", + "El siguiente paso es la **programación orientada a objetos**, que usa tipos definidos por el programador para organizar tanto código como datos.\n", "\n", - "Object-oriented programming is a big topic, so we will proceed gradually.\n", - "In this chapter, we'll start with code that is not idiomatic -- that is, it is not the kind of code experienced programmers write -- but it is a good place to start.\n", - "In the next two chapters, we will use additional features to write more idiomatic code." + "La programación orientada a objetos es un tema amplio, así que avanzaremos gradualmente.\n", + "En este capítulo, empezaremos con código que no es idiomático -- es decir, no es el tipo de código que escriben los programadores con experiencia -- pero es un buen punto de partida.\n", + "En los dos capítulos siguientes, usaremos características adicionales para escribir código más idiomático." ] }, { @@ -56,12 +56,12 @@ "id": "6b414d4a", "metadata": {}, "source": [ - "## Programmer-defined types\n", + "## Tipos definidos por el programador\n", "\n", - "We have used many of Python's built-in types -- now we will define a new type.\n", - "As a first example, we'll create a type called `Time` that represents a time of day.\n", - "A programmer-defined type is also called a **class**.\n", - "A class definition looks like this:" + "Hemos usado muchos de los tipos integrados de Python -- ahora definiremos un tipo nuevo.\n", + "Como primer ejemplo, crearemos un tipo llamado `Time` que representa una hora del día.\n", + "Un tipo definido por el programador también se llama **clase**.\n", + "Una definición de clase se ve así:" ] }, { @@ -80,12 +80,12 @@ "id": "e2414cd2", "metadata": {}, "source": [ - "The header indicates that the new class is called `Time`.\n", - "The body is a docstring that explains what the class is for.\n", - "Defining a class creates a **class object**.\n", + "La cabecera indica que la nueva clase se llama `Time`.\n", + "El cuerpo es un docstring que explica para qué sirve la clase.\n", + "Definir una clase crea un **objeto de clase**.\n", "\n", - "The class object is like a factory for creating objects.\n", - "To create a `Time` object, you call `Time` as if it were a function." + "El objeto de clase es como una fábrica para crear objetos.\n", + "Para crear un objeto `Time`, llamas a `Time` como si fuera una función." ] }, { @@ -103,7 +103,7 @@ "id": "f63247d4", "metadata": {}, "source": [ - "The result is a new object whose type is `__main__.Time`, where `__main__` is the name of the module where `Time` is defined." + "El resultado es un objeto nuevo cuyo tipo es `__main__.Time`, donde `__main__` es el nombre del módulo donde se define `Time`." ] }, { @@ -121,7 +121,7 @@ "id": "14d0c96a", "metadata": {}, "source": [ - "When you print an object, Python tells you what type it is and where it is stored in memory (the prefix `0x` means that the following number is in hexadecimal)." + "Cuando imprimes un objeto, Python te dice de qué tipo es y dónde está almacenado en memoria (el prefijo `0x` significa que el número siguiente está en hexadecimal)." ] }, { @@ -139,7 +139,7 @@ "id": "b6445414", "metadata": {}, "source": [ - "Creating a new object is called **instantiation**, and the object is an **instance** of the class." + "Crear un objeto nuevo se llama **instanciación**, y el objeto es una **instancia** de la clase." ] }, { @@ -147,10 +147,10 @@ "id": "4c3768ec", "metadata": {}, "source": [ - "## Attributes\n", + "## Atributos\n", "\n", - "An object can contain variables, which are called **attributes** and pronounced with the emphasis on the first syllable, like \"AT-trib-ute\", rather than the second syllable, like \"a-TRIB-ute\".\n", - "We can create attributes using dot notation." + "Un objeto puede contener variables, que se llaman **atributos**.\n", + "Podemos crear atributos usando notación de punto." ] }, { @@ -170,9 +170,9 @@ "id": "b3fd8858", "metadata": {}, "source": [ - "This example creates attributes called `hour`, `minute`, and `second`, which contain the hours, minutes, and seconds of the time `11:59:01`, which is lunch time as far as I am concerned.\n", + "Este ejemplo crea atributos llamados `hour`, `minute` y `second`, que contienen las horas, minutos y segundos de la hora `11:59:01`, que es la hora de comer por lo que a mí respecta.\n", "\n", - "The following diagram shows the state of `lunch` and its attributes after these assignments. " + "El siguiente diagrama muestra el estado de `lunch` y sus atributos después de estas asignaciones. " ] }, { @@ -213,11 +213,11 @@ "id": "d9df5b48", "metadata": {}, "source": [ - "The variable `lunch` refers to a `Time` object, which contains three attributes. \n", - "Each attribute refers to an integer.\n", - "A state diagram like this -- which shows an object and its attributes -- is called an **object diagram**.\n", + "La variable `lunch` se refiere a un objeto `Time`, que contiene tres atributos. \n", + "Cada atributo se refiere a un entero.\n", + "Un diagrama de estado como este -- que muestra un objeto y sus atributos -- se llama **diagrama de objeto**.\n", "\n", - "You can read the value of an attribute using the dot operator." + "Puedes leer el valor de un atributo usando el operador de punto." ] }, { @@ -235,7 +235,7 @@ "id": "5ccfaea0", "metadata": {}, "source": [ - "You can use an attribute as part of any expression." + "Puedes usar un atributo como parte de cualquier expresión." ] }, { @@ -254,7 +254,7 @@ "id": "c5e6725b", "metadata": {}, "source": [ - "And you can use the dot operator in an expression in an f-string." + "Y puedes usar el operador de punto en una expresión dentro de una f-string." ] }, { @@ -272,10 +272,10 @@ "id": "e70671d2", "metadata": {}, "source": [ - "But notice that the previous example is not in the standard format.\n", - "To fix it, we have to print the `minute` and `second` attributes with a leading zero.\n", - "We can do that by extending the expressions in curly braces with a **format specifier**.\n", - "In the following example, the format specifiers indicate that `minute` and `second` should be displayed with at least two digits and a leading zero if needed." + "Pero observa que el ejemplo anterior no está en el formato estándar.\n", + "Para arreglarlo, tenemos que imprimir los atributos `minute` y `second` con un cero inicial.\n", + "Podemos hacerlo extendiendo las expresiones entre llaves con un **especificador de formato**.\n", + "En el siguiente ejemplo, los especificadores de formato indican que `minute` y `second` deberían mostrarse con al menos dos dígitos y un cero inicial si hace falta." ] }, { @@ -293,9 +293,9 @@ "id": "bcbea13a", "metadata": {}, "source": [ - "We'll use this f-string to write a function that displays the value of a `Time`object.\n", - "You can pass an object as an argument in the usual way.\n", - "For example, the following function takes a `Time` object as an argument. " + "Usaremos esta f-string para escribir una función que muestra el valor de un objeto `Time`.\n", + "Puedes pasar un objeto como argumento de la forma habitual.\n", + "Por ejemplo, la siguiente función toma un objeto `Time` como argumento. " ] }, { @@ -315,7 +315,7 @@ "id": "3b8ccbed", "metadata": {}, "source": [ - "When we call it, we can pass `lunch` as an argument." + "Cuando la llamamos, podemos pasar `lunch` como argumento." ] }, { @@ -333,9 +333,9 @@ "id": "18826e53", "metadata": {}, "source": [ - "## Objects as return values\n", + "## Objetos como valores de retorno\n", "\n", - "Functions can return objects. For example, `make_time` takes parameters called `hour`, `minute`, and `second`, stores them as attributes in a `Time` object, and returns the new object." + "Las funciones pueden devolver objetos. Por ejemplo, `make_time` toma parámetros llamados `hour`, `minute` y `second`, los almacena como atributos en un objeto `Time` y devuelve el objeto nuevo." ] }, { @@ -358,8 +358,8 @@ "id": "d8a6acca", "metadata": {}, "source": [ - "It might be surprising that the parameters have the same names as the attributes, but that's a common way to write a function like this.\n", - "Here's how we use `make_time` to create a `Time` object." + "Puede sorprender que los parámetros tengan los mismos nombres que los atributos, pero esa es una forma habitual de escribir una función como esta.\n", + "Así usamos `make_time` para crear un objeto `Time`." ] }, { @@ -378,12 +378,12 @@ "id": "05720bcb", "metadata": {}, "source": [ - "## Objects are mutable\n", + "## Los objetos son mutables\n", "\n", - "Suppose you are going to a screening of a movie, like *Monty Python and the Holy Grail*, which starts at `9:20 PM` and runs for `92` minutes, which is one hour `32` minutes.\n", - "What time will the movie end?\n", + "Supón que vas a una proyección de una película, como *Monty Python and the Holy Grail*, que empieza a las `9:20 PM` y dura `92` minutos, que es una hora y `32` minutos.\n", + "¿A qué hora terminará la película?\n", "\n", - "First, we'll create a `Time` object that represents the start time." + "Primero, crearemos un objeto `Time` que representa la hora de inicio." ] }, { @@ -402,7 +402,7 @@ "id": "001bcda9", "metadata": {}, "source": [ - "To find the end time, we can modify the attributes of the `Time` object, adding the duration of the movie." + "Para encontrar la hora de fin, podemos modificar los atributos del objeto `Time`, añadiendo la duración de la película." ] }, { @@ -422,9 +422,9 @@ "id": "7007ab61", "metadata": {}, "source": [ - "The movie will be over at 10:52 PM.\n", + "La película terminará a las 10:52 PM.\n", "\n", - "Let's encapsulate this computation in a function and generalize it to take the duration of the movie in three parameters: `hours`, `minutes`, and `seconds`." + "Encapsulemos este cálculo en una función y generalicémoslo para que tome la duración de la película en tres parámetros: `hours`, `minutes` y `seconds`." ] }, { @@ -445,7 +445,7 @@ "id": "a51913e2", "metadata": {}, "source": [ - "Here is an example that demonstrates the effect." + "Aquí tienes un ejemplo que demuestra el efecto." ] }, { @@ -465,7 +465,7 @@ "id": "42d7de02", "metadata": {}, "source": [ - "The following stack diagram shows the state of the program just before `increment_time` modifies the object." + "El siguiente stack diagram muestra el estado del programa justo antes de que `increment_time` modifique el objeto." ] }, { @@ -519,11 +519,11 @@ "id": "d1e27667", "metadata": {}, "source": [ - "Inside the function, `time` is an alias for `start`, so when `time` is modified, `start` changes.\n", + "Dentro de la función, `time` es un alias de `start`, así que cuando se modifica `time`, cambia `start`.\n", "\n", - "This function works, but after it runs, we're left with a variable named `start` that refers to an object that represents the *end* time, and we no longer have an object that represents the start time.\n", - "It would be better to leave `start` unchanged and make a new object to represent the end time.\n", - "We can do that by copying `start` and modifying the copy." + "Esta función funciona, pero después de ejecutarse nos quedamos con una variable llamada `start` que se refiere a un objeto que representa la hora de *fin*, y ya no tenemos un objeto que represente la hora de inicio.\n", + "Sería mejor dejar `start` sin cambios y crear un objeto nuevo para representar la hora de fin.\n", + "Podemos hacerlo copiando `start` y modificando la copia." ] }, { @@ -531,10 +531,10 @@ "id": "0128f850", "metadata": {}, "source": [ - "## Copying\n", + "## Copiar\n", "\n", - "The `copy` module provides a function called `copy` that can duplicate any object.\n", - "We can import it like this." + "El módulo `copy` proporciona una función llamada `copy` que puede duplicar cualquier objeto.\n", + "Podemos importarla así." ] }, { @@ -552,7 +552,7 @@ "id": "940adbeb", "metadata": {}, "source": [ - "To see how it works, let's start with a new `Time` object that represents the start time of the movie." + "Para ver cómo funciona, empecemos con un objeto `Time` nuevo que representa la hora de inicio de la película." ] }, { @@ -570,7 +570,7 @@ "id": "514f05b9", "metadata": {}, "source": [ - "And make a copy." + "Y hagamos una copia." ] }, { @@ -588,7 +588,7 @@ "id": "87d8956b", "metadata": {}, "source": [ - "Now `start` and `end` contain the same data." + "Ahora `start` y `end` contienen los mismos datos." ] }, { @@ -607,7 +607,7 @@ "id": "e75c1e09", "metadata": {}, "source": [ - "But the `is` operator confirms that they are not the same object." + "Pero el operador `is` confirma que no son el mismo objeto." ] }, { @@ -625,7 +625,7 @@ "id": "22b68a3f", "metadata": {}, "source": [ - "Let's see what the `==` operator does." + "Veamos qué hace el operador `==`." ] }, { @@ -643,8 +643,8 @@ "id": "78ebf931", "metadata": {}, "source": [ - "You might expect `==` to yield `True` because the objects contain the same data.\n", - "But for programmer-defined classes, the default behavior of the `==` operator is the same as the `is` operator -- it checks identity, not equivalence." + "Podrías esperar que `==` produzca `True` porque los objetos contienen los mismos datos.\n", + "Pero para clases definidas por el programador, el comportamiento por defecto del operador `==` es el mismo que el del operador `is` -- comprueba identidad, no equivalencia." ] }, { @@ -652,11 +652,11 @@ "id": "a3934fdd-d4cd-41e0-86e6-5bb78d0886a7", "metadata": {}, "source": [ - "## Pure functions\n", + "## Funciones puras\n", "\n", - "We can use `copy` to write pure functions that don't modify their parameters.\n", - "For example, here's a function that takes a `Time` object and a duration in hours, minutes and seconds.\n", - "It makes a copy of the original object, uses `increment_time` to modify the copy, and returns it." + "Podemos usar `copy` para escribir funciones puras que no modifican sus parámetros.\n", + "Por ejemplo, aquí tienes una función que toma un objeto `Time` y una duración en horas, minutos y segundos.\n", + "Hace una copia del objeto original, usa `increment_time` para modificar la copia y la devuelve." ] }, { @@ -677,7 +677,7 @@ "id": "c181af12", "metadata": {}, "source": [ - "Here's how we use it." + "Así la usamos." ] }, { @@ -696,8 +696,8 @@ "id": "54b1ca4a", "metadata": {}, "source": [ - "The return value is a new object representing the end time of the movie.\n", - "And we can confirm that `start` is unchanged." + "El valor de retorno es un objeto nuevo que representa la hora de fin de la película.\n", + "Y podemos confirmar que `start` no ha cambiado." ] }, { @@ -715,14 +715,14 @@ "id": "1233b2db", "metadata": {}, "source": [ - "`add_time` is a **pure function** because it does not modify any of the objects passed to it as arguments and its only effect is to return a value.\n", + "`add_time` es una **función pura** porque no modifica ninguno de los objetos que se le pasan como argumentos y su único efecto es devolver un valor.\n", "\n", - "Anything that can be done with impure functions can also be done with pure functions.\n", - "In fact, some programming languages only allow pure functions.\n", - "Programs that use pure functions might be less error-prone, but impure functions are sometimes convenient and can be more efficient.\n", + "Cualquier cosa que se pueda hacer con funciones impuras también se puede hacer con funciones puras.\n", + "De hecho, algunos lenguajes de programación solo permiten funciones puras.\n", + "Los programas que usan funciones puras pueden ser menos propensos a errores, pero las funciones impuras a veces son convenientes y pueden ser más eficientes.\n", "\n", - "In general, I suggest you write pure functions whenever it is reasonable and resort to impure functions only if there is a compelling advantage.\n", - "This approach might be called a **functional programming style**." + "En general, te sugiero que escribas funciones puras siempre que sea razonable y recurras a funciones impuras solo si hay una ventaja convincente.\n", + "Este enfoque podría llamarse un **estilo de programación funcional**." ] }, { @@ -732,10 +732,10 @@ "source": [ "## Prototype and patch\n", "\n", - "In the previous example, `increment_time` and `add_time` seem to work, but if we try another example, we'll see that they are not quite correct.\n", + "En el ejemplo anterior, `increment_time` y `add_time` parecen funcionar, pero si probamos otro ejemplo veremos que no son del todo correctas.\n", "\n", - "Suppose you arrive at the theater and discover that the movie starts at `9:40`, not `9:20`.\n", - "Here's what happens when we compute the updated end time." + "Supón que llegas al cine y descubres que la película empieza a las `9:40`, no a las `9:20`.\n", + "Esto es lo que ocurre cuando calculamos la hora de fin actualizada." ] }, { @@ -755,10 +755,10 @@ "id": "c712ebf7-7e52-490e-91d7-5f1c83334de0", "metadata": {}, "source": [ - "The result is not a valid time.\n", - "The problem is that `increment_time` does not deal with cases where the number of seconds or minutes adds up to more than `60`.\n", + "El resultado no es una hora válida.\n", + "El problema es que `increment_time` no trata los casos en los que el número de segundos o minutos suma más de `60`.\n", "\n", - "Here's an improved version that checks whether `second` exceeds or equals `60` -- if so, it increments `minute` -- then checks whether `minute` exceeds or equals `60` -- if so, it increments `hour`." + "Aquí tienes una versión mejorada que comprueba si `second` supera o iguala `60` -- si es así, incrementa `minute` -- y luego comprueba si `minute` supera o iguala `60` -- si es así, incrementa `hour`." ] }, { @@ -787,8 +787,8 @@ "id": "c133c5d8", "metadata": {}, "source": [ - "Fixing `increment_time` also fixes `add_time`, which uses it.\n", - "So now the previous example works correctly." + "Arreglar `increment_time` también arregla `add_time`, que la usa.\n", + "Así que ahora el ejemplo anterior funciona correctamente." ] }, { @@ -807,9 +807,9 @@ "id": "a2f644a6-ca43-494e-af14-6e845b3d7973", "metadata": {}, "source": [ - "But this function is still not correct, because the arguments might be bigger than `60`.\n", - "For example, suppose we are given the run time as `92` minutes, rather than `1` hours and `32` minutes.\n", - "We might call `add_time` like this." + "Pero esta función todavía no es correcta, porque los argumentos podrían ser mayores que `60`.\n", + "Por ejemplo, supón que recibimos la duración como `92` minutos, en lugar de `1` hora y `32` minutos.\n", + "Podríamos llamar a `add_time` así." ] }, { @@ -828,9 +828,9 @@ "id": "72e0a08b", "metadata": {}, "source": [ - "The result is not a valid time.\n", - "So let's try a different approach, using the `divmod` function.\n", - "We'll make a copy of `start` and modify it by incrementing the `minute` attribute." + "El resultado no es una hora válida.\n", + "Así que probemos un enfoque distinto, usando la función `divmod`.\n", + "Haremos una copia de `start` y la modificaremos incrementando el atributo `minute`." ] }, { @@ -850,8 +850,8 @@ "id": "c56355bc", "metadata": {}, "source": [ - "Now `minute` is `132`, which is `2` hours and `12` minutes.\n", - "We can use `divmod` to divide by `60` and return the number of whole hours and the number of minutes left over." + "Ahora `minute` es `132`, que son `2` horas y `12` minutos.\n", + "Podemos usar `divmod` para dividir por `60` y devolver el número de horas completas y el número de minutos sobrantes." ] }, { @@ -870,7 +870,7 @@ "id": "43204703", "metadata": {}, "source": [ - "Now `minute` is correct, and we can add the hours to `hour`." + "Ahora `minute` es correcto, y podemos añadir las horas a `hour`." ] }, { @@ -889,8 +889,8 @@ "id": "a68ae1cd", "metadata": {}, "source": [ - "The result is a valid time.\n", - "We can do the same thing with `hour` and `second`, and encapsulate the whole process in a function." + "El resultado es una hora válida.\n", + "Podemos hacer lo mismo con `hour` y `second`, y encapsular todo el proceso en una función." ] }, { @@ -915,7 +915,7 @@ "id": "7437113a", "metadata": {}, "source": [ - "With this version of `increment_time`, `add_time` works correctly, even if the arguments exceed `60`." + "Con esta versión de `increment_time`, `add_time` funciona correctamente, incluso si los argumentos superan `60`." ] }, { @@ -934,13 +934,13 @@ "id": "7c6329b2", "metadata": {}, "source": [ - "This section demonstrates a program development plan I call **prototype and patch**.\n", - "We started with a simple prototype that worked correctly for the first example.\n", - "Then we tested it with more difficult examples -- when we found an error, we modified the program to fix it, like putting a patch on tire with a puncture.\n", + "Esta sección demuestra un plan de desarrollo de programas que llamo **prototype and patch**.\n", + "Empezamos con un prototipo simple que funcionaba correctamente para el primer ejemplo.\n", + "Luego lo probamos con ejemplos más difíciles -- cuando encontramos un error, modificamos el programa para corregirlo, como poner un parche en un neumático pinchado.\n", "\n", - "This approach can be effective, especially if you don't yet have a deep understanding of the problem.\n", - "But incremental corrections can generate code that is unnecessarily complicated -- since it deals with many special cases -- and unreliable -- since it is hard to know if you have\n", - "found all the errors." + "Este enfoque puede ser efectivo, especialmente si todavía no tienes una comprensión profunda del problema.\n", + "Pero las correcciones incrementales pueden generar código innecesariamente complicado -- porque trata muchos casos especiales -- y poco fiable -- porque es difícil saber si has\n", + "encontrado todos los errores." ] }, { @@ -950,16 +950,16 @@ "source": [ "## Design-first development\n", "\n", - "An alternative plan is **design-first development**, which involves more planning before prototyping. In a design-first process, sometimes a high-level insight into the problem makes the programming much easier.\n", + "Un plan alternativo es **design-first development**, que implica más planificación antes de prototipar. En un proceso design-first, a veces una idea de alto nivel sobre el problema hace que la programación sea mucho más sencilla.\n", "\n", - "In this case, the insight is that we can think of a `Time` object as a three-digit number in base 60 -- also known as sexagesimal.\n", - "The `second` attribute is the \"ones column\", the `minute` attribute is the \"sixties column\",\n", - "and the `hour` attribute is the \"thirty-six hundreds column\".\n", - "When we wrote `increment_time`, we were effectively doing addition in base 60, which is why we had to carry from one column to the next.\n", + "En este caso, la idea es que podemos pensar en un objeto `Time` como un número de tres dígitos en base 60 -- también conocida como sexagesimal.\n", + "El atributo `second` es la \"columna de las unidades\", el atributo `minute` es la \"columna de los sesenta\",\n", + "y el atributo `hour` es la \"columna de los treinta y seis cientos\".\n", + "Cuando escribimos `increment_time`, en realidad estábamos haciendo suma en base 60, por eso teníamos que llevar de una columna a la siguiente.\n", "\n", - "This observation suggests another approach to the whole problem -- we can convert `Time` objects to integers and take advantage of the fact that Python knows how to do integer arithmetic.\n", + "Esta observación sugiere otro enfoque para todo el problema -- podemos convertir objetos `Time` en enteros y aprovechar que Python sabe hacer aritmética de enteros.\n", "\n", - "Here is a function that converts from a `Time` to an integer." + "Aquí tienes una función que convierte de un `Time` a un entero." ] }, { @@ -980,8 +980,8 @@ "id": "c7e7789e", "metadata": {}, "source": [ - "The result is the number of seconds since the beginning of the day.\n", - "For example, `01:01:01` is `1` hour, `1` minute and `1` second from the beginning of the day, which is the sum of `3600` seconds, `60` seconds, and `1` second." + "El resultado es el número de segundos desde el comienzo del día.\n", + "Por ejemplo, `01:01:01` es `1` hora, `1` minuto y `1` segundo desde el comienzo del día, que es la suma de `3600` segundos, `60` segundos y `1` segundo." ] }, { @@ -1001,7 +1001,7 @@ "id": "6ea525c8-4547-4bde-91c3-17f45add1bf8", "metadata": {}, "source": [ - "And here's a function that goes in the other direction -- converting an integer to a `Time` object -- using the `divmod` function." + "Y aquí tienes una función que va en la otra dirección -- convierte un entero en un objeto `Time` -- usando la función `divmod`." ] }, { @@ -1022,7 +1022,7 @@ "id": "4706b5df", "metadata": {}, "source": [ - "We can test it by converting the previous example back to a `Time`." + "Podemos probarla convirtiendo el ejemplo anterior de vuelta a un `Time`." ] }, { @@ -1041,7 +1041,7 @@ "id": "0c2b8469-d4a7-46f9-a0a1-f2a6c1595183", "metadata": {}, "source": [ - "Using these functions, we can write a more concise version of `add_time`." + "Usando estas funciones, podemos escribir una versión más concisa de `add_time`." ] }, { @@ -1062,11 +1062,11 @@ "id": "cb560257", "metadata": {}, "source": [ - "The first line converts the arguments to a `Time` object called `duration`.\n", - "The second line converts `time` and `duration` to seconds and adds them.\n", - "The third line converts the sum to a `Time` object and returns it.\n", + "La primera línea convierte los argumentos en un objeto `Time` llamado `duration`.\n", + "La segunda línea convierte `time` y `duration` a segundos y los suma.\n", + "La tercera línea convierte la suma en un objeto `Time` y lo devuelve.\n", "\n", - "Here's how it works." + "Así funciona." ] }, { @@ -1086,17 +1086,17 @@ "id": "db762aa8-4aab-4c17-a88d-72c5048f18c0", "metadata": {}, "source": [ - "In some ways, converting from base 60 to base 10 and back is harder than\n", - "just dealing with times. Base conversion is more abstract; our intuition\n", - "for dealing with time values is better.\n", + "En cierto sentido, convertir de base 60 a base 10 y de vuelta es más difícil que\n", + "simplemente tratar con horas. La conversión de base es más abstracta; nuestra intuición\n", + "para trabajar con valores de tiempo es mejor.\n", "\n", - "But if we have the insight to treat times as base 60 numbers -- and invest the effort to write the conversion functions `time_to_int` and `int_to_time` -- we get a program that is shorter, easier to read and debug, and more reliable.\n", + "Pero si tenemos la idea de tratar las horas como números en base 60 -- e invertimos el esfuerzo de escribir las funciones de conversión `time_to_int` e `int_to_time` -- obtenemos un programa más corto, más fácil de leer y depurar, y más fiable.\n", "\n", - "It is also easier to add features later. For example, imagine subtracting two `Time` objects to find the duration between them.\n", - "The naive approach is to implement subtraction with borrowing.\n", - "Using the conversion functions is easier and more likely to be correct.\n", + "También es más fácil añadir características más adelante. Por ejemplo, imagina restar dos objetos `Time` para encontrar la duración entre ellos.\n", + "El enfoque ingenuo es implementar la resta con préstamo.\n", + "Usar las funciones de conversión es más fácil y tiene más probabilidades de ser correcto.\n", "\n", - "Ironically, sometimes making a problem harder -- or more general -- makes it easier, because there are fewer special cases and fewer opportunities for error." + "Irónicamente, a veces hacer un problema más difícil -- o más general -- lo hace más fácil, porque hay menos casos especiales y menos oportunidades de error." ] }, { @@ -1106,10 +1106,10 @@ "tags": [] }, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "Python provides several built-in functions that are useful for testing and debugging programs that work with objects.\n", - "For example, if you are not sure what type an object is, you can ask." + "Python proporciona varias funciones integradas que son útiles para probar y depurar programas que trabajan con objetos.\n", + "Por ejemplo, si no estás seguro de qué tipo es un objeto, puedes preguntarlo." ] }, { @@ -1127,7 +1127,7 @@ "id": "7ec0eabf", "metadata": {}, "source": [ - "You can also use `isinstance` to check whether an object is an instance of a particular class." + "También puedes usar `isinstance` para comprobar si un objeto es una instancia de una clase concreta." ] }, { @@ -1145,8 +1145,7 @@ "id": "4f453fe9", "metadata": {}, "source": [ - "If you are not sure whether an object has a particular attribute, you\n", - "can use the built-in function `hasattr`." + "Si no estás seguro de si un objeto tiene un atributo concreto, puedes usar la función integrada `hasattr`." ] }, { @@ -1164,7 +1163,7 @@ "id": "a0131d84", "metadata": {}, "source": [ - "To get all of the attributes, and their values, in a dictionary, you can use `vars`." + "Para obtener todos los atributos, y sus valores, en un diccionario, puedes usar `vars`." ] }, { @@ -1182,7 +1181,7 @@ "id": "f1a443c8", "metadata": {}, "source": [ - "The `structshape` module, which we saw in [Chapter 11](section_debugging_11), also works with programmer-defined types." + "El módulo `structshape`, que vimos en el [Capítulo 11](section_depuración_11), también funciona con tipos definidos por el programador." ] }, { @@ -1215,43 +1214,43 @@ "id": "501436c0-6634-415f-be84-2d130232b2b8", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**object-oriented programming:**\n", - "A style of programming that uses objects to organize code and data.\n", + "**programación orientada a objetos:**\n", + "Un estilo de programación que usa objetos para organizar código y datos.\n", "\n", - "**class:**\n", - " A programmer-defined type. A class definition creates a new class object.\n", + "**clase:**\n", + " Un tipo definido por el programador. Una definición de clase crea un nuevo objeto de clase.\n", "\n", - "**class object:**\n", - "An object that represents a class -- it is the result of a class definition.\n", + "**objeto de clase:**\n", + "Un objeto que representa una clase -- es el resultado de una definición de clase.\n", "\n", - "**instantiation:**\n", - "The process of creating an object that belongs to a class.\n", + "**instanciación:**\n", + "El proceso de crear un objeto que pertenece a una clase.\n", "\n", - "**instance:**\n", - " An object that belongs to a class.\n", + "**instancia:**\n", + " Un objeto que pertenece a una clase.\n", "\n", - "**attribute:**\n", - " A variable associated with an object, also called an instance variable.\n", + "**atributo:**\n", + " Una variable asociada con un objeto, también llamada variable de instancia.\n", "\n", - "**object diagram:**\n", - "A graphical representation of an object, its attributes, and their values.\n", + "**diagrama de objeto:**\n", + "Una representación gráfica de un objeto, sus atributos y sus valores.\n", "\n", - "**format specifier:**\n", - "In an f-string, a format specifier determines how a value is converted to a string.\n", + "**especificador de formato:**\n", + "En una f-string, un especificador de formato determina cómo se convierte un valor en una string.\n", "\n", - "**pure function:**\n", - "A function that does not modify its parameters or have any effect other than returning a value.\n", + "**función pura:**\n", + "Una función que no modifica sus parámetros ni tiene ningún efecto aparte de devolver un valor.\n", "\n", - "**functional programming style:**\n", - "A way of programming that uses pure functions whenever possible.\n", + "**estilo de programación funcional:**\n", + "Una forma de programar que usa funciones puras siempre que sea posible.\n", "\n", "**prototype and patch:**\n", - "A way of developing programs by starting with a rough draft and gradually adding features and fixing bugs.\n", + "Una forma de desarrollar programas empezando con un borrador aproximado y añadiendo características y corrigiendo bugs gradualmente.\n", "\n", "**design-first development:**\n", - "A way of developing programs with more careful planning that prototype and patch." + "Una forma de desarrollar programas con una planificación más cuidadosa que prototype and patch." ] }, { @@ -1259,7 +1258,7 @@ "id": "09dd41c1", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1282,29 +1281,29 @@ "id": "da0aea86", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "There is a lot of new vocabulary in this chapter.\n", - "A conversation with a virtual assistant can help solidify your understanding.\n", - "Consider asking:\n", + "Hay mucho vocabulario nuevo en este capítulo.\n", + "Una conversación con un asistente virtual puede ayudarte a consolidar tu comprensión.\n", + "Considera preguntar:\n", "\n", - "* \"What is the difference between a class and a type?\"\n", + "* \"¿Cuál es la diferencia entre una clase y un tipo?\"\n", "\n", - "* \"What is the difference between an object and an instance?\"\n", + "* \"¿Cuál es la diferencia entre un objeto y una instancia?\"\n", "\n", - "* \"What is the difference between a variable and an attribute?\"\n", + "* \"¿Cuál es la diferencia entre una variable y un atributo?\"\n", "\n", - "* \"What are the pros and cons of pure functions compared to impure functions?\"\n", + "* \"¿Cuáles son los pros y los contras de funciones puras comparadas con funciones impuras?\"\n", "\n", - "Because we are just getting started with object oriented programming, the code in this chapter is not idiomatic -- it is not the kind of code experienced programmers write.\n", - "If you ask a virtual assistant for help with the exercises, you will probably see features we have not covered yet.\n", - "In particular, you are likely to see a method called `__init__` used to initialize the attributes of an instance.\n", + "Como apenas estamos empezando con la programación orientada a objetos, el código de este capítulo no es idiomático -- no es el tipo de código que escriben los programadores con experiencia.\n", + "Si pides ayuda a un asistente virtual con los ejercicios, probablemente verás características que todavía no hemos cubierto.\n", + "En particular, es probable que veas un método llamado `__init__` usado para inicializar los atributos de una instancia.\n", "\n", - "If these features make sense to you, go ahead and use them.\n", - "But if not, be patient -- we will get there soon.\n", - "In the meantime, see if you can solve the following exercises using only the features we have covered so far.\n", + "Si estas características tienen sentido para ti, adelante, úsalas.\n", + "Pero si no, ten paciencia -- llegaremos pronto.\n", + "Mientras tanto, mira si puedes resolver los siguientes ejercicios usando solo las características que hemos cubierto hasta ahora.\n", "\n", - "Also, in this chapter we saw one example of a format specifier. For more information, ask \"What format specifiers can be used in a Python f-string?\"" + "Además, en este capítulo vimos un ejemplo de especificador de formato. Para más información, pregunta \"¿Qué especificadores de formato se pueden usar en una f-string de Python?\"" ] }, { @@ -1312,9 +1311,9 @@ "id": "bcdab7d6", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `subtract_time` that takes two `Time` objects and returns the interval between them in seconds -- assuming that they are two times during the same day." + "Escribe una función llamada `subtract_time` que tome dos objetos `Time` y devuelva el intervalo entre ellos en segundos -- asumiendo que son dos horas del mismo día." ] }, { @@ -1324,7 +1323,7 @@ "tags": [] }, "source": [ - "Here's an outline of the function to get you started." + "Aquí tienes un esquema de la función para empezar." ] }, { @@ -1366,7 +1365,7 @@ "tags": [] }, "source": [ - "You can use `doctest` to test your function." + "Puedes usar `doctest` para probar tu función." ] }, { @@ -1391,9 +1390,9 @@ "id": "c3189549", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a function called `is_after` that takes two `Time` objects and returns `True` if the first time is later in the day than the second, and `False` otherwise." + "Escribe una función llamada `is_after` que tome dos objetos `Time` y devuelva `True` si la primera hora es más tarde en el día que la segunda, y `False` en caso contrario." ] }, { @@ -1403,7 +1402,7 @@ "tags": [] }, "source": [ - "Here's an outline of the function to get you started." + "Aquí tienes un esquema de la función para empezar." ] }, { @@ -1443,7 +1442,7 @@ "tags": [] }, "source": [ - "You can use `doctest` to test your function." + "Puedes usar `doctest` para probar tu función." ] }, { @@ -1463,9 +1462,9 @@ "id": "16dff862", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Here's a definition for a `Date` class that represents a date -- that is, a year, month, and day of the month." + "Aquí tienes una definición de una clase `Date` que representa una fecha -- es decir, un año, mes y día del mes." ] }, { @@ -1484,13 +1483,13 @@ "id": "3311fa97", "metadata": {}, "source": [ - "1. Write a function called `make_date` that takes `year`, `month`, and `day` as parameters, makes a `Date` object, assigns the parameters to attributes, and returns the result the new object. Create an object that represents June 22, 1933.\n", + "1. Escribe una función llamada `make_date` que tome `year`, `month` y `day` como parámetros, cree un objeto `Date`, asigne los parámetros a atributos y devuelva el objeto nuevo resultante. Crea un objeto que represente el 22 de junio de 1933.\n", "\n", - "2. Write a function called `print_date` that takes a `Date` object, uses an f-string to format the attributes, and prints the result. If you test it with the `Date` you created, the result should be `1933-06-22`.\n", + "2. Escribe una función llamada `print_date` que tome un objeto `Date`, use una f-string para formatear los atributos e imprima el resultado. Si la pruebas con la `Date` que creaste, el resultado debería ser `1933-06-22`.\n", "\n", - "3. Write a function called `is_after` that takes two `Date` objects as parameters and returns `True` if the first comes after the second. Create a second object that represents September 17, 1933, and check whether it comes after the first object.\n", + "3. Escribe una función llamada `is_after` que tome dos objetos `Date` como parámetros y devuelva `True` si la primera viene después de la segunda. Crea un segundo objeto que represente el 17 de septiembre de 1933 y comprueba si viene después del primer objeto.\n", "\n", - "Hint: You might find it useful to write a function called `date_to_tuple` that takes a `Date` object and returns a tuple that contains its attributes in year, month, day order." + "Pista: puede resultarte útil escribir una función llamada `date_to_tuple` que tome un objeto `Date` y devuelva una tupla que contenga sus atributos en orden año, mes, día." ] }, { @@ -1500,7 +1499,7 @@ "tags": [] }, "source": [ - "You can use this function outline to get started." + "Puedes usar este esquema de función para empezar." ] }, { @@ -1533,7 +1532,7 @@ "tags": [] }, "source": [ - "You can use these examples to test `make_date`." + "Puedes usar estos ejemplos para probar `make_date`." ] }, { @@ -1567,7 +1566,7 @@ "tags": [] }, "source": [ - "You can use this function outline to get started." + "Puedes usar este esquema de función para empezar." ] }, { @@ -1600,7 +1599,7 @@ "tags": [] }, "source": [ - "You can use this example to test `print_date`." + "Puedes usar este ejemplo para probar `print_date`." ] }, { @@ -1622,7 +1621,7 @@ "tags": [] }, "source": [ - "You can use this function outline to get started." + "Puedes usar este esquema de función para empezar." ] }, { @@ -1665,7 +1664,7 @@ "tags": [] }, "source": [ - "You can use these examples to test `is_after`." + "Puedes usar estos ejemplos para probar `is_after`." ] }, { @@ -1709,9 +1708,11 @@ "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Código license: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] } ], diff --git a/chapters/chap15.ipynb b/chapters/chap15.ipynb index f7dfa60..72af9e3 100644 --- a/chapters/chap15.ipynb +++ b/chapters/chap15.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir versiones impresas y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -41,19 +41,19 @@ "id": "fa22117f", "metadata": {}, "source": [ - "# Classes and Methods\n", + "# Clases y métodos\n", "\n", - "Python is an **object-oriented language** -- that is, it provides features that support object-oriented programming, which has these defining characteristics:\n", + "Python es un **lenguaje orientado a objetos** -- es decir, proporciona funcionalidades que dan soporte a la programación orientada a objetos, que tiene estas características definitorias:\n", "\n", - "- Most of the computation is expressed in terms of operations on objects.\n", + "- La mayor parte del cálculo se expresa en términos de operaciones sobre objetos.\n", "\n", - "- Objects often represent things in the real world, and methods often correspond to the ways things in the real world interact.\n", + "- Los objetos a menudo representan cosas del mundo real, y los métodos suelen corresponder a las formas en que las cosas del mundo real interactúan.\n", "\n", - "- Programs include class and method definitions.\n", + "- Los programas incluyen definiciones de clase y método.\n", "\n", - "For example, in the previous chapter we defined a `Time` class that corresponds to the way people record the time of day, and we defined functions that correspond to the kinds of things people do with times.\n", - "But there was no explicit connection between the definition of the `Time` class and the function definitions that follow.\n", - "We can make the connection explicit by rewriting a function as a **method**, which is defined inside a class definition." + "Por ejemplo, en el capítulo anterior definimos una clase `Time` que corresponde a la forma en que las personas registran la hora del día, y definimos funciones que corresponden a los tipos de cosas que las personas hacen con horas.\n", + "Pero no había una conexión explícita entre la definición de la clase `Time` y las definiciones de función que vienen después.\n", + "Podemos hacer explícita la conexión reescribiendo una función como un **método**, que se define dentro de una definición de clase." ] }, { @@ -61,9 +61,9 @@ "id": "9857823a", "metadata": {}, "source": [ - "## Defining methods\n", + "## Definir métodos\n", "\n", - "In the previous chapter we defined a class named `Time` and wrote a function named `print_time` that displays a time of day." + "En el capítulo anterior definimos una clase llamada `Time` y escribimos una función llamada `print_time` que muestra una hora del día." ] }, { @@ -86,12 +86,10 @@ "id": "a89ddf58", "metadata": {}, "source": [ - "To make `print_time` a method, all we have to do is move the function\n", - "definition inside the class definition. Notice the change in\n", - "indentation.\n", + "Para convertir `print_time` en un método, todo lo que tenemos que hacer es mover la definición de la función dentro de la definición de la clase. Fíjate en el cambio de indentación.\n", "\n", - "At the same time, we'll change the name of the parameter from `time` to `self`.\n", - "This change is not necessary, but it is conventional for the first parameter of a method to be named `self`." + "Al mismo tiempo, cambiaremos el nombre del parámetro de `time` a `self`.\n", + "Este cambio no es necesario, pero es convencional que el primer parámetro de un método se llame `self`." ] }, { @@ -114,8 +112,8 @@ "id": "8da4079c", "metadata": {}, "source": [ - "To call this method, you have to pass a `Time` object as an argument.\n", - "Here's the function we'll use to make a `Time` object." + "Para llamar a este método, tienes que pasar un objeto `Time` como argumento.\n", + "Aquí está la función que usaremos para crear un objeto `Time`." ] }, { @@ -138,7 +136,7 @@ "id": "c6ad4e12", "metadata": {}, "source": [ - "And here's a `Time` instance." + "Y aquí hay una instancia de `Time`." ] }, { @@ -156,8 +154,7 @@ "id": "bbbcd333", "metadata": {}, "source": [ - "Now there are two ways to call `print_time`. The first (and less common)\n", - "way is to use function syntax." + "Ahora hay dos formas de llamar a `print_time`. La primera (y menos común) es usar sintaxis de función." ] }, { @@ -175,8 +172,8 @@ "id": "2eb0847e", "metadata": {}, "source": [ - "In this version, `Time` is the name of the class, `print_time` is the name of the method, and `start` is passed as a parameter.\n", - "The second (and more idiomatic) way is to use method syntax:" + "En esta versión, `Time` es el nombre de la clase, `print_time` es el nombre del método, y `start` se pasa como parámetro.\n", + "La segunda forma (y más idiomática) es usar sintaxis de método:" ] }, { @@ -194,10 +191,10 @@ "id": "c80c40f0", "metadata": {}, "source": [ - "In this version, `start` is the object the method is invoked on, which is called the **receiver**, based on the analogy that invoking a method is like sending a message to an object.\n", + "En esta versión, `start` es el objeto sobre el que se invoca el método, que se llama **receptor**, basándonos en la analogía de que invocar un método es como enviar un mensaje a un objeto.\n", "\n", - "Regardless of the syntax, the behavior of the method is the same.\n", - "The receiver is assigned to the first parameter, so inside the method, `self` refers to the same object as `start`." + "Independientemente de la sintaxis, el comportamiento del método es el mismo.\n", + "El receptor se asigna al primer parámetro, así que dentro del método, `self` se refiere al mismo objeto que `start`." ] }, { @@ -205,9 +202,9 @@ "id": "8deb6c34", "metadata": {}, "source": [ - "## Another method\n", + "## Otro método\n", "\n", - "Here's the `time_to_int` function from the previous chapter." + "Aquí está la función `time_to_int` del capítulo anterior." ] }, { @@ -228,7 +225,7 @@ "id": "144e043f", "metadata": {}, "source": [ - "And here's a version rewritten as a method.\n" + "Y aquí hay una versión reescrita como método.\n" ] }, { @@ -251,14 +248,14 @@ "id": "e3a721ab", "metadata": {}, "source": [ - "The first line uses the special command `add_method_to`, which adds a method to a previously-defined class.\n", - "This command works in a Jupyter notebook, but it is not part of Python, so it won't work in other environments.\n", - "Normally, all methods of a class are inside the class definition, so they get defined at the same time as the class.\n", - "But for this book, it is helpful to define one method at a time.\n", + "La primera línea usa el comando especial `add_method_to`, que añade un método a una clase definida previamente.\n", + "Este comando funciona en un Jupyter notebook, pero no forma parte de Python, así que no funcionará en otros entornos.\n", + "Normalmente, todos los métodos de una clase están dentro de la definición de la clase, así que se definen al mismo tiempo que la clase.\n", + "Pero para este libro, es útil definir un método cada vez.\n", "\n", - "As in the previous example, the method definition is indented and the name of the parameter is `self`.\n", - "Other than that, the method is identical to the function.\n", - "Here's how we invoke it." + "Como en el ejemplo anterior, la definición del método está indentada y el nombre del parámetro es `self`.\n", + "Aparte de eso, el método es idéntico a la función.\n", + "Así es como lo invocamos." ] }, { @@ -276,7 +273,7 @@ "id": "14565505", "metadata": {}, "source": [ - "It is common to say that we \"call\" a function and \"invoke\" a method, but they mean the same thing." + "Es común decir que \"llamamos\" a una función e \"invocamos\" un método, pero significan lo mismo." ] }, { @@ -284,10 +281,10 @@ "id": "7bc24683", "metadata": {}, "source": [ - "## Static methods\n", + "## Métodos estáticos\n", "\n", - "As another example, let's consider the `int_to_time` function.\n", - "Here's the version from the previous chapter." + "Como otro ejemplo, consideremos la función `int_to_time`.\n", + "Aquí está la versión del capítulo anterior." ] }, { @@ -308,12 +305,12 @@ "id": "2b77c2a0", "metadata": {}, "source": [ - "This function takes `seconds` as a parameter and returns a new `Time` object.\n", - "If we transform it into a method of the `Time` class, we have to invoke it on a `Time` object.\n", - "But if we're trying to create a new `Time` object, what are we supposed to invoke it on?\n", + "Esta función toma `seconds` como parámetro y devuelve un nuevo objeto `Time`.\n", + "Si la transformamos en un método de la clase `Time`, tenemos que invocarla sobre un objeto `Time`.\n", + "Pero si estamos intentando crear un nuevo objeto `Time`, ¿sobre qué se supone que debemos invocarla?\n", "\n", - "We can solve this chicken-and-egg problem using a **static method**, which is a method that does not require an instance of the class to be invoked.\n", - "Here's how we rewrite this function as a static method." + "Podemos resolver este problema del huevo y la gallina usando un **método estático**, que es un método que no requiere una instancia de la clase para invocarse.\n", + "Así es como reescribimos esta función como un método estático." ] }, { @@ -336,8 +333,8 @@ "id": "a7e2e788", "metadata": {}, "source": [ - "Because it is a static method, it does not have `self` as a parameter.\n", - "To invoke it, we use `Time`, which is the class object." + "Como es un método estático, no tiene `self` como parámetro.\n", + "Para invocarlo, usamos `Time`, que es el objeto de clase." ] }, { @@ -355,7 +352,7 @@ "id": "d2f4fd5a", "metadata": {}, "source": [ - "The result is a new object that represents 9:40." + "El resultado es un nuevo objeto que representa las 9:40." ] }, { @@ -373,8 +370,8 @@ "id": "e6a18c76", "metadata": {}, "source": [ - "Now that we have `Time.int_to_time`, we can use it to write `add_time` as a method.\n", - "Here's the function from the previous chapter." + "Ahora que tenemos `Time.int_to_time`, podemos usarlo para escribir `add_time` como un método.\n", + "Aquí está la función del capítulo anterior." ] }, { @@ -395,7 +392,7 @@ "id": "8e56da48", "metadata": {}, "source": [ - "And here's a version rewritten as a method." + "Y aquí hay una versión reescrita como método." ] }, { @@ -418,9 +415,9 @@ "id": "b784a4ea", "metadata": {}, "source": [ - "`add_time` has `self` as a parameter because it is not a static method.\n", - "It is an ordinary method -- also called an **instance method**.\n", - "To invoke it, we need a `Time` instance." + "`add_time` tiene `self` como parámetro porque no es un método estático.\n", + "Es un método ordinario -- también llamado **método de instancia**.\n", + "Para invocarlo, necesitamos una instancia de `Time`." ] }, { @@ -439,10 +436,10 @@ "id": "f1c806a9", "metadata": {}, "source": [ - "## Comparing Time objects\n", + "## Comparar objetos Time\n", "\n", - "As one more example, let's write `is_after` as a method.\n", - "Here's the `is_after` function, which is a solution to an exercise in the previous chapter." + "Como un ejemplo más, escribamos `is_after` como método.\n", + "Aquí está la función `is_after`, que es una solución a un ejercicio del capítulo anterior." ] }, { @@ -461,7 +458,7 @@ "id": "8e7153e8", "metadata": {}, "source": [ - "And here it is as a method." + "Y aquí está como método." ] }, { @@ -482,9 +479,8 @@ "id": "50815aec", "metadata": {}, "source": [ - "Because we're comparing two objects, and the first parameter is `self`, we'll call the second parameter `other`.\n", - "To use this method, we have to invoke it on one object and pass the\n", - "other as an argument." + "Como estamos comparando dos objetos, y el primer parámetro es `self`, llamaremos al segundo parámetro `other`.\n", + "Para usar este método, tenemos que invocarlo sobre un objeto y pasar el otro como argumento." ] }, { @@ -502,8 +498,8 @@ "id": "cf97e358", "metadata": {}, "source": [ - "One nice thing about this syntax is that it almost reads like a question,\n", - "\"`end` is after `start`?\"" + "Una cosa buena de esta sintaxis es que casi se lee como una pregunta:\n", + "\"¿`end` va después de `start`?\"" ] }, { @@ -511,12 +507,12 @@ "id": "15a17fce", "metadata": {}, "source": [ - "## The `__str__` method\n", + "## El método `__str__`\n", "\n", - "When you write a method, you can choose almost any name you want.\n", - "However, some names have special meanings.\n", - "For example, if an object has a method named `__str__`, Python uses that method to convert the object to a string.\n", - "For example, here is a `__str__` method for a time object." + "Cuando escribes un método, puedes elegir casi cualquier nombre que quieras.\n", + "Sin embargo, algunos nombres tienen significados especiales.\n", + "Por ejemplo, si un objeto tiene un método llamado `__str__`, Python usa ese método para convertir el objeto a string.\n", + "Por ejemplo, aquí hay un método `__str__` para un objeto de hora." ] }, { @@ -538,9 +534,9 @@ "id": "b056b729", "metadata": {}, "source": [ - "This method is similar to `print_time`, from the previous chapter, except that it returns the string rather than printing it.\n", + "Este método es similar a `print_time`, del capítulo anterior, salvo que devuelve el string en lugar de imprimirlo.\n", "\n", - "You can invoke this method in the usual way." + "Puedes invocar este método de la forma habitual." ] }, { @@ -558,8 +554,8 @@ "id": "76092a0c", "metadata": {}, "source": [ - "But Python can also invoke it for you.\n", - "If you use the built-in function `str` to convert a `Time` object to a string, Python uses the `__str__` method in the `Time` class." + "Pero Python también puede invocarlo por ti.\n", + "Si usas la función integrada `str` para convertir un objeto `Time` a string, Python usa el método `__str__` de la clase `Time`." ] }, { @@ -577,7 +573,7 @@ "id": "8a26caa8", "metadata": {}, "source": [ - "And it does the same if you print a `Time` object." + "Y hace lo mismo si imprimes un objeto `Time`." ] }, { @@ -595,8 +591,8 @@ "id": "97eb30c2", "metadata": {}, "source": [ - "Methods like `__str__` are called **special methods**.\n", - "You can identify them because their names begin and end with two underscores." + "Los métodos como `__str__` se llaman **métodos especiales**.\n", + "Puedes identificarlos porque sus nombres empiezan y terminan con dos guiones bajos." ] }, { @@ -604,10 +600,10 @@ "id": "e01e9673", "metadata": {}, "source": [ - "## The init method\n", + "## El método init\n", "\n", - "The most special of the special methods is `__init__`, so-called because it initializes the attributes of a new object.\n", - "An `__init__` method for the `Time` class might look like this:" + "El más especial de los métodos especiales es `__init__`, llamado así porque inicializa los atributos de un nuevo objeto.\n", + "Un método `__init__` para la clase `Time` podría tener este aspecto:" ] }, { @@ -630,8 +626,8 @@ "id": "8ba624c3", "metadata": {}, "source": [ - "Now when we instantiate a `Time` object, Python invokes `__init__`, and passes along the arguments.\n", - "So we can create an object and initialize the attributes at the same time." + "Ahora, cuando instanciamos un objeto `Time`, Python invoca `__init__` y pasa los argumentos.\n", + "Así podemos crear un objeto e inicializar los atributos al mismo tiempo." ] }, { @@ -650,8 +646,8 @@ "id": "55e0e296", "metadata": {}, "source": [ - "In this example, the parameters are optional, so if you call `Time` with no arguments,\n", - "you get the default values." + "En este ejemplo, los parámetros son opcionales, así que si llamas a `Time` sin argumentos,\n", + "obtienes los valores por defecto." ] }, { @@ -670,7 +666,7 @@ "id": "bacb036d", "metadata": {}, "source": [ - "If you provide one argument, it overrides `hour`:" + "Si proporcionas un argumento, sobrescribe `hour`:" ] }, { @@ -689,7 +685,7 @@ "id": "37edb221", "metadata": {}, "source": [ - "If you provide two arguments, they override `hour` and `minute`." + "Si proporcionas dos argumentos, sobrescriben `hour` y `minute`." ] }, { @@ -708,10 +704,9 @@ "id": "277de217", "metadata": {}, "source": [ - "And if you provide three arguments, they override all three default\n", - "values.\n", + "Y si proporcionas tres argumentos, sobrescriben los tres valores por defecto.\n", "\n", - "When I write a new class, I almost always start by writing `__init__`, which makes it easier to create objects, and `__str__`, which is useful for debugging." + "Cuando escribo una clase nueva, casi siempre empiezo escribiendo `__init__`, que hace más fácil crear objetos, y `__str__`, que es útil para depurar." ] }, { @@ -719,14 +714,11 @@ "id": "94bbbd7d", "metadata": {}, "source": [ - "## Operator overloading\n", + "## Sobrecarga de operadores\n", "\n", - "By defining other special methods, you can specify the behavior of\n", - "operators on programmer-defined types. For example, if you define a\n", - "method named `__add__` for the `Time` class, you can use the `+`\n", - "operator on Time objects.\n", + "Definiendo otros métodos especiales, puedes especificar el comportamiento de los operadores sobre tipos definidos por el programador. Por ejemplo, si defines un método llamado `__add__` para la clase `Time`, puedes usar el operador `+` con objetos Time.\n", "\n", - "Here is an `__add__` method." + "Aquí hay un método `__add__`." ] }, { @@ -748,7 +740,7 @@ "id": "0221c9ad", "metadata": {}, "source": [ - "We can use it like this." + "Podemos usarlo así." ] }, { @@ -768,16 +760,16 @@ "id": "7cc7866e", "metadata": {}, "source": [ - "There is a lot happening when we run these three lines of code:\n", + "Están pasando muchas cosas cuando ejecutamos estas tres líneas de código:\n", "\n", - "* When we instantiate a `Time` object, the `__init__` method is invoked.\n", + "* Cuando instanciamos un objeto `Time`, se invoca el método `__init__`.\n", "\n", - "* When we use the `+` operator with a `Time` object, its `__add__` method is invoked.\n", + "* Cuando usamos el operador `+` con un objeto `Time`, se invoca su método `__add__`.\n", "\n", - "* And when we print a `Time` object, its `__str__` method is invoked.\n", + "* Y cuando imprimimos un objeto `Time`, se invoca su método `__str__`.\n", "\n", - "Changing the behavior of an operator so that it works with programmer-defined types is called **operator overloading**.\n", - "For every operator, like `+`, there is a corresponding special method, like `__add__`. " + "Cambiar el comportamiento de un operador para que funcione con tipos definidos por el programador se llama **sobrecarga de operadores**.\n", + "Para cada operador, como `+`, hay un método especial correspondiente, como `__add__`. " ] }, { @@ -785,15 +777,15 @@ "id": "b7299e62", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "A `Time` object is valid if the values of `minute` and `second` are between `0` and `60` -- including `0` but not `60` -- and if `hour` is positive.\n", - "Also, `hour` and `minute` should be integer values, but we might allow `second` to have a fraction part.\n", - "Requirements like these are called **invariants** because they should always be true.\n", - "To put it a different way, if they are not true, something has gone wrong.\n", + "Un objeto `Time` es válido si los valores de `minute` y `second` están entre `0` y `60` -- incluyendo `0` pero no `60` -- y si `hour` es positivo.\n", + "Además, `hour` y `minute` deberían ser valores enteros, pero podríamos permitir que `second` tenga una parte fraccionaria.\n", + "Requisitos como estos se llaman **invariantes** porque siempre deberían ser verdaderos.\n", + "Dicho de otra forma, si no son verdaderos, algo ha ido mal.\n", "\n", - "Writing code to check invariants can help detect errors and find their causes.\n", - "For example, you might have a method like `is_valid` that takes a Time object and returns `False` if it violates an invariant." + "Escribir código para comprobar invariantes puede ayudar a detectar errores y encontrar sus causas.\n", + "Por ejemplo, podrías tener un método como `is_valid` que toma un objeto Time y devuelve `False` si viola una invariante." ] }, { @@ -822,7 +814,7 @@ "id": "a10ad3db", "metadata": {}, "source": [ - "Then, at the beginning of each method you can check the arguments to make sure they are valid." + "Entonces, al principio de cada método puedes comprobar los argumentos para asegurarte de que son válidos." ] }, { @@ -845,8 +837,8 @@ "id": "e7c78e9a", "metadata": {}, "source": [ - "The `assert` statement evaluates the expression that follows. If the result is `True`, it does nothing; if the result is `False`, it causes an `AssertionError`.\n", - "Here's an example." + "La sentencia `assert` evalúa la expresión que le sigue. Si el resultado es `True`, no hace nada; si el resultado es `False`, causa un `AssertionError`.\n", + "Aquí hay un ejemplo." ] }, { @@ -879,7 +871,7 @@ "id": "18bd34ad", "metadata": {}, "source": [ - "`assert` statements are useful because they distinguish code that deals with normal conditions from code that checks for errors." + "Las sentencias `assert` son útiles porque distinguen el código que trata con condiciones normales del código que comprueba errores." ] }, { @@ -887,31 +879,31 @@ "id": "58b86fbe", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**object-oriented language:**\n", - "A language that provides features to support object-oriented programming, notably user-defined types.\n", + "**lenguaje orientado a objetos:**\n", + "Un lenguaje que proporciona funcionalidades para dar soporte a la programación orientada a objetos, especialmente tipos definidos por el usuario.\n", "\n", - "**method:**\n", - "A function that is defined inside a class definition and is invoked on instances of that class.\n", + "**método:**\n", + "Una función que se define dentro de una definición de clase y se invoca sobre instancias de esa clase.\n", "\n", - "**receiver:**\n", - "The object a method is invoked on.\n", + "**receptor (receiver):**\n", + "El objeto sobre el que se invoca un método.\n", "\n", - "**static method:**\n", - "A method that can be invoked without an object as receiver.\n", + "**método estático:**\n", + "Un método que puede invocarse sin un objeto como receptor.\n", "\n", - "**instance method:**\n", - "A method that must be invoked with an object as receiver.\n", + "**método de instancia:**\n", + "Un método que debe invocarse con un objeto como receptor.\n", "\n", - "**special method:**\n", - "A method that changes the way operators and some functions work with an object.\n", + "**método especial:**\n", + "Un método que cambia la forma en que los operadores y algunas funciones funcionan con un objeto.\n", "\n", - "**operator overloading:**\n", - "The process of using special methods to change the way operators with with user-defined types.\n", + "**sobrecarga de operadores:**\n", + "El proceso de usar métodos especiales para cambiar la forma en que los operadores funcionan con tipos definidos por el usuario.\n", "\n", - "**invariant:**\n", - " A condition that should always be true during the execution of a program." + "**invariante:**\n", + " Una condición que siempre debería ser verdadera durante la ejecución de un programa." ] }, { @@ -919,7 +911,7 @@ "id": "796adf5c", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -942,20 +934,20 @@ "id": "25cd6888", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "For more information about static methods, ask a virtual assistant:\n", + "Para obtener más información sobre métodos estáticos, pregunta a un asistente virtual:\n", "\n", - "* \"What's the difference between an instance method and a static method?\"\n", + "* \"¿Cuál es la diferencia entre un método de instancia y un método estático?\"\n", "\n", - "* \"Why are static methods called static?\"\n", + "* \"¿Por qué los métodos estáticos se llaman estáticos?\"\n", "\n", - "If you ask a virtual assistant to generate a static method, the result will probably begin with `@staticmethod`, which is a \"decorator\" that indicates that it is a static method.\n", - "Decorators are not covered in this book, but if you are curious, you can ask a VA for more information.\n", + "Si le pides a un asistente virtual que genere un método estático, el resultado probablemente empezará con `@staticmethod`, que es un \"decorator\" que indica que es un método estático.\n", + "Los decorators no se cubren en este libro, pero si tienes curiosidad, puedes pedirle más información a un AV.\n", "\n", - "In this chapter we rewrote several functions as methods.\n", - "Virtual assistants are generally good at this kind of code transformation.\n", - "As an example, paste the following function into a VA and ask it, \"Rewrite this function as a method of the `Time` class.\"" + "En este capítulo reescribimos varias funciones como métodos.\n", + "Los asistentes virtuales suelen ser buenos en este tipo de transformación de código.\n", + "Como ejemplo, pega la siguiente función en un AV y pídele: \"Reescribe esta función como un método de la clase `Time`.\"" ] }, { @@ -974,20 +966,20 @@ "id": "fc9f135b-e242-4ef6-83eb-8e028235c07b", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In the previous chapter, a series of exercises asked you to write a `Date` class and several functions that work with `Date` objects.\n", - "Now let's practice rewriting those functions as methods.\n", + "En el capítulo anterior, una serie de ejercicios te pidió escribir una clase `Date` y varias funciones que trabajan con objetos `Date`.\n", + "Ahora practiquemos reescribir esas funciones como métodos.\n", "\n", - "1. Write a definition for a `Date` class that represents a date -- that is, a year, month, and day of the month.\n", + "1. Escribe una definición para una clase `Date` que represente una fecha -- es decir, un año, un mes y un día del mes.\n", "\n", - "2. Write an `__init__` method that takes `year`, `month`, and `day` as parameters and assigns the parameters to attributes. Create an object that represents June 22, 1933.\n", + "2. Escribe un método `__init__` que tome `year`, `month` y `day` como parámetros y asigne los parámetros a atributos. Crea un objeto que represente el 22 de junio de 1933.\n", "\n", - "3. Write `__str__` method that uses an f-string to format the attributes and returns the result. If you test it with the `Date` you created, the result should be `1933-06-22`.\n", + "3. Escribe un método `__str__` que use un f-string para formatear los atributos y devolver el resultado. Si lo pruebas con el `Date` que creaste, el resultado debería ser `1933-06-22`.\n", "\n", - "4. Write a method called `is_after` that takes two `Date` objects and returns `True` if the first comes after the second. Create a second object that represents September 17, 1933, and check whether it comes after the first object.\n", + "4. Escribe un método llamado `is_after` que tome dos objetos `Date` y devuelva `True` si el primero viene después del segundo. Crea un segundo objeto que represente el 17 de septiembre de 1933 y comprueba si viene después del primer objeto.\n", "\n", - "Hint: You might find it useful write a method called `to_tuple` that returns a tuple that contains the attributes of a `Date` object in year-month-day order." + "Pista: Podría resultarte útil escribir un método llamado `to_tuple` que devuelva una tupla que contiene los atributos de un objeto `Date` en orden año-mes-día." ] }, { @@ -1007,7 +999,7 @@ "tags": [] }, "source": [ - "You can use these examples to test your solution." + "Puedes usar estos ejemplos para probar tu solución." ] }, { @@ -1075,13 +1067,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Licencia del código: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] } ], @@ -1107,4 +1101,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/chapters/chap16.ipynb b/chapters/chap16.ipynb index eb84e1c..65d636a 100644 --- a/chapters/chap16.ipynb +++ b/chapters/chap16.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir versiones impresas y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -42,15 +42,15 @@ "id": "e826e661", "metadata": {}, "source": [ - "# Classes and Objects\n", + "# Clases y Objetos\n", "\n", - "At this point we have defined classes and created objects that represent the time of day and the day of the year.\n", - "And we've defined methods that create, modify, and perform computations with these objects.\n", + "Hasta este punto hemos definido clases y creado objetos que representan la hora del día y el día del año.\n", + "Y hemos definido métodos que crean, modifican y realizan cálculos con estos objetos.\n", "\n", - "In this chapter we'll continue our tour of object-oriented programming (OOP) by defining classes that represent geometric objects, including points, lines, rectangles, and circles.\n", - "We'll write methods that create and modify these objects, and we'll use the `jupyturtle` module to draw them.\n", + "En este capítulo continuaremos nuestro recorrido por la programación orientada a objetos (OOP) definiendo clases que representan objetos geométricos, incluidos puntos, líneas, rectángulos y círculos.\n", + "Escribiremos métodos que crean y modifican estos objetos, y usaremos el module `jupyturtle` para dibujarlos.\n", "\n", - "I'll use these classes to demonstrate OOP topics including object identity and equivalence, shallow and deep copying, and polymorphism." + "Usaré estas clases para demostrar temas de OOP, incluida la identidad y equivalencia de objetos, las copias superficiales y profundas, y el polimorfismo." ] }, { @@ -60,22 +60,22 @@ "tags": [] }, "source": [ - "## Creating a Point\n", + "## Crear un Point\n", "\n", - "In computer graphics a location on the screen is often represented using a pair of coordinates in an `x`-`y` plane.\n", - "By convention, the point `(0, 0)` usually represents the upper-left corner of the screen, and `(x, y)` represents the point `x` units to the right and `y` units down from the origin.\n", - "Compared to the Cartesian coordinate system you might have seen in a math class, the `y` axis is upside-down.\n", + "En gráficos por computadora, una ubicación en la pantalla a menudo se representa usando un par de coordenadas en un plano `x`-`y`.\n", + "Por convención, el punto `(0, 0)` suele representar la esquina superior izquierda de la pantalla, y `(x, y)` representa el punto que está `x` unidades a la derecha e `y` unidades hacia abajo desde el origen.\n", + "Comparado con el sistema de coordenadas cartesianas que quizá hayas visto en una clase de matemáticas, el eje `y` está al revés.\n", "\n", - "There are several ways we might represent a point in Python:\n", + "Hay varias formas en que podríamos representar un punto en Python:\n", "\n", - "- We can store the coordinates separately in two variables, `x` and `y`.\n", + "- Podemos almacenar las coordenadas por separado en dos variables, `x` e `y`.\n", "\n", - "- We can store the coordinates as elements in a list or tuple.\n", + "- Podemos almacenar las coordenadas como elementos en una lista o tupla.\n", "\n", - "- We can create a new type to represent points as objects.\n", + "- Podemos crear un nuevo tipo para representar puntos como objetos.\n", "\n", - "In object-oriented programming, it would be most idiomatic to create a new type.\n", - "To do that, we'll start with a class definition for `Point`." + "En programación orientada a objetos, lo más idiomático sería crear un nuevo tipo.\n", + "Para hacerlo, empezaremos con una definición de clase para `Point`." ] }, { @@ -101,10 +101,10 @@ "id": "3d35a095", "metadata": {}, "source": [ - "The `__init__` method takes the coordinates as parameters and assigns them to attributes `x` and `y`.\n", - "The `__str__` method returns a string representation of the `Point`.\n", + "El método `__init__` toma las coordenadas como parámetros y las asigna a los atributos `x` e `y`.\n", + "El método `__str__` devuelve una representación en string del `Point`.\n", "\n", - "Now we can instantiate and display a `Point` object like this." + "Ahora podemos instanciar y mostrar un objeto `Point` así." ] }, { @@ -123,7 +123,7 @@ "id": "b3fd8858", "metadata": {}, "source": [ - "The following diagram shows the state of the new object. " + "El siguiente diagrama muestra el estado del nuevo objeto. " ] }, { @@ -164,9 +164,9 @@ "id": "713b7410", "metadata": {}, "source": [ - "As usual, a programmer-defined type is represented by a box with the name of the type outside and the attributes inside.\n", + "Como de costumbre, un tipo definido por el programador se representa con una caja con el nombre del tipo fuera y los atributos dentro.\n", "\n", - "In general, programmer-defined types are mutable, so we can write a method like `translate` that takes two numbers, `dx` and `dy`, and adds them to the attributes `x` and `y`." + "En general, los tipos definidos por el programador son mutables, así que podemos escribir un método como `translate` que tome dos números, `dx` y `dy`, y los sume a los atributos `x` e `y`." ] }, { @@ -188,8 +188,8 @@ "id": "4d183292", "metadata": {}, "source": [ - "This function translates the `Point` from one location in the plane to another.\n", - "If we don't want to modify an existing `Point`, we can use `copy` to copy the original object and then modify the copy." + "Esta función traslada el `Point` de una ubicación del plano a otra.\n", + "Si no queremos modificar un `Point` existente, podemos usar `copy` para copiar el objeto original y luego modificar la copia." ] }, { @@ -211,7 +211,7 @@ "id": "562567c2", "metadata": {}, "source": [ - "We can encapsulate those steps in another method called `translated`." + "Podemos encapsular esos pasos en otro método llamado `translated`." ] }, { @@ -234,9 +234,9 @@ "id": "a7a635ee", "metadata": {}, "source": [ - "In the same way that the `sort` method modifies a list and the `sorted` function creates a new list, now we have a `translate` method that modifies a `Point` and a `translated` method that creates a new one.\n", + "De la misma manera que el método `sort` modifica una lista y la función `sorted` crea una lista nueva, ahora tenemos un método `translate` que modifica un `Point` y un método `translated` que crea uno nuevo.\n", "\n", - "Here's an example:" + "Aquí hay un ejemplo:" ] }, { @@ -255,7 +255,7 @@ "id": "923362d2", "metadata": {}, "source": [ - "In the next section, we'll use these points to define and draw a line." + "En la siguiente sección, usaremos estos puntos para definir y dibujar una línea." ] }, { @@ -263,10 +263,10 @@ "id": "837f98fd", "metadata": {}, "source": [ - "## Creating a Line\n", + "## Crear una Line\n", "\n", - "Now let's define a class that represents the line segment between two points.\n", - "As usual, we'll start with an `__init__` method and a `__str__` method." + "Ahora definamos una clase que representa el segmento de línea entre dos puntos.\n", + "Como de costumbre, empezaremos con un método `__init__` y un método `__str__`." ] }, { @@ -290,7 +290,7 @@ "id": "d7dad30e", "metadata": {}, "source": [ - "With those two methods, we can instantiate and display a `Line` object we'll use to represent the `x` axis." + "Con esos dos métodos, podemos instanciar y mostrar un objeto `Line` que usaremos para representar el eje `x`." ] }, { @@ -309,16 +309,16 @@ "id": "e7b5fd9a", "metadata": {}, "source": [ - "When we call `print` and pass `line` as a parameter, `print` invokes `__str__` on `line`.\n", - "The `__str__` method uses an f-string to create a string representation of the `line`. \n", + "Cuando llamamos a `print` y pasamos `line` como parámetro, `print` invoca `__str__` sobre `line`.\n", + "El método `__str__` usa un f-string para crear una representación en string de la `line`. \n", "\n", - "The f-string contains two expressions in curly braces, `self.p1` and `self.p2`.\n", - "When those expressions are evaluated, the results are `Point` objects.\n", - "Then, when they are converted to strings, the `__str__` method from the `Point` class gets invoked.\n", + "El f-string contiene dos expresiones entre llaves, `self.p1` y `self.p2`.\n", + "Cuando se evalúan esas expresiones, los resultados son objetos `Point`.\n", + "Luego, cuando se convierten a strings, se invoca el método `__str__` de la clase `Point`.\n", "\n", - "That's why, when we display a `Line`, the result contains the string representations of the `Point` objects.\n", + "Por eso, cuando mostramos una `Line`, el resultado contiene las representaciones en string de los objetos `Point`.\n", "\n", - "The following object diagram shows the state of this `Line` object." + "El siguiente diagrama de objeto muestra el estado de este objeto `Line`." ] }, { @@ -365,17 +365,17 @@ "id": "079859b5", "metadata": {}, "source": [ - "String representations and object diagrams are useful for debugging, but the point of this example is to generate graphics, not text!\n", - "So we'll use the `jupyturtle` module to draw lines on the screen.\n", + "Las representaciones en string y los diagramas de objeto son útiles para depurar, ¡pero el objetivo de este ejemplo es generar gráficos, no texto!\n", + "Así que usaremos el module `jupyturtle` para dibujar líneas en la pantalla.\n", "\n", - "As we did in [Chapter 4](section_turtle_module), we'll use `make_turtle` to create a `Turtle` object and a small canvas where it can draw.\n", - "To draw lines, we'll use two new functions from the `jupyturtle` module:\n", + "Como hicimos en el [Capítulo 4](section_turtle_module), usaremos `make_turtle` para crear un objeto `Turtle` y un canvas pequeño donde pueda dibujar.\n", + "Para dibujar líneas, usaremos dos funciones nuevas del module `jupyturtle`:\n", "\n", - "* `jumpto`, which takes two coordinates and moves the `Turtle` to the given location without drawing a line, and \n", + "* `jumpto`, que toma dos coordenadas y mueve la `Turtle` a la ubicación dada sin dibujar una línea, y \n", "\n", - "* `moveto`, which moves the `Turtle` from its current location to the given location, and draws a line segment between them.\n", + "* `moveto`, que mueve la `Turtle` desde su ubicación actual a la ubicación dada, y dibuja un segmento de línea entre ellas.\n", "\n", - "Here's how we import them." + "Así es como las importamos." ] }, { @@ -393,7 +393,7 @@ "id": "9d2dd88f", "metadata": {}, "source": [ - "And here's a method that draws a `Line`." + "Y aquí hay un método que dibuja una `Line`." ] }, { @@ -415,7 +415,7 @@ "id": "2341f0e0", "metadata": {}, "source": [ - "To show how it's used, I'll create a second line that represents the `y` axis." + "Para mostrar cómo se usa, crearé una segunda línea que representa el eje `y`." ] }, { @@ -434,7 +434,7 @@ "id": "d7450736", "metadata": {}, "source": [ - "And then draw the axes." + "Y luego dibujamos los ejes." ] }, { @@ -454,8 +454,8 @@ "id": "473c156f", "metadata": {}, "source": [ - "As we define and draw more objects, we'll use these lines again.\n", - "But first let's talk about object equivalence and identity." + "A medida que definamos y dibujemos más objetos, usaremos estas líneas otra vez.\n", + "Pero primero hablemos de equivalencia e identidad de objetos." ] }, { @@ -463,9 +463,9 @@ "id": "950da673", "metadata": {}, "source": [ - "## Equivalence and identity\n", + "## Equivalencia e identidad\n", "\n", - "Suppose we create two points with the same coordinates." + "Supongamos que creamos dos puntos con las mismas coordenadas." ] }, { @@ -484,7 +484,7 @@ "id": "82b14526", "metadata": {}, "source": [ - "If we use the `==` operator to compare them, we get the default behavior for programmer-defined types -- the result is `True` only if they are the same object, which they are not." + "Si usamos el operador `==` para compararlos, obtenemos el comportamiento por defecto para tipos definidos por el programador -- el resultado es `True` solo si son el mismo objeto, y no lo son." ] }, { @@ -502,7 +502,7 @@ "id": "96be0ff8", "metadata": {}, "source": [ - "If we want to change that behavior, we can provide a special method called `__eq__` that defines what it means for two `Point` objects to be equal." + "Si queremos cambiar ese comportamiento, podemos proporcionar un método especial llamado `__eq__` que define qué significa que dos objetos `Point` sean iguales." ] }, { @@ -523,8 +523,8 @@ "id": "7f4409de", "metadata": {}, "source": [ - "This definition considers two `Points` to be equal if their attributes are equal.\n", - "Now when we use the `==` operator, it invokes the `__eq__` method, which indicates that `p1` and `p2` are considered equal." + "Esta definición considera que dos `Points` son iguales si sus atributos son iguales.\n", + "Ahora, cuando usamos el operador `==`, invoca el método `__eq__`, que indica que `p1` y `p2` se consideran iguales." ] }, { @@ -542,7 +542,7 @@ "id": "52662e6a", "metadata": {}, "source": [ - "But the `is` operator still indicates that they are different objects." + "Pero el operador `is` todavía indica que son objetos diferentes." ] }, { @@ -560,9 +560,9 @@ "id": "c008d3dd", "metadata": {}, "source": [ - "It's not possible to override the `is` operator -- it always checks whether the objects are identical.\n", - "But for programmer-defined types, you can override the `==` operator so it checks whether the objects are equivalent.\n", - "And you can define what equivalent means." + "No es posible sobrescribir el operador `is` -- siempre comprueba si los objetos son idénticos.\n", + "Pero para tipos definidos por el programador, puedes sobrescribir el operador `==` para que compruebe si los objetos son equivalentes.\n", + "Y puedes definir qué significa equivalente." ] }, { @@ -570,20 +570,20 @@ "id": "893a8cab", "metadata": {}, "source": [ - "## Creating a Rectangle\n", + "## Crear un Rectangle\n", "\n", - "Now let's define a class that represents and draws rectangles.\n", - "To keep things simple, we'll assume that the rectangles are either vertical or horizontal, not at an angle.\n", - "What attributes do you think we should use to specify the location and size of a rectangle?\n", + "Ahora definamos una clase que representa y dibuja rectángulos.\n", + "Para simplificar las cosas, asumiremos que los rectángulos son verticales u horizontales, no inclinados.\n", + "¿Qué atributos crees que deberíamos usar para especificar la ubicación y el tamaño de un rectángulo?\n", "\n", - "There are at least two possibilities:\n", + "Hay al menos dos posibilidades:\n", "\n", - "- You could specify the width and height of the rectangle and the location of one corner.\n", + "- Podrías especificar el ancho y alto del rectángulo y la ubicación de una esquina.\n", "\n", - "- You could specify two opposing corners.\n", + "- Podrías especificar dos esquinas opuestas.\n", "\n", - "At this point it's hard to say whether either is better than the other, so let's implement the first one.\n", - "Here is the class definition." + "En este punto es difícil decir si una es mejor que la otra, así que implementemos la primera.\n", + "Aquí está la definición de la clase." ] }, { @@ -612,8 +612,8 @@ "id": "df2852f3", "metadata": {}, "source": [ - "As usual, the `__init__` method assigns the parameters to attributes and the `__str__` returns a string representation of the object.\n", - "Now we can instantiate a `Rectangle` object, using a `Point` as the location of the upper-left corner." + "Como de costumbre, el método `__init__` asigna los parámetros a atributos y `__str__` devuelve una representación en string del objeto.\n", + "Ahora podemos instanciar un objeto `Rectangle`, usando un `Point` como ubicación de la esquina superior izquierda." ] }, { @@ -633,7 +633,7 @@ "id": "a9e0b5ec", "metadata": {}, "source": [ - "The following diagram shows the state of this object." + "El siguiente diagrama muestra el estado de este objeto." ] }, { @@ -686,7 +686,7 @@ "id": "bb54e6b5", "metadata": {}, "source": [ - "To draw a rectangle, we'll use the following method to make four `Point` objects to represent the corners." + "Para dibujar un rectángulo, usaremos el siguiente método para crear cuatro objetos `Point` que representen las esquinas." ] }, { @@ -711,7 +711,7 @@ "id": "20dbe0cb", "metadata": {}, "source": [ - "Then we'll make four `Line` objects to represent the sides." + "Luego crearemos cuatro objetos `Line` para representar los lados." ] }, { @@ -733,7 +733,7 @@ "id": "30fe41cc", "metadata": {}, "source": [ - "Then we'll draw the sides." + "Luego dibujaremos los lados." ] }, { @@ -756,7 +756,7 @@ "id": "390ba3e7", "metadata": {}, "source": [ - "Here's an example." + "Aquí hay un ejemplo." ] }, { @@ -777,7 +777,7 @@ "id": "532a4f69", "metadata": {}, "source": [ - "The figure includes two lines to represent the axes." + "La figura incluye dos líneas para representar los ejes." ] }, { @@ -785,13 +785,13 @@ "id": "0e713a90", "metadata": {}, "source": [ - "## Changing rectangles\n", + "## Cambiar rectángulos\n", "\n", - "Now let's consider two methods that modify rectangles, `grow` and `translate`.\n", - "We'll see that `grow` works as expected, but `translate` has a subtle bug.\n", - "See if you can figure it out before I explain.\n", + "Ahora consideremos dos métodos que modifican rectángulos, `grow` y `translate`.\n", + "Veremos que `grow` funciona como se esperaba, pero `translate` tiene un error sutil.\n", + "A ver si puedes descubrirlo antes de que lo explique.\n", "\n", - "`grow` takes two numbers, `dwidth` and `dheight`, and adds them to the `width` and `height` attributes of the rectangle." + "`grow` toma dos números, `dwidth` y `dheight`, y los suma a los atributos `width` y `height` del rectángulo." ] }, { @@ -813,7 +813,7 @@ "id": "a51913e2", "metadata": {}, "source": [ - "Here's an example that demonstrates the effect by making a copy of `box1` and invoking `grow` on the copy." + "Aquí hay un ejemplo que demuestra el efecto creando una copia de `box1` e invocando `grow` sobre la copia." ] }, { @@ -833,7 +833,7 @@ "id": "6d74da62", "metadata": {}, "source": [ - "If we draw `box1` and `box2`, we can confirm that `grow` works as expected." + "Si dibujamos `box1` y `box2`, podemos confirmar que `grow` funciona como se esperaba." ] }, { @@ -855,8 +855,8 @@ "id": "0c940008", "metadata": {}, "source": [ - "Now let's see about `translate`.\n", - "It takes two numbers, `dx` and `dy`, and moves the rectangle the given distances in the `x` and `y` directions. " + "Ahora veamos qué pasa con `translate`.\n", + "Toma dos números, `dx` y `dy`, y mueve el rectángulo las distancias dadas en las direcciones `x` e `y`. " ] }, { @@ -877,7 +877,7 @@ "id": "c27fe91d", "metadata": {}, "source": [ - "To demonstrate the effect, we'll translate `box2` to the right and down." + "Para demostrar el efecto, trasladaremos `box2` a la derecha y hacia abajo." ] }, { @@ -896,7 +896,7 @@ "id": "e01badbc", "metadata": {}, "source": [ - "Now let's see what happens if we draw `box1` and `box2` again." + "Ahora veamos qué pasa si dibujamos `box1` y `box2` otra vez." ] }, { @@ -918,8 +918,8 @@ "id": "5310bdd7", "metadata": {}, "source": [ - "It looks like both rectangles moved, which is not what we intended!\n", - "The next section explains what went wrong." + "Parece que ambos rectángulos se movieron, ¡que no era lo que pretendíamos!\n", + "La siguiente sección explica qué salió mal." ] }, { @@ -927,10 +927,10 @@ "id": "940adbeb", "metadata": {}, "source": [ - "## Deep copy\n", + "## Copia profunda\n", "\n", - "When we use `copy` to duplicate `box1`, it copies the `Rectangle` object but not the `Point` object it contains.\n", - "So `box1` and `box2` are different objects, as intended." + "Cuando usamos `copy` para duplicar `box1`, copia el objeto `Rectangle` pero no el objeto `Point` que contiene.\n", + "Así que `box1` y `box2` son objetos diferentes, como pretendíamos." ] }, { @@ -948,7 +948,7 @@ "id": "eac5309b", "metadata": {}, "source": [ - "But their `corner` attributes refer to the same object." + "Pero sus atributos `corner` se refieren al mismo objeto." ] }, { @@ -966,7 +966,7 @@ "id": "f0cc51b5", "metadata": {}, "source": [ - "The following diagram shows the state of these objects." + "El siguiente diagrama muestra el estado de estos objetos." ] }, { @@ -1012,14 +1012,14 @@ "id": "35f3e7e1", "metadata": {}, "source": [ - "What `copy` does is called a **shallow copy** because it copies the object but not the objects it contains.\n", - "As a result, changing the `width` or `height` of one `Rectangle` does not affect the other, but changing the attributes of the shared `Point` affects both!\n", - "This behavior is confusing and error-prone.\n", + "Lo que hace `copy` se llama **copia superficial** porque copia el objeto pero no los objetos que contiene.\n", + "Como resultado, cambiar el `width` o `height` de un `Rectangle` no afecta al otro, ¡pero cambiar los atributos del `Point` compartido afecta a ambos!\n", + "Este comportamiento es confuso y propenso a errores.\n", "\n", - "Fortunately, the `copy` module provides another function, called `deepcopy`, that copies not only the object but also the objects it refers to, and the objects *they* refer to, and so on. \n", - "This operation is called a **deep copy**.\n", + "Afortunadamente, el module `copy` proporciona otra función, llamada `deepcopy`, que copia no solo el objeto sino también los objetos a los que se refiere, y los objetos a los que *ellos* se refieren, y así sucesivamente. \n", + "Esta operación se llama **copia profunda**.\n", "\n", - "To demonstrate, let's start with a new `Rectangle` that contains a new `Point`." + "Para demostrarlo, empecemos con un nuevo `Rectangle` que contiene un nuevo `Point`." ] }, { @@ -1039,7 +1039,7 @@ "id": "ff9ee872", "metadata": {}, "source": [ - "And we'll make a deep copy." + "Y haremos una copia profunda." ] }, { @@ -1059,7 +1059,7 @@ "id": "7efd0e6a", "metadata": {}, "source": [ - "We can confirm that the two `Rectangle` objects refer to different `Point` objects." + "Podemos confirmar que los dos objetos `Rectangle` se refieren a objetos `Point` diferentes." ] }, { @@ -1077,8 +1077,8 @@ "id": "ca925206", "metadata": {}, "source": [ - "Because `box3` and `box4` are completely separate objects, we can modify one without affecting the other.\n", - "To demonstrate, we'll move `box3` and grow `box4`." + "Como `box3` y `box4` son objetos completamente separados, podemos modificar uno sin afectar al otro.\n", + "Para demostrarlo, moveremos `box3` y haremos crecer `box4`." ] }, { @@ -1097,7 +1097,7 @@ "id": "3ff31c7c", "metadata": {}, "source": [ - "And we can confirm that the effect is as expected." + "Y podemos confirmar que el efecto es el esperado." ] }, { @@ -1119,10 +1119,10 @@ "id": "67051d62", "metadata": {}, "source": [ - "## Polymorphism\n", + "## Polimorfismo\n", "\n", - "In the previous example, we invoked the `draw` method on two `Line` objects and two `Rectangle` objects.\n", - "We can do the same thing more concisely by making a list of objects." + "En el ejemplo anterior, invocamos el método `draw` sobre dos objetos `Line` y dos objetos `Rectangle`.\n", + "Podemos hacer lo mismo de forma más concisa creando una lista de objetos." ] }, { @@ -1140,7 +1140,7 @@ "id": "773955dd", "metadata": {}, "source": [ - "The elements of this list are different types, but they all provide a `draw` method, so we can loop through the list and invoke `draw` on each one." + "Los elementos de esta lista son de tipos diferentes, pero todos proporcionan un método `draw`, así que podemos recorrer la lista e invocar `draw` sobre cada uno." ] }, { @@ -1161,17 +1161,17 @@ "id": "a1ae190c", "metadata": {}, "source": [ - "The first and second time through the loop, `shape` refers to a `Line` object, so when `draw` is invoked, the method that runs is the one defined in the `Line` class.\n", + "La primera y segunda vez a través del bucle, `shape` se refiere a un objeto `Line`, así que cuando se invoca `draw`, el método que se ejecuta es el definido en la clase `Line`.\n", "\n", - "The third and fourth time through the loop, `shape` refers to a `Rectangle` object, so when `draw` is invoked, the method that runs is the one defined in the `Rectangle` class.\n", + "La tercera y cuarta vez a través del bucle, `shape` se refiere a un objeto `Rectangle`, así que cuando se invoca `draw`, el método que se ejecuta es el definido en la clase `Rectangle`.\n", "\n", - "In a sense, each object knows how to draw itself.\n", - "This feature is called **polymorphism**.\n", - "The word comes from Greek roots that mean \"many shaped\".\n", - "In object-oriented programming, polymorphism is the ability of different types to provide the same methods, which makes it possible to perform many computations -- like drawing shapes -- by invoking the same method on different types of objects.\n", + "En cierto sentido, cada objeto sabe cómo dibujarse a sí mismo.\n", + "Esta característica se llama **polimorfismo**.\n", + "La palabra viene de raíces griegas que significan \"muchas formas\".\n", + "En programación orientada a objetos, el polimorfismo es la capacidad de diferentes tipos para proporcionar los mismos métodos, lo que hace posible realizar muchos cálculos -- como dibujar formas -- invocando el mismo método sobre objetos de tipos diferentes.\n", "\n", - "As an exercise at the end of this chapter, you'll define a new class that represents a circle and provides a `draw` method.\n", - "Then you can use polymorphism to draw lines, rectangles, and circles." + "Como ejercicio al final de este capítulo, definirás una nueva clase que representa un círculo y proporciona un método `draw`.\n", + "Luego puedes usar polimorfismo para dibujar líneas, rectángulos y círculos." ] }, { @@ -1179,15 +1179,15 @@ "id": "74d1b48f", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "In this chapter, we ran into a subtle bug that happened because we created a `Point` that was shared by two `Rectangle` objects, and then we modified the `Point`.\n", - "In general, there are two ways to avoid problems like this: you can avoid sharing objects or you can avoid modifying them.\n", + "En este capítulo, nos encontramos con un error sutil que ocurrió porque creamos un `Point` que era compartido por dos objetos `Rectangle`, y luego modificamos el `Point`.\n", + "En general, hay dos formas de evitar problemas como este: puedes evitar compartir objetos o puedes evitar modificarlos.\n", "\n", - "To avoid sharing objects, you can use deep copy, as we did in this chapter.\n", + "Para evitar compartir objetos, puedes usar copia profunda, como hicimos en este capítulo.\n", "\n", - "To avoid modifying objects, consider replacing impure functions like `translate` with pure functions like `translated`.\n", - "For example, here's a version of `translated` that creates a new `Point` and never modifies its attributes." + "Para evitar modificar objetos, considera reemplazar funciones impuras como `translate` por funciones puras como `translated`.\n", + "Por ejemplo, aquí hay una versión de `translated` que crea un nuevo `Point` y nunca modifica sus atributos." ] }, { @@ -1208,11 +1208,11 @@ "id": "76972167", "metadata": {}, "source": [ - "Python provides features that make it easier to avoid modifying objects.\n", - "They are beyond the scope of this book, but if you are curious, ask a virtual assistant, \"How do I make a Python object immutable?\"\n", + "Python proporciona funcionalidades que hacen más fácil evitar modificar objetos.\n", + "Están fuera del alcance de este libro, pero si tienes curiosidad, pregunta a un asistente virtual: \"¿Cómo hago que un objeto de Python sea inmutable?\"\n", "\n", - "Creating a new object takes more time than modifying an existing one, but the difference seldom matters in practice.\n", - "Programs that avoid shared objects and impure functions are often easier to develop, test, and debug -- and the best kind of debugging is the kind you don't have to do." + "Crear un objeto nuevo toma más tiempo que modificar uno existente, pero la diferencia rara vez importa en la práctica.\n", + "Los programas que evitan objetos compartidos y funciones impuras suelen ser más fáciles de desarrollar, probar y depurar -- y la mejor depuración es el que no tienes que hacer." ] }, { @@ -1220,16 +1220,16 @@ "id": "02106995", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**shallow copy:**\n", - "A copy operation that does not copy nested objects.\n", + "**copia superficial:**\n", + "Una operación de copia que no copia objetos anidados.\n", "\n", - "**deep copy:**\n", - "A copy operation that also copies nested objects.\n", + "**copia profunda:**\n", + "Una operación de copia que también copia objetos anidados.\n", "\n", - "**polymorphism:**\n", - "The ability of a method or operator to work with multiple types of objects." + "**polimorfismo:**\n", + "La capacidad de un método u operador para funcionar con múltiples tipos de objetos." ] }, { @@ -1237,7 +1237,7 @@ "id": "09dd41c1", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1260,10 +1260,10 @@ "id": "da0aea86", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "For all of the following exercises, consider asking a virtual assistant for help.\n", - "If you do, you'll want include as part of the prompt the class definitions for `Point`, `Line`, and `Rectangle` -- otherwise the VA will make a guess about their attributes and functions, and the code it generates won't work." + "Para todos los ejercicios siguientes, considera pedir ayuda a un asistente virtual.\n", + "Si lo haces, querrás incluir como parte del prompt las definiciones de clase para `Point`, `Line` y `Rectangle` -- de lo contrario el AV hará una suposición sobre sus atributos y funciones, y el código que genere no funcionará." ] }, { @@ -1271,9 +1271,9 @@ "id": "7721e47b", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write an `__eq__` method for the `Line` class that returns `True` if the `Line` objects refer to `Point` objects that are equivalent, in either order." + "Escribe un método `__eq__` para la clase `Line` que devuelva `True` si los objetos `Line` se refieren a objetos `Point` que son equivalentes, en cualquier orden." ] }, { @@ -1281,7 +1281,7 @@ "id": "2e488e0f", "metadata": {}, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1314,7 +1314,7 @@ "id": "3a44e45a", "metadata": {}, "source": [ - "You can use these examples to test your code." + "Puedes usar estos ejemplos para probar tu código." ] }, { @@ -1334,7 +1334,7 @@ "id": "e825f049", "metadata": {}, "source": [ - "This example should be `True` because the `Line` objects refer to `Point` objects that are equivalent, in the same order." + "Este ejemplo debería ser `True` porque los objetos `Line` se refieren a objetos `Point` que son equivalentes, en el mismo orden." ] }, { @@ -1356,7 +1356,7 @@ "tags": [] }, "source": [ - "This example should be `True` because the `Line` objects refer to `Point` objects that are equivalent, in reverse order." + "Este ejemplo debería ser `True` porque los objetos `Line` se refieren a objetos `Point` que son equivalentes, en orden inverso." ] }, { @@ -1375,7 +1375,7 @@ "id": "8c9c787b", "metadata": {}, "source": [ - "Equivalence should always be transitive -- that is, if `line_a` and `line_b` are equivalent, and `line_a` and `line_c` are equivalent, then `line_b` and `line_c` should also be equivalent." + "La equivalencia siempre debería ser transitiva -- es decir, si `line_a` y `line_b` son equivalentes, y `line_a` y `line_c` son equivalentes, entonces `line_b` y `line_c` también deberían ser equivalentes." ] }, { @@ -1393,7 +1393,7 @@ "id": "d4f385fa", "metadata": {}, "source": [ - "This example should be `False` because the `Line` objects refer to `Point` objects that are not equivalent." + "Este ejemplo debería ser `False` porque los objetos `Line` se refieren a objetos `Point` que no son equivalentes." ] }, { @@ -1412,9 +1412,9 @@ "id": "0e629491", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a `Line` method called `midpoint` that computes the midpoint of a line segment and returns the result as a `Point` object." + "Escribe un método de `Line` llamado `midpoint` que calcule el punto medio de un segmento de línea y devuelva el resultado como un objeto `Point`." ] }, { @@ -1422,7 +1422,7 @@ "id": "b8c52d19", "metadata": {}, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1455,7 +1455,7 @@ "id": "4df69a9f", "metadata": {}, "source": [ - "You can use the following examples to test your code and draw the result." + "Puedes usar los siguientes ejemplos para probar tu código y dibujar el resultado." ] }, { @@ -1522,9 +1522,9 @@ "id": "0518c200", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a `Rectangle` method called `midpoint` that find the point in the center of a rectangle and returns the result as a `Point` object." + "Escribe un método de `Rectangle` llamado `midpoint` que encuentre el punto en el centro de un rectángulo y devuelva el resultado como un objeto `Point`." ] }, { @@ -1532,7 +1532,7 @@ "id": "c586a3ed", "metadata": {}, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1565,7 +1565,7 @@ "id": "d186c84b", "metadata": {}, "source": [ - "You can use the following example to test your code." + "Puedes usar el siguiente ejemplo para probar tu código." ] }, { @@ -1618,15 +1618,15 @@ "id": "00cbc4d9", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a `Rectangle` method called `make_cross` that:\n", + "Escribe un método de `Rectangle` llamado `make_cross` que:\n", "\n", - "1. Uses `make_lines` to get a list of `Line` objects that represent the four sides of the rectangle.\n", + "1. Use `make_lines` para obtener una lista de objetos `Line` que representan los cuatro lados del rectángulo.\n", "\n", - "2. Computes the midpoints of the four lines.\n", + "2. Calcule los puntos medios de las cuatro líneas.\n", "\n", - "3. Makes and returns a list of two `Line` objects that represent lines connecting opposite midpoints, forming a cross through the middle of the rectangle." + "3. Cree y devuelva una lista de dos objetos `Line` que representan líneas que conectan puntos medios opuestos, formando una cruz por el centro del rectángulo." ] }, { @@ -1634,7 +1634,7 @@ "id": "29e994c6", "metadata": {}, "source": [ - "You can use this outline to get started." + "Puedes usar este esquema para empezar." ] }, { @@ -1667,7 +1667,7 @@ "id": "970fcbca", "metadata": {}, "source": [ - "You can use the following example to test your code." + "Puedes usar el siguiente ejemplo para probar tu código." ] }, { @@ -1710,10 +1710,10 @@ "id": "0f707fe3", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a definition for a class named `Circle` with attributes `center` and `radius`, where `center` is a Point object and `radius` is a number.\n", - "Include special methods `__init__` and a `__str__`, and a method called `draw` that uses `jupyturtle` functions to draw the circle." + "Escribe una definición para una clase llamada `Circle` con atributos `center` y `radius`, donde `center` es un objeto Point y `radius` es un número.\n", + "Incluye los métodos especiales `__init__` y `__str__`, y un método llamado `draw` que use funciones de `jupyturtle` para dibujar el círculo." ] }, { @@ -1721,7 +1721,7 @@ "id": "cb1b24a3", "metadata": {}, "source": [ - "You can use the following function, which is a version of the `circle` function we wrote in Chapter 4." + "Puedes usar la siguiente función, que es una versión de la función `circle` que escribimos en el Capítulo 4." ] }, { @@ -1760,8 +1760,8 @@ "id": "b4325143", "metadata": {}, "source": [ - "You can use the following example to test your code.\n", - "We'll start with a square `Rectangle` with width and height `100`." + "Puedes usar el siguiente ejemplo para probar tu código.\n", + "Empezaremos con un `Rectangle` cuadrado con `width` y `height` `100`." ] }, { @@ -1780,7 +1780,7 @@ "id": "2cdecfa9", "metadata": {}, "source": [ - "The following code should create a `Circle` that fits inside the square." + "El siguiente código debería crear un `Circle` que encaje dentro del cuadrado." ] }, { @@ -1802,7 +1802,7 @@ "id": "37e94d98", "metadata": {}, "source": [ - "If everything worked correctly, the following code should draw the circle inside the square (touching on all four sides)." + "Si todo funcionó correctamente, el siguiente código debería dibujar el círculo dentro del cuadrado (tocando los cuatro lados)." ] }, { @@ -1825,13 +1825,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Licencia del código: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] } ], @@ -1857,4 +1859,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/chapters/chap17.ipynb b/chapters/chap17.ipynb index c26b8b7..e16bc63 100644 --- a/chapters/chap17.ipynb +++ b/chapters/chap17.ipynb @@ -5,8 +5,8 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", + "Puedes pedir las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." ] }, @@ -43,12 +43,12 @@ "tags": [] }, "source": [ - "# Inheritance\n", + "# Herencia\n", "\n", - "The language feature most often associated with object-oriented programming is **inheritance**.\n", - "Inheritance is the ability to define a new class that is a modified version of an existing class.\n", - "In this chapter I demonstrate inheritance using classes that represent playing cards, decks of cards, and poker hands.\n", - "If you don't play poker, don't worry -- I'll tell you what you need to know." + "La característica del lenguaje que más a menudo se asocia con la programación orientada a objetos es la **herencia**.\n", + "La herencia es la capacidad de definir una nueva clase que es una versión modificada de una clase existente.\n", + "En este capítulo demuestro la herencia usando clases que representan cartas de juego, barajas de cartas y manos de póker.\n", + "Si no juegas al póker, no te preocupes: te diré lo que necesitas saber." ] }, { @@ -56,21 +56,21 @@ "id": "b19c4dae", "metadata": {}, "source": [ - "## Representing cards\n", + "## Representar cartas\n", "\n", - "There are 52 playing cards in a standard deck -- each of them belongs to one of four suits and one of thirteen ranks. \n", - "The suits are Spades, Hearts, Diamonds, and Clubs.\n", - "The ranks are Ace, 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, and King.\n", - "Depending on which game you are playing, an Ace can be higher than King or lower than 2.\n", + "Hay 52 cartas en una baraja estándar; cada una pertenece a uno de cuatro palos y a uno de trece rangos.\n", + "Los palos son Spades, Hearts, Diamonds y Clubs.\n", + "Los rangos son Ace, 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen y King.\n", + "Dependiendo del juego al que estés jugando, un Ace puede ser más alto que King o más bajo que 2.\n", "\n", - "If we want to define a new object to represent a playing card, it is obvious what the attributes should be: `rank` and `suit`.\n", - "It is less obvious what type the attributes should be.\n", - "One possibility is to use strings like `'Spade'` for suits and `'Queen'` for ranks.\n", - "A problem with this implementation is that it would not be easy to compare cards to see which had a higher rank or suit.\n", + "Si queremos definir un nuevo objeto para representar una carta, es obvio cuáles deberían ser los atributos: `rank` y `suit`.\n", + "Es menos obvio qué tipo deberían tener los atributos.\n", + "Una posibilidad es usar strings como `'Spade'` para los palos y `'Queen'` para los rangos.\n", + "Un problema con esta implementación es que no sería fácil comparar cartas para ver cuál tiene un rango o palo más alto.\n", "\n", - "An alternative is to use integers to **encode** the ranks and suits.\n", - "In this context, \"encode\" means that we are going to define a mapping between numbers and suits, or between numbers and ranks.\n", - "This kind of encoding is not meant to be a secret (that would be \"encryption\")." + "Una alternativa es usar enteros para **codificar** los rangos y los palos.\n", + "En este contexto, \"codificar\" significa que vamos a definir una correspondencia entre números y palos, o entre números y rangos.\n", + "Este tipo de codificación no pretende ser secreta (eso sería \"cifrado\")." ] }, { @@ -78,17 +78,17 @@ "id": "a9bafecf", "metadata": {}, "source": [ - "For example, this table shows the suits and the corresponding integer codes:\n", + "Por ejemplo, esta tabla muestra los palos y los códigos enteros correspondientes:\n", "\n", "\n", - "| Suit | Code |\n", + "| Palo | Código |\n", "| --- | --- |\n", "| Spades | 3 |\n", "| Hearts | 2 |\n", "| Diamonds | 1 |\n", "| Clubs | 0 |\n", "\n", - "With this encoding, we can compare suits by comparing their codes." + "Con esta codificación, podemos comparar palos comparando sus códigos." ] }, { @@ -96,21 +96,21 @@ "id": "a1b46b1a", "metadata": {}, "source": [ - "To encode the ranks, we'll use the integer `2` to represent the rank `2`, `3` to represent `3`, and so on up to `10`.\n", - "The following table shows the codes for the face cards.\n", + "Para codificar los rangos, usaremos el entero `2` para representar el rango `2`, `3` para representar `3`, y así sucesivamente hasta `10`.\n", + "La siguiente tabla muestra los códigos para las figuras.\n", "\n", " \n", - "| Rank | Code |\n", + "| Rango | Código |\n", "| --- | --- |\n", "| Jack | 11 |\n", "| Queen | 12 |\n", "| King | 13 |\n", "\n", - "And we can use either `1` or `14` to represent an Ace, depending on whether we want it to be considered lower or higher than the other ranks.\n", + "Y podemos usar `1` o `14` para representar un Ace, dependiendo de si queremos que se considere más bajo o más alto que los demás rangos.\n", "\n", - "To represent these encodings, we will use two lists of strings, one with the names of the suits and the other with the names of the ranks.\n", + "Para representar estas codificaciones, usaremos dos listas de strings, una con los nombres de los palos y otra con los nombres de los rangos.\n", "\n", - "Here's a definition for a class that represents a playing card, with these lists of strings as **class variables**, which are variables defined inside a class definition, but not inside a method." + "Aquí tienes una definición de una clase que representa una carta, con estas listas de strings como **variables de clase**, que son variables definidas dentro de una definición de clase, pero no dentro de un método." ] }, { @@ -133,9 +133,9 @@ "id": "d63f798a", "metadata": {}, "source": [ - "The first element of `rank_names` is `None` because there is no card with rank zero. By including `None` as a place-keeper, we get a list with the nice property that the index `2` maps to the string `'2'`, and so on.\n", + "El primer elemento de `rank_names` es `None` porque no hay ninguna carta con rango cero. Al incluir `None` como marcador de posición, obtenemos una lista con la práctica propiedad de que el índice `2` se corresponde con el string `'2'`, y así sucesivamente.\n", "\n", - "Class variables are associated with the class, rather than an instance of the class, so we can access them like this." + "Las variables de clase están asociadas con la clase, en lugar de con una instancia de la clase, así que podemos acceder a ellas de esta forma." ] }, { @@ -153,7 +153,7 @@ "id": "c837fff6", "metadata": {}, "source": [ - "We can use `suit_names` to look up a suit and get the corresponding string." + "Podemos usar `suit_names` para buscar un palo y obtener el string correspondiente." ] }, { @@ -171,7 +171,7 @@ "id": "a59d905e", "metadata": {}, "source": [ - "And `rank_names` to look up a rank." + "Y `rank_names` para buscar un rango." ] }, { @@ -189,9 +189,9 @@ "id": "50dda19b", "metadata": {}, "source": [ - "## Card attributes\n", + "## Atributos de las cartas\n", "\n", - "Here's an `__init__` method for the `Card` class -- it takes `suit` and `rank` as parameters and assigns them to attributes with the same names." + "Aquí tienes un método `__init__` para la clase `Card`: toma `suit` y `rank` como parámetros y los asigna a atributos con los mismos nombres." ] }, { @@ -213,7 +213,7 @@ "id": "31a2782d", "metadata": {}, "source": [ - "Now we can create a `Card` object like this." + "Ahora podemos crear un objeto `Card` así." ] }, { @@ -231,7 +231,7 @@ "id": "85e5cf5d", "metadata": {}, "source": [ - "We can use the new instance to access the attributes." + "Podemos usar la nueva instancia para acceder a los atributos." ] }, { @@ -249,7 +249,7 @@ "id": "449225d3", "metadata": {}, "source": [ - "It is also legal to use the instance to access the class variables." + "También es válido usar la instancia para acceder a las variables de clase." ] }, { @@ -267,7 +267,7 @@ "id": "97232ffa", "metadata": {}, "source": [ - "But if you use the class, it is clearer that they are class variables, not attributes." + "Pero si usas la clase, queda más claro que son variables de clase, no atributos." ] }, { @@ -275,9 +275,9 @@ "id": "7a0a79ae", "metadata": {}, "source": [ - "## Printing cards\n", + "## Imprimir cartas\n", "\n", - "Here's a `__str__` method for `Card` objects." + "Aquí tienes un método `__str__` para objetos `Card`." ] }, { @@ -300,7 +300,7 @@ "id": "d6c51352", "metadata": {}, "source": [ - "When we print a `Card`, Python calls the `__str__` method to get a human-readable representation of the card." + "Cuando imprimimos una `Card`, Python llama al método `__str__` para obtener una representación de la carta legible para humanos." ] }, { @@ -318,10 +318,10 @@ "id": "76044b9e", "metadata": {}, "source": [ - "The following is a diagram of the `Card` class object and the Card instance.\n", - "`Card` is a class object, so its type is `type`.\n", - "`queen` is an instance of `Card`, so its type is `Card`.\n", - "To save space, I didn't draw the contents of `suit_names` and `rank_names`." + "El siguiente es un diagrama del objeto de clase `Card` y de la instancia de Carta.\n", + "`Card` es un objeto de clase, así que su tipo es `type`.\n", + "`queen` es una instancia de `Card`, así que su tipo es `Card`.\n", + "Para ahorrar espacio, no dibujé el contenido de `suit_names` y `rank_names`." ] }, { @@ -380,7 +380,7 @@ "id": "ccb8e41d", "metadata": {}, "source": [ - "Every `Card` instance has its own `suit` and `rank` attributes, but there is only one `Card` class object, and only one copy of the class variables `suit_names` and `rank_names`." + "Cada instancia de `Card` tiene sus propios atributos `suit` y `rank`, pero solo hay un objeto de clase `Card` y una sola copia de las variables de clase `suit_names` y `rank_names`." ] }, { @@ -388,9 +388,9 @@ "id": "98c6508d", "metadata": {}, "source": [ - "## Comparing cards\n", + "## Comparar cartas\n", "\n", - "Suppose we create a second `Card` object with the same suit and rank." + "Supongamos que creamos un segundo objeto `Card` con el mismo palo y rango." ] }, { @@ -409,7 +409,7 @@ "id": "3c92779c", "metadata": {}, "source": [ - "If we use the `==` operator to compare them, it checks whether `queen` and `queen2` refer to the same object." + "Si usamos el operador `==` para compararlas, comprueba si `queen` y `queen2` hacen referencia al mismo objeto." ] }, { @@ -427,8 +427,8 @@ "id": "278d8abe", "metadata": {}, "source": [ - "They don't, so it returns `False`.\n", - "We can change this behavior by defining the special method `__eq__`." + "No lo hacen, así que devuelve `False`.\n", + "Podemos cambiar este comportamiento definiendo el special método `__eq__`." ] }, { @@ -449,10 +449,10 @@ "id": "bd66a9d3", "metadata": {}, "source": [ - "`__eq__` takes two `Card` objects as parameters and returns `True` if they have the same suit and rank, even if they are not the same object.\n", - "In other words, it checks whether they are equivalent, even if they are not identical.\n", + "`__eq__` toma dos objetos `Card` como parámetros y devuelve `True` si tienen el mismo palo y rango, incluso si no son el mismo objeto.\n", + "En otras palabras, comprueba si son equivalentes, aunque no sean idénticos.\n", "\n", - "When we use the `==` operator with `Card` objects, Python calls the `__eq__` method." + "Cuando usamos el operador `==` con objetos `Card`, Python llama al método `__eq__`." ] }, { @@ -470,7 +470,7 @@ "id": "23d99d3e", "metadata": {}, "source": [ - "As a second test, let's create a card with the same suit and a different rank." + "Como segunda prueba, vamos a crear una carta con el mismo palo y un rango diferente." ] }, { @@ -489,7 +489,7 @@ "id": "c5f66404", "metadata": {}, "source": [ - "We can confirm that `queen` and `six` are not equivalent." + "Podemos confirmar que `queen` y `six` no son equivalentes." ] }, { @@ -507,8 +507,8 @@ "id": "1dcb561f", "metadata": {}, "source": [ - "If we use the `!=` operator, Python invokes a special method called `__ne__`, if it exists.\n", - "Otherwise it invokes`__eq__` and inverts the result -- so if `__eq__` returns `True`, the result of the `!=` operator is `False`." + "Si usamos el operador `!=`, Python invoca un special método llamado `__ne__`, si existe.\n", + "De lo contrario, invoca `__eq__` e invierte el resultado; así que si `__eq__` devuelve `True`, el resultado del operador `!=` es `False`." ] }, { @@ -536,8 +536,8 @@ "id": "77c48464", "metadata": {}, "source": [ - "Now suppose we want to compare two cards to see which is bigger.\n", - "If we use one of the relational operators, we get a `TypeError`." + "Ahora supongamos que queremos comparar dos cartas para ver cuál es mayor.\n", + "Si usamos uno de los operadores relacionales, obtenemos un `TypeError`." ] }, { @@ -559,11 +559,11 @@ "id": "4db0ad52", "metadata": {}, "source": [ - "To change the behavior of the `<` operator, we can define a special method called `__lt__`, which is short for \"less than\".\n", - "For the sake of this example, let's assume that suit is more important than rank -- so all Spades outrank all Hearts, which outrank all Diamonds, and so on.\n", - "If two cards have the same suit, the one with the higher rank wins.\n", + "Para cambiar el comportamiento del operador `<`, podemos definir un special método llamado `__lt__`, abreviatura de \"less than\".\n", + "Para este ejemplo, supongamos que el palo es más importante que el rango: por eso todos los Spades superan a todos los Hearts, que superan a todos los Diamonds, y así sucesivamente.\n", + "Si dos cartas tienen el mismo palo, gana la que tiene el rango más alto.\n", "\n", - "To implement this logic, we'll use the following method, which returns a tuple containing a card's suit and rank, in that order." + "Para implementar esta lógica, usaremos el siguiente método, que devuelve una tupla que contiene el palo y el rango de una carta, en ese orden." ] }, { @@ -584,7 +584,7 @@ "id": "d5062348", "metadata": {}, "source": [ - "We can use this method to write `__lt__`." + "Podemos usar este método para escribir `__lt__`." ] }, { @@ -605,10 +605,10 @@ "id": "bd9ef8f5", "metadata": {}, "source": [ - "Tuple comparison compares the first elements from each tuple, which represent the suits.\n", - "If they are the same, it compares the second elements, which represent the ranks.\n", + "La comparación de tuplas compara los primeros elementos de cada tupla, que representan los palos.\n", + "Si son iguales, compara los segundos elementos, que representan los rangos.\n", "\n", - "Now if we use the `<` operator, it invokes the `__lt__` method." + "Ahora, si usamos el operador `<`, invoca el método `__lt__`." ] }, { @@ -626,8 +626,8 @@ "id": "83289a77", "metadata": {}, "source": [ - "If we use the `>` operator, it invokes a special method called `__gt__`, if it exists.\n", - "Otherwise it invokes `__lt__` with the arguments in the opposite order." + "Si usamos el operador `>`, invoca un special método llamado `__gt__`, si existe.\n", + "De lo contrario, invoca `__lt__` con los argumentos en el orden opuesto." ] }, { @@ -655,7 +655,7 @@ "id": "5d0a91de", "metadata": {}, "source": [ - "Finally, if we use the `<=` operator, it invokes a special method called `__le__`." + "Por último, si usamos el operador `<=`, invoca un special método llamado `__le__`." ] }, { @@ -676,7 +676,7 @@ "id": "6c85ac69", "metadata": {}, "source": [ - "So we can check whether one card is less than or equal to another." + "Así que podemos comprobar si una carta es menor o igual que otra." ] }, { @@ -704,7 +704,7 @@ "id": "7af7b289", "metadata": {}, "source": [ - "If we use the `>=` operator, it uses `__ge__` if it exists. Otherwise, it invokes `__le__` with the arguments in the opposite order." + "Si usamos el operador `>=`, usa `__ge__` si existe. De lo contrario, invoca `__le__` con los argumentos en el orden opuesto." ] }, { @@ -722,9 +722,9 @@ "id": "fe2a81cc", "metadata": {}, "source": [ - "As we have defined them, these methods are complete in the sense that we can compare any two `Card` objects, and consistent in the sense that results from different operators don't contradict each other.\n", - "With these two properties, we can say that `Card` objects are **totally ordered**.\n", - "And that means, as we'll see soon, that they can be sorted." + "Tal como los hemos definido, estos métodos son completos en el sentido de que podemos comparar dos objetos `Card` cualesquiera, y consistentes en el sentido de que los resultados de distintos operadores no se contradicen entre sí.\n", + "Con estas dos propiedades, podemos decir que los objetos `Card` están **totalmente ordenados**.\n", + "Y eso significa, como veremos pronto, que se pueden ordenar." ] }, { @@ -732,11 +732,10 @@ "id": "199f8bfc", "metadata": {}, "source": [ - "## Decks\n", + "## Barajas\n", "\n", - "Now that we have objects that represent cards, let's define objects that represent decks.\n", - "The following is a class definition for `Deck` with\n", - "an `__init__` method takes a list of `Card` objects as a parameter and assigns it to an attribute called `cards`." + "Ahora que tenemos objetos que representan cartas, definamos objetos que representen barajas.\n", + "La siguiente es una definición de clase para `Deck` con un método `__init__` que toma una lista de objetos `Card` como parámetro y la asigna a un atributo llamado `cards`." ] }, { @@ -757,7 +756,7 @@ "id": "2d529789", "metadata": {}, "source": [ - "To create a list that contains the 52 cards in a standard deck, we'll use the following static method." + "Para crear una lista que contiene las 52 cartas de una baraja estándar, usaremos el siguiente método estático." ] }, { @@ -783,11 +782,11 @@ "id": "47ae8f71", "metadata": {}, "source": [ - "In `make_cards`, the outer loop enumerates the suits from `0` to `3`.\n", - "The inner loop enumerates the ranks from `2` to `14` -- where `14` represents an Ace that outranks a King.\n", - "Each iteration creates a new `Card` with the current suit and rank, and appends it to `cards`.\n", + "En `make_cards`, el bucle externo enumera los palos de `0` a `3`.\n", + "El bucle interno enumera los rangos de `2` a `14`, donde `14` representa un Ace que supera a un King.\n", + "Cada iteración crea una nueva `Card` con el palo y el rango actuales, y la añade a `cards`.\n", "\n", - "Here's how we make a list of cards and a `Deck` object that contains it." + "Así es como creamos una lista de cartas y un objeto `Deck` que la contiene." ] }, { @@ -807,7 +806,7 @@ "id": "032ec302", "metadata": {}, "source": [ - "It contains 52 cards, as intended." + "Contiene 52 cartas, tal como queríamos." ] }, { @@ -817,9 +816,9 @@ "tags": [] }, "source": [ - "## Printing the deck\n", + "## Imprimir la baraja\n", "\n", - "Here is a `__str__` method for `Deck`." + "Aquí tienes un método `__str__` para `Deck`." ] }, { @@ -843,9 +842,9 @@ "id": "660f18e6", "metadata": {}, "source": [ - "This method demonstrates an efficient way to accumulate a large string -- building a list of strings and then using the string method `join`. \n", + "Este método demuestra una forma eficiente de acumular un string grande: construir una lista de strings y luego usar el método de string `join`.\n", "\n", - "We'll test this method with a deck that only contains two cards." + "Probaremos este método con una baraja que solo contiene dos cartas." ] }, { @@ -863,7 +862,7 @@ "id": "91c7145f", "metadata": {}, "source": [ - "If we call `str`, it invokes `__str__`." + "Si llamamos a `str`, invoca `__str__`." ] }, { @@ -881,9 +880,9 @@ "id": "00270656", "metadata": {}, "source": [ - "When Jupyter displays a string, it shows the \"representational\" form of the string, which represents a newline with the sequence `\\n`.\n", + "Cuando Jupyter muestra un string, enseña la forma \"representacional\" del string, que representa un salto de línea con la secuencia `\\n`.\n", "\n", - "However, if we print the result, Jupyter shows the \"printable\" form of the string, which prints the newline as whitespace." + "Sin embargo, si imprimimos el resultado, Jupyter muestra la forma \"imprimible\" del string, que imprime el salto de línea como espacio en blanco." ] }, { @@ -901,7 +900,7 @@ "id": "e97810c4", "metadata": {}, "source": [ - "So the cards appear on separate lines." + "Así que las cartas aparecen en líneas separadas." ] }, { @@ -909,11 +908,11 @@ "id": "52d3d597", "metadata": {}, "source": [ - "## Add, remove, shuffle and sort\n", + "## Añadir, quitar, barajar y ordenar\n", "\n", - "To deal cards, we would like a method that removes a card from the deck\n", - "and returns it. The list method `pop` provides a convenient way to do\n", - "that." + "Para repartir cartas, nos gustaría tener un método que quite una carta de la baraja\n", + "y la devuelva. El método de lista `pop` proporciona una forma cómoda de\n", + "hacerlo." ] }, { @@ -934,7 +933,7 @@ "id": "1fcef47b", "metadata": {}, "source": [ - "Here's how we use it." + "Así es como lo usamos." ] }, { @@ -953,7 +952,7 @@ "id": "65427954", "metadata": {}, "source": [ - "We can confirm that there are `51` cards left in the deck." + "Podemos confirmar que quedan `51` cartas en la baraja." ] }, { @@ -971,7 +970,7 @@ "id": "7ca3614e", "metadata": {}, "source": [ - "To add a card, we can use the list method `append`." + "Para añadir una carta, podemos usar el método de lista `append`." ] }, { @@ -992,7 +991,7 @@ "id": "2ecd8703", "metadata": {}, "source": [ - "As an example, we can put back the card we just popped." + "Como ejemplo, podemos volver a poner la carta que acabamos de extraer." ] }, { @@ -1011,7 +1010,7 @@ "id": "8b5af8ce", "metadata": {}, "source": [ - "To shuffle the deck, we can use the `shuffle` function from the `random` module:" + "Para barajar la baraja, podemos usar la función `shuffle` del module `random`:" ] }, { @@ -1057,7 +1056,7 @@ "id": "a8cb1a7f", "metadata": {}, "source": [ - "If we shuffle the deck and print the first few cards, we can see that they are in no apparent order." + "Si barajamos la baraja e imprimimos las primeras cartas, podemos ver que no están en ningún orden aparente." ] }, { @@ -1077,7 +1076,7 @@ "id": "a198dde3", "metadata": {}, "source": [ - "To sort the cards, we can use the list method `sort`, which sorts the elements \"in place\" -- that is, it modifies the list rather than creating a new list." + "Para ordenar las cartas, podemos usar el método de lista `sort`, que ordena los elementos \"in place\"; es decir, modifica la lista en lugar de crear una lista nueva." ] }, { @@ -1098,7 +1097,7 @@ "id": "d4f017c7", "metadata": {}, "source": [ - "When we invoke `sort`, it uses the `__lt__` method to compare cards." + "Cuando invocamos `sort`, usa el método `__lt__` para comparar cartas." ] }, { @@ -1116,7 +1115,7 @@ "id": "2bb966fd", "metadata": {}, "source": [ - "If we print the first few cards, we can confirm that they are in increasing order." + "Si imprimimos las primeras cartas, podemos confirmar que están en orden creciente." ] }, { @@ -1135,8 +1134,8 @@ "id": "5c41ce4d", "metadata": {}, "source": [ - "In this example, `Deck.sort` doesn't do anything other than invoke `list.sort`.\n", - "Passing along responsibility like this is called **delegation**." + "En este ejemplo, `Deck.sort` no hace nada más que invocar `list.sort`.\n", + "Pasar la responsabilidad de esta forma se llama **delegación**." ] }, { @@ -1144,18 +1143,18 @@ "id": "0502961b", "metadata": {}, "source": [ - "## Parents and children\n", + "## Padres e hijos\n", "\n", - "Inheritance is the ability to define a new class that is a modified version of an existing class.\n", - "As an example, let's say we want a class to represent a \"hand\", that is, the cards held by one player.\n", + "La herencia es la capacidad de definir una nueva clase que es una versión modificada de una clase existente.\n", + "Como ejemplo, digamos que queremos una clase para representar una \"mano\", es decir, las cartas que tiene un jugador.\n", "\n", - "* A hand is similar to a deck -- both are made up of a collection of cards, and both require operations like adding and removing cards.\n", + "* Una mano es similar a una baraja: ambas están formadas por una colección de cartas, y ambas requieren operaciones como añadir y quitar cartas.\n", "\n", - "* A hand is also different from a deck -- there are operations we want for hands that don't make sense for a deck. For example, in poker we might compare two hands to see which one wins. In bridge, we might compute a score for a hand in order to make a bid.\n", + "* Una mano también es diferente de una baraja: hay operaciones que queremos para manos que no tienen sentido para una baraja. Por ejemplo, en póker podríamos comparar dos manos para ver cuál gana. En bridge, podríamos calcular la puntuación de una mano para hacer una apuesta.\n", "\n", - "This relationship between classes -- where one is a specialized version of another -- lends itself to inheritance. \n", + "Esta relación entre clases, donde una es una versión especializada de otra, se presta a la herencia.\n", "\n", - "To define a new class that is based on an existing class, we put the name of the existing class in parentheses." + "Para definir una nueva clase basada en una clase existente, ponemos el nombre de la clase existente entre paréntesis." ] }, { @@ -1174,9 +1173,9 @@ "id": "339295cd", "metadata": {}, "source": [ - "This definition indicates that `Hand` inherits from `Deck`, which means that `Hand` objects can access methods defined in `Deck`, like `take_card` and `put_card`.\n", + "Esta definición indica que `Hand` hereda de `Deck`, lo que significa que los objetos `Hand` pueden acceder a métodos definidos en `Deck`, como `take_card` y `put_card`.\n", "\n", - "`Hand` also inherits `__init__` from `Deck`, but if we define `__init__` in the `Hand` class, it overrides the one in the `Deck` class." + "`Hand` también hereda `__init__` de `Deck`, pero si definimos `__init__` en la clase `Hand`, sobrescribe el de la clase `Deck`." ] }, { @@ -1198,8 +1197,8 @@ "id": "9b6a763a", "metadata": {}, "source": [ - "This version of `__init__` takes an optional string as a parameter, and always starts with an empty list of cards.\n", - "When we create a `Hand`, Python invokes this method, not the one in `Deck` -- which we can confirm by checking that the result has a `label` attribute." + "Esta versión de `__init__` toma un string opcional como parámetro y siempre empieza con una lista vacía de cartas.\n", + "Cuando creamos una `Hand`, Python invoca este método, no el de `Deck`, lo que podemos confirmar comprobando que el resultado tiene un atributo `label`." ] }, { @@ -1218,7 +1217,7 @@ "id": "b1e2a67d", "metadata": {}, "source": [ - "To deal a card, we can use `take_card` to remove a card from a `Deck`, and `put_card` to add the card to a `Hand`." + "Para repartir una carta, podemos usar `take_card` para quitar una carta de un `Deck`, y `put_card` para añadir la carta a una `Hand`." ] }, { @@ -1239,7 +1238,7 @@ "id": "dc2ce06b", "metadata": {}, "source": [ - "Let's encapsulate this code in a `Deck` method called `move_cards`." + "Encapsulemos este código en un método de `Deck` llamado `move_cards`." ] }, { @@ -1262,8 +1261,8 @@ "id": "16e6c404", "metadata": {}, "source": [ - "This method is polymorphic -- that is, it works with more than one type: `self` and `other` can be either a `Hand` or a `Deck`.\n", - "So we can use this method to deal a card from `Deck` to a `Hand`, from one `Hand` to another, or from a `Hand` back to a `Deck`." + "Este método es polimórfico; es decir, funciona con más de un tipo: `self` y `other` pueden ser tanto una `Hand` como un `Deck`.\n", + "Así que podemos usar este método para repartir una carta de `Deck` a `Hand`, de una `Hand` a otra, o de una `Hand` de vuelta a un `Deck`." ] }, { @@ -1271,18 +1270,18 @@ "id": "e648a722", "metadata": {}, "source": [ - "When a new class inherits from an existing one, the existing one is called the **parent** and the new class is called the **child**. In general:\n", + "Cuando una nueva clase hereda de una existente, la existente se llama **padre** y la nueva clase se llama **hija**. En general:\n", "\n", - "* Instances of the child class should have all of the attributes of the parent class, but they can have additional attributes.\n", + "* Las instancias de la clase hija deberían tener todos los atributos de la clase padre, pero pueden tener atributos adicionales.\n", "\n", - "* The child class should have all of the methods of the parent class, but it can have additional methods.\n", + "* La clase hija debería tener todos los métodos de la clase padre, pero puede tener métodos adicionales.\n", "\n", - "* If a child class overrides a method from the parent class, the new method should take the same parameters and return a compatible result.\n", + "* Si una clase hija sobrescribe un método de la clase padre, el nuevo método debería tomar los mismos parámetros y devolver un resultado compatible.\n", "\n", - "This set of rules is called the \"Liskov substitution principle\" after computer scientist Barbara Liskov.\n", + "Este conjunto de reglas se llama \"principio de sustitución de Liskov\", en honor a la científica de la computación Barbara Liskov.\n", "\n", - "If you follow these rules, any function or method designed to work with an instance of a parent class, like a `Deck`, will also work with instances of a child class, like `Hand`.\n", - "If you violate these rules, your code will collapse like a house of cards (sorry)." + "Si sigues estas reglas, cualquier función o método diseñado para trabajar con una instancia de una clase padre, como un `Deck`, también funcionará con instancias de una clase hija, como `Hand`.\n", + "Si rompes estas reglas, tu código se derrumbará como un castillo de naipes (lo siento)." ] }, { @@ -1290,12 +1289,12 @@ "id": "e80873dd", "metadata": {}, "source": [ - "## Specialization\n", + "## Especialización\n", "\n", - "Let's make a class called `BridgeHand` that represents a hand in bridge -- a widely played card game.\n", - "We'll inherit from `Hand` and add a new method called `high_card_point_count` that evaluates a hand using a \"high card point\" method, which adds up points for the high cards in the hand.\n", + "Hagamos una clase llamada `BridgeHand` que representa una mano en bridge, un juego de cartas muy popular.\n", + "Heredaremos de `Hand` y añadiremos un nuevo método llamado `high_card_point_count` que evalúa una mano usando un método de \"high carta point\", que suma puntos por las cartas altas de la mano.\n", "\n", - "Here's a class definition that contains as a class variable a dictionary that maps from card names to their point values." + "Aquí tienes una definición de clase que contiene, como variable de clase, un diccionario que asigna nombres de cartas a sus valores de puntos." ] }, { @@ -1321,7 +1320,7 @@ "id": "4c038717", "metadata": {}, "source": [ - "Given the rank of a card, like `12`, we can use `Card.rank_names` to get the string representation of the rank, and then use `hcp_dict` to get its score." + "Dado el rango de una carta, como `12`, podemos usar `Card.rank_names` para obtener la representación en string del rango, y luego usar `hcp_dict` para obtener su puntuación." ] }, { @@ -1342,7 +1341,7 @@ "id": "c3a7820d", "metadata": {}, "source": [ - "The following method loops through the cards in a `BridgeHand` and adds up their scores." + "El siguiente método recorre las cartas de una `BridgeHand` y suma sus puntuaciones." ] }, { @@ -1384,7 +1383,7 @@ "id": "94535d8e", "metadata": {}, "source": [ - "To test it, we'll deal a hand with five cards -- a bridge hand usually has thirteen, but it's easier to test code with small examples." + "Para probarlo, repartiremos una mano con cinco cartas; una mano de bridge normalmente tiene trece, pero es más fácil probar código con ejemplos pequeños." ] }, { @@ -1406,7 +1405,7 @@ "id": "a1bd2521", "metadata": {}, "source": [ - "And here is the total score for the King and Queen." + "Y aquí está la puntuación total para el King y la Queen." ] }, { @@ -1424,8 +1423,8 @@ "id": "b4f5e107", "metadata": {}, "source": [ - "`BridgeHand` inherits the variables and methods of `Hand` and adds a class variable and a method that are specific to bridge.\n", - "This way of using inheritance is called **specialization** because it defines a new class that is specialized for a particular use, like playing bridge." + "`BridgeHand` hereda las variables y métodos de `Hand` y añade una variable de clase y un método que son específicos de bridge.\n", + "Esta forma de usar la herencia se llama **especialización** porque define una nueva clase especializada para un uso particular, como jugar al bridge." ] }, { @@ -1433,20 +1432,20 @@ "id": "b493622d", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "Inheritance is a useful feature.\n", - "Some programs that would be repetitive without inheritance can be written more concisely with it.\n", - "Also, inheritance can facilitate code reuse, since you can customize the behavior of a parent class without having to modify it.\n", - "In some cases, the inheritance structure reflects the natural structure of the problem, which makes the design easier to understand.\n", + "La herencia es una característica útil.\n", + "Algunos programas que serían repetitivos sin herencia se pueden escribir de forma más concisa con ella.\n", + "Además, la herencia puede facilitar la reutilización de código, ya que puedes personalizar el comportamiento de una clase padre sin tener que modificarla.\n", + "En algunos casos, la estructura de herencia refleja la estructura natural del problema, lo que hace que el diseño sea más fácil de entender.\n", "\n", - "On the other hand, inheritance can make programs difficult to read.\n", - "When a method is invoked, it is sometimes not clear where to find its definition -- the relevant code may be spread across several modules.\n", + "Por otro lado, la herencia puede hacer que los programas sean difíciles de leer.\n", + "Cuando se invoca un método, a veces no está claro dónde encontrar su definición: el código relevante puede estar repartido entre varios modules.\n", "\n", - "Any time you are unsure about the flow of execution through your program, the simplest solution is to add print statements at the beginning of the relevant methods.\n", - "If `Deck.shuffle` prints a message that says something like `Running Deck.shuffle`, then as the program runs it traces the flow of execution.\n", + "Siempre que tengas dudas sobre el flujo de ejecución de tu programa, la solución más sencilla es añadir sentencias print al principio de los métodos relevantes.\n", + "Si `Deck.shuffle` imprime un mensaje que dice algo como `Running Deck.shuffle`, entonces, a medida que el programa se ejecuta, traza el flujo de ejecución.\n", "\n", - "As an alternative, you could use the following function, which takes an object and a method name (as a string) and returns the class that provides the definition of the method." + "Como alternativa, podrías usar la siguiente función, que toma un objeto y el nombre de un método (como string) y devuelve la clase que proporciona la definición del método." ] }, { @@ -1469,10 +1468,10 @@ "id": "1ee8f2da", "metadata": {}, "source": [ - "`find_defining_class` uses the `mro` method to get the list of class objects (types) that will be searched for methods.\n", - "\"MRO\" stands for \"method resolution order\", which is the sequence of classes Python searches to \"resolve\" a method name -- that is, to find the function object the name refers to.\n", + "`find_defining_class` usa el método `mro` para obtener la lista de objetos clase (tipos) que se buscarán para encontrar métodos.\n", + "\"MRO\" significa \"método resolution order\", que es la secuencia de clases que Python busca para \"resolver\" el nombre de un método; es decir, para encontrar el objeto función al que se refiere el nombre.\n", "\n", - "As an example, let's instantiate a `BridgeHand` and then find the defining class of `shuffle`." + "Como ejemplo, vamos a instanciar una `BridgeHand` y luego encontrar la clase que define `shuffle`." ] }, { @@ -1491,7 +1490,7 @@ "id": "eeb70a14", "metadata": {}, "source": [ - "The `shuffle` method for the `BridgeHand` object is the one in `Deck`." + "El método `shuffle` para el objeto `BridgeHand` es el que está en `Deck`." ] }, { @@ -1499,31 +1498,31 @@ "id": "07f4c4bb", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**inheritance:**\n", - " The ability to define a new class that is a modified version of a previously defined class.\n", + "**herencia (herencia):**\n", + " La capacidad de definir una nueva clase que es una versión modificada de una clase definida previamente.\n", "\n", - "**encode:**\n", - " To represent one set of values using another set of values by constructing a mapping between them.\n", + "**codificar (encode):**\n", + " Representar un conjunto de valores usando otro conjunto de valores construyendo una correspondencia entre ellos.\n", "\n", - "**class variable:**\n", - "A variable defined inside a class definition, but not inside any method.\n", + "**variable de clase:**\n", + "Una variable definida dentro de una definición de clase, pero no dentro de ningún método.\n", "\n", - "**totally ordered:**\n", - "A set of objects is totally ordered if we can compare any two elements and the results are consistent.\n", + "**totalmente ordenado:**\n", + "Un conjunto de objetos está totalmente ordenado si podemos comparar dos elementos cualesquiera y los resultados son consistentes.\n", "\n", - "**delegation:**\n", - "When one method passes responsibility to another method to do most or all of the work.\n", + "**delegación:**\n", + "Cuando un método pasa la responsabilidad a otro método para que haga la mayor parte o todo el trabajo.\n", "\n", - "**parent class:**\n", - "A class that is inherited from.\n", + "**clase padre:**\n", + "Una clase de la que se hereda.\n", "\n", - "**child class:**\n", - "A class that inherits from another class.\n", + "**clase hija:**\n", + "Una clase que hereda de otra clase.\n", "\n", - "**specialization:**\n", - "A way of using inheritance to create a new class that is a specialized version of an existing class." + "**especialización:**\n", + "Una forma de usar la herencia para crear una nueva clase que es una versión especializada de una clase existente." ] }, { @@ -1531,7 +1530,7 @@ "id": "1aea9b2b", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios" ] }, { @@ -1554,25 +1553,25 @@ "id": "7913e6b1", "metadata": {}, "source": [ - "### Ask a Virtual Assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "When it goes well, object-oriented programming can make programs more readable, testable, and reusable.\n", - "But it can also make programs complicated and hard to maintain.\n", - "As a result, OOP is a topic of controversy -- some people love it, and some people don't.\n", + "Cuando sale bien, la programación orientada a objetos puede hacer que los programas sean más legibles, fáciles de probar y reutilizables.\n", + "Pero también puede hacer que los programas sean complicados y difíciles de mantener.\n", + "Como resultado, la OOP es un tema controvertido: algunas personas la adoran y a otras no les gusta.\n", "\n", - "To learn more about the topic, ask a virtual assistant:\n", + "Para aprender más sobre el tema, pregunta a un asistente virtual:\n", "\n", - "* What are some pros and cons of object-oriented programming?\n", + "* ¿Cuáles son algunas ventajas y desventajas de la programación orientada a objetos?\n", "\n", - "* What does it mean when people say \"favor composition over inheritance\"?\n", + "* ¿Qué significa cuando la gente dice \"favor composition over herencia\"?\n", "\n", - "* What is the Liskov substitution principle?\n", + "* ¿Qué es el principio de sustitución de Liskov?\n", "\n", - "* Is Python an object-oriented language?\n", + "* ¿Python es un lenguaje orientado a objetos?\n", "\n", - "* What are the requirements for a set to be totally ordered?\n", + "* ¿Cuáles son los requisitos para que un conjunto esté totalmente ordenado?\n", "\n", - "And as always, consider using a virtual assistant to help with the following exercises." + "Y, como siempre, considera usar un asistente virtual para ayudarte con los siguientes ejercicios." ] }, { @@ -1580,10 +1579,10 @@ "id": "1af81269", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In contract bridge, a \"trick\" is a round of play in which each of four players plays one card.\n", - "To represent those cards, we'll define a class that inherits from `Deck`." + "En bridge de contrato, una \"trick\" es una ronda de juego en la que cada uno de cuatro jugadores juega una carta.\n", + "Para representar esas cartas, definiremos una clase que hereda de `Deck`." ] }, { @@ -1602,10 +1601,10 @@ "id": "9916d562", "metadata": {}, "source": [ - "As an example, consider this trick, where the first player leads with the 3 of Diamonds, which means that Diamonds are the \"led suit\".\n", - "The second and third players \"follow suit\", which means they play a card with the led suit.\n", - "The fourth player plays a card of a different suit, which means they cannot win the trick.\n", - "So the winner of this trick is the third player, because they played the highest card in the led suit." + "Como ejemplo, considera esta trick, donde el primer jugador empieza con el 3 of Diamonds, lo que significa que Diamonds es el \"led suit\".\n", + "El segundo y el tercer jugador \"follow suit\", lo que significa que juegan una carta del palo que se ha iniciado.\n", + "El cuarto jugador juega una carta de un palo diferente, lo que significa que no puede ganar la trick.\n", + "Así que el ganador de esta trick es el tercer jugador, porque jugó la carta más alta del led suit." ] }, { @@ -1628,8 +1627,8 @@ "id": "c94a1337", "metadata": {}, "source": [ - "Write a `Trick` method called `find_winner` that loops through the cards in the `Trick` and returns the index of the card that wins.\n", - "In the previous example, the index of the winning card is `2`." + "Escribe un método de `Trick` llamado `find_winner` que recorra las cartas de la `Trick` y devuelva el índice de la carta ganadora.\n", + "En el ejemplo anterior, el índice de la carta ganadora es `2`." ] }, { @@ -1639,7 +1638,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1676,7 +1675,7 @@ "tags": [] }, "source": [ - "If you test your method with the previous example, the index of the winning card should be `2`." + "Si pruebas tu método con el ejemplo anterior, el índice de la carta ganadora debería ser `2`." ] }, { @@ -1696,11 +1695,11 @@ "id": "b5b9fb4b", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "The next few exercises ask to you write functions that classify poker hands.\n", - "If you are not familiar with poker, I'll explain what you need to know.\n", - "We'll use the following class to represent poker hands." + "Los siguientes ejercicios te piden escribir funciones que clasifiquen manos de póker.\n", + "Si no estás familiarizado con el póker, explicaré lo que necesitas saber.\n", + "Usaremos la siguiente clase para representar manos de póker." ] }, { @@ -1733,18 +1732,18 @@ "id": "2daecced", "metadata": {}, "source": [ - "`PokerHand` provides two methods that will help with the exercises.\n", + "`PokerHand` proporciona dos métodos que ayudarán con los ejercicios.\n", "\n", - "* `get_suit_counts` loops through the cards in the `PokerHand`, counts the number of cards in each suit, and returns a dictionary that maps from each suit code to the number of times it appears.\n", + "* `get_suit_counts` recorre las cartas de la `PokerHand`, cuenta el número de cartas de cada palo y devuelve un diccionario que asigna cada código de palo al número de veces que aparece.\n", "\n", - "* `get_rank_counts` does the same thing with the ranks of the cards, returning a dictionary that maps from each rank code to the number of times it appears.\n", + "* `get_rank_counts` hace lo mismo con los rangos de las cartas, devolviendo un diccionario que asigna cada código de rango al número de veces que aparece.\n", "\n", - "All of the exercises that follow can be done using only the Python features we have learned so far, but some of them are more difficult than most of the previous exercises.\n", - "I encourage you to ask a virtual assistant for help.\n", + "Todos los ejercicios que siguen se pueden resolver usando solo las características de Python que hemos aprendido hasta ahora, pero algunos son más difíciles que la mayoría de los ejercicios anteriores.\n", + "Te animo a pedir ayuda a un asistente virtual.\n", "\n", - "For problems like this, it often works well to ask for general advice about strategies and algorithms.\n", - "Then you can either write the code yourself or ask for code.\n", - "If you ask for code, you might want to provide the relevant class definitions as part of the prompt." + "Para problemas como este, suele funcionar bien pedir consejos generales sobre estrategias y algorithms.\n", + "Luego puedes escribir el código tú mismo o pedir código.\n", + "Si pides código, quizá quieras proporcionar las definiciones de clase relevantes como parte del prompt." ] }, { @@ -1752,10 +1751,10 @@ "id": "ccc2d8ca", "metadata": {}, "source": [ - "As a first exercise, we'll write a method called `has_flush` that checks whether a hand has a \"flush\" -- that is, whether it contains at least five cards of the same suit.\n", + "Como primer ejercicio, escribiremos un método llamado `has_flush` que comprueba si una mano tiene un \"flush\"; es decir, si contiene al menos cinco cartas del mismo palo.\n", "\n", - "In most varieties of poker, a hand contains either five or seven cards, but there are some exotic variations where a hand contains other numbers of cards.\n", - "But regardless of how many cards there are in a hand, the only ones that count are the five that make the best hand." + "En la mayoría de variedades de póker, una mano contiene cinco o siete cartas, pero hay algunas variaciones exóticas donde una mano contiene otros números de cartas.\n", + "Pero, independientemente de cuántas cartas haya en una mano, las únicas que cuentan son las cinco que forman la mejor mano." ] }, { @@ -1765,7 +1764,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -1803,7 +1802,7 @@ "tags": [] }, "source": [ - "To test this method, we'll construct a hand with five cards that are all Clubs, so it contains a flush." + "Para probar este método, construiremos una mano con cinco cartas que son todas Clubs, así que contiene un flush." ] }, { @@ -1832,7 +1831,7 @@ "tags": [] }, "source": [ - "If we invoke `get_suit_counts`, we can confirm that the rank code `0` appears `5` times." + "Si invocamos `get_suit_counts`, podemos confirmar que el código de rango `0` aparece `5` veces." ] }, { @@ -1854,7 +1853,7 @@ "tags": [] }, "source": [ - "So `has_flush` should return `True`." + "Así que `has_flush` debería devolver `True`." ] }, { @@ -1876,7 +1875,7 @@ "tags": [] }, "source": [ - "As a second test, we'll construct a hand with three Clubs and two other suits." + "Como segunda prueba, construiremos una mano con tres Clubs y otros dos palos." ] }, { @@ -1909,7 +1908,7 @@ "tags": [] }, "source": [ - "So `has_flush` should return `False`." + "Así que `has_flush` debería devolver `False`." ] }, { @@ -1929,13 +1928,13 @@ "id": "ad716880", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Write a method called `has_straight` that checks whether a hand contains a straight, which is a set of five cards with consecutive ranks.\n", - "For example, if a hand contains ranks `5`, `6`, `7`, `8`, and `9`, it contains a straight.\n", + "Escribe un método llamado `has_straight` que compruebe si una mano contiene una straight, que es un conjunto de cinco cartas con rangos consecutivos.\n", + "Por ejemplo, si una mano contiene los rangos `5`, `6`, `7`, `8` y `9`, contiene una straight.\n", "\n", - "An Ace can come before a two or after a King, so `Ace`, `2`, `3`, `4`, `5` is a straight and so is `10`, `Jack`, `Queen`, `King`, `Ace`.\n", - "But a straight cannot \"wrap around\", so `King`, `Ace`, `2`, `3`, `4` is not a straight." + "Un Ace puede ir antes de un dos o después de un King, así que `Ace`, `2`, `3`, `4`, `5` es una straight, y también lo es `10`, `Jack`, `Queen`, `King`, `Ace`.\n", + "Pero una straight no puede \"dar la vuelta\", así que `King`, `Ace`, `2`, `3`, `4` no es una straight." ] }, { @@ -1945,8 +1944,8 @@ "tags": [] }, "source": [ - "You can use the following outline to get started.\n", - "It includes a few lines of code that count the number of Aces -- represented with the code `1` or `14` -- and store the total in both locations of the counter." + "Puedes usar el siguiente esquema para empezar.\n", + "Incluye unas pocas líneas de código que cuentan el número de Aces, representados con el código `1` o `14`, y almacenan el total en ambas ubicaciones del contador." ] }, { @@ -1989,8 +1988,8 @@ "tags": [] }, "source": [ - "`good_hand`, which we created for the previous exercise, contains a straight.\n", - "If we use `get_rank_counts`, we can confirm that it has at least one card with each of five consecutive ranks." + "`good_hand`, que creamos para el ejercicio anterior, contiene una straight.\n", + "Si usamos `get_rank_counts`, podemos confirmar que tiene al menos una carta de cada uno de cinco rangos consecutivos." ] }, { @@ -2012,7 +2011,7 @@ "tags": [] }, "source": [ - "So `has_straight` should return `True`." + "Así que `has_straight` debería devolver `True`." ] }, { @@ -2034,7 +2033,7 @@ "tags": [] }, "source": [ - "`bad_hand` does not contain a straight, so `has_straight` should return `False`." + "`bad_hand` no contiene una straight, así que `has_straight` debería devolver `False`." ] }, { @@ -2054,10 +2053,10 @@ "id": "c1ecebd3", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "A hand has a straight flush if it contains a set of five cards that are both a straight and a flush -- that is, five cards of the same suit with consecutive ranks.\n", - "Write a `PokerHand` method that checks whether a hand has a straight flush." + "Una mano tiene una straight flush si contiene un conjunto de cinco cartas que son a la vez una straight y un flush; es decir, cinco cartas del mismo palo con rangos consecutivos.\n", + "Escribe un método de `PokerHand` que compruebe si una mano tiene una straight flush." ] }, { @@ -2067,7 +2066,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -2117,7 +2116,7 @@ "tags": [] }, "source": [ - "Use the following examples to test your method." + "Usa los siguientes ejemplos para probar tu método." ] }, { @@ -2151,8 +2150,8 @@ "tags": [] }, "source": [ - "Note that it is not enough to check whether a hand has a straight and a flush.\n", - "To see why, consider the following hand." + "Ten en cuenta que no basta con comprobar si una mano tiene una straight y un flush.\n", + "Para ver por qué, considera la siguiente mano." ] }, { @@ -2179,7 +2178,7 @@ "tags": [] }, "source": [ - "This hand contains a straight and a flush, but they are not the same five cards." + "Esta mano contiene una straight y un flush, pero no son las mismas cinco cartas." ] }, { @@ -2201,7 +2200,7 @@ "tags": [] }, "source": [ - "So it does not contain a straight flush." + "Así que no contiene una straight flush." ] }, { @@ -2221,10 +2220,10 @@ "id": "dd742401", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "A poker hand has a pair if it contains two or more cards with the same rank.\n", - "Write a `PokerHand` method that checks whether a hand contains a pair." + "Una mano de póker tiene una pareja si contiene dos o más cartas con el mismo rango.\n", + "Escribe un método de `PokerHand` que compruebe si una mano contiene una pareja." ] }, { @@ -2234,7 +2233,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -2281,7 +2280,7 @@ "id": "9f001207", "metadata": {}, "source": [ - "To test your method, here's a hand that has a pair." + "Para probar tu método, aquí tienes una mano que tiene una pareja." ] }, { @@ -2331,10 +2330,10 @@ "id": "c4180a64", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "A hand has a full house if it contains three cards of one rank and two cards of another rank.\n", - "Write a `PokerHand` method that checks whether a hand has a full house." + "Una mano tiene un full house si contiene tres cartas de un rango y dos cartas de otro rango.\n", + "Escribe un método de `PokerHand` que compruebe si una mano tiene un full house." ] }, { @@ -2344,7 +2343,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar." ] }, { @@ -2381,7 +2380,7 @@ "tags": [] }, "source": [ - "You can use this hand to test your method." + "Puedes usar esta mano para probar tu método." ] }, { @@ -2440,10 +2439,10 @@ "id": "666340c1", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "This exercise is a cautionary tale about a common error that can be difficult to debug.\n", - "Consider the following class definition." + "Este ejercicio es una advertencia sobre un error común que puede ser difícil de depurar.\n", + "Considera la siguiente definición de clase." ] }, { @@ -2487,14 +2486,14 @@ "id": "1e349832", "metadata": {}, "source": [ - "`__init__` takes two parameters: `name` is required, but `contents` is optional -- if it's not provided, the default value is an empty list.\n", + "`__init__` toma dos parámetros: `name` es obligatorio, pero `contents` es opcional; si no se proporciona, el valor por defecto es una lista vacía.\n", "\n", - "`__str__` returns a string representation of the object that includes the name and the contents of the pouch.\n", + "`__str__` devuelve una representación en string del objeto que incluye el nombre y el contenido de la bolsa.\n", "\n", - "`put_in_pouch` takes any object and appends it to `contents`.\n", + "`put_in_pouch` toma cualquier objeto y lo añade a `contents`.\n", "\n", - "Now let's see how this class works.\n", - "We'll create two `Kangaroo` objects with the names `'Kanga'` and `'Roo'`." + "Ahora veamos cómo funciona esta clase.\n", + "Crearemos dos objetos `Kangaroo` con los nombres `'Kanga'` y `'Roo'`." ] }, { @@ -2513,7 +2512,7 @@ "id": "533982d1", "metadata": {}, "source": [ - "To Kanga's pouch we'll add two strings and Roo." + "A la bolsa de Kanga le añadiremos dos strings y Roo." ] }, { @@ -2533,7 +2532,7 @@ "id": "41cd6d6e", "metadata": {}, "source": [ - "If we print `kanga`, it seems like everything worked." + "Si imprimimos `kanga`, parece que todo ha funcionado." ] }, { @@ -2551,7 +2550,7 @@ "id": "0ba26163", "metadata": {}, "source": [ - "But what happens if we print `roo`?" + "Pero ¿qué pasa si imprimimos `roo`?" ] }, { @@ -2569,10 +2568,10 @@ "id": "a2aef813", "metadata": {}, "source": [ - "Roo's pouch contains the same contents as Kanga's, including a reference to `roo`!\n", + "¡La bolsa de Roo contiene el mismo contenido que la de Kanga, incluida una referencia a `roo`!\n", "\n", - "See if you can figure out what went wrong.\n", - "Then ask a virtual assistant, \"What's wrong with the following program?\" and paste in the definition of `Kangaroo`." + "A ver si puedes averiguar qué salió mal.\n", + "Luego pregunta a un asistente virtual: \"¿Qué está mal en el siguiente programa?\" y pega la definición de `Kangaroo`." ] }, { @@ -2590,13 +2589,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Licencia del código: [MIT License](https://mit-license.org/)\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] } ], @@ -2622,4 +2623,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/chapters/chap18.ipynb b/chapters/chap18.ipynb index 3027822..19c8981 100644 --- a/chapters/chap18.ipynb +++ b/chapters/chap18.ipynb @@ -5,9 +5,9 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", - "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." + "Puedes comprar las versiones impresa y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", + "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325).\n" ] }, { @@ -43,7 +43,7 @@ "tags": [] }, "source": [ - "Here are versions of the `Card`, `Deck`, and `Hand` classes from Chapter 17, which we will use in some examples in this chapter." + "Aquí tienes versiones de las clases `Card`, `Deck` y `Hand` del Capítulo 17, que usaremos en algunos ejemplos de este capítulo.\n" ] }, { @@ -129,14 +129,14 @@ "id": "27e8d827", "metadata": {}, "source": [ - "# Python Extras\n", + "# Extras de Python\n", "\n", - "One of my goals for this book has been to teach you as little Python as possible. \n", - "When there were two ways to do something, I picked one and avoided mentioning the other.\n", - "Or sometimes I put the second one into an exercise.\n", + "Uno de mis objetivos con este libro ha sido enseñarte la menor cantidad posible de Python. \n", + "Cuando había dos maneras de hacer algo, elegí una y evité mencionar la otra.\n", + "O a veces puse la segunda en un ejercicio.\n", "\n", - "Now I want to go back for some of the good bits that got left behind.\n", - "Python provides a number of features that are not really necessary -- you can write good code without them -- but with them you can write code that's more concise, readable, or efficient, and sometimes all three." + "Ahora quiero volver a algunas de las partes buenas que quedaron fuera.\n", + "Python ofrece varias características que no son realmente necesarias -- puedes escribir buen código sin ellas -- pero con ellas puedes escribir código más conciso, legible o eficiente, y a veces las tres cosas.\n" ] }, { @@ -144,10 +144,10 @@ "id": "7ddcece8", "metadata": {}, "source": [ - "## Sets\n", + "## Conjuntos\n", "\n", - "Python provides a class called `set` that represents a collection of unique elements.\n", - "To create an empty set, we can use the class object like a function." + "Python proporciona una clase llamada `set` que representa una colección de elementos únicos.\n", + "Para crear un conjunto vacío, podemos usar el objeto de clase como una función.\n" ] }, { @@ -166,7 +166,7 @@ "id": "904e2071", "metadata": {}, "source": [ - "We can use the `add` method to add elements." + "Podemos usar el método `add` para añadir elementos.\n" ] }, { @@ -186,7 +186,7 @@ "id": "beee02fc", "metadata": {}, "source": [ - "Or we can pass any kind of sequence to `set`." + "O podemos pasar cualquier tipo de secuencia a `set`.\n" ] }, { @@ -205,8 +205,8 @@ "id": "42f99153", "metadata": {}, "source": [ - "An element can only appear once in a `set`.\n", - "If you add an element that's already there, it has no effect." + "Un elemento solo puede aparecer una vez en un `set`.\n", + "Si añades un elemento que ya está, no tiene ningún efecto.\n" ] }, { @@ -225,7 +225,7 @@ "id": "9b0a82ee", "metadata": {}, "source": [ - "Or if you create a set with a sequence that contains duplicates, the result contains only unique elements." + "O, si creas un conjunto con una secuencia que contiene duplicados, el resultado contiene solo elementos únicos.\n" ] }, { @@ -243,8 +243,8 @@ "id": "328e2009", "metadata": {}, "source": [ - "Some of the exercises in this book can be done concisely and efficiently with sets. \n", - "For example, here is a solution to an exercise in Chapter 11 that uses a dictionary to check whether there are any duplicate elements in a sequence." + "Algunos de los ejercicios de este libro se pueden hacer de forma concisa y eficiente con conjuntos. \n", + "Por ejemplo, aquí tienes una solución a un ejercicio del Capítulo 11 que usa un diccionario para comprobar si hay elementos duplicados en una secuencia.\n" ] }, { @@ -266,8 +266,8 @@ "id": "0b250e58", "metadata": {}, "source": [ - "This version adds the element of `t` as keys in a dictionary, and then checks whether there are fewer keys than elements.\n", - "Using sets, we can write the same function like this." + "Esta versión añade los elementos de `t` como claves en un diccionario, y luego comprueba si hay menos claves que elementos.\n", + "Usando conjuntos, podemos escribir la misma función así.\n" ] }, { @@ -299,11 +299,11 @@ "id": "30cf3158", "metadata": {}, "source": [ - "An element can only appear in a set once, so if an element in `t` appears more than once, the set will be smaller than `t`.\n", - "If there are no duplicates, the set will be the same size as `t`.\n", + "Un elemento solo puede aparecer en un conjunto una vez, así que si un elemento de `t` aparece más de una vez, el conjunto será más pequeño que `t`.\n", + "Si no hay duplicados, el conjunto tendrá el mismo tamaño que `t`.\n", "\n", - "`set` objects provide methods that perform set operations.\n", - "For example, `union` computes the union of two sets, which is a new set that contains all elements that appear in either set." + "Los objeto `set` proporcionan métodos que realizan operaciones de conjuntos.\n", + "Por ejemplo, `union` calcula la unión de dos conjuntos, que es un nuevo conjunto que contiene todos los elementos que aparecen en cualquiera de los dos conjuntos.\n" ] }, { @@ -321,8 +321,8 @@ "id": "57b1d50c", "metadata": {}, "source": [ - "Some arithmetic operators work with sets.\n", - "For example, the `-` operator performs set subtraction -- the result is a new set that contains all elements from the first set that are _not_ in the second set." + "Algunos operadores aritméticos funcionan con conjuntos.\n", + "Por ejemplo, el operador `-` realiza la resta de conjuntos -- el resultado es un nuevo conjunto que contiene todos los elementos del primer conjunto que _no_ están en el segundo conjunto.\n" ] }, { @@ -340,8 +340,8 @@ "id": "5099226c", "metadata": {}, "source": [ - "In [Chapter 12](section_dictionary_subtraction) we used dictionaries to find the words that appear in a document but not in a word list.\n", - "We used the following function, which takes two dictionaries and returns a new dictionary that contains only the keys from the first that don't appear in the second." + "En el [Capítulo 12](section_dictionary_subtraction) usamos diccionarios para encontrar las palabras que aparecen en un documento pero no en una lista de palabras.\n", + "Usamos la siguiente función, que recibe dos diccionarios y devuelve un nuevo diccionario que contiene solo las claves del primero que no aparecen en el segundo.\n" ] }, { @@ -364,8 +364,8 @@ "id": "455c3e34", "metadata": {}, "source": [ - "With sets, we don't have to write this function ourselves.\n", - "If `word_counter` is a dictionary that contains the unique words in the document and `word_list` is a list of valid words, we can compute the set difference like this." + "Con conjuntos, no tenemos que escribir esta función nosotros mismos.\n", + "Si `word_counter` es un diccionario que contiene las palabras únicas del documento y `word_list` es una lista de palabras válidas, podemos calcular la diferencia de conjuntos así.\n" ] }, { @@ -401,10 +401,10 @@ "id": "91efe708", "metadata": {}, "source": [ - "The result is a set that contains the words in the document that don't appear in the word list.\n", + "El resultado es un conjunto que contiene las palabras del documento que no aparecen en la lista de palabras.\n", "\n", - "The relational operators work with sets.\n", - "For example, `<=` checks whether one set is a subset of another, including the possibility that they are equal." + "Los operadores relacionales funcionan con conjuntos.\n", + "Por ejemplo, `<=` comprueba si un conjunto es un subconjunto de otro, incluyendo la posibilidad de que sean iguales.\n" ] }, { @@ -422,8 +422,8 @@ "id": "74d4d824", "metadata": {}, "source": [ - "With these operators, we can use sets to do some of the exercises in Chapter 7.\n", - "For example, here's a version of `uses_only` that uses a loop." + "Con estos operadores, podemos usar conjuntos para hacer algunos de los ejercicios del Capítulo 7.\n", + "Por ejemplo, aquí tienes una versión de `uses_only` que usa un bucle.\n" ] }, { @@ -445,8 +445,8 @@ "id": "58c1da26", "metadata": {}, "source": [ - "`uses_only` checks whether all letters in `word` are in `available`.\n", - "With sets, we can rewrite it like this." + "`uses_only` comprueba si todas las letras de `word` están en `available`.\n", + "Con conjuntos, podemos reescribirla así.\n" ] }, { @@ -465,7 +465,7 @@ "id": "01ce8cff", "metadata": {}, "source": [ - "If the letters in `word` are a subset of the letters in `available`, that means that `word` uses only letters in `available`." + "Si las letras de `word` son un subconjunto de las letras de `available`, eso significa que `word` usa solo letras de `available`.\n" ] }, { @@ -475,12 +475,12 @@ "source": [ "## Counters\n", "\n", - "A `Counter` is like a set, except that if an element appears more than once, the `Counter` keeps track of how many times it appears.\n", - "If you are familiar with the mathematical idea of a \"multiset\", a `Counter` is a\n", - "natural way to represent a multiset.\n", + "Un `Counter` es como un conjunto, excepto que si un elemento aparece más de una vez, el `Counter` lleva la cuenta de cuántas veces aparece.\n", + "Si conoces la idea matemática de un \"multiset\", un `Counter` es una forma\n", + "natural de representar un multiset.\n", "\n", - "The `Counter` class is defined in a module called `collections`, so you have to import it.\n", - "Then you can use the class object as a function and pass as an argument a string, list, or any other kind of sequence." + "La clase `Counter` está definida en un module llamado `collections`, así que tienes que importarla.\n", + "Después puedes usar el objeto de clase como una función y pasar como argumento un string, una lista o cualquier otro tipo de secuencia.\n" ] }, { @@ -515,12 +515,12 @@ "id": "8da28fe5", "metadata": {}, "source": [ - "A `Counter` object is like a dictionary that maps from each key to the number of times it appears.\n", - "As in dictionaries, the keys have to be hashable.\n", + "Un objeto `Counter` es como un diccionario que asocia cada clave con el número de veces que aparece.\n", + "Como en los diccionarios, las claves tienen que ser hashable.\n", "\n", - "Unlike dictionaries, `Counter` objects don't raise an exception if you access an\n", - "element that doesn't appear.\n", - "Instead, they return `0`." + "A diferencia de los diccionarios, los objeto `Counter` no lanzan una excepción si accedes a un\n", + "elemento que no aparece.\n", + "En su lugar, devuelven `0`.\n" ] }, { @@ -538,9 +538,9 @@ "id": "9bb2b650", "metadata": {}, "source": [ - "We can use `Counter` objects to solve one of the exercises from Chapter 10, which asks for a function that takes two words and checks whether they are anagrams -- that is, whether the letters from one can be rearranged to spell the other.\n", + "Podemos usar objeto `Counter` para resolver uno de los ejercicios del Capítulo 10, que pide una función que reciba dos palabras y compruebe si son anagramas -- es decir, si las letras de una se pueden reordenar para formar la otra.\n", "\n", - "Here's a solution using `Counter` objects." + "Aquí tienes una solución usando objeto `Counter`.\n" ] }, { @@ -559,9 +559,9 @@ "id": "6907f368", "metadata": {}, "source": [ - "If two words are anagrams, they contain the same letters with the same counts, so their `Counter` objects are equivalent.\n", + "Si dos palabras son anagramas, contienen las mismas letras con los mismos recuentos, así que sus objeto `Counter` son equivalentes.\n", "\n", - "`Counter` provides a method called `most_common` that returns a list of value-frequency pairs, sorted from most common to least." + "`Counter` proporciona un método llamado `most_common` que devuelve una lista de pares valor-frecuencia, ordenados de más común a menos común.\n" ] }, { @@ -579,10 +579,10 @@ "id": "b02b7dff", "metadata": {}, "source": [ - "They also provide methods and operators to perform set-like operations, including addition, subtraction, union and intersection.\n", - "For example, the `+` operator combines two `Counter` objects and creates a new `Counter` that contains the keys from both and the sums of the counts.\n", + "También proporcionan métodos y operadores para realizar operaciones parecidas a las de conjuntos, incluyendo suma, resta, unión e intersección.\n", + "Por ejemplo, el operador `+` combina dos objeto `Counter` y crea un nuevo `Counter` que contiene las claves de ambos y las sumas de los recuentos.\n", "\n", - "We can test it by making a `Counter` with the letters from `'bans'` and adding it to the letters from `'banana'`." + "Podemos probarlo creando un `Counter` con las letras de `'bans'` y sumándolo a las letras de `'banana'`.\n" ] }, { @@ -601,7 +601,7 @@ "id": "5461328e", "metadata": {}, "source": [ - "You'll have a chance to explore other `Counter` operations in the exercises at the end of this chapter." + "Tendrás la oportunidad de explorar otras operaciones de `Counter` en los ejercicios al final de este capítulo.\n" ] }, { @@ -611,13 +611,13 @@ "source": [ "## defaultdict\n", "\n", - "The `collections` module also provides `defaultdict`, which is like a dictionary except that if you access a key that doesn't exist, it generates a new value automatically.\n", + "El module `collections` también proporciona `defaultdict`, que es como un diccionario excepto que, si accedes a una clave que no existe, genera automáticamente un nuevo valor.\n", "\n", - "When you create a `defaultdict`, you provide a function that's used to create new values.\n", - "A function that create objects is sometimes called a **factory**.\n", - "The built-in functions that create lists, sets, and other types can be used as factories.\n", + "Cuando creas un `defaultdict`, proporcionas una función que se usa para crear nuevos valores.\n", + "Una función que crea objetos a veces se llama **fábrica**.\n", + "Las funciones integradas que crean listas, conjuntos y otros tipos se pueden usar como fábricas.\n", "\n", - "For example, here's a `defaultdict` that creates a new `list` when needed. " + "Por ejemplo, aquí tienes un `defaultdict` que crea una nueva `list` cuando hace falta.\n" ] }, { @@ -638,8 +638,8 @@ "id": "9f43d537", "metadata": {}, "source": [ - "Notice that the argument is `list`, which is a class object, not `list()`, which is a function call that creates a new list.\n", - "The factory function doesn't get called unless we access a key that doesn't exist." + "Fíjate en que el argumento es `list`, que es un objeto de clase, no `list()`, que es una llamada a función que crea una nueva lista.\n", + "La fábrica función no se llama a menos que accedamos a una clave que no existe.\n" ] }, { @@ -658,8 +658,8 @@ "id": "01f87415", "metadata": {}, "source": [ - "The new list, which we're calling `t`, is also added to the dictionary.\n", - "So if we modify `t`, the change appears in `d`:" + "La nueva lista, que llamamos `t`, también se añade al diccionario.\n", + "Así que si modificamos `t`, el cambio aparece en `d`:\n" ] }, { @@ -678,12 +678,12 @@ "id": "3e5d0151", "metadata": {}, "source": [ - "If you are making a dictionary of lists, you can often write simpler\n", - "code using `defaultdict`. \n", + "Si estás creando un diccionario de listas, a menudo puedes escribir código más simple\n", + "usando `defaultdict`. \n", "\n", - "In one of the exercises in [Chapter 11](chapter_tuples), I made a dictionary that maps from a sorted string of letters to the list of words that can be spelled with those letters.\n", - "For example, the string `'opst'` maps to the list `['opts', 'post', 'pots', 'spot', 'stop', 'tops']`.\n", - "Here's the original code." + "En uno de los ejercicios del [Capítulo 11](chapter_tuples), hice un diccionario que asocia un string de letras ordenadas con la lista de palabras que se pueden formar con esas letras.\n", + "Por ejemplo, el string `'opst'` se asocia con la lista `['opts', 'post', 'pots', 'spot', 'stop', 'tops']`.\n", + "Aquí está el código original.\n" ] }, { @@ -710,7 +710,7 @@ "id": "8e9a0a2b", "metadata": {}, "source": [ - "And here's a simpler version using a `defaultdict`." + "Y aquí tienes una versión más simple usando un `defaultdict`.\n" ] }, { @@ -734,7 +734,7 @@ "id": "cccdd46c", "metadata": {}, "source": [ - "In the exercises at the end of the chapter, you'll have a chance to practice using `defaultdict` objects." + "En los ejercicios al final del capítulo, tendrás la oportunidad de practicar usando objeto `defaultdict`.\n" ] }, { @@ -757,9 +757,9 @@ "id": "610359c1", "metadata": {}, "source": [ - "## Conditional expressions\n", + "## Expresiones condicionales\n", "\n", - "Conditional statements are often used to choose one of two values, like this:" + "Las sentencias condicionales se usan a menudo para elegir uno de dos valores, como aquí:\n" ] }, { @@ -805,11 +805,11 @@ "id": "2c5fc3dd", "metadata": {}, "source": [ - "This statement checks whether `x` is positive. If so, it computes its logarithm. \n", - "If not, `math.log` would raise a ValueError.\n", - "To avoid stopping the program, we generate a `NaN`, which is a special floating-point value that represents \"Not a Number\".\n", + "Esta sentencia comprueba si `x` es positivo. Si lo es, calcula su logaritmo. \n", + "Si no, `math.log` lanzaría un ValueError.\n", + "Para evitar detener el programa, generamos un `NaN`, que es un valor especial de punto flotante que representa \"Not a Number\".\n", "\n", - "We can write this statement more concisely using a **conditional expression**." + "Podemos escribir esta sentencia de forma más concisa usando una **conditional expression**.\n" ] }, { @@ -839,10 +839,10 @@ "id": "6a7cf27b", "metadata": {}, "source": [ - "You can almost read this line like English: \"`y` gets log-`x` if `x` is greater than 0; otherwise it gets `NaN`\".\n", + "Casi puedes leer esta línea como si fuera inglés: \"`y` recibe log-`x` si `x` es mayor que 0; de lo contrario recibe `NaN`\".\n", "\n", - "Recursive functions can sometimes be written concisely using conditional expressions. \n", - "For example, here is a version of `factorial` with a conditional _statement_." + "Las funciones recursivas a veces se pueden escribir de forma concisa usando expresiones condicionales. \n", + "Por ejemplo, aquí tienes una versión de `factorial` con una _sentencia_ condicional.\n" ] }, { @@ -864,7 +864,7 @@ "id": "56052b5c", "metadata": {}, "source": [ - "And here's a version with a conditional _expression_." + "Y aquí tienes una versión con una _expresión_ condicional.\n" ] }, { @@ -883,8 +883,8 @@ "id": "d53fbc15", "metadata": {}, "source": [ - "Another use of conditional expressions is handling optional arguments.\n", - "For example, here is class definition with an `__init__` method that uses a conditional statement to check a parameter with a default value." + "Otro uso de las expresiones condicionales es manejar argumentos opcionales.\n", + "Por ejemplo, aquí tienes una definición de clase con un método `__init__` que usa una sentencia condicional para comprobar un parámetro con un valor por defecto.\n" ] }, { @@ -907,7 +907,7 @@ "id": "655bfc46", "metadata": {}, "source": [ - "Here's a version that uses a conditional expression." + "Aquí tienes una versión que usa una expresión condicional.\n" ] }, { @@ -927,7 +927,7 @@ "id": "fef85229", "metadata": {}, "source": [ - "In general, you can replace a conditional statement with a conditional expression if both branches contain a single expression and no statements." + "En general, puedes reemplazar una sentencia condicional por una expresión condicional si ambas ramas contienen una sola expresión y ninguna sentencia.\n" ] }, { @@ -935,10 +935,10 @@ "id": "45d3b306", "metadata": {}, "source": [ - "## List comprehensions\n", + "## Comprensiones de listas\n", "\n", - "In previous chapters, we've seen a few examples where we start with an empty list and add elements, one at a time, using the `append` method.\n", - "For example, suppose we have a string that contains the title of a movie, and we want to capitalize all of the words." + "En capítulos anteriores, hemos visto algunos ejemplos donde empezamos con una lista vacía y añadimos elementos, uno por uno, usando el método `append`.\n", + "Por ejemplo, supón que tenemos un string que contiene el título de una película, y queremos poner en mayúscula la primera letra de todas las palabras.\n" ] }, { @@ -956,7 +956,7 @@ "id": "9eeb45a6", "metadata": {}, "source": [ - "We can split it into a list of strings, loop through the strings, capitalize them, and append them to a list." + "Podemos dividirlo en una lista de strings, recorrer los strings, capitalizarlos y añadirlos a una lista.\n" ] }, { @@ -978,7 +978,7 @@ "id": "b96197c2", "metadata": {}, "source": [ - "We can do the same thing more concisely using a **list comprehension**:" + "Podemos hacer lo mismo de forma más concisa usando una **comprensión de listas**:\n" ] }, { @@ -998,13 +998,13 @@ "id": "e5b565ad", "metadata": {}, "source": [ - "The bracket operators indicate that we are constructing a new list.\n", - "The expression inside the brackets specifies the elements of the list, and the `for` clause indicates what sequence we are looping through.\n", + "Los operadores de corchetes indican que estamos construyendo una nueva lista.\n", + "La expresión dentro de los corchetes especifica los elementos de la lista, y la cláusula `for` indica qué secuencia estamos recorriendo.\n", "\n", - "The syntax of a list comprehension might seem strange, because the loop variable -- `word` in this example -- appears in the expression before we get to its definition.\n", - "But you get used to it.\n", + "La sintaxis de una comprensión de listas puede parecer extraña, porque la variable del bucle -- `word` en este ejemplo -- aparece en la expresión antes de llegar a su definición.\n", + "Pero te acostumbras.\n", "\n", - "As another example, in [Chapter 9](section_word_list) we used this loop to read words from a file and append them to a list." + "Como otro ejemplo, en el [Capítulo 9](section_word_list) usamos este bucle para leer palabras de un archivo y añadirlas a una lista.\n" ] }, { @@ -1050,7 +1050,7 @@ "id": "2d1df49b", "metadata": {}, "source": [ - "Here's how we can write that as a list comprehension." + "Así es como podemos escribirlo como una comprensión de listas.\n" ] }, { @@ -1080,8 +1080,8 @@ "id": "92d856ba", "metadata": {}, "source": [ - "A list comprehension can also have an `if` clause that determines which elements are included in the list.\n", - "For example, here's a `for` loop we used in [Chapter 10](section_palindrome_list) to make a list of only the words in `word_list` that are palindromes." + "Una comprensión de listas también puede tener una cláusula `if` que determina qué elementos se incluyen en la lista.\n", + "Por ejemplo, aquí tienes un bucle `for` que usamos en el [Capítulo 10](section_palindrome_list) para crear una lista solo con las palabras de `word_list` que son palíndromos.\n" ] }, { @@ -1128,7 +1128,7 @@ "id": "151621d8", "metadata": {}, "source": [ - "Here's how we can do the same thing with an list comprehension." + "Así es como podemos hacer lo mismo con una comprensión de listas.\n" ] }, { @@ -1158,9 +1158,9 @@ "id": "5fc4eab1", "metadata": {}, "source": [ - "When a list comprehension is used as an argument to a function, we can often omit the brackets.\n", - "For example, suppose we want to add up $1 / 2^n$ for values of $n$ from 0 to 9.\n", - "We can use a list comprehension like this." + "Cuando una comprensión de listas se usa como argumento de una función, a menudo podemos omitir los corchetes.\n", + "Por ejemplo, supón que queremos sumar $1 / 2^n$ para valores de $n$ de 0 a 9.\n", + "Podemos usar una comprensión de listas así.\n" ] }, { @@ -1178,7 +1178,7 @@ "id": "2ee312e0", "metadata": {}, "source": [ - "Or we can leave out the brackets like this." + "O podemos dejar fuera los corchetes así.\n" ] }, { @@ -1196,17 +1196,17 @@ "id": "3d56d584", "metadata": {}, "source": [ - "In this example, the argument is technically a **generator expression**, not a list comprehension, and it never actually makes a list.\n", - "But other than that, the behavior is the same.\n", + "En este ejemplo, técnicamente el argumento es una **expresión generadora**, no una comprensión de listas, y en realidad nunca crea una lista.\n", + "Pero aparte de eso, el comportamiento es el mismo.\n", "\n", - "List comprehensions and generator expressions are concise and easy to read, at least for simple expressions.\n", - "And they are usually faster than the equivalent for loops, sometimes much faster.\n", - "So if you are mad at me for not mentioning them earlier, I understand.\n", + "Las comprensiones de listas y las expresiones generadoras son concisas y fáciles de leer, al menos para expresiones simples.\n", + "Y normalmente son más rápidas que los bucles `for` equivalentes, a veces mucho más rápidas.\n", + "Así que si estás enfadado conmigo por no haberlas mencionado antes, lo entiendo.\n", "\n", - "But, in my defense, list comprehensions are harder to debug because you can't put a print statement inside the loop.\n", - "I suggest you use them only if the computation is simple enough that you are likely to get it\n", - "right the first time.\n", - "Or consider writing and debugging a `for` loop and then converting it to a list comprehension." + "Pero, en mi defensa, las comprensiones de listas son más difíciles de depurar porque no puedes poner una sentencia print dentro del bucle.\n", + "Te sugiero que las uses solo si el cálculo es lo bastante simple como para que probablemente te salga\n", + "bien a la primera.\n", + "O considera escribir y depurar un bucle `for` y luego convertirlo en una comprensión de listas.\n" ] }, { @@ -1214,9 +1214,9 @@ "id": "f9fac860", "metadata": {}, "source": [ - "## `any` and `all`\n", + "## `any` y `all`\n", "\n", - "Python provides a built-in function, `any`, that takes a sequence of boolean values and returns `True` if any of the values are `True`." + "Python proporciona una función integrada, `any`, que recibe una secuencia de valores booleanos y devuelve `True` si cualquiera de los valores es `True`.\n" ] }, { @@ -1234,7 +1234,7 @@ "id": "43217186", "metadata": {}, "source": [ - "`any` is often used with generator expressions." + "`any` se usa a menudo con expresiones generadoras.\n" ] }, { @@ -1252,8 +1252,8 @@ "id": "22395487", "metadata": {}, "source": [ - "That example isn't very useful because it does the same thing as the `in` operator. \n", - "But we could use `any` to write concise solutions to some of the exercises in [Chapter 7](chapter_search). For example, we can write `uses_none` like this." + "Ese ejemplo no es muy útil porque hace lo mismo que el operador `in`. \n", + "Pero podríamos usar `any` para escribir soluciones concisas a algunos de los ejercicios del [Capítulo 7](chapter_search). Por ejemplo, podemos escribir `uses_none` así.\n" ] }, { @@ -1297,11 +1297,11 @@ "id": "fbefe3c1", "metadata": {}, "source": [ - "This function loops through the letters in `word` and checks whether any of them are in `forbidden`.\n", - "Using `any` with a generator expression is efficient because it stops immediately if it finds a `True` value, so it doesn't have to loop through the whole sequence.\n", + "Esta función recorre las letras de `word` y comprueba si alguna de ellas está en `forbidden`.\n", + "Usar `any` con una expresión generadora es eficiente porque se detiene inmediatamente si encuentra un valor `True`, así que no tiene que recorrer toda la secuencia.\n", "\n", - "Python provides another built-in function, `all`, that returns `True` if every element of the sequence is `True`.\n", - "We can use it to write a concise version of `uses_all`." + "Python proporciona otra función integrada, `all`, que devuelve `True` si todos los elementos de la secuencia son `True`.\n", + "Podemos usarla para escribir una versión concisa de `uses_all`.\n" ] }, { @@ -1345,7 +1345,7 @@ "id": "8d9f7364", "metadata": {}, "source": [ - "Expressions using `any` and `all` can be concise, efficient, and easy to read." + "Las expresiones que usan `any` y `all` pueden ser concisas, eficientes y fáciles de leer.\n" ] }, { @@ -1353,11 +1353,11 @@ "id": "911857a3", "metadata": {}, "source": [ - "## Named tuples\n", + "## Named tuplas\n", "\n", - "The `collections` module provides a function called `namedtuple` that can be used to create simple classes.\n", - "For example, the `Point` object in [Chapter 16](section_create_point) has only two attributes, `x` and `y`.\n", - "Here's how we defined it." + "El module `collections` proporciona una función llamada `namedtuple` que se puede usar para crear clases simples.\n", + "Por ejemplo, el objeto `Point` del [Capítulo 16](section_create_point) solo tiene dos atributos, `x` e `y`.\n", + "Así es como lo definimos.\n" ] }, { @@ -1383,8 +1383,8 @@ "id": "36f08927", "metadata": {}, "source": [ - "That's a lot of code to convey a small amount of information.\n", - "`namedtuple` provides a more concise way to define classes like this." + "Eso es mucho código para transmitir una pequeña cantidad de información.\n", + "`namedtuple` proporciona una forma más concisa de definir clases como esta.\n" ] }, { @@ -1404,12 +1404,12 @@ "id": "942a0877", "metadata": {}, "source": [ - "The first argument is the name of the class you want to create. The\n", - "second is a list of the attributes `Point` objects should have.\n", - "The result is a class object, which is why it is assigned to a capitalized variable name.\n", + "El primer argumento es el nombre de la clase que quieres crear. El\n", + "segundo es una lista de los atributos que deben tener los objeto `Point`.\n", + "El resultado es un objeto de clase, por eso se asigna a un nombre de variable con mayúscula inicial.\n", "\n", - "A class created with `namedtuple` provides an `__init__` method that assigns values to the attributes and a `__str__` that displays the object in a readable form.\n", - "So we can create and display a `Point` object like this." + "Una clase creada con `namedtuple` proporciona un método `__init__` que asigna valores a los atributos y un `__str__` que muestra el objeto de forma legible.\n", + "Así que podemos crear y mostrar un objeto `Point` así.\n" ] }, { @@ -1428,7 +1428,7 @@ "id": "b42ee9a2", "metadata": {}, "source": [ - "`Point` also provides an `__eq__` method that checks whether two `Point` objects are equivalent -- that is, whether their attributes are the same." + "`Point` también proporciona un método `__eq__` que comprueba si dos objeto `Point` son equivalentes -- es decir, si sus atributos son iguales.\n" ] }, { @@ -1446,7 +1446,7 @@ "id": "9bcf275a", "metadata": {}, "source": [ - "You can access the elements of a named tuple by name or by index." + "Puedes acceder a los elementos de una named tupla por nombre o por índice.\n" ] }, { @@ -1474,7 +1474,7 @@ "id": "0768ff41", "metadata": {}, "source": [ - "You can also treat a named tuple as a tuple, as in this assignment." + "También puedes tratar una named tupla como una tupla, como en esta asignación.\n" ] }, { @@ -1493,8 +1493,8 @@ "id": "964aa3bd", "metadata": {}, "source": [ - "But `namedtuple` objects are immutable.\n", - "After the attributes are initialized, they can't be changed." + "Pero los objeto `namedtuple` son inmutables.\n", + "Después de inicializar los atributos, no se pueden cambiar.\n" ] }, { @@ -1530,10 +1530,10 @@ "id": "f2db7783", "metadata": {}, "source": [ - "`namedtuple` provides a quick way to define simple classes.\n", - "The drawback is that simple classes don't always stay simple.\n", - "You might decide later that you want to add methods to a named tuple.\n", - "In that case, you can define a new class that inherits from the named tuple." + "`namedtuple` proporciona una forma rápida de definir clases simples.\n", + "La desventaja es que las clases simples no siempre siguen siendo simples.\n", + "Puede que más adelante decidas que quieres añadir métodos a una named tupla.\n", + "En ese caso, puedes definir una nueva clase que herede de la named tupla.\n" ] }, { @@ -1552,7 +1552,7 @@ "id": "805475ce", "metadata": {}, "source": [ - "Or at that point you could switch to a conventional class definition." + "O en ese punto podrías cambiar a una definición de clase convencional.\n" ] }, { @@ -1560,9 +1560,9 @@ "id": "4f3713a0", "metadata": {}, "source": [ - "## Packing keyword arguments\n", + "## Empaquetar argumentos de palabra clave\n", "\n", - "In [Chapter 11](section_argument_pack), we wrote a function that packs its arguments into a tuple." + "En el [Capítulo 11](section_argument_pack), escribimos una función que empaqueta sus argumentos en una tupla.\n" ] }, { @@ -1581,7 +1581,7 @@ "id": "71e3b049", "metadata": {}, "source": [ - "You can call this function with any number of arguments." + "Puedes llamar a esta función con cualquier número de argumentos.\n" ] }, { @@ -1599,8 +1599,8 @@ "id": "486a690f", "metadata": {}, "source": [ - "But the `*` operator doesn't pack keyword arguments.\n", - "So calling this function with a keyword argument causes an error." + "Pero el operador `*` no empaqueta argumentos de palabra clave.\n", + "Así que llamar a esta función con un argumento de palabra clave causa un error.\n" ] }, { @@ -1622,7 +1622,7 @@ "id": "eb7f9281", "metadata": {}, "source": [ - "To pack keyword arguments, we can use the `**` operator:" + "Para empaquetar argumentos de palabra clave, podemos usar el operador `**`:\n" ] }, { @@ -1642,8 +1642,8 @@ "id": "067bf7c4", "metadata": {}, "source": [ - "The keyword-packing parameter can have any name, but `kwargs` is a common choice.\n", - "The result is a dictionary that maps from keywords to values." + "El parámetro que empaqueta keywords puede tener cualquier nombre, pero `kwargs` es una elección común.\n", + "El resultado es un diccionario que asocia keywords con valores.\n" ] }, { @@ -1661,10 +1661,10 @@ "id": "07be77f3", "metadata": {}, "source": [ - "In this example, the value of `kwargs` is printed, but otherwise it has no effect.\n", + "En este ejemplo, se imprime el valor de `kwargs`, pero por lo demás no tiene ningún efecto.\n", "\n", - "But the `**` operator can also be used in an argument list to unpack a dictionary.\n", - "For example, here's a version of `mean` that packs any keyword arguments it gets and then unpacks them as keyword arguments for `sum`." + "Pero el operador `**` también se puede usar en una lista de argumentos para desempaquetar un diccionario.\n", + "Por ejemplo, aquí tienes una versión de `mean` que empaqueta cualquier argumento de palabra clave que recibe y luego los desempaqueta como argumentos de palabra clave para `sum`.\n" ] }, { @@ -1683,8 +1683,8 @@ "id": "ba00858c", "metadata": {}, "source": [ - "Now if we call `mean` with `start` as a keyword argument, it gets passed along to sum, which uses it as the starting point of the summation.\n", - "In the following example `start=3` adds `3` to the sum before computing the mean, so the sum is `6` and the result is `3`." + "Ahora, si llamamos a `mean` con `start` como argumento de palabra clave, se pasa a sum, que lo usa como punto de partida de la suma.\n", + "En el siguiente ejemplo `start=3` añade `3` a la suma antes de calcular la media, así que la suma es `6` y el resultado es `3`.\n" ] }, { @@ -1702,7 +1702,7 @@ "id": "949a2ca3", "metadata": {}, "source": [ - "As another example, if we have a dictionary with keys `x` and `y`, we can use it with the unpack operator to create a `Point` object." + "Como otro ejemplo, si tenemos un diccionario con las claves `x` e `y`, podemos usarlo con el operador de desempaquetado para crear un objeto `Point`.\n" ] }, { @@ -1721,7 +1721,7 @@ "id": "8aaf128a", "metadata": {}, "source": [ - "Without the unpack operator, `d` is treated as a single positional argument, so it gets assigned to `x`, and we get a `TypeError` because there's no second argument to assign to `y`." + "Sin el operador de desempaquetado, `d` se trata como un único argumento posicional, así que se asigna a `x`, y obtenemos un `TypeError` porque no hay un segundo argumento que asignar a `y`.\n" ] }, { @@ -1744,7 +1744,7 @@ "id": "e8acb958", "metadata": {}, "source": [ - "When you are working with functions that have a large number of keyword arguments, it is often useful to create and pass around dictionaries that specify frequently used options." + "Cuando trabajas con funciones que tienen un gran número de argumentos de palabra clave, a menudo es útil crear y pasar diccionarios que especifican opciones usadas con frecuencia.\n" ] }, { @@ -1765,11 +1765,11 @@ "id": "e046e382", "metadata": {}, "source": [ - "## Debugging\n", + "## Depuración\n", "\n", - "In previous chapters, we used `doctest` to test functions.\n", - "For example, here's a function called `add` that takes two numbers and returns their sum.\n", - "In includes a doctest that checks whether `2 + 2` is `4`." + "En capítulos anteriores, usamos `doctest` para probar funciones.\n", + "Por ejemplo, aquí tienes una función llamada `add` que recibe dos números y devuelve su suma.\n", + "Incluye un doctest que comprueba si `2 + 2` es `4`.\n" ] }, { @@ -1793,7 +1793,7 @@ "id": "a5e332d3", "metadata": {}, "source": [ - "This function takes a function object and runs its doctests." + "Esta función recibe un objeto función y ejecuta sus doctests.\n" ] }, { @@ -1814,7 +1814,7 @@ "id": "2d752a40", "metadata": {}, "source": [ - "So we can test `add` like this." + "Así que podemos probar `add` así.\n" ] }, { @@ -1832,10 +1832,10 @@ "id": "77d36e9b", "metadata": {}, "source": [ - "There's no output, which means all tests passed.\n", + "No hay salida, lo que significa que todas las pruebas pasaron.\n", "\n", - "Python provides another tool for running automated tests, called `unittest`.\n", - "It is a little more complicated to use, but here's an example." + "Python proporciona otra herramienta para ejecutar pruebas automatizadas, llamada `unittest`.\n", + "Es un poco más complicada de usar, pero aquí tienes un ejemplo.\n" ] }, { @@ -1859,15 +1859,15 @@ "id": "59b4212a", "metadata": {}, "source": [ - "First we import `TestCase`, which is a class in the `unittest` module.\n", - "To use it, we have to define a new class that inherits from `TestCase` and provides at least one test method.\n", - "The name of the test method must begin with `test` and should indicate which function it tests.\n", + "Primero importamos `TestCase`, que es una clase del module `unittest`.\n", + "Para usarla, tenemos que definir una nueva clase que herede de `TestCase` y proporcione al menos un método de test.\n", + "El nombre del método de test debe empezar con `test` y debería indicar qué función prueba.\n", "\n", - "In this example, `test_add` tests the `add` function by calling it, saving the result, and invoking `assertEqual`, which is inherited from `TestCase`.\n", - "`assertEqual` takes two arguments and checks whether they are equal.\n", + "En este ejemplo, `test_add` prueba la función `add` llamándola, guardando el resultado e invocando `assertEqual`, que se hereda de `TestCase`.\n", + "`assertEqual` recibe dos argumentos y comprueba si son iguales.\n", "\n", - "In order to run this test method, we have to run a function in `unittest` called `main` and provide several keyword arguments.\n", - "The following function shows the details -- if you are curious, you can ask a virtual assistant to explain how it works." + "Para ejecutar este método de test, tenemos que ejecutar una función de `unittest` llamada `main` y proporcionar varios argumentos de palabra clave.\n", + "La siguiente función muestra los detalles -- si tienes curiosidad, puedes pedirle a un asistente virtual que explique cómo funciona.\n" ] }, { @@ -1888,11 +1888,11 @@ "id": "5409ea0c", "metadata": {}, "source": [ - "`run_unittest` does not take `TestExample` as an argument -- instead, it searches for classes that inherit from `TestCase`.\n", - "Then it searches for methods that begin with `test` and runs them.\n", - "This process is called **test discovery**.\n", + "`run_unittest` no recibe `TestExample` como argumento -- en su lugar, busca clases que heredan de `TestCase`.\n", + "Luego busca métodos que empiezan con `test` y los ejecuta.\n", + "Este proceso se llama **test discovery**.\n", "\n", - "Here's what happens when we call `run_unittest`." + "Esto es lo que pasa cuando llamamos a `run_unittest`.\n" ] }, { @@ -1910,10 +1910,10 @@ "id": "7775304a", "metadata": {}, "source": [ - "`unittest.main` reports the number of tests it ran and the results.\n", - "In this case `OK` indicates that the tests passed.\n", + "`unittest.main` informa del número de pruebas que ejecutó y de los resultados.\n", + "En este caso `OK` indica que las pruebas pasaron.\n", "\n", - "To see what happens when a test fails, we'll add an incorrect test method to `TestExample`." + "Para ver qué pasa cuando un test falla, añadiremos un método de test incorrecto a `TestExample`.\n" ] }, { @@ -1935,7 +1935,7 @@ "id": "96810614", "metadata": {}, "source": [ - "Here's what happens when we run the tests." + "Esto es lo que pasa cuando ejecutamos las pruebas.\n" ] }, { @@ -1953,10 +1953,10 @@ "id": "64b743cb", "metadata": {}, "source": [ - "The report includes the test method that failed and an error message showing where.\n", - "The summary indicates that two tests ran and one failed.\n", + "El informe incluye el método de test que falló y un mensaje de error que muestra dónde.\n", + "El resumen indica que se ejecutaron dos pruebas y una falló.\n", "\n", - "In the exercises below, I'll suggest some prompts you can use to ask a virtual assistant for more information about `unittest`." + "En los ejercicios siguientes, sugeriré algunos prompts que puedes usar para pedir más información sobre `unittest` a un asistente virtual.\n" ] }, { @@ -1964,22 +1964,22 @@ "id": "7d0fb256", "metadata": {}, "source": [ - "## Glossary\n", + "## Glosario\n", "\n", - "**factory:**\n", - " A function used to create objects, often passed as a parameter to a function.\n", + "**fábrica:**\n", + " Una función usada para crear objetos, que a menudo se pasa como parámetro a una función.\n", "\n", "**conditional expression:**\n", - "An expression that uses a conditional to select one of two values.\n", + "Una expresión que usa un condicional para seleccionar uno de dos valores.\n", "\n", - "**list comprehension:**\n", - "A concise way to loop through a sequence and create a list.\n", + "**comprensión de listas:**\n", + "Una forma concisa de recorrer una secuencia y crear una lista.\n", "\n", - "**generator expression:**\n", - "Similar to a list comprehension except that it does not create a list.\n", + "**expresión generadora:**\n", + "Similar a una comprensión de listas, excepto que no crea una lista.\n", "\n", "**test discovery:**\n", - "A process used to find and run tests." + "Un proceso usado para encontrar y ejecutar pruebas.\n" ] }, { @@ -1987,7 +1987,7 @@ "id": "bc03f15d", "metadata": {}, "source": [ - "## Exercises" + "## Ejercicios\n" ] }, { @@ -2010,27 +2010,27 @@ "id": "fe10415e", "metadata": {}, "source": [ - "### Ask a virtual assistant\n", + "### Pregunta a un asistente virtual\n", "\n", - "There are a few topics in this chapter you might want to learn about.\n", + "Hay algunos temas de este capítulo sobre los que quizá quieras aprender más.\n", "\n", - "* \"What are the methods and operators of Python's set class?\"\n", + "* \"¿Cuáles son los métodos y operadores de la clase conjunto de Python?\"\n", "\n", - "* \"What are the methods and operators of Python's Counter class?\"\n", + "* \"¿Cuáles son los métodos y operadores de la clase Counter de Python?\"\n", "\n", - "* \"What is the difference between a Python list comprehension and a generator expression?\"\n", + "* \"¿Cuál es la diferencia entre una comprensión de listas de Python y una expresión generadora?\"\n", "\n", - "* \"When should I use Python's `namedtuple` rather than define a new class?\"\n", + "* \"¿Cuándo debería usar `namedtuple` de Python en lugar de definir una nueva clase?\"\n", "\n", - "* \"What are some uses of packing and unpacking keyword arguments?\"\n", + "* \"¿Cuáles son algunos usos de empaquetar y desempaquetar argumentos de palabra clave?\"\n", "\n", - "* \"How does `unittest` do test discovery?\"\n", + "* \"¿Cómo hace `unittest` test discovery?\"\n", "\n", - "* \"Along with `assertEqual`, what are the most commonly used methods in `unittest.TestCase`?\"\n", + "* \"Junto con `assertEqual`, ¿cuáles son los métodos más usados en `unittest.TestCase`?\"\n", "\n", - "* \"What are the pros and cons of `doctest` and `unittest`?\"\n", + "* \"¿Cuáles son los pros y los contras de `doctest` y `unittest`?\"\n", "\n", - "For the following exercises, consider asking a virtual assistant for help, but as always, remember to test the results." + "Para los siguientes ejercicios, considera pedir ayuda a un asistente virtual, pero como siempre, recuerda probar los resultados.\n" ] }, { @@ -2038,9 +2038,9 @@ "id": "c61ecde2", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "One of the exercises in Chapter 7 asks for a function called `uses_none` that takes a word and a string of forbidden letters, and returns `True` if the word does not use any of the letters. Here's a solution." + "Uno de los ejercicios del Capítulo 7 pide una función llamada `uses_none` que recibe una palabra y un string de letras prohibidas, y devuelve `True` si la palabra no usa ninguna de esas letras. Aquí tienes una solución.\n" ] }, { @@ -2062,8 +2062,8 @@ "id": "b558b8b3", "metadata": {}, "source": [ - "Write a version of this function that uses `set` operations instead of a `for` loop.\n", - "Hint: ask a VA, \"How do I compute the intersection of Python sets?\"" + "Escribe una versión de esta función que use operaciones de `set` en lugar de un bucle `for`.\n", + "Pista: pregunta a un asistente virtual: \"¿Cómo calculo la intersección de conjuntos de Python?\"\n" ] }, { @@ -2073,7 +2073,7 @@ "tags": [] }, "source": [ - "You can use this outline to get started." + "Puedes usar este esquema para empezar.\n" ] }, { @@ -2140,12 +2140,12 @@ "id": "d2d670cf", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Scrabble is a board game where the objective is to use letter tiles to spell words.\n", - "For example, if we have tiles with the letters `T`, `A`, `B`, `L`, `E`, we can spell `BELT` and `LATE` using a subset of the tiles -- but we can't spell `BEET` because we don't have two `E`s.\n", + "Scrabble es un juego de mesa donde el objetivo es usar fichas de letras para formar palabras.\n", + "Por ejemplo, si tenemos fichas con las letras `T`, `A`, `B`, `L`, `E`, podemos formar `BELT` y `LATE` usando un subconjunto de las fichas -- pero no podemos formar `BEET` porque no tenemos dos `E`.\n", "\n", - "Write a function that takes a string of letters and a word, and checks whether the letters can spell the word, taking into account how many times each letter appears." + "Escribe una función que reciba un string de letras y una palabra, y compruebe si las letras pueden formar la palabra, teniendo en cuenta cuántas veces aparece cada letra.\n" ] }, { @@ -2155,7 +2155,7 @@ "tags": [] }, "source": [ - "You can use the following outline to get started." + "Puedes usar el siguiente esquema para empezar.\n" ] }, { @@ -2207,9 +2207,9 @@ "id": "de2dc099", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "In one of the exercises from [Chapter 17](chapter_inheritance), my solution to `has_straightflush` uses the following method, which partitions a `PokerHand` into a list of four hands, where each hand contains cards of the same suit." + "En uno de los ejercicios del [Capítulo 17](chapter_inheritance), mi solución para `has_straightflush` usa el siguiente método, que particiona una `PokerHand` en una lista de cuatro manos, donde cada mano contiene cartas del mismo palo.\n" ] }, { @@ -2236,7 +2236,7 @@ "id": "cd04a7a3", "metadata": {}, "source": [ - "Write a simplified version of this function using a `defaultdict`." + "Escribe una versión simplificada de esta función usando un `defaultdict`.\n" ] }, { @@ -2246,7 +2246,7 @@ "tags": [] }, "source": [ - "Here's an outline of the `PokerHand` class and the `partition_suits` function you can use to get started." + "Aquí tienes un esquema de la clase `PokerHand` y de la función `partition_suits` que puedes usar para empezar.\n" ] }, { @@ -2281,7 +2281,7 @@ "tags": [] }, "source": [ - "To test your code, we'll make a deck and shuffle it." + "Para probar tu código, crearemos un mazo y lo barajaremos.\n" ] }, { @@ -2305,7 +2305,7 @@ "tags": [] }, "source": [ - "Then create a `PokerHand` and add seven cards to it." + "Luego crea una `PokerHand` y añádele siete cartas.\n" ] }, { @@ -2333,7 +2333,7 @@ "tags": [] }, "source": [ - "If you invoke `partition` and print the results, each hand should contain cards of one suit only." + "Si invocas `partition` e imprimes los resultados, cada mano debería contener solo cartas de un palo.\n" ] }, { @@ -2357,9 +2357,9 @@ "id": "218798e3", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Here's the function from Chapter 11 that computes Fibonacci numbers." + "Aquí tienes la función del Capítulo 11 que calcula números de Fibonacci.\n" ] }, { @@ -2384,7 +2384,7 @@ "id": "6acab624", "metadata": {}, "source": [ - "Write a version of this function with a single return statement that use two conditional expressions, one nested inside the other." + "Escribe una versión de esta función con una sola sentencia retorno que use dos expresiones condicionales, una anidada dentro de la otra.\n" ] }, { @@ -2426,9 +2426,9 @@ "id": "2deb0e1f", "metadata": {}, "source": [ - "### Exercise\n", - "The following is a function that computes the binomial coefficient\n", - "recursively." + "### Ejercicio\n", + "La siguiente es una función que calcula el coeficiente binomial\n", + "de forma recursiva.\n" ] }, { @@ -2460,10 +2460,10 @@ "id": "656c61f6", "metadata": {}, "source": [ - "Rewrite the body of the function using nested conditional expressions.\n", + "Reescribe el cuerpo de la función usando expresiones condicionales anidadas.\n", "\n", - "This function is not very efficient because it ends up computing the same values over and over.\n", - "Make it more efficient by memoizing it, as described in [Chapter 10](section_memos)." + "Esta función no es muy eficiente porque acaba calculando los mismos valores una y otra vez.\n", + "Hazla más eficiente memoizándola, como se describe en el [Capítulo 10](section_memos).\n" ] }, { @@ -2491,9 +2491,9 @@ "id": "921719dc", "metadata": {}, "source": [ - "### Exercise\n", + "### Ejercicio\n", "\n", - "Here's the `__str__` method from the `Deck` class in [Chapter 17](section_print_deck)." + "Aquí tienes el método `__str__` de la clase `Deck` en el [Capítulo 17](section_print_deck).\n" ] }, { @@ -2517,7 +2517,7 @@ "id": "27f189cf", "metadata": {}, "source": [ - "Write a more concise version of this method with a list comprehension or generator expression." + "Escribe una versión más concisa de este método con una comprensión de listas o una expresión generadora.\n" ] }, { @@ -2539,7 +2539,7 @@ "tags": [] }, "source": [ - "You can use this example to test your solution." + "Puedes usar este ejemplo para probar tu solución.\n" ] }, { @@ -2571,13 +2571,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n" ] } ], @@ -2603,4 +2605,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/chapters/chap19.ipynb b/chapters/chap19.ipynb index 4d86fb8..be0fc26 100644 --- a/chapters/chap19.ipynb +++ b/chapters/chap19.ipynb @@ -5,9 +5,9 @@ "id": "1331faa1", "metadata": {}, "source": [ - "You can order print and ebook versions of *Think Python 3e* from\n", - "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) and\n", - "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)." + "Puedes encargar versiones impresas y ebook de *Think Python 3e* en\n", + "[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y\n", + "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325).\n" ] }, { @@ -15,7 +15,7 @@ "id": "171aca73", "metadata": {}, "source": [ - "# Final thoughts" + "# Reflexiones finales\n" ] }, { @@ -23,19 +23,19 @@ "id": "4d551c99", "metadata": {}, "source": [ - "Learning to program is not easy, but if you made it this far, you are off to a good start.\n", - "Now I have some suggestions for ways you can keep learning and apply what you have learned.\n", + "Aprender a programar no es fácil, pero si has llegado hasta aquí, has empezado con buen pie.\n", + "Ahora tengo algunas sugerencias sobre cómo puedes seguir aprendiendo y aplicar lo que has aprendido.\n", "\n", - "This book is meant to be a general introduction to programming, so we have not focused on specific applications.\n", - "Depending on your interests, there are any number of areas where you can apply your new skills.\n", + "Este libro pretende ser una introducción general a la programación, así que no nos hemos centrado en aplicaciones específicas.\n", + "Según tus intereses, hay muchas áreas en las que puedes aplicar tus nuevas habilidades.\n", "\n", - "If you are interested in Data Science, there are three books of mine you might like:\n", + "Si te interesa la ciencia de datos, hay tres libros míos que podrían gustarte:\n", "\n", "* *Think Stats: Exploratory Data Analysis*, O'Reilly Media, 2014.\n", "\n", "* *Think Bayes: Bayesian Statistics in Python*, O'Reilly Media, 2021.\n", "\n", - "* *Think DSP: Digital Signal Processing in Python*, O'Reilly Media, 2016." + "* *Think DSP: Digital Signal Processing in Python*, O'Reilly Media, 2016.\n" ] }, { @@ -43,13 +43,13 @@ "id": "cceabe36", "metadata": {}, "source": [ - "If you are interested in physical modeling and complex systems, you might like:\n", + "Si te interesan el modelado físico y los sistemas complejos, quizá te gusten:\n", "\n", "* *Modeling and Simulation in Python: An Introduction for Scientists and Engineers*, No Starch Press, 2023.\n", "\n", "* *Think Complexity: Complexity Science and Computational Modeling*, O'Reilly Media, 2018.\n", "\n", - "These use NumPy, SciPy, pandas, and other Python libraries for data science and scientific computing." + "Estos libros usan NumPy, SciPy, pandas y otras librerías de Python para ciencia de datos y computación científica.\n" ] }, { @@ -57,13 +57,13 @@ "id": "54a39121", "metadata": {}, "source": [ - "This book tries to find a balance between general principles of programming and details of Python.\n", - "As a result, it does not include every feature of the Python language.\n", - "For more about Python, and good advice about how to use it, I recommend *Fluent Python: Clear, Concise, and Effective Programming*, second edition by Luciano Ramalho, O'Reilly Media, 2022.\n", + "Este libro intenta encontrar un equilibrio entre los principios generales de la programación y los detalles de Python.\n", + "Como resultado, no incluye todas las características del lenguaje Python.\n", + "Para saber más sobre Python, y para buenos consejos sobre cómo usarlo, recomiendo *Fluent Python: Clear, Concise, and Effective Programming*, segunda edición de Luciano Ramalho, O'Reilly Media, 2022.\n", "\n", - "After an introduction to programming, a common next step is to learn about data structures and algorithms.\n", - "I have a work in progress on this topic, called *Data Structures and Information Retrieval in Python*.\n", - "A free electronic version is available from Green Tea Press at ." + "Después de una introducción a la programación, un siguiente paso habitual es aprender sobre estructuras de datos y algoritmos.\n", + "Tengo una obra en curso sobre este tema, llamada *Data Structures and Information Retrieval in Python*.\n", + "Hay una versión electrónica gratuita disponible en Green Tea Press en .\n" ] }, { @@ -71,11 +71,11 @@ "id": "a1598510", "metadata": {}, "source": [ - "As you work on more complex programs, you will encounter new challenges.\n", - "You might find it helpful to review the sections in this book about debugging.\n", - "In particular, remember the Six R's of debugging from [Chapter 12](section_debugging_12): reading, running, ruminating, rubber-ducking, retreating, and resting.\n", + "A medida que trabajes en programas más complejos, encontrarás nuevos desafíos.\n", + "Puede resultarte útil repasar las secciones de este libro sobre depuración.\n", + "En particular, recuerda las seis R de la depuración del [Capítulo 12](section_deerrorging_12) (por sus nombres en inglés): leer, ejecutar, reflexionar, explicárselo a un patito de goma, tomar distancia y descansar.\n", "\n", - "This book suggests tools to help with debugging, including the `print` and `repr` functions, the `structshape` function in [Chapter 11](section_debugging_11) -- and the built-in functions `isinstance`, `hasattr`, and `vars` in [Chapter 14](section_debugging_14)." + "Este libro sugiere herramientas para ayudar con la depuración, incluidas las funciones `print` y `repr`, la función `structshape` del [Capítulo 11](section_deerrorging_11) -- y las funciones integradas `isinstance`, `hasattr` y `vars` del [Capítulo 14](section_deerrorging_14).\n" ] }, { @@ -83,12 +83,12 @@ "id": "fb4dd345", "metadata": {}, "source": [ - "It also suggests tools for testing programs, including the `assert` statement, the `doctest` module, and the `unittest` module.\n", - "Including tests in your programs is one of the best ways to prevent and detect errors, and save time debugging.\n", + "También sugiere herramientas para probar programas, incluidas la sentencia `assert`, el módulo `doctest` y el módulo `unittest`.\n", + "Incluir pruebas en tus programas es una de las mejores formas de prevenir y detectar errores, y de ahorrar tiempo en depuración.\n", "\n", - "But the best kind of debugging is the kind you don't have to do.\n", - "If you use an incremental development process as described in [Chapter 6](section_incremental) -- and test as you go -- you will make fewer errors and find them more quickly when you do.\n", - "Also, remember encapsulation and generalization from [Chapter 4](section_encapsulation), which is particularly useful when you are developing code in Jupyter notebooks." + "Pero la mejor depuración es el que no tienes que hacer.\n", + "Si usas un proceso de desarrollo incremental como se describe en el [Capítulo 6](section_incremental) -- y pruebas a medida que avanzas -- cometerás menos errores y los encontrarás más rápido cuando aparezcan.\n", + "Además, recuerda la encapsulación y la generalización del [Capítulo 4](section_encapsulation), que son especialmente útiles cuando desarrollas código en Jupyter notebooks.\n" ] }, { @@ -96,16 +96,16 @@ "id": "0d29933e", "metadata": {}, "source": [ - "Throughout this book, I've suggested ways to use virtual assistants to help you learn, program, and debug.\n", - "I hope you are finding these tools useful.\n", + "A lo largo de este libro, he sugerido formas de usar asistentes virtuales para ayudarte a aprender, programar y depurar.\n", + "Espero que estas herramientas te estén resultando útiles.\n", "\n", - "In additional to virtual assistants like ChatGPT, you might also want to use a tool like Copilot that autocompletes code as you type.\n", - "I did not recommend using these tools, initially, because they can be overwhelming for beginners.\n", - "But you might want to explore them now.\n", + "Además de asistentes virtuales como ChatGPT, quizá también quieras usar una herramienta como Copilot, que autocompleta código mientras escribes.\n", + "Al principio no recomendé usar estas herramientas porque pueden resultar abrumadoras para principiantes.\n", + "Pero quizá ahora quieras explorarlas.\n", "\n", - "Using AI tools effectively requires some experimentation and reflection to find a flow that works for you.\n", - "If you think it's a nuisance to copy code from ChatGPT to Jupyter, you might prefer something like Copilot.\n", - "But the cognitive work you do to compose a prompt and interpret the response can be as valuable as the code the tool generates, in the same vein as rubber duck debugging." + "Usar herramientas de AI de forma efectiva requiere algo de experimentación y reflexión para encontrar un flujo que funcione para ti.\n", + "Si te resulta molesto copiar código de ChatGPT a Jupyter, quizá prefieras algo como Copilot.\n", + "Pero el trabajo cognitivo que haces para componer un prompt e interpretar la respuesta puede ser tan valioso como el código que genera la herramienta, en la misma línea que la depuración con patito de goma.\n" ] }, { @@ -113,17 +113,17 @@ "id": "c28d6815", "metadata": {}, "source": [ - "As you gain programming experience, you might want to explore other development environments.\n", - "I think Jupyter notebooks are a good place to start, but they are relatively new and not as widely-used as conventional integrated development environments (IDE).\n", - "For Python, the most popular IDEs include PyCharm and Spyder -- and Thonny, which is often recommended for beginners.\n", - "Other IDEs, like Visual Studio Code and Eclipse, work with other programming languages as well.\n", - "Or, as a simpler alternative, you can write Python programs using any text editor you like.\n", - "\n", - "As you continue your programming journey, you don't have to go alone!\n", - "If you live in or near a city, there's a good chance there is a Python user group you can join.\n", - "These groups are usually friendly to beginners, so don't be afraid.\n", - "If there is no group near you, you might be able to join events remotely.\n", - "Also, keep an eye out for regional Python conferences." + "A medida que ganes experiencia programando, quizá quieras explorar otros entornos de desarrollo.\n", + "Creo que Jupyter notebooks es un buen lugar para empezar, pero son relativamente nuevos y no se usan tanto como los entornos de desarrollo integrados (IDE) convencionales.\n", + "Para Python, los IDE más populares incluyen PyCharm y Spyder -- y Thonny, que suele recomendarse para principiantes.\n", + "Otros IDE, como Visual Studio Código y Eclipse, también funcionan con otros lenguajes de programación.\n", + "O, como alternativa más sencilla, puedes escribir programas en Python usando cualquier editor de texto que te guste.\n", + "\n", + "Mientras continúas tu viaje en la programación, no tienes que hacerlo en soledad.\n", + "Si vives en una ciudad o cerca de una, es muy probable que haya un grupo de usuarios de Python al que puedas unirte.\n", + "Estos grupos suelen ser amables con principiantes, así que no tengas miedo.\n", + "Si no hay ningún grupo cerca de ti, quizá puedas unirte a eventos de forma remota.\n", + "Además, mantente atento a conferencias regionales de Python.\n" ] }, { @@ -131,12 +131,12 @@ "id": "28cb22bf", "metadata": {}, "source": [ - "One of the best ways to improve your programming skills is to learn another language.\n", - "If you are interested in statistics and data science, you might want to learn R.\n", - "But I particularly recommend learning a functional language like Racket or Elixir.\n", - "Functional programming requires a different kind of thinking, which changes the way you think about programs.\n", + "Una de las mejores formas de mejorar tus habilidades de programación es aprender otro lenguaje.\n", + "Si te interesan la estadística y ciencia de datos, quizá quieras aprender R.\n", + "Pero recomiendo especialmente aprender un lenguaje funcional como Racket o Elixir.\n", + "La programación funcional requiere una forma distinta de pensar, lo que cambia la manera en que piensas sobre los programas.\n", "\n", - "Good luck!" + "¡Buena suerte!\n" ] }, { @@ -154,13 +154,15 @@ "tags": [] }, "source": [ - "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n", + "[Think Python: 3.ª edición](https://allendowney.github.io/ThinkPython/index.html)\n", "\n", "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n", "\n", - "Code license: [MIT License](https://mit-license.org/)\n", + "Traducción al español por midudev (Miguel Ángel Durán).\n", "\n", - "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia del código: [MIT License](https://mit-license.org/)\n", + "\n", + "Licencia del texto: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n" ] } ], @@ -185,4 +187,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/chapters/jupyter_intro.ipynb b/chapters/jupyter_intro.ipynb index 54f1042..dee8f80 100644 --- a/chapters/jupyter_intro.ipynb +++ b/chapters/jupyter_intro.ipynb @@ -7,20 +7,20 @@ "tags": [] }, "source": [ - "# *Think Python* on Jupyter\n", + "# *Think Python* en Jupyter\n", "\n", - "This is an introduction to Jupyter notebooks for people reading the third edition of [*Think Python*](https://greenteapress.com/wp/think-python-3rd-edition) by Allen B. Downey.\n", + "Esta es una introducción a los Jupyter notebooks para personas que leen la tercera edición de [*Think Python*](https://greenteapress.com/wp/think-python-3rd-edition) de Allen B. Downey.\n", "\n", - "A Jupyter notebook is a document that contains text, code, and results from running the code.\n", - "You can read a notebook like a book, but you can also run the code, modify it, and develop new programs.\n", + "Un Jupyter notebook es un documento que contiene texto, código y resultados de ejecutar el código.\n", + "Puedes leer un notebook como un libro, pero también puedes ejecutar el código, modificarlo y desarrollar nuevos programas.\n", "\n", - "Jupyter notebooks run in a web browser, so you can run them without installing any new software.\n", - "But they have to connect to a Jupyter server.\n", + "Los Jupyter notebooks se ejecutan en un navegador web, así que puedes usarlos sin instalar software nuevo.\n", + "Pero tienen que conectarse a un servidor Jupyter.\n", "\n", - "You can install and run a server yourself, but to get started it is easier to use a service like [Colab](https://colab.research.google.com/), which is operated by Google.\n", + "Puedes instalar y ejecutar un servidor tú mismo, pero para empezar es más fácil usar un servicio como [Colab](https://colab.research.google.com/), operado por Google.\n", "\n", - "[On the starting page for the book](https://allendowney.github.io/ThinkPython) you will find a link for each chapter.\n", - "If you click on one of these links, it opens a notebook on Colab." + "[En la página de inicio del libro](https://allendowney.github.io/ThinkPython) encontrarás un enlace para cada capítulo.\n", + "Si haces clic en uno de estos enlaces, se abre un notebook en Colab." ] }, { @@ -30,9 +30,9 @@ "tags": [] }, "source": [ - "If you are reading this notebook on Colab, you should see an orange logo in the upper left that looks like the letters `CO`.\n", + "Si estás leyendo este notebook en Colab, deberías ver un logotipo naranja en la esquina superior izquierda que se parece a las letras `CO`.\n", "\n", - "If you are not running this notebook on Colab, [you can click here to open it on Colab](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/jupyter_intro.ipynb)." + "Si no estás ejecutando este notebook en Colab, [puedes hacer clic aquí para abrirlo en Colab](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/jupyter_intro.ipynb)." ] }, { @@ -42,12 +42,12 @@ "tags": [] }, "source": [ - "## What is a notebook?\n", + "## ¿Qué es un notebook?\n", "\n", - "A Jupyter notebook is made up of cells, where each cell contains either text or code.\n", - "This cell contains text. \n", + "Un Jupyter notebook está compuesto por celdas; cada celda contiene texto o código.\n", + "Esta celda contiene texto. \n", "\n", - "The following cell contains code." + "La siguiente celda contiene código." ] }, { @@ -74,13 +74,13 @@ "tags": [] }, "source": [ - "Click on the previous cell to select it.\n", - "You should see a button on the left with a triangle inside a circle, which is the icon for \"Play\".\n", - "If you press this button, Jupyter runs the code in the cell and displays the result.\n", + "Haz clic en la celda anterior para seleccionarla.\n", + "Deberías ver un botón a la izquierda con un triángulo dentro de un círculo, que es el icono de \"Play\".\n", + "Si pulsas este botón, Jupyter ejecuta el código de la celda y muestra el resultado.\n", "\n", - "When you run code in a notebook for the first time, it might take a few seconds to start.\n", - "And if it's a notebook you didn't write, you might get a warning message.\n", - "If you are running a notebook from a source you trust, which I hope includes me, you can press \"Run Anyway\"." + "Cuando ejecutas código en un notebook por primera vez, puede tardar unos segundos en iniciar.\n", + "Y si es un notebook que no escribiste tú, puede que aparezca un mensaje de advertencia.\n", + "Si estás ejecutando un notebook de una fuente en la que confías, que espero que me incluya, puedes pulsar \"Run Anyway\"." ] }, { @@ -90,11 +90,11 @@ "tags": [] }, "source": [ - "Instead of clicking the \"Play\" button, you can also run the code in a cell by holding down `Shift` and pressing `Enter`.\n", + "En lugar de hacer clic en el botón \"Play\", también puedes ejecutar el código de una celda manteniendo pulsado `Shift` y presionando `Enter`.\n", "\n", - "If you are running this notebook on Colab, you should see buttons in the top left that say \"+ Code\" and \"+ Text\". The first one adds a code cell and the second adds a text cell.\n", - "If you want to try them out, select this cell by clicking on it, then press the \"+ Text\" button.\n", - "A new cell should appear below this one." + "Si estás ejecutando este notebook en Colab, deberías ver botones en la parte superior izquierda que dicen \"+ Código\" y \"+ Text\". El primero añade una celda de código y el segundo añade una celda de texto.\n", + "Si quieres probarlos, selecciona esta celda haciendo clic en ella y luego pulsa el botón \"+ Text\".\n", + "Debería aparecer una nueva celda debajo de esta." ] }, { @@ -104,54 +104,54 @@ "tags": [] }, "source": [ - "Add some text to the cell.\n", - "You can use the buttons to format it, or you can mark up the text using [Markdown](https://www.markdownguide.org/basic-syntax/).\n", - "When you are done, hold down `Shift` and press `Enter`, which will format the text you just typed and then move to the next cell." + "Añade algo de texto a la celda.\n", + "Puedes usar los botones para darle formato, o puedes marcar el texto usando [Markdown](https://www.markdownguide.org/basic-syntax/).\n", + "Cuando termines, mantén pulsado `Shift` y presiona `Enter`, lo que dará formato al texto que acabas de escribir y pasará a la siguiente celda." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "At any time Jupyter is in one of two modes:\n", + "En cualquier momento Jupyter está en uno de dos modos:\n", "\n", - "* In **command mode**, you can perform operations that affect cells, like adding and removing entire cells.\n", + "* En **command mode**, puedes realizar operaciones que afectan a las celdas, como añadir y eliminar celdas completas.\n", "\n", - "* In **edit mode**, you can edit the contents of a cell.\n", + "* En **edit mode**, puedes editar el contenido de una celda.\n", "\n", - "With text cells, it is obvious which mode you are in.\n", - "In edit mode, the cell is split vertically, with the text you are editing on the left and the formatted text on the right.\n", - "And you'll see text editing tools across the top.\n", - "In command mode, you see only the formatted text.\n", + "Con las celdas de texto, es evidente en qué modo estás.\n", + "En edit mode, la celda se divide verticalmente, con el texto que estás editando a la izquierda y el texto formateado a la derecha.\n", + "Y verás herramientas de edición de texto en la parte superior.\n", + "En command mode, solo ves el texto formateado.\n", "\n", - "With code cells, the difference is more subtle, but if there's a cursor in the cell, you are in edit mode.\n", + "Con las celdas de código, la diferencia es más sutil, pero si hay un cursor en la celda, estás en edit mode.\n", "\n", - "To go from edit mode to command mode, press `ESC`.\n", - "To go from command mode to edit mode, press `Enter`." + "Para pasar de edit mode a command mode, pulsa `ESC`.\n", + "Para pasar de command mode a edit mode, pulsa `Enter`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "When you are done working on a notebook, you can close the window, but any changes you made will disappear.\n", - "If you make any changes you want to keep, open the File menu in the upper left.\n", - "You'll see several ways you can save the notebook.\n", + "Cuando termines de trabajar en un notebook, puedes cerrar la ventana, pero cualquier cambio que hayas hecho desaparecerá.\n", + "Si haces cambios que quieres conservar, abre el menú File en la parte superior izquierda.\n", + "Verás varias formas de guardar el notebook.\n", "\n", - "* If you have a Google account, you can save the notebook in your Drive.\n", + "* Si tienes una cuenta de Google, puedes guardar el notebook en tu Drive.\n", "\n", - "* If you have a GitHub account, you can save it on GitHub.\n", + "* Si tienes una cuenta de GitHub, puedes guardarlo en GitHub.\n", "\n", - "* Or if you want to save the notebook on your computer, select \"Download\" and then \"Download .ipynb\" The suffix \".ipynb\" indicates that it is a notebook file, as opposed to \".py\", which indicates a file that contains Python code only." + "* O, si quieres guardar el notebook en tu ordenador, selecciona \"Download\" y luego \"Download .ipynb\". El sufijo \".ipynb\" indica que es un archivo notebook, a diferencia de \".py\", que indica un archivo que contiene solo código de Python." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Code for *Think Python*\n", + "## Código para *Think Python*\n", "\n", - "At the beginning of each notebook, you'll see a cell with code like this:" + "Al principio de cada notebook, verás una celda con código como esta:" ] }, { @@ -180,13 +180,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "You don't need to know how this code works, but when you get to the end of the book, most of it will make sense.\n", - "As you might guess, it downloads a file -- specifically, it downloads `thinkpython.py`, which contains Python code provided specifically for this book.\n", - "The last line \"imports\" this code, which means we can use the code in the notebook.\n", + "No necesitas saber cómo funciona este código, pero cuando llegues al final del libro, la mayor parte tendrá sentido.\n", + "Como quizá imagines, descarga un archivo; en concreto, descarga `thinkpython.py`, que contiene código de Python proporcionado específicamente para este libro.\n", + "La última línea \"importa\" este código, lo que significa que podemos usar el código en el notebook.\n", "\n", - "In other chapters, you will see code that downloads `diagram.py`, which is used to generated the diagrams in the book, and `jupyturtle.py`, which is used in several chapters to create turtle graphics.\n", + "En otros capítulos, verás código que descarga `diagram.py`, que se usa para generar los diagramas del libro, y `jupyturtle.py`, que se usa en varios capítulos para crear turtle graphics.\n", "\n", - "In some places you will see a cell like this that begins with `%%expect`." + "En algunos lugares verás una celda como esta que empieza con `%%expect`." ] }, { @@ -213,17 +213,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "`%%expect` is not part of Python -- it is a Jupyter \"magic command\" that indicates that we expect the cell to product an error.\n", - "When you see this command, it means that the error is deliberate, usually intended to warn you about a common pitfall." + "`%%expect` no forma parte de Python: es un \"magic command\" de Jupyter que indica que esperamos que la celda produzca un error.\n", + "Cuando veas este comando, significa que el error es deliberado, normalmente pensado para advertirte sobre una trampa común." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "For more about running Jupyter notebooks on Colab, [click here](https://colab.research.google.com/notebooks/basic_features_overview.ipynb).\n", + "Para saber más sobre cómo ejecutar Jupyter notebooks en Colab, [haz clic aquí](https://colab.research.google.com/notebooks/basic_features_overview.ipynb).\n", "\n", - "Or, if you are ready to get started, [click here to read Chapter 1](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/chap01.ipynb)." + "O, si ya estás listo para empezar, [haz clic aquí para leer el capítulo 1](https://colab.research.google.com/github/AllenDowney/ThinkPython/blob/v3/chapters/chap01.ipynb)." ] }, { @@ -233,11 +233,13 @@ "tags": [] }, "source": [ - "*Think Python*, 3rd edition.\n", + "*Think Python*, 3.ª edición.\n", "\n", "Copyright 2023 [Allen B. Downey](https://allendowney.com)\n", "\n", - "License: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)" + "Licencia: [Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n", + "\n", + "Traducción al español por midudev (Miguel Ángel Durán)." ] }, { diff --git a/jb/_config.yml b/jb/_config.yml index f0b261f..ce92aa1 100644 --- a/jb/_config.yml +++ b/jb/_config.yml @@ -1,5 +1,5 @@ # Book settings -title: Think Python +title: Think Python (edición en español) author: Allen B. Downey latex: @@ -17,14 +17,16 @@ html: extra_footer: |
- Creative Commons License
- This work is licensed under a + Esta obra está bajo una - Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License + Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional . +
+ Traducción al español por midudev (Miguel Ángel Durán). Obra original de Allen B. Downey.
parse: From 7a5cb8c856809c2ce8b29038fbb1e745fb3f60b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Tue, 19 May 2026 12:00:49 +0200 Subject: [PATCH 02/18] chore: ignorar carpeta de build de Jupyter Book MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Añade `jb/_build/` al .gitignore para evitar versionar los artefactos generados (HTML, PDF, doctrees, jupyter_execute, etc.) por `jb build`. --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index f24cd99..4aa701b 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,5 @@ pip-log.txt #Mr Developer .mr.developer.cfg + +jb/_build/ \ No newline at end of file From 044847bbbaac0da13cfe60ec918f6910e47d80f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Tue, 19 May 2026 12:00:56 +0200 Subject: [PATCH 03/18] =?UTF-8?q?build(jb):=20configurar=20Jupyter=20Book?= =?UTF-8?q?=20con=20baseurl=20y=20extensi=C3=B3n=20PDF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Apunta el repositorio al fork de midudev (rama v3) y añade `baseurl: https://libropython.es` para los enlaces canónicos. - Actualiza el footer con enlace a midu.dev en la atribución. - Migra la configuración de MathJax a `mathjax3_config`/`tex` para compatibilidad con MathJax 3. - Registra la extensión local `full_book_pdf`, que sustituye el menú de descarga por página por un botón único que enlaza al PDF del libro completo (`think-python-es.pdf`). --- jb/_config.yml | 13 +++++++++---- jb/_extensions/full_book_pdf.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 jb/_extensions/full_book_pdf.py diff --git a/jb/_config.yml b/jb/_config.yml index ce92aa1..6d47590 100644 --- a/jb/_config.yml +++ b/jb/_config.yml @@ -10,8 +10,10 @@ execute: execute_notebooks: 'off' repository: - url: https://github.com/AllenDowney/ThinkPython/tree/v3 + url: https://github.com/midudev/ThinkPython + branch: v3 html: + baseurl: https://libropython.es use_repository_button: true extra_footer: | @@ -26,7 +28,8 @@ html: Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional .
- Traducción al español por midudev (Miguel Ángel Durán). Obra original de Allen B. Downey. + Traducción al español por midudev + (Miguel Ángel Durán). Obra original de Allen B. Downey. parse: @@ -48,9 +51,11 @@ parse: - tasklist sphinx: + local_extensions: + full_book_pdf: _extensions config: mathjax_path: https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js - mathjax_config: - tex2jax: + mathjax3_config: + tex: inlineMath: [["$","$"], ["\\(", "\\)"]] myst_update_mathjax: false diff --git a/jb/_extensions/full_book_pdf.py b/jb/_extensions/full_book_pdf.py new file mode 100644 index 0000000..4b0b5ce --- /dev/null +++ b/jb/_extensions/full_book_pdf.py @@ -0,0 +1,33 @@ +"""Header download button for the generated full-book PDF.""" + +PDF_FILENAME = "think-python-es.pdf" +PDF_TOOLTIP = "Descargar el libro completo en PDF" + + +def use_full_book_pdf_download(app, pagename, templatename, context, doctree): + """Replace the page-download dropdown with the full-book PDF link.""" + header_buttons = context.get("header_buttons") + if not isinstance(header_buttons, list): + return + + pdf_button = { + "type": "link", + "url": context["pathto"](PDF_FILENAME, 1), + "tooltip": PDF_TOOLTIP, + "icon": "fas fa-file-pdf", + "label": "download-book-pdf-button", + } + + context["header_buttons"] = [ + pdf_button, + *( + button + for button in header_buttons + if button.get("label") != "download-buttons" + ), + ] + + +def setup(app): + app.connect("html-page-context", use_full_book_pdf_download, priority=700) + return {"parallel_read_safe": True, "parallel_write_safe": True} From ad0886ff63198a27b42ead97148dba25cfa9ff61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Tue, 19 May 2026 12:01:08 +0200 Subject: [PATCH 04/18] =?UTF-8?q?build(jb):=20reescribir=20script=20con=20?= =?UTF-8?q?symlinks,=20validaci=C3=B3n=20y=20PDF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Usa `set -euo pipefail` y se posiciona en su propio directorio para poder ejecutarse desde cualquier ruta. - Sustituye el `cp` de notebooks desde `ThinkPythonSolutions` por symlinks a `../chapters/chap*.ipynb`, evitando duplicar archivos y manteniendo una única fuente de verdad. - Valida que `jupyter-book` y `playwright` estén disponibles antes de construir, con mensajes claros de instalación. - Genera además del HTML el PDF del libro completo (`pdfhtml`) y lo copia a `_build/html/think-python-es.pdf` para servirlo junto al sitio. - Elimina el paso de `ghp-import`, ya que la publicación se gestionará desde el output de `_build/html`. --- jb/build.sh | 53 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 9 deletions(-) mode change 100644 => 100755 jb/build.sh diff --git a/jb/build.sh b/jb/build.sh old mode 100644 new mode 100755 index d0feed6..8c651fb --- a/jb/build.sh +++ b/jb/build.sh @@ -1,15 +1,50 @@ -# pip install jupyter-book ghp-import +#!/usr/bin/env bash +set -euo pipefail # Build the Jupyter book version +cd "$(dirname "$0")" -# copy the notebooks -cp ../ThinkPythonSolutions/soln/chap[01][0-9]*.ipynb . +# Link the translated notebooks into the Jupyter Book source directory. +for notebook in ../chapters/chap[01][0-9]*.ipynb; do + target="$(basename "$notebook")" + if [ -e "$target" ] && [ ! -L "$target" ]; then + echo "Refusing to replace existing non-symlink: $target" >&2 + exit 1 + fi + ln -sfn "$notebook" "$target" +done -# add tags to hide the solutions -python prep_notebooks.py +if command -v jupyter-book >/dev/null 2>&1; then + jupyter_book_cmd="jupyter-book" +else + user_base="$(python3 -m site --user-base)" + jupyter_book_cmd="$user_base/bin/jupyter-book" +fi -# build the HTML version -jb build . +if [ ! -x "$(command -v "$jupyter_book_cmd" 2>/dev/null || printf '%s' "$jupyter_book_cmd")" ]; then + echo "jupyter-book was not found. Install it with: python3 -m pip install --user 'jupyter-book<2'" >&2 + exit 1 +fi -# push it to GitHub -ghp-import -n -p -f _build/html +if ! python3 -c "import playwright" >/dev/null 2>&1; then + echo "playwright was not found. Install PDF build dependencies with:" >&2 + echo " python3 -m pip install --user playwright" >&2 + echo " python3 -m playwright install chromium" >&2 + exit 1 +fi + +pdf_filename="think-python-es.pdf" +pdf_build_dir="_build/pdfhtml" +pdf_source="$pdf_build_dir/_build/pdf/book.pdf" +html_pdf="_build/html/$pdf_filename" + +"$jupyter_book_cmd" build . +"$jupyter_book_cmd" build . --builder pdfhtml --path-output "$pdf_build_dir" + +if [ ! -f "$pdf_source" ]; then + echo "Expected full-book PDF was not generated: $pdf_source" >&2 + exit 1 +fi + +cp "$pdf_source" "$html_pdf" +echo "Full-book PDF copied to $html_pdf" From 3634adf5ea8c3540e3637f7031c1b9ccece1fe30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Tue, 19 May 2026 12:01:15 +0200 Subject: [PATCH 05/18] =?UTF-8?q?feat(jb):=20a=C3=B1adir=20=C3=ADndice,=20?= =?UTF-8?q?p=C3=A1gina=20en=20blanco=20y=20cap=C3=ADtulos=20del=20libro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `jb/index.md`: portada del Jupyter Book con presentación, enlaces a las versiones impresa/electrónica y créditos de traducción. - `jb/blank.md`: página separadora usada por la maquetación. - `jb/chap00.ipynb`..`jb/chap19.ipynb`: symlinks a los notebooks traducidos en `../chapters/`, que son los que Jupyter Book consume para generar el HTML y el PDF. --- jb/blank.md | 80 +++++++++++++++++++++++++++++++++++++++ jb/chap00.ipynb | 1 + jb/chap01.ipynb | 1 + jb/chap02.ipynb | 1 + jb/chap03.ipynb | 1 + jb/chap04.ipynb | 1 + jb/chap05.ipynb | 1 + jb/chap06.ipynb | 1 + jb/chap07.ipynb | 1 + jb/chap08.ipynb | 1 + jb/chap09.ipynb | 1 + jb/chap10.ipynb | 1 + jb/chap11.ipynb | 1 + jb/chap12.ipynb | 1 + jb/chap13.ipynb | 1 + jb/chap14.ipynb | 1 + jb/chap15.ipynb | 1 + jb/chap16.ipynb | 1 + jb/chap17.ipynb | 1 + jb/chap18.ipynb | 1 + jb/chap19.ipynb | 1 + jb/index.md | 99 +++++++++++++++++++++++++++++++++++++++++++++++++ 22 files changed, 199 insertions(+) create mode 100644 jb/blank.md create mode 120000 jb/chap00.ipynb create mode 120000 jb/chap01.ipynb create mode 120000 jb/chap02.ipynb create mode 120000 jb/chap03.ipynb create mode 120000 jb/chap04.ipynb create mode 120000 jb/chap05.ipynb create mode 120000 jb/chap06.ipynb create mode 120000 jb/chap07.ipynb create mode 120000 jb/chap08.ipynb create mode 120000 jb/chap09.ipynb create mode 120000 jb/chap10.ipynb create mode 120000 jb/chap11.ipynb create mode 120000 jb/chap12.ipynb create mode 120000 jb/chap13.ipynb create mode 120000 jb/chap14.ipynb create mode 120000 jb/chap15.ipynb create mode 120000 jb/chap16.ipynb create mode 120000 jb/chap17.ipynb create mode 120000 jb/chap18.ipynb create mode 120000 jb/chap19.ipynb create mode 100644 jb/index.md diff --git a/jb/blank.md b/jb/blank.md new file mode 100644 index 0000000..adc7aa7 --- /dev/null +++ b/jb/blank.md @@ -0,0 +1,80 @@ +# Notebooks en blanco + +Para cada capítulo hay un notebook en blanco con el texto del libro y la mayor parte del código eliminado. +Estos notebooks son útiles para ejercicios guiados donde los estudiantes completan las celdas. + +**Capítulo 1: Programar como una forma de pensar** + +* [Abrir el capítulo 1 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap01.ipynb) + +**Capítulo 2: Variables y sentencias** + +* [Abrir el capítulo 2 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap02.ipynb) + +**Capítulo 3: Funciones** + +* [Abrir el capítulo 3 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap03.ipynb) + +**Capítulo 4: Funciones e interfaces** + +* [Abrir el capítulo 4 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap04.ipynb) + +**Capítulo 5: Condicionales y recursión** + +* [Abrir el capítulo 5 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap05.ipynb) + +**Capítulo 6: Valores de retorno** + +* [Abrir el capítulo 6 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap06.ipynb) + +**Capítulo 7: Iteración y búsqueda** + +* [Abrir el capítulo 7 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap07.ipynb) + +**Capítulo 8: Cadenas y expresiones regulares** + +* [Abrir el capítulo 8 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap08.ipynb) + +**Capítulo 9: Listas** + +* [Abrir el capítulo 9 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap09.ipynb) + +**Capítulo 10: Diccionarios** + +* [Abrir el capítulo 10 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap10.ipynb) + +**Capítulo 11: Tuplas** + +* [Abrir el capítulo 11 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap11.ipynb) + +**Capítulo 12: Análisis y generación de texto** + +* [Abrir el capítulo 12 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap12.ipynb) + +**Capítulo 13: Archivos y bases de datos** + +* [Abrir el capítulo 13 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap13.ipynb) + +**Capítulo 14: Clases y funciones** + +* [Abrir el capítulo 14 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap14.ipynb) + +**Capítulo 15: Clases y métodos** + +* [Abrir el capítulo 15 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap15.ipynb) + +**Capítulo 16: Clases y objetos** + +* [Abrir el capítulo 16 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap16.ipynb) + +**Capítulo 17: Herencia** + +* [Abrir el capítulo 17 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap17.ipynb) + +**Capítulo 18: Extras de Python** + +* [Abrir el capítulo 18 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap18.ipynb) + +**Capítulo 19: Reflexiones finales** + +* [Abrir el capítulo 19 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/blank/chap19.ipynb) diff --git a/jb/chap00.ipynb b/jb/chap00.ipynb new file mode 120000 index 0000000..9eb8017 --- /dev/null +++ b/jb/chap00.ipynb @@ -0,0 +1 @@ +../chapters/chap00.ipynb \ No newline at end of file diff --git a/jb/chap01.ipynb b/jb/chap01.ipynb new file mode 120000 index 0000000..613d15e --- /dev/null +++ b/jb/chap01.ipynb @@ -0,0 +1 @@ +../chapters/chap01.ipynb \ No newline at end of file diff --git a/jb/chap02.ipynb b/jb/chap02.ipynb new file mode 120000 index 0000000..638630d --- /dev/null +++ b/jb/chap02.ipynb @@ -0,0 +1 @@ +../chapters/chap02.ipynb \ No newline at end of file diff --git a/jb/chap03.ipynb b/jb/chap03.ipynb new file mode 120000 index 0000000..c8ca440 --- /dev/null +++ b/jb/chap03.ipynb @@ -0,0 +1 @@ +../chapters/chap03.ipynb \ No newline at end of file diff --git a/jb/chap04.ipynb b/jb/chap04.ipynb new file mode 120000 index 0000000..14fa6c6 --- /dev/null +++ b/jb/chap04.ipynb @@ -0,0 +1 @@ +../chapters/chap04.ipynb \ No newline at end of file diff --git a/jb/chap05.ipynb b/jb/chap05.ipynb new file mode 120000 index 0000000..ca83b1a --- /dev/null +++ b/jb/chap05.ipynb @@ -0,0 +1 @@ +../chapters/chap05.ipynb \ No newline at end of file diff --git a/jb/chap06.ipynb b/jb/chap06.ipynb new file mode 120000 index 0000000..7b7de67 --- /dev/null +++ b/jb/chap06.ipynb @@ -0,0 +1 @@ +../chapters/chap06.ipynb \ No newline at end of file diff --git a/jb/chap07.ipynb b/jb/chap07.ipynb new file mode 120000 index 0000000..8b677eb --- /dev/null +++ b/jb/chap07.ipynb @@ -0,0 +1 @@ +../chapters/chap07.ipynb \ No newline at end of file diff --git a/jb/chap08.ipynb b/jb/chap08.ipynb new file mode 120000 index 0000000..c93beea --- /dev/null +++ b/jb/chap08.ipynb @@ -0,0 +1 @@ +../chapters/chap08.ipynb \ No newline at end of file diff --git a/jb/chap09.ipynb b/jb/chap09.ipynb new file mode 120000 index 0000000..9c9e15d --- /dev/null +++ b/jb/chap09.ipynb @@ -0,0 +1 @@ +../chapters/chap09.ipynb \ No newline at end of file diff --git a/jb/chap10.ipynb b/jb/chap10.ipynb new file mode 120000 index 0000000..a613d16 --- /dev/null +++ b/jb/chap10.ipynb @@ -0,0 +1 @@ +../chapters/chap10.ipynb \ No newline at end of file diff --git a/jb/chap11.ipynb b/jb/chap11.ipynb new file mode 120000 index 0000000..13c5221 --- /dev/null +++ b/jb/chap11.ipynb @@ -0,0 +1 @@ +../chapters/chap11.ipynb \ No newline at end of file diff --git a/jb/chap12.ipynb b/jb/chap12.ipynb new file mode 120000 index 0000000..5bd275a --- /dev/null +++ b/jb/chap12.ipynb @@ -0,0 +1 @@ +../chapters/chap12.ipynb \ No newline at end of file diff --git a/jb/chap13.ipynb b/jb/chap13.ipynb new file mode 120000 index 0000000..729f601 --- /dev/null +++ b/jb/chap13.ipynb @@ -0,0 +1 @@ +../chapters/chap13.ipynb \ No newline at end of file diff --git a/jb/chap14.ipynb b/jb/chap14.ipynb new file mode 120000 index 0000000..6fa2ab7 --- /dev/null +++ b/jb/chap14.ipynb @@ -0,0 +1 @@ +../chapters/chap14.ipynb \ No newline at end of file diff --git a/jb/chap15.ipynb b/jb/chap15.ipynb new file mode 120000 index 0000000..7400e2e --- /dev/null +++ b/jb/chap15.ipynb @@ -0,0 +1 @@ +../chapters/chap15.ipynb \ No newline at end of file diff --git a/jb/chap16.ipynb b/jb/chap16.ipynb new file mode 120000 index 0000000..73aaaae --- /dev/null +++ b/jb/chap16.ipynb @@ -0,0 +1 @@ +../chapters/chap16.ipynb \ No newline at end of file diff --git a/jb/chap17.ipynb b/jb/chap17.ipynb new file mode 120000 index 0000000..7f6cf7f --- /dev/null +++ b/jb/chap17.ipynb @@ -0,0 +1 @@ +../chapters/chap17.ipynb \ No newline at end of file diff --git a/jb/chap18.ipynb b/jb/chap18.ipynb new file mode 120000 index 0000000..bcb3444 --- /dev/null +++ b/jb/chap18.ipynb @@ -0,0 +1 @@ +../chapters/chap18.ipynb \ No newline at end of file diff --git a/jb/chap19.ipynb b/jb/chap19.ipynb new file mode 120000 index 0000000..dae8552 --- /dev/null +++ b/jb/chap19.ipynb @@ -0,0 +1 @@ +../chapters/chap19.ipynb \ No newline at end of file diff --git a/jb/index.md b/jb/index.md new file mode 100644 index 0000000..2864b08 --- /dev/null +++ b/jb/index.md @@ -0,0 +1,99 @@ +# Think Python (edición en español) + +*Think Python* es una introducción a Python para personas que nunca han programado, o para quienes lo han intentado y se han encontrado con dificultades. + +Esta edición en español traduce la tercera edición de *Think Python: How to Think Like a Computer Scientist*, de Allen B. Downey, con traducción de [midudev](https://midu.dev). + + + +Puedes pedir las versiones impresa y electrónica de *Think Python 3e* en +[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y +[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325). + +[Aquí está la página principal del libro en Green Tea Press](https://greenteapress.com/wp/think-python-3rd-edition/). + +Descargar el libro completo en PDF + +## Los notebooks + +**Capítulo 1: Programar como una forma de pensar** + +* [Abrir el capítulo 1 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap01.ipynb) + +**Capítulo 2: Variables y sentencias** + +* [Abrir el capítulo 2 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap02.ipynb) + +**Capítulo 3: Funciones** + +* [Abrir el capítulo 3 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap03.ipynb) + +**Capítulo 4: Funciones e interfaces** + +* [Abrir el capítulo 4 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap04.ipynb) + +**Capítulo 5: Condicionales y recursión** + +* [Abrir el capítulo 5 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap05.ipynb) + +**Capítulo 6: Valores de retorno** + +* [Abrir el capítulo 6 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap06.ipynb) + +**Capítulo 7: Iteración y búsqueda** + +* [Abrir el capítulo 7 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap07.ipynb) + +**Capítulo 8: Cadenas y expresiones regulares** + +* [Abrir el capítulo 8 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap08.ipynb) + +**Capítulo 9: Listas** + +* [Abrir el capítulo 9 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap09.ipynb) + +**Capítulo 10: Diccionarios** + +* [Abrir el capítulo 10 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap10.ipynb) + +**Capítulo 11: Tuplas** + +* [Abrir el capítulo 11 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap11.ipynb) + +**Capítulo 12: Análisis y generación de texto** + +* [Abrir el capítulo 12 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap12.ipynb) + +**Capítulo 13: Archivos y bases de datos** + +* [Abrir el capítulo 13 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap13.ipynb) + +**Capítulo 14: Clases y funciones** + +* [Abrir el capítulo 14 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap14.ipynb) + +**Capítulo 15: Clases y métodos** + +* [Abrir el capítulo 15 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap15.ipynb) + +**Capítulo 16: Clases y objetos** + +* [Abrir el capítulo 16 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap16.ipynb) + +**Capítulo 17: Herencia** + +* [Abrir el capítulo 17 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap17.ipynb) + +**Capítulo 18: Extras de Python** + +* [Abrir el capítulo 18 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap18.ipynb) + +**Capítulo 19: Reflexiones finales** + +* [Abrir el capítulo 19 en Colab](https://colab.research.google.com/github/midudev/ThinkPython/blob/v3/chapters/chap19.ipynb) + +## Recursos para docentes + +Cada capítulo también tiene un notebook en blanco con el texto original y la mayor parte del código eliminado. Estos notebooks sirven para hacer ejercicios guiados donde el alumnado completa los huecos. + +[Aquí están los enlaces a los notebooks en blanco](blank). From 026384b0c9aaaa6df298d0544b086a61a3ba483a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Tue, 19 May 2026 12:01:20 +0200 Subject: [PATCH 06/18] =?UTF-8?q?docs:=20reescribir=20README=20con=20insta?= =?UTF-8?q?laci=C3=B3n,=20build=20y=20enlaces=20actualizados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Añade sección de requisitos (Python 3, pip, Jupyter, Jupyter Book, Playwright) y comandos de instalación tanto para entorno completo como para solo build. - Documenta el flujo de construcción con `./build.sh` y la ubicación de los artefactos generados (HTML y PDF). - Describe la estructura del proyecto (`chapters/`, `jb/`, `jb/build.sh`, `jb/_build/html/`). - Incluye enlace al sitio publicado (libropython.es) y a la licencia Creative Commons BY-NC-SA 4.0. --- README.md | 83 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 60 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 7600031..c4eee16 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,83 @@ # Think Python, 3.ª edición -Notebooks de Jupyter y otros materiales de la 3.ª edición de *Think Python: How to Think Like a Computer Scientist*. +Materiales, notebooks de Jupyter y versión web en español de la 3.ª edición de *Think Python: How to Think Like a Computer Scientist*, de Allen B. Downey. -Por Allen B. Downey. +Traducción al español por [midudev](https://midu.dev) (Miguel Ángel Durán). -Traducción al español por midudev (Miguel Ángel Durán). +## Enlaces -Puedes pedir las versiones impresa y electrónica de *Think Python 3e* en -[Bookshop.org](https://bookshop.org/a/98697/9781098155438) y -[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325). +- Repositorio del proyecto: [libropython.es](https://libropython.es) +- Página original del libro: [Green Tea Press](http://thinkpython.com) +- Versión impresa y electrónica en inglés: [Bookshop.org](https://bookshop.org/a/98697/9781098155438) y [Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325) -La página principal del libro está en [Green Tea Press](http://thinkpython.com). +## Requisitos -## Cómo ejecutar este fork +- Python 3 +- `pip` +- Jupyter Notebook o JupyterLab, si quieres abrir los notebooks localmente +- Jupyter Book y Playwright, si quieres construir la versión web y el PDF -Para que todo funcione correctamente: +## Instalación -1. Instala Python 3 y Jupyter si todavía no los tienes. -2. Instala las herramientas de Jupyter Book si necesitas construir el libro: +Desde la raíz del repositorio, instala las herramientas necesarias: - ```bash - python -m pip install jupyter-book - ``` +```bash +python3 -m pip install jupyter notebook jupyterlab jupyter-book playwright +python3 -m playwright install chromium +``` -3. Construye el libro desde la carpeta `jb`: +Si ya tienes Jupyter instalado, puedes instalar solo lo necesario para construir el libro: - ```bash - cd jb && jb build . - ``` +```bash +python3 -m pip install jupyter-book playwright +python3 -m playwright install chromium +``` -4. Para ejecutar o abrir los notebooks con Jupyter, desde la raíz del repositorio puedes usar: +## Construir el libro + +1. Entra en la carpeta de Jupyter Book: ```bash - jupyter notebook + cd jb ``` - Luego abre el notebook que quieras desde la interfaz del navegador. También puedes usar JupyterLab si lo tienes instalado: +2. Ejecuta el script de construcción: ```bash - jupyter lab + ./build.sh ``` +3. Revisa los archivos generados: + + - HTML: `jb/_build/html/index.html` + - PDF: `jb/_build/html/think-python-es.pdf` + - Archivos estáticos para producción: `jb/_build/html/` + +## Abrir los notebooks + +Desde la raíz del repositorio, puedes abrir los notebooks con Jupyter Notebook: + +```bash +jupyter notebook +``` + +También puedes usar JupyterLab: + +```bash +jupyter lab +``` + +Después, abre desde el navegador el capítulo o notebook que quieras consultar. + +## Estructura del proyecto + +- `chapters/`: notebooks originales por capítulo. +- `jb/`: configuración y fuentes de Jupyter Book. +- `jb/build.sh`: script para generar la versión web y el PDF. +- `jb/_build/html/`: salida generada para publicar el libro. + ## Licencia -Se conserva la atribución original a Allen B. Downey. La traducción al español fue realizada por midudev (Miguel Ángel Durán). +Se conserva la atribución original a Allen B. Downey. La traducción al español fue realizada por [midudev](https://midu.dev) (Miguel Ángel Durán). + +Esta obra está bajo una [Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional](https://creativecommons.org/licenses/by-nc-sa/4.0/). From e2dcbcc527379892a908d06091ad9d3e497f6cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Wed, 20 May 2026 09:11:11 +0200 Subject: [PATCH 07/18] feat: update README, add deployment instructions, and configure Wrangler - Updated README to include links to the public book page and the GitHub repository. - Added deployment instructions for Cloudflare Workers, detailing the build and deployment process. - Introduced `wrangler.toml` for managing static assets deployment. - Enhanced the build script to copy static site files to the `dist/` directory. - Updated the full book PDF extension to point site-level links to the public site. --- README.md | 25 ++++++++++++++++++++++++- jb/_config.yml | 2 ++ jb/_extensions/full_book_pdf.py | 12 ++++++++---- jb/_templates/sbt-sidebar-nav.html | 24 ++++++++++++++++++++++++ jb/build.sh | 6 ++++++ wrangler.toml | 5 +++++ 6 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 jb/_templates/sbt-sidebar-nav.html create mode 100644 wrangler.toml diff --git a/README.md b/README.md index c4eee16..f6ffd68 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ Traducción al español por [midudev](https://midu.dev) (Miguel Ángel Durán). ## Enlaces -- Repositorio del proyecto: [libropython.es](https://libropython.es) +- Página pública del libro: [libropython.es](https://libropython.es) +- Repositorio del proyecto: [github.com/midudev/ThinkPython](https://github.com/midudev/ThinkPython) - Página original del libro: [Green Tea Press](http://thinkpython.com) - Versión impresa y electrónica en inglés: [Bookshop.org](https://bookshop.org/a/98697/9781098155438) y [Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325) @@ -52,6 +53,28 @@ python3 -m playwright install chromium - HTML: `jb/_build/html/index.html` - PDF: `jb/_build/html/think-python-es.pdf` - Archivos estáticos para producción: `jb/_build/html/` + - Carpeta lista para desplegar: `dist/` + +## Desplegar en Cloudflare Workers + +El archivo `wrangler.toml` despliega los assets estáticos desde `./dist`. + +1. Construye el libro: + + ```bash + cd jb + ./build.sh + cd .. + ``` + +2. Despliega con Wrangler: + + ```bash + npx wrangler login + npx wrangler deploy + ``` + +3. Para usar `https://libropython.es`, asigna ese dominio al Worker desde Cloudflare Dashboard, en Workers & Pages > tu Worker > Settings > Domains & Routes. ## Abrir los notebooks diff --git a/jb/_config.yml b/jb/_config.yml index 6d47590..dd29127 100644 --- a/jb/_config.yml +++ b/jb/_config.yml @@ -54,6 +54,8 @@ sphinx: local_extensions: full_book_pdf: _extensions config: + templates_path: + - _templates mathjax_path: https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js mathjax3_config: tex: diff --git a/jb/_extensions/full_book_pdf.py b/jb/_extensions/full_book_pdf.py index 4b0b5ce..8919f57 100644 --- a/jb/_extensions/full_book_pdf.py +++ b/jb/_extensions/full_book_pdf.py @@ -1,11 +1,15 @@ -"""Header download button for the generated full-book PDF.""" +"""Site links for the public book build.""" PDF_FILENAME = "think-python-es.pdf" PDF_TOOLTIP = "Descargar el libro completo en PDF" +SITE_HOME_URL = "https://libropython.es" -def use_full_book_pdf_download(app, pagename, templatename, context, doctree): - """Replace the page-download dropdown with the full-book PDF link.""" +def update_site_links(app, pagename, templatename, context, doctree): + """Point site-level home/download links to their public targets.""" + context["theme_logo_link"] = SITE_HOME_URL + context["theme_site_home_url"] = SITE_HOME_URL + header_buttons = context.get("header_buttons") if not isinstance(header_buttons, list): return @@ -29,5 +33,5 @@ def use_full_book_pdf_download(app, pagename, templatename, context, doctree): def setup(app): - app.connect("html-page-context", use_full_book_pdf_download, priority=700) + app.connect("html-page-context", update_site_links, priority=700) return {"parallel_read_safe": True, "parallel_write_safe": True} diff --git a/jb/_templates/sbt-sidebar-nav.html b/jb/_templates/sbt-sidebar-nav.html new file mode 100644 index 0000000..98dde95 --- /dev/null +++ b/jb/_templates/sbt-sidebar-nav.html @@ -0,0 +1,24 @@ + diff --git a/jb/build.sh b/jb/build.sh index 8c651fb..860b87d 100755 --- a/jb/build.sh +++ b/jb/build.sh @@ -37,6 +37,7 @@ pdf_filename="think-python-es.pdf" pdf_build_dir="_build/pdfhtml" pdf_source="$pdf_build_dir/_build/pdf/book.pdf" html_pdf="_build/html/$pdf_filename" +dist_dir="../dist" "$jupyter_book_cmd" build . "$jupyter_book_cmd" build . --builder pdfhtml --path-output "$pdf_build_dir" @@ -48,3 +49,8 @@ fi cp "$pdf_source" "$html_pdf" echo "Full-book PDF copied to $html_pdf" + +rm -rf "$dist_dir" +mkdir -p "$dist_dir" +cp -R _build/html/. "$dist_dir/" +echo "Static site copied to $dist_dir" diff --git a/wrangler.toml b/wrangler.toml new file mode 100644 index 0000000..67c8f01 --- /dev/null +++ b/wrangler.toml @@ -0,0 +1,5 @@ +name = "think-python-es" +compatibility_date = "2026-05-19" + +[assets] +directory = "./dist" From 6a76e3c7cfcf6b6d3ebd050d750aa579d6191076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Wed, 20 May 2026 11:58:55 +0200 Subject: [PATCH 08/18] chore: update .gitignore to include Wrangler cache file - Added `jb/.wrangler/cache/wrangler-account.json` to .gitignore to prevent versioning of Wrangler's cache files. --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4aa701b..4fadad7 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,5 @@ pip-log.txt #Mr Developer .mr.developer.cfg -jb/_build/ \ No newline at end of file +jb/_build/ +jb/.wrangler/cache/wrangler-account.json \ No newline at end of file From 1e186ce2c6ec80ea74d0b9abd896ec8ec5dd3f75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n?= Date: Wed, 20 May 2026 12:00:54 +0200 Subject: [PATCH 09/18] Balance logo title wrapping Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- jb/_config.yml | 4 ++++ jb/_static/custom.css | 3 +++ 2 files changed, 7 insertions(+) create mode 100644 jb/_static/custom.css diff --git a/jb/_config.yml b/jb/_config.yml index dd29127..814aed4 100644 --- a/jb/_config.yml +++ b/jb/_config.yml @@ -56,6 +56,10 @@ sphinx: config: templates_path: - _templates + html_static_path: + - _static + html_css_files: + - custom.css mathjax_path: https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js mathjax3_config: tex: diff --git a/jb/_static/custom.css b/jb/_static/custom.css new file mode 100644 index 0000000..cd7391c --- /dev/null +++ b/jb/_static/custom.css @@ -0,0 +1,3 @@ +.title.logo__title { + text-wrap: balance; +} From 5a7359f5ef7196b376015320e15443bac4fdfd96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n?= Date: Wed, 20 May 2026 12:01:11 +0200 Subject: [PATCH 10/18] fix(jb): ocultar celdas iniciales en el HTML (#3) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- jb/build.sh | 12 ++++++++---- jb/prep_notebooks.py | 7 ++++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/jb/build.sh b/jb/build.sh index 860b87d..6a6d88d 100755 --- a/jb/build.sh +++ b/jb/build.sh @@ -4,16 +4,20 @@ set -euo pipefail # Build the Jupyter book version cd "$(dirname "$0")" -# Link the translated notebooks into the Jupyter Book source directory. +# Copy the translated notebooks into the Jupyter Book source directory so +# prep_notebooks.py can add build-only metadata without modifying originals. for notebook in ../chapters/chap[01][0-9]*.ipynb; do target="$(basename "$notebook")" - if [ -e "$target" ] && [ ! -L "$target" ]; then - echo "Refusing to replace existing non-symlink: $target" >&2 + if [ -e "$target" ] && [ ! -f "$target" ] && [ ! -L "$target" ]; then + echo "Refusing to replace existing non-file: $target" >&2 exit 1 fi - ln -sfn "$notebook" "$target" + rm -f "$target" + cp "$notebook" "$target" done +python3 prep_notebooks.py + if command -v jupyter-book >/dev/null 2>&1; then jupyter_book_cmd="jupyter-book" else diff --git a/jb/prep_notebooks.py b/jb/prep_notebooks.py index 514949d..86a66aa 100644 --- a/jb/prep_notebooks.py +++ b/jb/prep_notebooks.py @@ -6,10 +6,15 @@ def process_cell(cell): # get tags tags = cell['metadata'].get('tags', []) - # add hide-cell tag to solutions if cell['cell_type'] == 'code': source = cell['source'] + if 'def download(url):' in source and 'import thinkpython' in source: + tags = cell['metadata'].setdefault('tags', []) + for tag in ['remove-cell', 'keep']: + if tag not in tags: + tags.append(tag) + # remove solutions if source.startswith('# Solution') or 'solution' in tags: cell['source'] = [] From 316cd756b46c1f935b9d2dda6d6ecf7586969de0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n?= Date: Wed, 20 May 2026 12:04:15 +0200 Subject: [PATCH 11/18] Configure Wrangler observability (#4) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- wrangler.toml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/wrangler.toml b/wrangler.toml index 67c8f01..340fdd3 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -1,5 +1,20 @@ name = "think-python-es" compatibility_date = "2026-05-19" +[observability] +enabled = false +head_sampling_rate = 1 + +[observability.logs] +enabled = true +head_sampling_rate = 1 +persist = true +invocation_logs = true + +[observability.traces] +enabled = false +persist = true +head_sampling_rate = 1 + [assets] directory = "./dist" From 7d85bae05aec33c6b7aac1de1f289e261326a1b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n?= Date: Wed, 20 May 2026 12:07:49 +0200 Subject: [PATCH 12/18] Update Spanish book cover (#5) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- README.md | 2 ++ jb/_static/think_python_3e_es.png | Bin 0 -> 1563639 bytes jb/index.md | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 jb/_static/think_python_3e_es.png diff --git a/README.md b/README.md index f6ffd68..3e1a997 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Think Python, 3.ª edición +Portada en español de Think Python, 3.ª edición + Materiales, notebooks de Jupyter y versión web en español de la 3.ª edición de *Think Python: How to Think Like a Computer Scientist*, de Allen B. Downey. Traducción al español por [midudev](https://midu.dev) (Miguel Ángel Durán). diff --git a/jb/_static/think_python_3e_es.png b/jb/_static/think_python_3e_es.png new file mode 100644 index 0000000000000000000000000000000000000000..fc543daf635330236d2a841f11ddc7ea4014401f GIT binary patch literal 1563639 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�XDCSPTRYdY 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

qDKRV# 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℘{?=b|d{_O8 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

laEGszK1;InemAQGkMUJax+)6>*0 z2tSM+kHn!V?`sM`DbXFAL%D`~o-Fd}3=Oc@+*)aaS4&*Bq2J?n-Y;6!9`-0k5Zrcg+r`?Ak1E_pNFUG~>|^A9!j8m_9@`O4c=zs6 zY&4xeM;{1?$g~;O27SbJIvVjbId*zGasY!(_Y^!{2zv5;U5|cHaJ$Q7DCOOs)jD3> zIynM3c%P*)=4dI${`B`ikl?78Q?Ikvt$v^ldxIVQ?|$or?1&x9(cZK;YSs`BUORB` zhWKvcwbL*5X9jyu;7OA*+}FSWN2--!|D->z)pOo29{u;*zKAjXFVF8$zQe1f`y%!M zX?VgwyJ_)$%|7y3qk%MQhv7rRJ1lI#D5DvpyXEqq{q^t7pV&KlBJu7A{(tzx@}*1J zmtL@piGsR7LIEXVv|J8cDxZJ8KneT3KPun89lid%m(7#E_+GWzq+j~HH!)%AwFr?} z772pbXq`$>M2Lk#VvHiKMvTlP9To@X_MKq$j(&JwP}jWrrSzo>ypS`oRKh2g#iLjR ze#AL|)?rAI5<(yh1rTstn-borNJh=#G6x#ju9{tOWK_=0+I!_<9EX>l8Nd5!YvDxp z`bVuOh`#u>iDJcXwWLytB2j_1T}CVZFBqv4~i z2qG%!D`|5hTIUitbrC^}o^DzRKUTWASCv#^pVy&3PKw)v2YyiA z*#XW{Q&Uvy{o7aTkFPT~MY)Gz%SatHd^hPOQ=Zyu1v^z8>2x}g9k*Ra*etSWoX=ae zGQD#nN@j7#L#4#|XKbP9<2B(r#&yhYQMnctG9(Bk8ekMcVWy|?FHIPh+e?O7!e3GA_f2_`aH*p)02e zHzHDWNsM3;BN(ebrT;0#k9q6>fZ!q*IMeJza;XK0=qoPMB z&%V2TZ5^${J0u>KYsZ$4Z}!M=_>*!4onqbVh|mE89VpxrPV1tMW83WBZJRT|K`cAs z=<;m;@gp3C(Jst^62SiF2s)F3?YD~eZj&CoY<1{(o5avVqX@tCp;xItlFr5Qp_oS9TTWsUW4fZBmI(D$*gY}i|@}h6C_1?jDD5!UN z|7_n(=xxLtEP^9GoH{(HqnUY_&NZNnaTt61gP-o~-~Pw{#~e@L^}D;L&t$*wIoI~0 zIF11UD99L+NmkkyVcossi4_b*Y>-$Mmr5c7 zW|%Ro>BmY4ZV^L3qjnhjA-?}sfdpY~XFC?{Ww0z;D5(Y7fVuQxAIiN;D zq&x`MgOJio*c206Td|7c*;z*$9XA8pBDQNH6Q6!2v3jfc>X(+b?uPenMTLd@$2T^| z#wNEOvr;LVm~nv{LRqUCSqU2ekO4B1OjcL5map z+^ZAiVxU9$)vsOvB^vdR@kuv1-;5p-L%Bn=(K6H) zl|&@AFMahjVpAPSa~LYpgk!9urU=rm z9kqmsCFpqj=8dg4ew<>KYw<=asy$j;{=(!jOYV z5~=N#>g$^nwKG?+mnWf+wJb=bCoC@+R(xWR+g!zhpk@|DbS$upl%?W!t5r=FPFo3A znTTq^xDkfPdRVz}Eqrt@R~XM(iJkSEx>4trWhZQ-JZcdov=WLM$_YkN8;uBrB4fl> z+GquYg3;0_M5IBZQoi#}w6!HQ7;Xdl0)*xkwewQr!Mk~FZfgnvpp~MO8m%d(3~9@6 zwMrXETi}eb+_Yc5(=nKkJ#>Ll5{+h%`L zrqZMtnCujtUSb;$M60e&oh6}El$oUk>UyRXD2rkgQp(}vNysP7?yiYr%;$}lgeV3r zjR7o`p;W@DMYec`gh7OaP0Ui)7LF(UmXWb>T@cg=We5X?5G$jR%q@{rnkEZTtD(ct z+1ibk7b)lb{+-Zoz~%E+GOx;eMuu1{YKvmZhGw1I_%QZT$e2TILZ|@+4reKcHTNae z3ke#{q~X`U`A@QmTr4FS(D?^iuuq{KD#&5I*^e3kj=>{CO7i&N;87OvcOQn#zFIk?O0=nx*q6{oo}5Z zfulmOPkkJpW_kK5Pb~J7>6(tuJUUtNg!)f+3wxpiW}uWo=tEzhElu>)$1!W98_7LD zuutm$NFWV3xE|Xo&4#hn&h|#Hx-rdnkAMRl>=QuHO0TYdqCtH8N%-N-S~_Dr`}1}p88_+? zMIcB3jhA4L?!&upo9#`xU#>5n!r%OrTt3JC?VneQE&lb-XP$qK0g*vqI3*&Mv5=`0 zS26qG7eHfDrYjzvJhM<3R2-8A(IVP5p*Z)U&nxr7nTMpL++0~(c(GM3yX z2+R*DC4!*R8sbPLl9t62KYpY6;7;u;U(F%q%|<|xNok~vDKo}IbBpf&et748sW6q^ z-P$|zOhL>1U;O#n^gN+9FYX9R1R{U%C~Q>4$#d4sQgZXLY&Kqw_2-@{ONiAwXaNEzux%Pw~A8nrMW~v{l(MC7hcNM z_QY5LE?vsq`mmBn0;6Peqdt-6mW{=7^QD(2>-F+K`+xp_f9cnL?U(<~udBu!$Gn}` zBut2=vMt7pTdS(I%|;=`30lks6(c2tIn)3J!*!IWiSzmKm$ugKm8#y)|NQGE&Hms2 z@^|mvdN}b9eu-PQXbMWv2&07LjB0JdC^8KFvLG6$HnP#8o-=pl* zOWC=lW+Tj`QmwTIyTxrMnX&Ce6swjWDT?`tywq6U*zk9@iB`@`-a9=hDsZwV~g`v9DzlrPF?hJD+ZO0B4#mZ6if2PR(bcw)h z&TJG?Dk&+Y+90yvEf5W=Tv17n6vkMk9y<(E zITHl}q@fO$D@JQm7{^$`)-EbAlT%2z)&W>HY;Wql$4Cv!q|ix9LkytNDt3}a7$6cv zY-|@q%OC~YL%*rD1}CAj(_k~z3S`=)TMwXFS10DZtu_7NzFJzM({n}%9kifYQke`% zIJoyv@0OGd&FoprNdUE=QPo}o;|Oc}$`)Kj7hit%{Fg7xec_dFYGVi?^dJP-6I4D> zwIda3uOdHGdYyP4whIjD&*9woQ|Z#Sr5IUj#7=>3pdAm>9Z#phpT;FPCc<^R=@|~L zj&2b9E*@Hub^@n+{pk17wGB@{=a1d+GZ=U^BSNul>e}$MufaaA=;r85sD9+U4D$J~#p56rcA+2wm?5xwxV4NO#f8I@ zE~@O_?Th+%M>+cF`gTu|)_{RI?hhLrmGJ7P9@J#9`X`91oZ2y zr$NR~qs5>Xhz~e0ouErEo<3Oc2Q-_`ytip?6AVKv?d5rI5^!XcsDHU)yX`KuBahy7 z0{s&`P^S01pG)mbY|qpVS81R0j-^|wKe=bR4C>b%N6|mnNbhuXba?-Cj8vvawcLOC zaB8&yr46BUcYpof?c$$A#jkuL^U8~!#R8$U(F8bZ1C}wRed{}a8Lh5?>qXCAG{5%u z3KpmT?mw0rHTe5~emxlsK|cnoz{o% z)-RvUPE4f3R!b>hE(NKz0${)xb&}5eKi#pD-idSR>sPBzHnp|AH?>GlUdX@yX87TI zmDw4W5iC~2@?P`T(u+X^|M8C=ISxPf%-Ef)6+4l*aot~Dl5WoZL|K`WP`{N(I>6|||_xu^hhDIPPj}xMd z)3Kmwr%qaaAQHfR-VnK`jCQJCNS(T~e-y_K9>oH~78DQ!TFO;7FL{5Yz%X3jsu zJdS4hUYz*pp+{__Xa!T3QieVyzS<093`wX4DuB07#V7p-{p~ zX1r7Zm=}bS0O(q^UMi|=u36d*MVLQ%+FM>IZ9YmYonC(N)kbZ1>%E^Wyzo_KPg5kQ zHEIMfj8Ovylp;W6WB>`JmLx!!3~SZu<6B{AL;8wn6FpjMZ9ht#xM-v#U{nwSP_%5+ zpoO+9ssRAe03zjJXnAcltZb*}Pgwcs*$bB&TeoDxpI&|`k;%2{O={5M&Q+oHR<2iApo z8uoXwRKZNbWXC}P62ztt8>^;SM#n))CFO=Nj3XnJMhk%e<-h>}fjMZjQPKbffz`lp+53UYUV-ELB zo8iK61W6qn*cXO2!{;N(gJX<)4~GxZbVj$c1Ot&i?6I}|y&PyH({Dg~A1N8YU;|cl zWDtDV+8*VBjG(7S0uMd(Q4Nl4^C^4jhbx0qFzT`0uE2L%0q91Sdy!jjz0LzvgOra# zJ4bmny%FJqhq6Xw{P1u&cUQCXvkE(y<_2W{92h#M^)E+giAZ46(y`NnB;Tu2wq36Y)e|75R=aZZTEnibc80T6GLKG$LdmrjgKM`lo zx?lVXy?iE9so@{~Wd)V>_y5kAA6D-@Xj+Lv+!U^@EDmu?Se!rJjMvv1=T9fDJe%e; ztk<-YVC(DR`bXMIBqyeWrA7BEKbKC~YI_rWL6b?MV_`JmoFhoT33u;`S`E&gcZ`gT z)Q;-y^ZTQ@#xWKvGlDsk>Ue$cve^ZK(drcYl;%OHO4 z%EX&L-FW-WaxU!>a0sYcQB=xteu6&ta%ySDogJ5puM|@Gu-SxLcWPhxM)uKaNtt;0 zo+UnoEp5Z>Q&!#qT`cegC~rK6$Xcx^|D9oj>)Puk(}>#S#f2 ziV&lP)CPcYE{&2xQi~}eR3sU9xSMEfZ8mEaH=7;=~J9H!EzI`#0VzKKOX*)QhRf z1u)78)PRf;Ex;gf%8k?jhI1PD#v)Wy_cq^qtFpaOICm!bg0=dSZ$Y)C8#NgOj1nD6 zWfWl~L`Jz|QL24^8Ns)60Z%twYd;+`eJ9*Ui)%NoCF03?Rjzt|&)j01BKGC1|wJS^?t# z2BOd~3ygxGWe|zypJN<(@t*;!}O26 zKfE!@rRnuv1C_e#{Rovj;DQepM&I!bs(Mp>SqKu5kAU{o(p8O0fH#TYH5^jz=b8*lx$|LuPhiq+r#&&FSSC27Eq zB85N!&?p3hmTehyinYq}8T}i-il@$}-}@l^!B1*l+WLpTJ+r;neE0p@mtUPFwtMH! zPAX$tmf?Xh287bf%hs9mPC6A=Nrq%4F1Q zpLewqQBy{tCPYz6r>E?xStmDvs9Fx;#j>f@#fvYdue^|u(28Wl7-|Dx3=jlDOl%}- zBw~7rBabSTVE&|K61=u0r3gzU`SKT>FMVOUwrk%1X(*Lu+<9=jSgkkb7E(G^pp7zE z+-)Tsvb`CXi+eA>l-1Cvm1`$YrYW$B7J<>(aXL9gRxV~2w*#hOX)c*e();(Cf^a8+ zODA%__Xn%zPG*GRH}3>zPkH%_^}X*_Ds|(Gvy6h=!+7Fam+5AKK0G7 zPFHd{gGciNpii9u6RCTvq*7MTU1o(D z1g(If3XPj&Mliq0TP0;1=NG^J+siYTVi6NWM5~k0I8dgC`mrYn-O+{rf8zc#NU|$S z69dl`Pr8;79y&52wH8nXpbDi$SM^jkySX#N8O{txa7h}?mbP53tsI-Btr=;yKXys8 z<&sMdXL_c^boW$MS9j?G3P4o?C?JtqA~PdHOOJ5vPu+XZ{)lk*=OQ8l)im1+Smg8f zt~lq4bIy0pz3;XD={YYN&a->H&%R~S@>U@USF)!a!uD3T;u|QC!!;8^2AUP5D?^vs zI*buAShF0w8M`0M^=D|?Q>}^)CaGT~L2DESZpCl2*)}%9fuOK{9BAWW=rbez=aly9 zB%P<7QhgP5Di3e9YHv&H~)_}+c&7uj8n9>g#iuv!iYn|mBc;a#v{ zf)AM3`_@cADMUnF)8`i-{qO%b|HadlYk%|aL@!^`gP`F!9_L)+6ev+ran1-~LU@-h z(D5%uNAr>I{-F8MHTT5v$nSqM-E4Yq{j&JN<;<0f@&D=$SBtfY z30-03OJ9i#Y2Wx|bN!jiBk;njnPbN+1=6i4%VN2LdF|?|Ky7=c^va9L%?-EOkSAsn z4TL`qI$RS+6D)VMbIZ zo-YDPB<0jlA`ntBB!n`j=@TTTVWa1*KDr}O4j(^*ZVd@hpqNHMslXMKQ)+OKNW8#G zMM>Zq-VHkWxub7}qta zgyTwso5FW@)>oZ!89hZ^ObpF3J-dACr}>G|@yRpIvhR68V(iS=__2tcbG!h7a88K= z6%axw2ci@OMTr6c5=}-#qa^&Qx3eWBEpIF&&YwT>mEYrrZD#WIMw5~N5h$h7RY-gl z1QMC1Yk(+FSr%)~&2QcOz>+>^7MhV{mXmU=w7lS2b}|vGEPTB6(NAjg%jW6hk&#Sg zeZF|@s@y2Ev5Y>Htbeiz8i^KC&5epg5zR!L%?3(Bxlw;wSG-oSji%F#=cY9)?fbs# z1e(r0w_e)WtZ%JxigwCqme#iKJ|He~%MRSSSFh^21Oi^EWK%*LPI<8yY**v9ZJRnk z5KEiV4?t@aMqxN-H)`agYc<~wPF~c_lqgqxW`Jf>=}JW6Hi_>806~F@(0Uyz6|_u9 z#E9F3%}q)GM~0}z1t8rn(YrTgDn&0|q=}>q6mngmBHSR3gMesQObNsQxeiL9a(9hR zKm~}PQ6ihTwF#SxBxY-ry0w}tuBhYZh?Rtm4J;Pbv7X-L-2Q^_~sxbYHI>gB`uv zp{V=OVR&h)-G0lp-#yo(c6a-*2bqwb{YBjf1lri92gJ6tZQBwEH$I?CN%u9j26Vr@ zNe8ALLn3Tjc1(`equs0!@&$(nJ!}^Zq`apU*nfaJ*rUzw0j%sUo_$=U`=P0}WxqQp zUDOWp&mLs%hG_0o-i>?1p%~~k@(0w3U5hlFf3JqtW!G-H_7^Yr8TwFLh=>ERzURg|_r~e)tsVNf{D9P7j9?ARM*1Iwco>K=Dgh30Zui8(a{#paQ zw_sqGB83W3NvZzXfBAp@)y=Da_n#EbpXI^}kP!riKotT(;G9#Ao-a62FQ1PzD%yYl zuS-wng3rEef9tE!%`Nv2zPmkp!v6M`Ge7;=*89J%{r+#~qj6SU3n-(SL6S+XX&@ys z#!OS&D$$1z1HXwEUW%PNr)4v)t{c}Ml7~;c(`TaN<66B^1L147hG0FL_aEGE=Cj(# zJkvEUUN-!;=?m;M&4U@TIQ~pF0(Q@NngY7ovqRkWw=& zRxZ1nTGZ8Q22Wuk*reDfr zM{>5EQLfbOsHWw%nnIabD{=Z)x1as+uYS5-UboXG%_j{dGcTPfT%6GohUYnyQe9(# zpem3I!7y|`P*O_H7^C0d608}WMrfHf{ zTD-G)>qAkg8Tm0iN}J89qja84gRT)NxI$zsW*QcyBmhY$VMHiU(0a8wK?w+`6bqVx zSM^G+Xb_7#*xK5W&265Gc{V2quDiLj^4PC?=@CmvseHvurhGyTWSmh{ezT!RC@>-c6i^W~ zcZ!djUQsVhXD^*r)IsSk-n_c@_~yvVuh%Pb`Nj|3rDxPf64a}U_troDP%N#pT*MlV z1%VQ-uVIz;Bv(O1iGD+d~;69Z8JFsBZ2gUkpZ zK&?UMRxwcW@)dpj7;YDZW)VBdJXZ=Ir680M$^a!I1))F&u=`;pr>>|*2!Lr5w+3s^ z6bP0aR(?ZBLej%9JOZ0*vMwN>g`r`-y$+A&fNU_VQsRievu ze(vsxes^aN5IvZSzCcH(t9LO>FP-}o{OcGGy$Bro#(Q9dr$f;I2XwgXzKyo|B!}qg z9tsc4)VVyMTe{sDz4-?g>KTgX5WL6XfCv(*-Lia8wOv8Fy`JynA|WFZ!!~oc?7kF* z@L#{Zd(bLv`3!dX>37w19xJ^O1q5#)I-PXurJNnx=Hq$7}#|^ybqo&q*EIr8ix6u@BQJQe*gQge>L~H z*W--3jT%x#80UmQAW&x%2>=BKm`g^MSJ=P)qvGbK{M~P-&K$!>bG0A7?I&{P-~XNX z%5w7$|84Quc&d=oH`c4V#;FE&#M*L$dd;&EG?g)SHt7fNHLG=X?yP<0G|6V&bV7Ud zh`jxa^6a$z`8T4CdbwJ0QYpP&rg!c(9)99jI-Q=-hDM0v>i2Fs_iqR1FD5x7jhdj0 zDTTftP)fN*_nae=1X3~15UCO>5jSH|E|r&x8;0adPrR$|)k@pJ^zqzldA(6A9Y3Ge z6+XIKtk+?5Bsx4|%`Y}ipO2qEpSp2v)0OJdl_ayAdQk;ZSe7<4q{X7ma~I;HBUa#f zLgDaug!#su8)ehdMn+9hjxDeIm74p7*Yd0D4YwiBz8G%`zv+w9rxGK>rWrxgNYX%^ zIF+ph&cFDd?|=NurAwD5CeHlL@!^Y&`mxDl!KqWsRqpn7Q8)ZVcJ#)R%7-`Ra@l0_ zlj}eIw?A2U_Q}+Xr)ebXGdq7}+@2hFTqLNtrTc;7IROIEES>sD2&IhcnhruajRpb2 zsnOUf`3<))aVnLWsy)5KEK83hfKurRRD?6iDGLILh>=uE2xtA?jr#IBGc6-!xlY}8 zTouvl4VP9MwgyZPDOl7plmJ3N=Tr#c1wH`koKZppKVTHih#p99yRun!Dy|<0;KtN6 zMq=L5)0tD33xyL6$5liarp1}=AqIiqoKXrYP(Xk&P5_iZB8g#In#NWZ9^QNN$LLq} zxZo3Mu9m+i!mZATGkpgdGc({;r)0P5C!Gi7UHuerG=Xx{wQd!E&SpGV=N)v;^TL3ROg;X;wfdIM~ zhqcjha^VWsxv1Ba?}BoW0RxVnBNXg*5gABA3FX9dP%01tP$Dxx_z*O~(7|nzW)V~X zwW@pMj8>^g(^ir|v53P*XiO)r$8Oz~8ik9Oxe*h7gA|Lb>4@x*ZX4#>JbQRY3>8lO zy?^&VJ9Xkk$8#AWt*_RQwi}(ar0cG7YTIEgx!o)9`sMAeY1K9=`h|Q;Chr*>du7_t zWq+e!kA}|Pf&sQ^+ne2^mU=AULn?ZJZk~HU$Swzj^mvK8bn2d>?+Wbn+ab>}rDS4ID!2KhiyRZQ9yqYG{DMv-}{G+gXhv%eGB9=@Ktt^16p(ub=yo%kDaF zZ$;~Ez0;d}6!d0*&f`POr%#!>Fm2D8fddZ0ERh~XVTIc~ac^bxh?rhC$pP`ofvpd8j~$w768`bO zP$EbM>dV1&?4Lm)5`y)b^DqAOKRQkHaR?5bW>5PYm_h`2$WDt34oF!7|JBp z*7-mGgH_?OzxA!y#5CM|;N6{rk%{Qv|E6tG{ICDzYBphi{ma>fwUTA{r_Pv`9l3i~ zEY4S_rp;)C5y`LJYCOE(xO6FY=_QNOrUtyYVgBV0ijA_o{8c@XXf_*xt{I*~ws(R? zQ_LLEu3X6$hLrG|%X8$(Bjm`^F-A2>0i>@aB2t0?C;7}k?^Vhb^4Tv<7G}6pYc^Ib$+f$;*PD)!&PDU-Ad!qT9#&qsoIs|%cWvkN z$waz9%jLj#6wzrcu0`XjFs2`wvFs>omI%=>7Bd=UeZAN`dL)uf^2eavzP~d)9nFr| z*Y1`IqtX1RR`cp7P9#Q$GO08(Vo|Rw9Y-HKk~*&{XHPjFU9a7~_w@hq&;IaRzx&NM zzV=(pHZ{YjS4#{k!gn5QHUIp_SMOfEm&$xnua!6M&hb>#v?EQ&H*-V77iOyU+VZXY zX{PLn4CN3gBuET{0f6HQqH~Qi-}hYC)ooj&P^xT4Vu^Tmyt=yWHl0YWz|E+V3IGWK zN(c}@g@_y^-Pu~IY_0H!L3Lt}$1p;@2E?*?DbaIkwoZuToB>d1qTqy5&U`NrLI72U zZcs^lS7-)7a7#O@3-=%TTN@;%W8Ea_C^67X4CRMLiEW8W0~HX)Jf*nW+n0|N6zsw? ziV{(QrW+dPEBCKGy!MxsPi|?pDP+_>I>NXqRinA~K-Qe9DeB`%=~kPKxL{Eu8sXe# zj1%M>b!u>mWOMQH+LMpHh97(BLUDa-?)qEh#}9}leYb3B!_CUp_TvZArRLFOWvk+^ zZHuOlj+d=s!S^7Nfb1}+I$8Kct*xoc=Z&Fh z>C~`X(w{w3siX$VDz4~Pe^^_ckNrpg=pTRfGhY=#aLNgxyZ<9%+Xmd-9TKuKI&QeO z(A!T?w+{n^k53%h1_huYjY*!P-1qXRy>`3m+5ZKy`+2GQv-Oy{*!}j@p4?&d5^exm z8$))@*u9$vHa(DRIAk|=j5s{p-mU>n5AM1)gz0`&F|-Wno|87vo(!D|2EHUZL}hn_ zJ&^bygRKWu?iLIWbT=Hu(B`zmnn?$5JPE&^t~V~!P23?`JBXxxo`eCzUn}+5QeDWZ zH*fdH<@+MEU5xY%?tU%yq+U1rz&rr_c~D@Npgw9yc+Gse6?5ytuDD4+IET1JCI!s?WvM32t1Idf$@#Qr>@D@O;2ymzE|2K?(Hq^ z7w$b|v|S@T*#=I7cDMJqBHGWxS9{01_6oK-sZCM8=nqNvu5}plB80gZD0!coLLRKW zf!>9;oN0HTJzC#*_Iuy9j!fzQ{lD2p*Z;z2Y)wbsSGvwAqX0+{BbL6p#{ckNZb*mz zd;e~(R;m8+Uo^OFA3tt?@dYiF;Q#F(Zk8MRfBN?(*SEYI_r0%u*&fcbC(p#MKQ3od zY&g&3CjZ4%|HiG_>C=%bmu*y4JIP#W{o%hXK7Qu>-tQ(-sbG7<*BCb=TD9y%W9kc^ zk7kll0n+u{T9w|q)^O_T?8V6NI76ifDga6lKmk%vgb-j#fTmH#nd2xVGCq`AcozKX zSIe)ypc4hl%VJ?cojIGHoM!dvrX5KxHrcIPTZLgGACGS>tR1XsT4&jn+^eL>M^_Nio!(dZ~mS5(G$-4O7oLjkKT$(Pjff6^{tY0 zd~)v97j)bF%kTgE=DXMHYdhujO`@bVn$H}Y+1aSkLMC@|3K87(rLE;Pn&sA5R0sux z5P`~95C8!s1K|o0crImBH*C>xe5aYr6bO@UW1Z=?oh>M2=nKjS1*!t6qy$c^ShUe7 zt=zxPB4*TW*!Wbww0()}gPG64drLl9JgW+gK=rdg?4y{>Vp5vGCwfB;ZRDJUfZ1V%JUq%Vk6 znq>pmN^5fuKKfyG?T$Ta5Tf~h5X)zY#QKvZK*5t1@Ss^)tSrsd%dVCjntt(BhUV(i z1;1JwJv!qC#K-!|-4D^`)ZZ%ye@O;(u zsKJckq&1pEO%Jv=>3Amp>WhB4EO)AA!8S6sTrDHTvy|&;Ls@&`C?>P%qk%P2 zF5Y@jxxPkRP`>gRQ3P33XEBp&90NrtGt&kIaGDNfJf9jio3vT1Mk!C&wi1DE0ua@3 zYDZ3pbLVyG2Or&WstxkmYx>B9@_eO-XuY9CfXNim zbWj3HMa2n@O=y}W8#UP6kUC{U6Rc9jQW-|ZXw)E1lkJogBQhEV;h~3M7=QpG00KZ1 zkz<&uO0H2R`4} zVD)NnbR@Dp$3OnH-&{*g#V5aT+TQ}Q+d+!f+ z%Tm(5xmPoEd~L9oqx)b(r>a4u5z=;De=44OYU%uKX`tS>$aOc`Rt@`QI83u$u6^ie zy5GdIYE`(8!u=G)K>sie$i4e#-*1~7U`w`%3^Usk#yJeR1BvPZ&i%9vG-C!>HGu6c zMd3(PS7YraV9?y&AGHqf^6yW{fYd`sZzvL=f9%3WXg52(8$W-eWz^;JIM812Mn`z? z4pzR`vHKvfE($^?x(R8&qmE#h_s*g1mayq2YanaSf#Bhq+6RpGOX0X1_D=o%02m32 zr=G_9LX+Vl1A$Q2+6yfh5(0_s*xxQY-SxEDCE<->tx#Rx7m4~%MEKEuq3V8wM%uxp zy}P@AT63cVYPx!ow0PQ868-cHY;hn-FlaruMcBa5WDgeHD}sO_G1Q%{!@@vzT1)*+Fp7*c*q`d9X|KJ})UVlktV)S2qzy9$Z_doi(6O&{7fBw!&BB`G_ zVbmJxXKz*nvP+ku6M6RW9r>&GtA(8L#upM?cig5zVgKNV)oa(PU;IMi{6$TGF9WI> z3_(~CNX2bUi`~BO6gL`EBfQ+iow67m<|j_;@eGQF0tLFxq#{AXqsTSRDQD6TKxvHz zsn(i9IlEqg2M;RI7@a*H-` zlWsKpg`N2yz5D)0AFY?mL=a=CUT3!T@tePPwyN>bG&77w-7Q=`HGE|9{@cIK<}>N> zk*zzoYfCE@r*YfX2snN~GzvsC8)$HiQ|h}O;T!=C)6gu_t-BzwzFlmTtBhhKm7|)e zJiooe2bDrf0ZGtkY(2hNS)VJMKVhq&vb^YWn?;6GqZ5&lBPHJ}H7ZRB@oZA#lnCUY zK)S9kI0MVnfsLQ5{7B!SEI3?y#mPI32tGVSGN?=1#nztME zlDD(dSlQ5Oh5AUrDVH~{zlRX`>*GzKr;m(?>N=4Uv9@{pv2tqh$w^mV7sYa7Y%~yl zWn~5ZAa-oXbp;9$8I7UAxu$_>1g-{&cKRgdWPa~I5sX}Eo>v9#z-O!Ao%$e37Jf@e>qVIT!j*^zdH z<%cxWlFgc;gg0DT+VLV5L?R$11_9AHPRx=-8l8%81!>fXs>7OtB?m{3Xd@%gsF0`k zu~x;|Ba~6)3qmRGezk@Zf{a#6;JKL165Sxa0O^wA3T$rzH`K%tnoZM>-u3HMoH|BQ zLxd6xn&1h@57CKf9!Yuib!;^G){aUg^zn)G`)}7EnEB8D)Bhx6<)#WFN-7{gDItXJ z>aabL+c_WD*6AH(L#0ov?-0$nU z9xet3uLcg~euy-Dr`zV~>@?du`WI58VUuhZ+w@l0184_r_ZSFicI)c0VfyHA5BBcg z&ioAVZ~%i{@wygMUH#LCqz@_9JOnwQuX`AXpf-X7`!K15GKfUQU3!R2b4{G{T39sM0^{~)sR~`Zf{p9uSwd)1fhiUgy(ccZ$2hG>6 zYi$1wA^5{K_Z;kcAZ_h+yAOBREl376-4(lREtvipvJZ6w6HGbKUm!=%ddUjGBx$)yN&e?Ja@`EJ;SOs_U6?}EXu$3)odi< z66Qsc_S-*iy#2G%%P&R0{KY6$A_$P{%x#K5h(ywA)XX3Jxc>G#HCvBRH16GPXa+rZ zE)tI*_{z|zVQHX1Nog6};%2={cZy9)$>s)Jzg~5kffdp2-YKsvR$jQAHchyH&%g0O z!_aiyBCZQ7YuZ~s*~q8Km);nD`k=mEY<%-~$BR{Or|y03Gx?3}V0B#`I}+yxxQ;L* z5vPg*jm`C7ds7&kA(cq5>8i~&@6PS=>QZyMVAdPz@mxKV;Kz^J9^l%VJCTiQ20>7f zsID1AA^M)wIF+8`dybIU^kV@#ot^mlcNx?b5_a|1c^`Ol4?KCJ?z3MoM$gp|IN!VdyP zfEmn;+C)mPQX&{I5Zeon>%~nwp3&`?l9Cc&oS>325S%fMbAv-|@yX`^fKxRXQyr#(!llN^~Y+frsa}U(^SJV^YQr6VX7OR2qFb6T)S6(yhb&y zjm04sp<^*^A}%>mmQM32eJle}7DyjC7N&AXrbg~sb4C$3h2pwec&ZvTH9SVAX0_ENymwb+;v}8`N0%u*8|WV`WC9$ zbvd=eXV5O!{T_uw&Vjabq761^cjRP{w+6ZgrRz!CsSzSOoSutp`w)EBVmr(%3iU&q z2Bj1Npi)RMxc^}JuioBz^-AVTpEESG=?4mcPzFd8A;>rrfQ}!G53{IFfACiM@qF`Z zU(0^`+bP@fw|BH({<=Cg0^j&j>c)e{d$*cj{#I=*Mb}@)XqN|(k%4+@S@z_v- zZ*Ho4cfC?cHtKleM)i}&Zr$_8M%Wj>GTb!aN59^>bS0li)Aw&}z4U5sXq2q)C$)uBu0MqhqW z%f=N&Mu93oft)fKC<(}QX6iZw&C1GReQh0Gj}mU^(O5EX#^OvPQb-`M8=X@Cni)l; zBB;4rPn@k~BNbE9tQv*pr3(Pp7ZeahApAfGRDmE; zDj5VAATz4f;p#8>tiuw>GyZ8%>&u@_bq$@%^SEl4Wyt zA=_xK`lU^tve9HDYQ@IKnt|_>OTJrfmTR%8lPsCpnSbi6mAtB7T38Ks%0Tt#aMp8u z5nytv;Q1h_9iN^xbK}NvAv1MUHQeo+*Olw=bj(#k1a9oeROZOh%61iiXQ$7x#E>5d z+ctNe%$M#x!60CHo6e+y1cQ_T78eppB5fZ(89hG3vuVY+ZAC_hbGisB%bTgVIXoIA z+|#*=#nFm1G6iS$JlH9*x#d!ZC(rW27}iU2?g?ydsZ<8iBM?cGi5Z$LD1iZ?;05I2 zy;~h*S_rPzntjC;<_G>(T9X+N_dBT}2c0#5pY;QyXjW=m{p0bn*yQ1br7M z2X0a&6+uvn)|#wdhp5fC!DRqSvXy06U&q7{JAO{5irn~6I-Z)CWu^sg6}d*FA}AEo zrQ7s{O9H`)tBMOP8%y8&aQj&HGr#rO-|>CF=`@v8Kq)057bj`CPP@Ewdrx}YNG)&f zzVfhNGlr$;zV=Oz@!3-M&(&!AV4HoN&CurfK94_m!iK=DsyiFNjgbW_qlmuRc<9%t}wwP#tH{D+-kAIG6~s8gZg>@T6$aQVj)Cf&)V!d%KtoHM!4Yf zY3nxk517^=NfgdR$e>Z&t(EV!-r7ghRUHZSU{BF@L)iU%ki6=%L3^Wn{XwqwBJ9NG z!ZAMV?S*h;u)XuI9~$*dP;x+g?SRxSHE;okDs1(9x4)=;96cPD?2oN?liK+)@M-UK zYzdL}BqQA~0O<}^wupz84%m-z=quiVT_FXyKNsO~+&g8stFwC6SSTjjOT(ZSk?r+* zNG6i~De31ZEI7JKhG^(n#s>r*cc)hP1^_ChG)@2D*FXLje{?mSz;AyoZrENCbD zBSJ{sAQV7KK|n<<-F3_#{HT2Wdi9N0(_eWb8I9F}lTRKwt4rlCz80sN{?m6hjvp~U z^D?{lVCVK-mPto0oW{v<^JhP=-@RY^%uA`MX>i>dQ0>O`;3q#X7lzHh@mtBEQD`(= zAixL>JfUes1lr9T{?dZ~(#6!PFUM;2;PDgRp~G-L!Ie5HJ?56 z))t$Wzc^AY23xE3BV!Q|?7^){KF2OyvW4s4c;ETtzE3GzS*?v$_0#9j*Xa8Gj^pWAKkB>H(-Qv2EG?Crdhh~?rfD-=9Nb* zE5@yOB%{T%nh{A5BuYxgC_$8gKtwYdrA=q;-8XAHbKcq-(yH>9PDrUx|P@V|5h60+7s5wHqicqK4bhiNlqzsw?T2#Lvw)<^oZ1sx_(5 z7%J%bNg*_Mdrj>W387jp&W7UBX}XmXPe&6IlR(fdE)fo>liFG-e(acJq_nlExTbtN zar{(j;?&~Z_uL0h2_t^B5p30f5o4qPpn2OHv565%?8Z(xIyyOY;#6(D5g!?eq!Y_O zc~d-IrsEdNnEqyo=M(AUCnf0HiyM)`WMuMarPgE?avrSTzZYzmv}}ZqBz%P!Gk_6M ztRt}_Bh!)bDOoII6L=NuCW>vZ;W@dKmCr_$@9H)X34v3L=iKq5V8w)>q#3B(Fl6#f z)79fSc=SM|@?>fj6jN4=*fx4ipE4kfKe!`{TX1UDOr~VRl}aHn!U&*H0zgSp+Q6N4 zAdHMm(!vCtJw`nrZr+rEz>DWOFkduLGl6p=6;c3QCvFYb*Cb(37~w()sj%LJm3ed> zJTl8u8S>-~-1#Utdx2delzA$qu7ULpIqFFW=L^pGXcrE^a*c!=KtRt*f$&U;joeLv8NeJ3|s2IZmj*MN>CKrmzrbssA|sNmu1 z?=d05s;-L*7@#zJ$m|&==o^uPiic(%90;xV4=%MPM))RnUX2tkK5!2A9z5>U-1#Wb zL8;HuXl-uW*SZ*Z8t1?^y1`XwkNxi4I2h}8RWr!%zhBONgL6RT*gZ*FGbwDc4&Y}0 zi9uTM2od-$)_qRrgs|yzQ^#}Ox^c)Q)Sd-WV=-7Qb4-kO8?{XqyvswR(AN+A6 zsQ&I7`D9L3>k^P~od8G#_2)bK>3i>y(hs zzaF1C&Row&g@ltpNC0Gv)@lGiE?!QayI^>}^K3y@YO0Xu`5}%ZPytv`!>h4!)zM6m zNkzAdbZM#j;>FnXgz=MKlsLlillH<|4Fw!O61TZpUW8x2Q`=ky#mMNG@wIPehLY-| zcea%ldHAfRn$9=Bomm~gb>+VZiNl9f8IHvP|iW*C7iEZ1WRZDKMeK_Zog#SPQ+{ib1Q!jnwJ zLA6QZV14em$};ESqS$UIj}~t|BS|}X zW{RYTJ*6d0O28AcLQNwezSpQxA`t!UCy(ouZ9SJI=~T14?N`fE3Pl6~V8dy1CJ%wD zqMSyfpa)HFp}I0(eO8@0amtL1x#flxvowPeP`XCSZjI@-5_0kO&x`Z#8@aUadz%lg zd8I11AvJwkON?zVKB(TkkHTg7v@w}eQLaFMDXmO8fAmOcX;r!oF(h(4A>B2{H4;5Nx+ zs7~bSytsW=HeGdgnk0u{V*_M>KoJNipRBK9v51qS+Qc+z_<@kSZ#e`?fKreG>J_M0 z2t`Qb$kB^DW(z6c-d#5LOkB9YGNZCqR=|jD6GcG^rRjtr-Kx^!rW_k*ku<57g;I25 z1TcSX>v^uTyT)7(ZZ5m3T*Uxe1)kq*1A%0Blq!7kMRyQ(rI9uJVyUGDslkQ^AYXx-d%cTq|^ZsS2s zv^Nn9yx$==M9F|kdOWHJ=$-ww$AAKDFw@-w`}uhfu5h3uvbV@?Ea))q(F4-~7EXUU zWWIp_4B&9+ZNEDAe?&;no6kOdwfo2S`gu9b?xDe%$-de4t8j2n4hT#<=3Wx1J9Uut0-w{c0?_0=iMb-bpje`fSg9F=~bjl9!0d_EO zKc79oxGy@?OaFd+0RSif1VE`I=ltVq*WSH)bx4aN^hz^T&VjXl0!N5uQ8KGl9mjV9W?-u^3?dq7i{~YLz0@I&o5lR{=rpfic}#h zq}*OCR=2Cfuo1nT)y>&&{qDs17v}HWPG+Jg96gq>BhmHE)krp*n>@1ljh;t1W4f|$19`+*Y3I7fi;_BI4OJvwW}heSYx3Md5%R7$yPcPJ?V5h+2!YO71D zAG{xIH>sg%<0&$gbL$ORsu4z2MFh{P+G)$H_$*S+9L<{k=FaK{P!UT^R=0QRON+V5 zk!F2+@#^&VG#0gsa}N_y?aB3dJCU8Z^y-}te>VU2Ul~b`1ckp*n|n&76+3YyHgcNs zU}^24Sl)oB#V3Z0k#s-;Z>ynY;)#hVBc8LfQlA(JmKVULnWHD;g$b&qhSH-#8p(9h zqWs>QAE;89j;4%kvaz#+T#t@V>(N9|E^*5e5Z7X{#K>?YKI}F;E1S@$wtVe=P^)WW zX&SM7w{A}ir-mnmRIb~IP)$~FdleUmx49AG;$(reb0yjys3Oj4y)-V#Mg)tI| z3EiM8Pxyzwa$_kvG0DB4K`7X99=Hffa!xc#Ydf&DNi>}d4H3@|Bq6Rx7oSQy3a2hI z%~Gq+XtgZPUC{~?;5WGkC|qgi#A$$1V48#hscggM3c6LADNOyZ|NZ~!#MFzP?^4Pb zC4^{uj>uhiP}q#Xu#>3ev~GztLVMsj+yjFA zVb^3&kmOT&!TR-SpMKeUc7UJzdFXCHqXPmv{YtiN4u!^XKSl=DzprX*anz30>=hhX z+ujF|x;7?t8BqsPb-;F>FirhMTEspd)sR-mq8nj#KzvWr{eJDR(|kXJExc={UCDE8 z$WBMKLo|a-pic!(!l`qtV9@@To=MpAv*-G-aSP}~X9iEnwu!z^{9xdFo_bQtLxVj0 zv&YQq!8V8~frurfMh4J|d$<%E7b_ z2J3xa#@yFA(X!zWGY|K$8R=}(>WLa1K;+?R?obuR1Z{HL_qyCg2+;KvPtuoX7sd5U zNo;?LtEDc(xHQ~iFH?JDJ)gC`*8Ao`*J=sF$nI?6o;g_f_G`!X6M((oA1Y7?N&zb5 zjQ;wAUn%gW&1;ghYkFI7dJkpk+`)heo4Gk-8pT-|&Wp&B>W~y&lvmax!by%4B&(WQTb^ z8(msb8=K9`7g7@N+Vy%QqE8>SOT}u!)HEbN{)_cHck7-Hx@H*`J$gJcIcxpmt=0Pv zs=xKksnw!CIwogNBtCd=hZF79mt!DnwYp3tla^MGC%}r4rpq5auFT9v&YZQaSkNp1 zqbiaz2$ftz^flKFre>lP=<>qO%+WLfiwJ9SI#ESp5TlDK~5AB0D-6i)39S>X)~4& zJX8XirXivbk|^Me27y$8(s$n}XJC1A#i=xSoROrdofuNNh`+T1We1oJ41f}~S*~o? zk}n13INfrFe#fndFZQXdJ8=n{6di~Z@=IFKQRbi;+qZRRB4N3wCp`!_H zIO~^pzW-+9G@sYxnG?VnbG+Ct+}m_ucz|%;)nNVzVcg3pBVFR z{@Y+{TT6{OTU$Z7Y}iKn=;hH%Z}`OCy#H?V(LFGzHkr4^3cz)Z1V|*eBGJ)l!4k2o zo}N9mh0@MvhK`;w>`~$Ck#w@&kP3~Rjpd#BC#Z-uJp_#V3m%E3QnSbFrJ`_y#MBgz zj>M8f+3~E?RF!fNvm%=A1@&!`u#+dpo7fOO=4QvD+3ZfSj9{fFrqQ(BX2AS8`j1PTBGXwh`_0C6Ao;30iP{mJVHlC2 zGeicI(w!Ar-5?qyUcd6~6H_k-fzK%4jfW6IcSYI0YO~t|)bFrt$9ML@1`w_|Y$M`c zvmN2wk)DH$$j$~U?9STLBJSxIY=1$guZa*1(C_ntZq3p$;t#RaVps8Xd1CuEp&bBD z4oCwn%Y8yUt&be;r%byysQ26)P~oQu;2fN~n!v7`2Q;ytLwUe#++D3$Mzfu zql4X!*{x+Cc+_WGgf9mJfPRj8*y&^r8C{5op_fPZq^=_Sdwx5v^Fxeb4@m>Py8SW(ib zCSf9%_|Z?RH*Pn+@zvDPX?gpOfBibH%o8VoBPXoSe=QSFVZGWQj7TL#pcv;|CzP-t zpdtXz@fa7j6@7Bg1CTFYNhed<%6g44#Ti{(ay5&cKW(C-51%wNj*~}>+xN?XBQBqd zCsP6?*LCC0jmEog@A$|wNxe}CB;i7eyEm8D*2^!wJ{(PIt9Mu5_-vtAlJ}pvU;k3d zvb<`|&5oMB%Or|q3Jp$f-fKQtZhr06oNffZ<3-{cZ~_4aZlKwg7idrCx2GqJrst

{Vizat(0!POs+9XnmANuL>oW8?GhzppfwnLbu2?MqjrXYfeKV0DC2wI-lT*86@f$onr*t}a=o(3 zQoOn_=WSK6f!egLa+dG9ges7z0?DS5)Mmj(325LKt@Rs?+TBfmp%g^TMscNb=brmy zvwmfpxiyLah>edIY7dr)CrDGF8<4TMd0|rdj<>R6OcZz~SDSl6(ouZo5)|%Mt+7%v zEo=SbUsdie$gS;a+|Ueb{o##;58n;87PVYPx-Nncj&CI=Q^#M9j1|iFZmqxf3$2#*$!*oJKdt}<;?1&xK9SH;d6NkwQn z8Z?^7h&eVE$q!fNKS3bbsiVWwM}ZhLpy0X5v~8K@*8BreD@Mjr_GG-VP*zB2BoQzq z8jmDKH9O@gWm~i~H(&kWhN@JI*)f`r$&E6LYSML8tp-G7P8^Ts#{yKblxc{dc<&Rn zU5v*~^s5LSXtG?bj!odqS)R`*LVX0^ic+d`RMJ@p7<+sFfz^y zEG_UymGZ zKMgygNa(sF8%d~%9w7-KZ(6Tv>mj2H+l2qw(~N+<+NA%eahC!OE8IQ#KUlf;IPb7k zdA|)XsB~AsftmY#lm{sKgKXB;by(FN=8J!aah3M_ZNtxYYZ+`acUxTh8C3m@^iVPo z_UuJux;wX}z6Us{yAXAc?b4Z5p~;M}=c4a3oS@Z4h|%8pwjVD&j|MxP!(QLkonC|X z5UCHDKi{7|5d614OEit&do?;%xBnSddRNsA8xKw1C}aSw%b(}Dm91W9|X?z&=dFaKUZt%tF$8b~*J ztxnmar-RwM+Jpn$7|_blOF*dL9@m}vAe=eeT|E^JY^5g+G^~3v^j++g>Me)^e-PLW zZuI8G&@SwKrEq)1cfAfhj)&dr0U)NoJ`!RdTWqu+hWvTZHMtI&%w4DkdKv7=({AXH z*m5`HUS74==bFZ^-?;N|{@LeWDH%bswk&w_uW=Bdi6u`c+Pw2h1k>) zR&RKoFDYZFKp{%hZe6RdJe8{pezoZ2vsSe#8m`C>^U>kR`&hwCWF!kl|r|?{4$y!^ZI`+jEA!ns42%L*!UEG{HQ!O7CU+*dhb?+D>^>H6-D1whQU1_nx2ZKG^dVN-`|b)MU&wG$laSxuO_IB#i4iSArl~R&0b@ zvjI$gd}rkk|KQITZr-)ITAf>2dA8y^LJ+Fu(uw0^5Vae~hCla(GvE3>Ldm_izAGEG z@e7w$H%j@jai?A@Z>~jC!**tPdu7p14rzL1?pIgA6;l^4N@BVd!Ij2Tq)bQ?;twz*m>R#?(RP0C^oi%qBsKp;`gJThz! zrQDSzRS%-aj#DX=>m^Q3@_f>Nwp0GeL$zL&(kcD&u3X!ulpBeRH8WD1f8x(C@Zp>` z6!)vmz(s3hJT`M$5PS8}y@hwb@6XLKJEDyjv~&VEx2%*-!Wfz4v7E&8up8%|z*LH;4*Q6OPwNWrB$*X4~L2g^(DHTZW}o zxBc}Mxx69c3HADGHgNLMEx+MWD@rwvstHd%!JQ%&3dBw+UrH$y(||G{9H;?|AVbr~r^s+7_jV1GW+DIU0Km&RtQC(AEHhjJa^ZZp1{o@T$ACmFCddMzV8ibSvQ`hfD z80`1$n>Np>8G3DI()rs*c@O5?56|?B*FZ4bm2KCm?_p<9hxX3c{V8d$LPXr#gx2$# z-NC6p3l8eR4p0nt-JupI3I9LH#vMGB!oZ*<=}61M?6{LUT{_57w4Z$Ij!L)F^LaU> zFnS)U>8W!+D0R4WC?Ir*)Rx#SCr8_yKe&=^#nvx|`W4lH_Z9T8kF7=0-6zjwrk~%g z!9BEJ)&N_uas;R_2{tO3UV=8|#gcF=O^vtX{{r->$?X)|D${yXwC4 zOZD)9H$AD14%3kWJ$c-+H4uU*MJQ0lC@KN~p0Avy1SC@Wnij+&#-k^0y)G`Diztfk z-zYcSAeAznK64S_=%l{6C2rnvav6JSIks@t`_uA|e^$GD$FVe; zv~@%^dp`P&-$|c6V>BG7S4H3ujnXs6t%bSz(z1WzXpHKl=}5!kD4+@^= z@~VI0NJ1)4(}`~Do+|(d(>P@WkXB38qf^mjQYS!CsR+}ULTVVg@QCmU*K|U3lu^#7 zn0A^Z&)?m`fAhV!YsE?|oy<&T38BP_$VfbS?s)R#v1Y(Lg~?-Qr!IU>1MSw2{&?-~ zuP0|t)ttagn2B^|>A@4=T6%1{*>D0SGb2aVmRD<=Tca~GUO+ZiOPm>zcwA$e5)^=O z#tAT@02C5}6i_Ki05JdvkWy~gF{#A*?O$*H^6mQlC#7rmy_F&`!lo=t8Ulf)ZLGW4 zaM+0)msLd0@X8w3`c2>xp`8U7c_~<(E70Je|*%9Fjs;u1bY$ks!HF7?hnc-%f5H14* zrgI*pG{UG!i7o?W+Q!zi2W#*ATy1Ou0?$Si0nrfl*mPpzNI=j?W^$)5XwkgmNH+-d zm}$q8(jn`gJgGl=OiY8Ak>-Z4C5Dnmj~TI?VdjizULrS4J)4eKAJ5hAKLu0g!x^O! zZ>!8BI(m{Z%^WI>UVb&2KjH@}9*M!~_WBRs@$Wq|J<;4LBe-A$k~VV_SQr6~1fJ(o z9WBcMqLnIgV^bA(NFedtIb&#;T)o!ZsgUt;ofD;Vx?LuV^I~F>k4`byl>newprn#g zX$G-vqG_zU&6ehgq%eC<8<}F;TXJJV={gxd$}haiMyDl`Kmi0EGOo^Drf1J1H)KGl z1RR;7`3ayLeV;vjj9wikrzs)AaZtC3VS&?BzEo7FrIH$-fHTMG##*phfoOz+!k|eu zmRWsMKXc;p-~U_xh%?>-3A9I*w!uS48ty%5#cg^-Wv`$M$=;CXyX(%t%zHlvnlFRv zBfZxLNZ^n{X*t?@-Lrkobqe;Au0b5J{i9LL`IWea{5@Yc=uLNL^$cVy?BXsOtO<;oU(~xa02chL7zNRIOdJ*d-OZ zJv1Q-+VPCNDiH}FX(MH5pXmw7p^m42_ub)pO}63#;bHHHBC;Fx-rH`~y_UkcyE^gH zOun#(qpQybEz~_n2!u8nlTPN|Nq^u_9z50hTPLL3b{`~a_d*}7QE1D`jtd6}fp!+y zRTMofg=uIZ9@445?Of>|J_rwYr?yb{!rsn9 zYYLQ7N)ZHrMzfwvXurC)ar;5#_r8`H%E@}!r^o<6q~)YMjzj)-1ulGKqDTb8%xgnSJmCy{`e4HJ|C@D zWh}vt%^JSPKmOQVn)eMumr^My2&29yD5YFyLEuF!;?(G)PZ~o*FgtC0e53m0admvi zC~k|@C1+-mW^-(9!?&aCrO&1V7BpQMi|dWL`skYfi+AcbZ`K~%Z&oTnZrHTrdb8nO zel2qGGv>yod*^07oru|ySiLEfOSUMItHW@i_B6;+LWLkN7i)gXw&wa^`CLX`@^UXUSnUO?% zda_)u3{Q;vj$7N_WYJWlFjOgSYE~jTlJ~quB%8Hz>9y6>h;5jRSBo{NG{cJPx`m2* zjzr{KvnjVE5)mL{lmMetlR%qpW$p2ewfi@e5Jn*dgdrsuVPq_-GB$7nkSHm@HfSoP zBq~C*$s<&^(ep^0svv-7KrP}|>H=MwX26({Ntx4Q#_1!mizoD4Qh6={g?uKEqH*&R zLSp){V}bOYQiWymif}0fNoi2f6+!fc$^vQvlBV!#ZmCFY&6r9Nn|hwIMn=;oPR0r| zj2Q0bbNm9g!7BsG~Izm!N%OP5mw%Be&^%A^EM*FgbgdbPN^ zcH^yJWsVvIZB9)cf`A*5*zh#7Qi>R{;o0Qm38~vn&sPF;BT6XaOw`s_f~|67b~HVn zGvf&>F`CHDCNpEnbWYPvs)(Vq+T!Ew53Y*pcKp&*^hjDW389LKfCR*d=X0knj9$1v zb&CYt@SynNM~x?sM@Mp|Vbm*SGvlRZ{M->|`ZT6;=moA&fv$mO7z<1ONAK6_HR=N+ z3`a)Dqj~S)C&BDdeRP5-p&B)^x~3vgGJTv7O*#!k3P3<100m0WV8m~-PwwKznmlrz zpL#*tDF%xRB0HjwjI(G=CejLMfJy>^KwvBmBh!i*p5uzTqfA@PoFvhxaEf$s9#)oA zDn=7=K%#sP2_Vr364WRlp-iI}&r&_&KU6Z-~R2t^Tz967E(|E zN@Ybyp{rfuFPyHJHXxd=eA|QvKJDTi!)^8GnsBMXHa&qh7#qxJw<;gl18ut~YlVOcZC}5 z8%GFTbW+WN}OXY9gzl=d?_!)#(d*?o`Naod5Fbg?iP z-VPX@&Jx%!8-bqq)h?@p*ck9@-^mYqW559vf;vb{>{+hiARu%$$hI&;J434r21<{f z*T9k1(rpz9GqAh&l{}}%cj>{_>&1G`0(EspYl@H-Nb2uLGHCDF;IV`~Y1n3GFf!@x z3Tz)jk&vU2uWuc1~5cIf1%Sq zdpirBd(fy)UWA92bnicI-|V^g>m=;jUAlW`Z$dLdlvFRic=pz#?|kpgC*S^N?%Wyr z_J_5RjLtcgLJ`6@x7^{J_S%a%M%_l;2SO-eGC&b10F(-)&={&%l+GM8vRU@=wZ`K) zT4`+iUTJ)4$f>KX#hoaLUB9O&cwhcvx>};k>*Du67auJcfA~k$U;M28@(b431QG;- zMEFwUj5AI6fo@_f8ohPRt#13TzY?o9#Yflc`KWee*j!wzv5;5H=dxa70?B&?pf}1JulgF8o?%aa%d~*C)YGKu1-3*R5 zSRmBN6S3ifp=6U#s@b~lvz66SG-mk$t(CpkUdii5AW#7!V_;fLNTie!##~pVvo@j7 zbOTM}LJ~k=oCh8ui~=wzlBRy%id?bd6Cd55`}2SPCkv16LCs;7t~g<+8`*+2IUY}B zoYkG3xyK;=p;IpzsY1QJx%K!qQQFAKi-MW4csvf2=ic^K!)@xRJh!5R6C|GBSlhhws601U zTX=$ALr*27MX?!>e1s%8ngr4|A4;p`EvP$ea)fYGZ7lH7BWP#bjgJX{IW^)Nj$vE5 z$>WVuu?%ZwJP|!}l10)|DmxJ)=rwLEqA$o;1}Sr%EMr4x)5FZv$@T^aLi0mzqb?dX zb~42yQB_q;H$Wp|JkT?V^2!E@au!bl5Mr9CV+AWdV#V|E;Stf?S$pq2R&6Ro8a2(? zVd+W`ERikvE)h!C>?~F2I|>LgPNYDkkaMmCa-^EZmhawoZrmrHf)PWX$P;2j<1s58R6PVt zC#>yT51xJJJB|5A#&kYDl_N|x$`x=NRW}pkM~5bk+Exx(lyM_!rnYb2T7Cc57URPw zrnDF^+Z`HmkDdm@GEIV>SEoA0;v5Bi^3=WhUR6_Kd^Ga$eZi^pg}D7l#N+(zWh91Z zmg&+GdUYHdql8GODS@JrL`oz;be-s&R!ijBBV3r1qhs{Mc`9hIFz-bp?8r1#5H!mY zfv7$I4p5-3qclws1|lHMs?6nSA%l%=_~ZdRd@M%C`Q$7WP9T9wi8>J91wtT`B#uj5 zPmSlX)R0?M9Lb<<;>I%DTDLY9{A@Dy!iCQY-vebJ^uBv^Mb$3vud)IMD(ucVntlvosT>!LSvf6&s zqr=+TYS#qnG}5b9d+@_^*=g6)_4F_bF@$Q`wC&gKel#3F(&5vmRj>UsBs|S}yCSUg zTY#i}y_cZ}CxpGIp<4P4!hv(OLqlKb1Gx&}9B922AOy)e74;_^V6^-OY4B)`g5Qv@dJzTA+I@_gYji@RT_Tz2Z5Ha5`s!uq$)eAm9C$bVT?d|5aCG zgZ&3>g1hJXAb<`Bt%fdW8v??oc-QAh}YLPZ(9aPheKV`pX>zV?Ro z)-Q`sp26%`6qp;hQb|n2`IkNyjYNFMbAavr5@X zr}d_%lmgu{P>?|QiKt#F^9K*zR1(I9jSsF>cZ%X0U(Fa%q3e*znFN&6kntEK66iGj z?NxAGQFFwNkDTI)uv3Pwp-F?!eknb3j4!V@FTI>AjPmljzqTr-jzPJpQ8r8ZKl5t81MXH1+Oxy5%DHT$NGC;~0 zaOw*|8RHspn}KcuQITl$j2(GJ(`Tv;=P&=_FP`1}Skp8b)!l}xjbxH1rhJ~#V+D|I zd11~imxj(=8GG?%;fvbFvTjo~G?G1j3eikPlCsultS#BmNP29ST@zH)FQE% z65G|C+Sr+~?Z9spxNckrDkQx zTYk9ti<|Cpg-FG-(IBD=--DdaQa^N0j*fsqz}s<( z>$+*{daS;@j3}%VN3*lDUX?~7QKn?ARFciI=hrnoZI6vfsT;B6@a#-b=em(p&0yo+ z4foL;MFf+ROjOGxgIa~DsIJF>fDDjPuA~GNAfec@2^l3SP=J(3UpQqVe8QQTN*Ti$ z*YP1>iQ#EGU2t8(I5m{)u z=!4ERs{TE&tD{)Wl?Y9 z>C1FzO1Yj~dIrmjsxZdW!=zFciee-|qy!*D*9Zqt9+|rj5AVyuq<-lYZku9lO;{0_ zoTR9NMqLU)C?~>4;iGO5R3HPO8UY1?08U9V!nYR0lc%s=q_G4$bDmq4TCdPrO;Lt+ zTB}qbZ~|+XZETU!cA#;xxJHGL<0I6q(X|y?*%Q;9aNeepYEK^S)K>0}#UZyKS+3s@nCc?U~91 z25GvsM>Tw_KTi+i0|E#@!UkWj4jQN`+j&Swk@bG!ucc4h!_n2~J}9Ec)Bju$HL&c! zr_en^`uk*{!|{Meou94IX@@liq9X_mS+A+nG7%4Ew$)t6YV45Mm9GV}5f6Yaojiy3 zwDyeSe)zM0D0lDdz7OD2VWeGavZv+&QLN|NPOZFq*3)l})AnzH5(0d`23j8dmg&~* zacNbtMVmcfFgt-g69cJ zfHF!5Re}XFIC0TBaZYjy?|tarxz(7M;BUN|{E9_3Gy2ad_kNsqg(o zWuqeh<8NjRgMIh=D^Zh;j~K=EN-k?rN|8v$xfGz3u)it<&Q!Fjkn@zQ`C~R97E@?LW%P&V?dChWM|H>=L zb1#^L2Bi|MRJ^ZzIbYc(D@)F2UyoA`*{l_bvUcKpb!->7UX%{iNon@dan(i#?<5i9C9ec1@G>M9f13qxoTwOEFUJWCf~qpG}` zb>w&?J5k$MAemTn@|bPd00E6B?a5Q7H6}e*QDyO{5gQjE>rEd`h$QXm)A`y*H^6hX z$nQrSw93jF?5*tdb-n+B;tM{o;N~0tlF=j`pWFSPgFsjjLpg=P;LY0s}2_XO? z5R8DXYoHV;)J&b}3P3?ZXGSD8IVl-ejh$#}Jer>7W?WakY3WojA^lV~iIvLZw|}&K z?*U0hk%8|t6h*HduyoFhsrI7jge_95VBJ88dY}l zu3PuSE1%JFL*&{WuP~0&C+OoPj3wywtOCSF9X2);`XrSk3YAcx>ty$%FO-6=0aava zfy_OUi5R)^nl^TXl#2uvjE-?DhSiGnJ>(pe0;hqL0!qRdv21jG^aYp(<&-bY!}^NU z3@tybr}N0Ppi#q`L&`NgHp2<OZ z{Kx;~Khbp_2q66yA@q3Yp!-G()3jp`gLatoOVNI}TKoQUeMVuIVvj`c2RY9*&f2PH z7bSH(vAtTdyXM}259#uX?p|Za@Cduox?As}WRNpE+~@!^to^m0Zi5F7=uFb{i}dFo z=wgSyEZsRR0Lz@+LiGTY zJSUNT=1KcgKd|?G)gH__ki4)Lwa24+5Ia3C=I;LNSzWE0yQrJCE#97hRS$(7t8L(X z8{`^jH`D>BJ=F98&K~nSly5h+<`boKZ>{drQ>L>D9-}a}yc7 zr2E#-eyHZJlRCurk$UjC$-}oWu*d;3Q{nC^Qc6i7gsvNmky{^s_+S3l|MXw|$^Yk- z%Tm|Gzx=aOArn7&f&vk~t3WXX>bXh?g~*hm2o#Yh1quleCVk?1I61>!d<8QxardtJ zi@)5C#NfBS6;DLzFW%m!hW*lOxhGHS+uQE9zm<0#`r*ySx4#wt%B%68y;WLR60g3V z3`nq5!bsFosCFY+GLVR70zI6 zA}$G|z<`492B_%zn)vkxC9gq-hhvT#*ak}^nCG~Z62oGYkU$721mgr18W!Ij1I`#K zlmZwdC_Lq#ZizU`;TW|m3=ap)MMh&G?$ynmpM09kRM00j-BycNk zb(8AWAosA+)f4?kM}_(R|%bKxujtSl8Nw+M@;My3<70yd~>_)*i= z1>Jgdf9vMQ)Z+G7-poe4ny-Y<4NXgp4ozPinmElcBAXCpF@JUY=?~v5-MBS69y@v^ zH#JRlRlWbw%Gyd@fFoo*HDqd*zWB^3?Z9S@Y*mBfC&}s4`iasj`l2u(;S;knD zL@ebtuv|pOU}T&`baX39BShD!62K_vIsrwt*V*Iy$QZr!A}5uB^fQ;~<-&le?5Cz`H=46knw~qIu5G&xjOB+t#(;NJ)YT+ zRrVY3-l}o1A{$7Tb;=l7Qv(y9__@7_E_D^0X1qujJ3J_7#86pI}LO>wF^ej)32&FNB+)lCsQ%@Z~tO@ zaYO#YzZaw2dA7Rqm9J!8zMT1Q{=d)0rnKMv?Zn-A@%9Ie7tTkA^YDXrnz>Xgp5k8M zAQHj|(+Nt2NSe(+H-k(@^MasW$D=dJ;bAJ3W5;wUlnnV%WYDs@ZkPOx3A_V#%|xf`SAWt7PSQB*3m*NJEBE&KN?M(IsvFRww9SDhflmR zbow)>Tc+tRKDvoPIXODRV;RM$88zH`xwf^W+uTap7&wekGio**$FQ``jRkuso|%|l zyLH1JAF+pr%Uk7{bH|A9FRX6rF)Kb*D6N)R)|OD(zVX;wF8W!nG-N5$FS#x_Y{cd< zLxG}`NiYpuERuZEoH;>iB^2B7$ycbAY}9_uBZ>6vMLQ95>syi0aV?eM8dc~Kf*PlQ zO8SB-Y3i`ExLWz>z2MGc(7ASOgc=YyJN9TnizmxVYq=xY#=5j-&Y4ECR(lYg9Lvm{ zKw=1ACi6D&oZ{2#-u4rFqj#w*=Q_WeaE?fm&Qy;S;W*M$7iFl zWT~{IYc|*8grI40MbPtvu4z)DqPV-Zr7tPdjHp?je=_%r?|P+`$g$b@>|}GJDC^b4 z@OY|l+%#fB2!d32lIqN|wB_3$FMs$JL17GMBSZOSy{wcplZDKQbLrvZBrr@%=KHNDEg&o&kNQj7b3gr2{>Rf}Cw)I)j1$t?8PO$o zJM!#sXEqM!j1QX!VJ$FF4jwQ99>b{$|{#p-sdO$j4xF(ziS_^QXMm}U1q(`wHVuwh$ z)1b{cX>B$cm^r+|V)vgt5Z>kGZkZ6I0DeG$zl)w0rw3W52dAz&!)9~KylG$e4^1nG z(WXB%!TT0MhuNNfYjqT9&-_p`o#KN48}9i95C9YcKxZ!%hO>1X>z&#^jT3qBr|WwS z!qAk%7G-@E5um`khHHN^_6>S=AKdS$zk^-7zZdzOYWK;rXVVkt`S?^Ql-4ab!}BJb zzdKktpf|%SyeDQIetUX1I|xA9s3we}+O!RPC&u%@;eak0*k>Vu*p6uq$_HVj(H@cA z3rgq!e?vcQi0$dDpalXBq`Zw7_akZGeb^oCP9Jua>2Y**=lo5DP*>`eZk-3Mrqyn5 z1Aqc5i6Tl-M50X7TAF|I&;Bp}r|*3KyUD!qxBvFoZ+%70EvWZ@?Y($5Gc`qhAw37V z!BK$lrDkxs3vW2_J%OMI0Ynl6z8TXwBcR0NNBjprZ9II~{Ja0F+{u~9cmI6*t#|96 z`$9CAhR2T^5uHvJ;@|y#@#%8#x4)S(k^J*NS&hfkXI_cC_0G=rrhN61rBPM$6ahvk z0YoKL;0x2DXU>|2&bW?8W~^jVSHc5{(U{SwyPgBh2D^XPdF$=Qv-=_vF?3V&>&>Xi zIK!szoH(O>qKtTZ^lyYhk;R{I=VSv&%crXc&OZ7)B|j7{oP+x+Bl z`s4|#FqW7oHfrVa@)AjyBd=cOX|v?qcI%~JyXJ4KqViaN!kEkj3){-6u%WbeZd%mJ z;5zK&kgV3QQPU^RS-Fw=)$ij@)4DQU-&s*27`yb@NPbGxYnsM}j-LlRPAEm8C?S+l z^Z|irl$6$2Dz`oi9zDitz)t6lBSUhlNF-Q=2_tUVc{KDiAB~#BrWP_JaCPH-dQ zJHBnDIN`P8YVp|}s#`-RE}7=A^wG3*B@|G?h+bO0S^4l?T6Nj!AriH;RCegt2~u}O zwUQV+Bb5QZj{r&mC`u$@z;&H_O-G@kit2{d*jQS)`aS3AHGOo-N)<3*L8AeR4^5v< z<;JC}BDUt#U4b%cMQc0H7O%hKtZzjphRu<&My2L^bt{ue<&NglCmBg9g2`CK->5u( z>%HZ>zjmrco{sC;NFW5~REtIIbRjb`ogJA8ge^Q8kHtu(vi9yTsvmxsu<4mAL&r`E zzqo$qgVm+^`h^#*;}O8)C+NZwuCL&! z^K5jIdXA`-7&loeuM##aJthwyKqjwpBZL{Cd}x%_(h{lG)yye&>;f__x7W$?0{R{% zVww5`zG{t}Qj=#R{zWjCFQ?ybMvq!0wARCX=P@b*Kk>WBrK0fw)-}ndPBgY-b)phLv z17m=Cd7g3kd@=rfKlJlH5ZCz!JHPt8OT7vEE_!baI-0v5JJ0hHA5zOaHxudF4%DU8 z5L&7>WP?8^%7M^BIPR~=2Ga2V$JF|~(&4~!ch^3b{yqD!-9P(RKgd|^V2T4kPLC`3 zx#_u6DEt`12Q>CiVW6|?i*KI<=%GyYW#m7)%_(pe5NaKn~h|wU3qF$*@m4 zV6zYbLSfIA=v~DFphZ7(2lVi6{RchY7v6;Z8J`OC0qk111X`AEh|)f<31C0K=-!L9 zSI^$lUJpvI;oqqRdN;3ihlpC&xbL(kgRJ&W_1!t!nVy>t!Vg`zWska^cX9MbV0$oJ zIECfH^Cix6lw1cThQ&;OzC+f(zaOZ7m=CCJH&CMhQ7J^Jq*PqfbVE0Eb8}`=m#G+zx$V^;S7J{wTN!P&}j6f7c(DyTz>oA z?Z5G*^y@Dqe){vRrMdcrQ)aOy?>zBezmmLs+IC#YDAzcVLZCp#C{aXbDwk)86tyiZ z43kLAQ$#jB{^Xvwx+qIK`qj6c?|rATx+K#{1BEIU>(MA4KN$h;=SIo5e{Uo|3{rW~ zxT$>9G)i@&xZ@2KqD{wLTG)8y#k6iqAqAmC2Ewq6N=YuvH416%z?ElW3aDFkDn+gzvsg*lY}+|b0g_2|^YXN&*cfBWCu`ry~- z2g{F_11DgNDKD_k9-IE`*E}I)R3ABi*@#E$#W^izO?~EzvD~Br%4o3s$#pPfd}Pc> zbaYy-H_Q-Vh=us;hpTB?K zQ84kwYx>Y=GmzFyO0l5!bVb(c{8YjI)@%BUXCOu4bV~ciODdZXJDVhKV8lkJ3d2e3 z=oz)P6cktW+;L)Otavm(ekMJBhFPZX)QM(9vJ=r{o)XR&(KJpJfTD(O1Q=A7o(6ZG zzxE>J#JvTt9 z3|*&+5Cn=u=a#`OMob2B`R1=`w?E>ML}KP-G&9bWZCdHv_@(5~2|^6c845|1iYMZ# zS)P0EXU@vA*w}=T9^xszQK=GY4$Yn!nK=t0%8}<{F;;CXe(;M2fBI+c(sFz}YYxTH zW`V}hNMt5vhNjQNQb!PMN?9ysddn+|KmSSj`um3KL@3y1-S2umjT+gF3FEj)dKx-LFjQRzIH9Hq92gs^IjG%Cu} zkyBV*$DJZZZN?~70(}ANo2putQ`7YHC1S^9qlU|iQuuiMm~O`iAXp|-3Vk08i!ufT zff2sEOp5D}PiP!iX-C`MRL736^bmP;C%AvZ85`o3!5%-7u_Qe{t1r*vtvmkAw3f=! zts*2cWPFqmRGP-h8}RVMzzUN8+yC%C`^<}9_C1%m#&RrIIt6XZgfQ*4_@+Jbr9IMD{!yrE>t%#Z*SPA74HiF+&6`blHQK$VEd5U zV*nR~!0uKw=rQp_H1(L*;i`JVso^+MdnZp9%?C!h2d;E|{OgT`5&&!sN2}Ta;p|W(>R|aY zVE+TQVcq8$Z-?Jx=s6dFaLkeU3x4veM zjs~9R`AsB*C?yeqQt$)GHHHKOUm}8G>QYdzPKrgbUGa)5PJLT{{K$_d@Ec!GEiHS0 z@Q3SGlz;7;xx$FKvr~^mjoBl(xzhaF*Arj-Z0y$k=0~@huUxigj+p=A&&$fCmrj}Q zf3#C7doR6cYq}J^qMQ;!lrI#gzK|$|p;M+4A=UD{d;LRi{*z`T$_UpUKWkR1^6crj zN$KtTHKNONS91BRwzyh+;|sa-FGh={G9`*@n(!3?Rx3;JX(U0a_44d-^T<)%3taRh z(U=UBN7>S9u(9S`Ih_lHSFO5N&Zn+iOi>7gs|<@HBA}u`DI1VaGDK;u9; z1wsg+gen4rQw5|_tTxI;@Fglj(kU`D>Qx*iRc!hgi^ZDr&#ZVv>fC3vwy_AlAJ3em z%pyeSx~&uiP)4FKa^{PAB8S9AMKsIu>K><>=QTGTT=kzlCJCDql2U0JNoEVj8SqA> zWXC5oZ5Sj+;h{jLQ4|Ul1>_plEFFaq(l9qx?v&=QQ{6C!CKJQQtYkqcVMm7(xe>-w zN}$G=>-vUa>r_6w|EuDo>t-sGJwCI&ur8VbGBcW)O5{&)Glf1&#p6)gdGMp}K6~d) zQfnkmoiv9N!m0b7GE&+2@OXA?CY~<1O{RnfUQk_pxcrM>xexAJuHX^Ph^XpDWxHBg zS#w85;p|0V8r--YEN=P7PiSwvu9qtK{)df7RE-Q9*Y5;(@5*y0>BuKmKh+B%8EVEPEz+3@e&MpWeZ8LeE#^-b~W z>n69zwQC+jb?Ktvy12C=#tI}J$K@xaw#gbLNgDCrdE;;WjoG1&9J{WcAthZM;A)~ z(0=Pio65G~*2Xpm+Vg~vu9(lj1=})Zd(MNjM>aepdy~9V!=Sa_8Ua37G;|Y8NbgDb zL-^na-rRQ;9pC^s;AwZ(-MV%!`zC2O7=ZTN>bo9L@1PmqCqP2Y^pNy?!n^l+_Mn>Q zwHlrlhitLGhTc}fzy6v*>M(}sZ@M*o57)%LY#vbjU_{+lKMuNX-6EvDqW8A)fs#^j z&N*e*-v9Z({2%{^2lMNb(+ahP-~GG!(GiuOsMiGtAjA=g2w|vv4?t+lV1XAf&UGLt z73Um?LIs2Z1%{x_&&m6Ds^ywfn6Rg&vLCOyo5jjEz8yb*F8RlQxKZ8o|DE5TeDUSH zP-VZNxF%95{L0tjg-LB=JNV(xwv!3=@{6h4cbcC(tbhI0+~%hDr~h{I$av(1iyXLQ zlmVeCkc3f0M53&Sp>e%hla-SH@V5KmFPrtc(sZ>`stbVA=OULbT6gX=>cT&NIdSSt z{MMcA{J8nX7t)U3K!TdC%Rm?w)2P0_0#Z=Uq^7A8rxFMO2FN)Dq6~wrt$Re)Z$O;@qfJU2FZ@U z1FFMYnZXbQ1^^d|BzBi1NG?dwKyuAU!f03{cezHhUGfJB zl1q?WU^v4;kL>R0>gwv!RasS;m0F9ZW$3ud-Ov7r7ZEqq%d8pD*30T;#0?k6)$#8; z$K9{vDy@+T+buYWvB)5RU>uFscFI*Mdi>7M%J036w!rZerIJo|EO+Q^IyqgdJ|;9{ zi>HVj6@*-H#*h&NK_rCZ*a;bW>$g4%LNB*)a`XOY(Z;GhIW>Oz`D9_9iJX;ic)_w= z7c>gVf*`b#u0(ip_3ia*@1}~m^xJb&%;PuJgjCw%fa!-V7xb98=2)@t>& z$9r>!=;aqBv+3G>wYR6Af6@Nh>xpVLeDi}Uv+(R$>&fHjv&+%qJf1kpR(H|U?BsDV zHN~RHtgPaVE80%N+yY}l+`O%ghV$o~Tv6|qs9J|c6AF1K=D=|c0aoj{vTQ6HX68^C zrM2b~q7Z~Y4iNan9rQzX?W*`%)@!@!l@~=SXYSu+`3X3Bgpr}`9k%w6j?5hT>;J~T`Ss_2-H>L;T4ttx7}|@q zo=q_xs5D1#8)yTXzP0tA?-ep5rRr9Vx}N?H&7q!i2tD7rasSkE{&TKiybXt*Lm1qF z--XVjR`d4y_GQ+`c8SA)a>tDpw3-t{a!5|j5?(8yrZ4m=)0%;MZ; zxCniQgLp1DYL`!}u6=veXyClffq~jG^bqkuIY;08-uFC)W)I4-i-Gsa`=5RWwVFt@ zPI32V)b5?u(CIPcj~LLgZA*Oxji3PSv>iT2?Td18AFOxt>QS9B0y8wLZk(ruxO1?D zt+CIyzJC`%`~6&P>fTO7)MtI^D9xc`egwpS>UqljwA2%S$T>M`KOZQcsB4Cb8>QmC z**D+tz*8}uIDKFD8*LO98qzTRFRSX2xtH$8vWcnkcHfPP49}#y7T6o7wO$hd z0T@6+M8`=~%ieGQ&VT!#{}=!8$?D3|vE;cz{=!Si`9mh~gGMNnGMp*S!Q!yJZ7r{h z$k(S%=xiEEa$^(`GlsMwB*Pg>X>Dxk&pzGV*)?Y`reA+!d}B5I^w!qYyz}+1ju}G> z3yHt|e>{Bg#WB)>*97-Af2DkM3`_{ z!uEqeBk^p;o=khqQ2Wiu1m&AI8;_QCr2(#EojeQqN%g^dw7H2Vjsml2WtlwBe(oq4 zUp;t&b4T(EXQI-Um02h(oVS4aevN5j5{Mz__T?3T1{ebrTre(xQKQn>T)kVrdkwaB zsj2zgc>cuMba8V1@qNo3Po<07TdP6SOA;4oqROhxMSkY61_oLSDG?AfArUdgkb%)m z5MzvpF;06AukO9`2e?_{$Hv5XRyet_!zboWoZ%6bRv!y1oy^T4vM`Knn7U| z%AR`jy{6{;D=%5;gt>gx6pHM^8O{*zKT?^zJa$5aVYK{^9y~J4f)gj%^rU$303Sax zCyqO_3sA4AtsN*;A>mRc&)fv*kbEDvcgXk6+>FSiDfARD5E6+<2m}DHY7E2eHM6=* z^N0D=46Qx(w>Egfg|R$T%k=0G*^(VUW9^k-dnbDJRq03i*4=1o9FHAg8ymE~txq3k z$u!*h99Qmy;U50VU--?x_{;yg24$2+Y#pU*IZtBx?J4J9Muw+2Ne0w!4~C1K#T}LB zAgb%r+XtC`<9T)#v39QA!bW25ft3jcR_e|Y9RCm#4*KM8KZ(aZK%KX|$M;w~vQBm5p>TQeQI;O&BjC{$Vgx=ciFC_+Xyh97Yd?c%IOP z4Qur@Y6 z+Md;Z89F3{C`NSJZ|s4%R2?(GkS^{OH-@W+g0x;2O)umg$YlVp_Qep;nLI0wcw z?BYDQD@W&K{66e!i`SRyFrRX~svQbI)H-j_8i@NnO{S+&M$HrGsPfLGX9ueCp>TXZ zw>W+#0EE8F8#+l^E!C9_I}hU}b#m`{(&qt(z9G^YwAkzI99pC9FzdOFtlwok)LJm0 zr=IGoiRac$-Z`n(Yar}U#6D@CMWO8L)BWVFY4;ROG@KC)_mB5DPKPaWtyQ5F(-0YI z?b%=i%3Qy5>!1G9-~R9Z`~R3H%-{Mu^QTT_=4V(K)yfrPl$I7q$+SUaEL7H=Cs^8{ zbV4zXw$1&>03sl0t&wA^c8WAIbMkB|m2nRrcN`n;-q{(Sl)v(e3$yc9sZu|4HhJMW zCkVZ2wIM8qoEv43L!`Cm1LyeMh0NHvbLmQXZo&HAwP&FY75*Vmr}Q?oW$L8!Fnn^M(J<;6F?ojq~fdh^4k5A^50Qz+)x zJMUE%7LqT%kZwkSV2qF(L&6eV+AEKv%`JcFNOEe{7B<&}C_zf5wK2#TVLoR~zEl`1 zX6nt7N<_v4a!WW&n9Z$gn?L%2dHj(1zA2!! zIGbBI!gPp2JH>e}lEO))<`2nqroOpGs*#^NLB>^KWJ#M58D9x5QGn9QXu|~OoT-qU zTyp2p&9$HYK9;v&Jk1JucYZcqT*~DR=d$CK-6wu?Co^@D%M1bIoDqQvHFD(0EMe&| z+In(VSGSp+*}ZdJ2TgfsY3jtwPI3yk!vq6h0Q(zindDBws;u0;^ON6>$~*4(R1gHZ zv?+yEm^(3j?1EQj$#goIN(DRHSKs=BC-423F`1n$G@i#+;O=Vg}$oH9y8}&bu5Vw?gWWEzVfPb>V#NXH9vc& zsSLdSvb8wFme)*ff=|!GLYO-vhBq7h>a{47<`-V% zJQ=M#q(_fUE=%K+%(ejl6tV41*xjZ=o=r@kX)R$4wKj|c;}H2+FXPrWlqzO&9G4bM zvl(n}1Lrh3!=ww3A85Y`6O$}4As#*ql1ZGNwQt@H>NWG~^RiOW_a5Q+ypv9v2e-_f zn~F+$DSh_aul?cFjR5ZX=Bh7->S zb6cO|r_c9=ienhuzYnY5uni;D(^xKTp?XkqyzYHyvQt)PX@L%~>8(P%O?oQZ#s(27s?@}9B^!seSqkzFvjiCo1iovu)SMdG_h&b4l!!qxF z?oNrGhofq}|2d8cVuQ1rId%R(9LC1`Wg!0!iRgm}%I1svp}8rlZfKHn}n?e>%q ze}UtG_BlA=e#|c!`dB9RGpuK@+;lt`LxdVITRlr%;Gl}oQ-@wR+B4Y(dZs$Tz$=Bj z(Vo3|zf|OB45JKy9Ua<=1n`s=erktyA|5=RMopvvt=j4Gw$l+h^S_TUcXBpF+8ARD z5E%~a(XFfh!N32Xe{$`QU;k?Eh3CbIi$YjI7#hzHITswcF-Q?HiJ(PkmmWQ?zjEHa za7t=`FbuWkMiVl|Ee1qdfdK*&jZN4SMT>E6R8(#1Qzx_M&rFO@+VyHPj3V3dl&-gk zo>52|m|(yF2%5g0o^@xZQ;(n2wDK>UDQxeAKYh1!WFhzZSKM3y9^SV%HtX|qJfBb0 zE95o82-U3{%{#Zu-X3RY@9xpwUR`TmZ4wjg>)*_O>sy7*jqr;r-qN)5>Py*=J}IxR zd4J_EOeV8bZD>Hjn9xc|E_OHd)$6rvfj{?38f6$Z4WZ;5kg+gO$cYO!GnH}dj0#QY z8_q=#D#-)`0z+Y_r9>{lD5I5|&Oe_ko?P4fWNUS6ZaSCZ=_jl7{@ZJN^|!oc6J(}% zD8*5bWjV7`Q!gA3ws*^$o2j#Bmwx`2z2@%r^23YY`3=LlZd7f?Q<>=~(t)QKpr)|8 z_oPwXo3PR-Y=fa~NzV_ZNQ8~O-3OONB9Wdt3c!(}jzR*%5OWL1g(U-}L!&?t<18Yh z$XI9xwVl;VZ+q{3EXMOD^i8!X7nV>`^w~$&SkB0__CkotRH`x8)}E))nK=K(+?m%w zk%p98NEicA5FjzeK$%DzBiR1IZzO{NV1N-zyUBWEXYbl&{nOX zh*TZ6-){^65L@7d#p)c7=1OIqznhD@gOg}Lm+tZr~*ERnFI?Y;HOpDq97 zXJTtR=QzoXBLQ8Pm8(^9>PL^7GtbM(DOy_%rswh83)bv7+_)3I_fcd4d+jwjJ*W3} zBVXhEA?|QpT7$>Sx=_IB399Wz%MYRE!Qx?l_%JfVzqmp>o94CGtZYuNK34bd83LM^ zV5u}1MUld09d`GKbDWr9PQrLTF^&w-*I-#-LaLQua}&2qW@?hpO@Uyvu>xALxdmBT z3%oL`?PA(y6BBH2FRGQpix=%mo$lR=mZqhJ;=|9B()j!ZyIyI2@>8=kec{z#d;Qem zuZ)c^1%WRZ@1mD}9e9A&9AXAKm{jy>>}Oj3i2C*S({{^@!q7v1dWJnjLqg1})fH~! z2K7D=*kgk1@-zgXXTaRg5<0GiezAv2xKF>HpPuD4N`C~E{pI3hdd$Ckw|;ZAdGUqp^b~hoNyLm%#88Ds zB5?~*Vm6CQ^DGGD$2a`r^O(w^0RjNV(P%KFks}alrNDqTa<8Uci3{_BxT#gj1O|Y7 zPZ4U%;zFV}8VEV(L<9^C0SE$&vPJ&#tHpf5y>qK_>O}VZ^SOmX;8pn#f3$c1Zso81 zrLktyfA?p#q|K%eS(|InDDz~>_R!niZG;ii0L+SBeLeT{-%VK#etu191>gQ=z7~d` z->IIxkUxDkQ4i}V5P)gY(qc$#ZKGx=cdwqppUX^5+`V@*ab|x0&;9u*m0Q30qp3qjd3u~8#V7(r#*&dz3`t0-j3*tD zo0zi`IV2L2MSjQ`T1jVb?aB7z&t{LmBBiYikkN<)U?M~4CPQOX5J;DU#hPBAIN8Ny zP_Hk4`dA}W*4wqj@$+LRU$MBY zR2`Tgtqd8)IcG%1nEe?}1O&tw7XXHg&SsOvvFzH)mAxxBv7uomL*(ID#$A|;s=Ir) zE;*T0YGzsm9v8NqOopY6WFnKBm_sH(YsRE8!~lSUQi>5V+aio=8;`~ zKXPX3(0S=(lmW)j7=w(1F@~d+bWG4({_qcLPwp(d^tJJmOSgXVV_oyc4!<;Y?iHo2 zY)0B3R=&7&_oqKDuiax#Hh=1TwwT_y^r=S5jOWJ|52cc0CS;Z^EMU?4#)CKC+4}s$ zXst9pIhM>?nMr9O-`d#oMD6+4*y0IH7ot$9#iL>(XWNec@bloqPgF6(-}suHEkwI} zN+Gvg08kv++8%@k7LT#)1m3+4Po9``3QwKq#Ui_Tg|1uT7|Ufkm^kRerd&ci>5U3jh(p{!RyI?;;+Zo-274BT{?J{aI+Ax5?*7%Jmn|T462_|2V`SWKjUG7EzgOY_0uW<{*!c^c)wwOp zsNDyn953+_`?Bgvg1z>~o&uoLO*nAVz^GdE;f(`oJ(zH4+IU4e*|!lwi;?y~L~1)a zTJfO2m;0*Nzf-1ncEq|kew@A4EWO-j|JQcm-Kbs8+)v4e%bdK+uoT$wbc*zd+XP)OrIKhHQ}IC2lzL-vo7|iqcLMTu022p<)PSzfnVFY z5`fws#m;=7;p4a`?_pkDfVRJ=m*5@T%Y#`xb)*g&c;XDLH}_ucFzmjBLABen5Ydph z&%kO1r{}OHY7Jgv000?7WJJJ)ln4N|O7%10Tz%!W)bG5x_2K8uD8Qvd2^9$>&`}70 z#uz}RlmSGBVJhXGIb?ff`?ucqe5BXTB<+MM*TXO(0?Ood?|d_Fr=m(#3Cltb%2NVm6sc6gy!b+9W`;FNbreF{ToHN=jl>;S zXsx_RMGA|B0vD=LZW>LNV`-(sh`0dP5eBplwcu_dcUC6m{Kie)C}-WAY8I~C^FFBs;WAQnX$IclX9 zun;r}8AW>a=4a*m*TrZ zKIO(vrYEMojcukQ#?g;7HD5$M|^v64QKb<}OmBQgyxUN&3 za+9YPUjDiU*tvAgopD$0-+yxXb8mfj?A!@uk7cIjEFST6-kpW)q0{N&Jhu~}Z&E29 zu5R4_;~%a3Qm9l!N=Mq>-lJ3sCJIz7na8WdELd1%*(7al(xuNM!RYLH=7;)| zPxRU*ojfMTrVTJ-LIR{l4WfXuSvEF-0x0lVpvV~GrkIpqe5zNmT7zts9Y4ZTDO%no z12jFujE1eXz)iErF zf93gK^!z3ea3MKEK-R-*_O)csLfqvKF>BfZA&wdcRcp+$7gNPCXg(_c(WcUYYe)wQ z?R(gkt%ZC|N33>1&V~sd^#%sL->>c3X~mjGl40F?8XM zm($Lr-%HkBbB9ox_|Bicb$E0S_I({rA)fgyc0=vU9j`{aIiK-8NIlFW_CwFZeiGFe zv-36HBcqUKn|Sr0n%Ff}MAVPTTZVxi^Zl@n#cq-D>i0DT4rA1Vebk@(0l&7sG3bgt zf=9)(02t~^YbB5Ii(y9aR-8VO`b{cvQaDTk(TcoJK>M;D#TkY**2oeDV+~NWp>yNu zoN5@i85yvTEq5LtRM60EV^3iMy=I#pmtt3i_G+1@Njk}va%A}jx_bL! z_7~BiAj1^O2r~RktFL@-k?Lr(e^LiyRqyYd8A~Mc7z~1`CC-?8aef9PaKl^m; z!4ofF`YW$G=Z_@kXC1;oMH-n-q-l^s)ds_>O?)g(wwX$EYi0P?Zt$~+5tZnZ$BTXp@$%JF4xQ6i9 z$@DjWJ~uZL)yw$#r%goq&bKDEH=FnG)?azPaCnJ(e%+Fc2(>m`f+9s=W~VLNVa7BV zXDIB**P4ik0JzqSh#3uzm2eYorLh)9f$JntfQm>*hD)go5Rx`bU?G(~V!2>cZK7DL z2>XxUuDyL}C= zna=xR1d*|AK@mktbHNG8kP!y0L=iZKL1;7p0TWCJ9yY4YQe|xFgqs=H+8_V|n$Wa# zv{9OK4w5ySKBkd!PS|X2efnu_<%*mevogu(`U6w1@)Jv#OnbL(+A~LtTL@M@wPp*t zp`&`}UU+3SXhO?z7!o4_5S&@az$k49q!0`_8kEcdqwik&VEyXl z(&fvbLR!pW3dv5T&z?vn)0N$g)a;a|yrz3<7{g zO-gc!M9{2z4>KESx@PC!O(Q zOXOySBaCjYU%9gWvk&T5zHt2J^n9c)d zre4ukKi9YKL}yQk7r!D@7;dg=nc;3))XEWoPG-g92cROFn?=F!_H9$%p{3*O&{5_! z;nF9{Z^8>NS=lVzzNwa%&D1zwIE;Wg^vJSV=tI+^L<)*y$dQcZr4nv!N5wI86NpHf zLA6e{q$B6W#1z|Dqk0pkr!e8dZW+A*W+&O>O;ideCc#NEwPp6Uf^?D2opviF@#)76 z3dM!j^2UQFcT1<{PW{F2{Y^BA3~`1Wk+t@rb(B|Jo%Q=wp2;{0&#aSs)`dP?*e$b< z|8x_N5@!&r_5Io-;efrdUyeSLHVtg5IRH^0^&hd_k39mKx3_gXdx&o^*{3A~w#faw z4_xn_aUWgxAwE6NKYQr!tUp!!FT0)OSwb8-KNV8$?+nC!s`*USX(Rc8=TE6fZ^u7V ztw&f2{%m1?AU}--#1QX3@rYw!=u(n{!&7kS=nmQ+F4TID%>b*3yG@|gkpt3nsO<;` zXg9OIU#UaXdgN~ps$sVFmInYZ#;5nI5i<)7FmD3t8az5ii;fl=Xq}$H-7EW$jaw}n zRg5=xQVd!Pddw|@UDjO-dZzJk4^qdfGF02OWq$hT8B~;`7mtIo!S(^K{r>45PmD=4 z%&;{2P+dHd9QBp}0RR9=L_t(ePeHL9q1^z~KOlOH0r3yLnNa)h2vysDWK8Sa3vdRE z!{+9tFK+&$d-s0l{@q>Q+-pLkX@WX5BEGQ| zM#}81;pf-o2n3`eF6jZTh8eB(nuYq2gRB21;qckt0UFl8g>7<}xV}1RfA@ z0fI5$qP4h^AqI>gQ;`vpAu=5q62`I|(%A4q%jMv5uj&(#BU7JzytDSed;J?njTWE0 zy^$-Xj+_)%zu2uc118Mzwkagd;86_WZyQla}NReLrB9VaBqoao0|0Z*^z=K9hxetLne|pRNR!0|D-=uFs{U z;JCB0ytRspUwaACQ&9>%=}sPd#h#dGMl}<%+}M&rL8KS}5w_lY1prZ~5jg>ih(JRa zDrsAhB2Wf6MNyE*%qGX@(aPvZ5s|RC-|)G`bQm$ljey7)<5)Th_8zVJJGZO1E<0!D zK{(!}o9fbIOgZ+6MeoK{V0`R_7i$l0DbsM}q*~hqH!=R=H;RtjUb(MITaEM#*T5O) z+>#QM=c_OhAd+@E(xI*dcN1ENUH8s-zT? zgjy>i!vF)HJziESqOl_1*fCF5%=8pLejFXiuHP}6n{f7=Jb9LtcEi#xPL9c?Ltr~9 zQlK>m1IiF%;J9c>3TwDqV%M*0WoUfTBBDm!D2d#HsaeeDjpyT&Ws-slIrJMQY6{ne zux?f#gPnlcX$tmKc?YruK0nJS6d(N54+3^{Dv@#RYB`!p9sRfd*55z8^g&X6IinvZ3aLWv8#9rHW|Av;X^6#Dd&G&8O+Sz#0mao?>(rUA~&#Kdm@rG?7pTSL2@rn$(3p&7~ z)2e+N(XoB4bN4B>_jJUwqPAcN?H$%JEOBsXx6J{^xcdz1@!elTdB{-4a&T|PpSSU2 zw;y}*>CLbQrcxVw3>_^USTX<+2PegF^s>)$dtI2LP^B|Riz zq%Gws)OPsKear#7&$><1JH2}%j~Z(eQhV6aIKwjvCI@@{SiX=CcB zt#&JoG;6`oIWSs`LG>|O{{7k4peC6zg^vhqJcaygABTEo*F9@hn)7W|) z9D1AwLOw}Y6H*vWNF)S9 z1BMtfbNpD|avU-dM?}F5A(xCHnAUYB92nvLo(o_`6CgOk24nkv04N#b&4yx(xo+yp zrTS;@l_v{%(CnRew(j5b&tFJ4ys*62OyuQjuNS`k)$#3Z|MR=$;*@yf>xGG#$Y@%A zWWE1U{rIuucYdz0yjI)T_Fs89Gda$G@@DDojmEdXkxpe<6p}W?IY)vpRGgD#rLNsH zZ@*jl&bKEg#_gKtF~)^7ks`qpwqtMZZ5jiPOp;+_BoS~SKx-fpD73co;|tkL?)n!W z{qUb%nmK;-^E-ZN$GB6DTfm(Mk0}VzgcC=`>rG+LFG6~3XQy=JwU-i^qka&ffK+ah z$)pL5V2p7hV*pV|Zj|B3kO4!c$q)f&Kt>|~APZCkjO7oVcHEo>jvTlF14Nt=f#f_? z|Out z$k)Dc4JSo`=|`Rbi;eKY0AaVI&I&)X?TOsL7j(y-vx{l^PO>%aV~d~H+h?BVn0 zEL(2WC=~ha zn{@w?TAb%6&ax09-|$RMM4=(3f)jJUgBo8Axd*_ z7s~MK(e^bfVz=lP5gG{@o>ttSDPYg0f9Ra)9k>#zhinWnQ63=A$e-d38?XD*foVs8 zURDEbs?#x;#!b(0BW&l&p`mg1(_#!ZwE0huZ0&`$N47yX8n!Vvj$EvJ2=Ks;vZ3gr zuesWBx-2C|+*-}isoIDzfSLP@n}hpw`q6*4{2t@!0UbJY?@!mhPd(yxSxtPO{nOxL zJm1)mjbql{5O28t?>)b@hgmHD&fkIR^tfmS?-}m?@+IDmh<&FUI#VFFJ+C8L>$_-u zHbcqA2#h#f<@FN!q57*Qw|G+@z@ZNy8~r1?H$xcOM}L|ybWjeB2mQn6z)}Y~W$3W& z<2KOKQ3G2K|NkBKxlP9=^h_2ZfSzg7*+1E%1V@$E{W$FQm8Z2ye;@Q&)U+`O#E>-_ zm7jg^gMavc`@8w9|5yIz;$*>V`jML^-!fsKgOD+XQXn7#86r}lb{t$-v}fleM8Zky ze1^|Vh~-E8`X&Fv_l&Qrrxufc?Ozz5pTZk=N|9EHlnk}uj2mT))?Dyp28|B2Qd}UB zAp^h}Fb3KX5$BvDA|wE&H337(&=JWy_k;C~+R|ai&dBm!!;x0N*(*Iv>5e zcI$F!el{z4h)f?knK*qe^^4ydw@Cc>y-i{3Z-0CI&>}`&P;a`Qf8jF|T|AvB?N)Ez zsn5>YZ+s=Sw%mB<-D)-^Q)x?UjRuS+5DW++rEQz3fPe9Mb@fS@5NQCd71#;eXzf=$ zCn@T+au76J+ZLQh0U$%kt-w=`4X$kqw8@%GW>0SKHUG!|>1Q{td8Z_MSkmrHk#Q$E z<%Ex#n-5p!PR<>A^~{ZHTV5o`CJWvM<`))}aRN_qLLpo(EfYnI0c&+D5oyyJm&O=j zi6~IOfFYQDg`Ox50ohz`1QA&PX=OyXD6ZQHRJ3xRy9FseKV(>gi6>pD7F3R2e`JH`_{LFmeJ0R z5LRvgdq9N0`fy?Vs09TJUE8)m866oEh@2Tsppi>NMMjxKBGGJ=wx4_!ZmwFqu<-mF z*@frR6VqfYhL+%DB{&eNYN@ePGLmG*E#JGM>U*cY`R&Z%<6F0`uRpq3esEtzXdj-~ zxOdHjzO^`8ICCPIo8c+9vbN^$R8uqKV<%_5iVC*3{Cd4oE$?2rxp()rUfFSkosstR zSiX?9nNT4FGcyS*ZEoCJO=U{I_~*C^;p)xk$da9(iu_PT9)$>&&FnE`CJKFRC9U;! zQz_}g$3!wMs^zF&hn*dhP4lHWYiBF80MEW`PfoJ6b#whjm~`R9S!7n^HL2<0-j4SD zD3OBP1ZP|!V5C4tWJ_d7fd}hrw6|KB6|)VJ)r8InI1Fc60NQpP)daO_&&e;NKX`X^3Q$!FNaZx z`v?(R^ro%H+Da8WceKWhYrU_h>>`)}{WyB>P|ps6KAqaltIKMJFK=-j+=h8Q`HYsQ zPqvO@s%!U*Wz$_KhsqF7@a0199+H9l5c*qtbVhOhG{ikJxa(zbu_pu{TH#px^#x7+x0k)-hh4 z_y}t|LZ9MVj8BB8ntl5~WW0TbCGEx4)P;&qDX4pcUyKXGzVhh4SF%U0zDf=mfd@7A zzLV|gE{DP176+jmW+rZrRpVW_;l~CzWj-I=cZX+2Bm_+Jp7w~bNuvibLp~w>$X2PhpAi( zGLn#z1Vo|YU>N68aBVa)5Ug$WL=p@UQ8D6-0WxDWqRFK5%gfLABO7>*xZ79bUJ#l8QochTrzjzc@;H-^173s0L&F;@?+yC987w( zhBbFG^EIn@{9;l#VHkiShKN!a(#Svv24uoW8DO^SYK_Tc!cNlNkFTzNa+NmfCJFq+ zIL{}ejb?gkethyU6DiP4GJ(VeHwZ>^BV4QL*Y-*)3`}9_h-2p%aAW`kN=L$R8PV>I z&ngeDrWO~|GfS27hVkmz!$;;9&nLvBrIL=YOr#7U5ilTQ2pN}b-~8()+@MikzV>$W z{_Wz-f^E-F9DgBIoK0ks^-7RT@f1PWD6f3>$=2tWcJDvRo;Wgf;bi^xEwx=Q;o8d0 zoAu3IfG9bWw-ULkSBC_o7Y|{vz*DUD_}=C_YmLX7j9c=;slDyTrN>+0)?Rga-85=Y z4=u(L+05AZSlV^7DT`^($j0oFNF>zi@;31D&;J72j(GFqV6rHd79&mC^U<=o3QZJh zQp!zm9kJClU8?HEL)Pq++}_Z;dj=T-vAOv~A|w2baAtvzPe9!>ckYHN(npU~YB>CSh$2Z+>BBr@?FB;|Gw-!}u7#eN8`jNEa{iX23uG%+#7}X*N;aC_TC5|E<6A zSAYF`eL~qQKh+3xZI1-K$Y-BMwHNvQ-v*nD zh=%*MhJ~RU`-fGwr+G#+NEZ!v95?Z3UF|?yxUdKTI+d-eu-VWDSou}Gf zpUpViYV{6n95O^Z_1TxYwoE`{=L#Ak2Q(P>)Fa^2E+NbhhLS@l%aDXb{T; zVuQJx=ZJaQ^~3@|EJ6%z#|k6@g8kPc4WkY{Z4j?c_nguYsM+yM^&O@dGW%%%EL#r_ zA3{EH6n_`{l^XzjFoIY0_xCV%H8RALwr5JkF3~ zGtU?fR0Id5>vO3S0Fc&(h)5F`Ojy?D_R8;m|F;U$V}(4fK3-*t7-LA2(FmL~21*%3>TR#-L#^TumS6O&_!3@?|t3M4}-m61l1RuMz8Z6>7fJOz>)&u1v|ne=!zhb-3&#~!cq z4?cVUxBl1nkDov1WHOI$-)(O0$^5iEJLLy{qvlT?n=wvmt(I8)%1e%$R(>cF6e$qM z8Grz0098nc$fYn^8D)@&F{XXxx(QMU5i&q+$SAOdYoP>#q|tyO&a^VfmG!i&df~t z-c2BunK{YXc)l=^cJj?~L)c>W#h;sFkj~~X)EF255*9avI#S3u6I?583>g5U0gZ6% z#9ry%+83XwogEA`j3u4p^Ttz5$>Pc97|R+@+1v#UjB(CLE5!tPjY_HXF!F=Bxr<|k z`9>HS4V(!bDI(@L&fd+dD?k2yA#~y5MNO)F?`9%BF*$cOFJ^^Fkw(r?D*z$^phMDR zY>P8wpbQeXg}v-$Cb=5E8=DMfyxxu+W2dt3KzKX~_@aCy!6 zQ4+&aSgYQ+TVL7R6$%}h%;s3iwNq|wuS7tZiM(K}bo+k!vx?fP$w-@>z)q)j-~PxC z{ixAEgBV~UVcCUZE|*LvQ<8Y9C~d*&dr=}ynLID=HMX})U;i$fU&0@~9Ymp6It((Q zn?8^N4G{WZ*~k>D@A8cu?HM>U&ks+_jSX?>axgoKQ?p`s9ZT!{$^E8aW^$Ydez>tl z&8C^3;nTAaMG6chGOSQwOG~UU!Nw;zf%bd?VwT0pXyY5yyjEqEiq7QN)GQhuR!i*R zee>wPUOI_JL9>aEZ^7mh8k?X-m3BN{Dyf$)@XZq2-HVPdKyE^OaZ594=I5=g4R+^p zGoQ+xJp5vXEgv4A{M&!!-$}U1C{!F705Ha4Cchq#(q$9_CrCT22Rmy~3?RlG;5cjv zdzPgnwtJ-gQiuK+ePVveFjTUklI-J!r>t3hO>}VHox<@c?fgueDGpwpzwCC5p4>X@ zX4Dcn2t|hAsRJNLEE=|Nq8b)`uqg&j%>BamCX78FN%`X0wik6AHB?&hdZio^?SQiW z?4jE=eJ0|4aYncOmo!qxf7>@?43CH1Ox|n z0YJ12Hr*YW?K1XR`>2WVH1F6`Wa#*L;?KJ7^Zq>J73= zPkoefpB4_hY_zkDct~wJnGYPCY>Nr;aeIKjeyAGlla>gKFstvue5gNmD1zF6qTtOx+MhYtR zATuuR-?kq-2!8wbb}N-Yu*CDvEjXg;gekyzWJ&n}nd7E-6rILZVO!)yVM9b%Rv zKDbhE)ZvxyCKY&Lq?oi3Q7KJ`j+bX+HlLSxWP zSPZp}m_h|obEdfoQt7eDsngTh@sF;o{oaqS-(A14RrQJsNArgkuKoDE^7cx8dX~@6 zJ4^F=chAnH-H8leoXJd{a3`jj=SQHpL^1@xEXe?=Wtm0Rnv%#6$dDl|rES}e2BXM? ze#kgax%r87-Vkk6O3lDyk`ZWR0E7|g)_a0hKYshp@BicC*IzH3o7uhlf!f-z<`&Vw z+W+@|5uC<;_17p@;LBGXTY4dirP;~XUPaGWrM=w5QgQYurv!%F1WEvrAt7C9+ghQC zBF=#$2TcY*SOUoyqfkg`0ifZCK(M#*z zs;jHs=99|S7D!#$D(gla{HT~OhJF~7>OuI}gpreSWmX1(5tc-kH_CMeke*1^*S1Tg zN;B}RoZ~vuvMd#H+v4@Q$GCB_nPfVNOgOeJ0vMZ0S_Z&ZQkamM*+aTGBll|2X0`g< zOK|EOT)L`vclpa_t^9=VMH)Ct3;nub47g;K5_@o4DQ-@k=Z9v*#wz>q&jKmg!pk;y zOli-oJg!McU$`jj1O}0cG)+#jYzBxlB5(^0Py!xHr{FT3xBv#1IOia%EVPpx>)?Quwc7VC8rHJDj%n!yT-9->_ zkP__s>Yuuvv~6KsCEWREc=7v7b!_2yX8O`sF2vc}NOp0+dNDLIcCsCfB0J1*s0*cI z;qH6hCsLeVjuN|zn%XPm;F*n~3HLvA7Sk9&8VWGFK(jaVQA=uPvF;uO>P2p&(mo4B z87|>L9Y=j%hR~x}pSJNv*R?nx!80@J5x})A$$+~i4#MLXX<)n!`>Ql`u=Qr!rZMdq z-AXn*X5a8>$Hlh(IH0mmvv&-WFy0w4Q$e4*roVRB?^bK=(Ley&zZH!Qatzq7bT1b_ zsF)6B?V65;Rv~tYN3Tq+4?WpZw}!0hyoFj5UEDtkC>|JbEno;8t+uQ*UwJothE#ARq(C0U2qnrL_G9yK}ec`Eq`4Qd3y->VXGN zn)B96JbfTUW}(GoGYAPasE|}RR+vc_-jMd08kax3eDC-FWQAGT$rCfv^V4@fxx9Ac z*3ye7WNy4FGwG=%HkQ{L>y)&!3rCW(bJSEw#288@lnTihCIuOThH=g`DWi!YGGGcw z6Bj~gZ4?6?0x}B>xNb6KCu)8@QVP%@uqcdd$5MgPS~&@~eCLam4}Sn*UFOn_t$WQ& z9~d$s=k9*|0ZV00{*^yp_wDuTpH7}z2%c=$D{I9UUYtC9YW4CZ$4*Vo9=9L`8bAXw z%@9-+X&^2b8V1UMWJ2&TG>X7-t@_rM*YvaFvm7nUVj9EcTUWR5ecsr)fuW~Kv#El8 zav|I;L0#oeoM0lU>YmUXkrNp(%n(`3GEqRj%DQtC`6FP2iozCaQlT%Bj&79JK6#`UtIERn>QB>X9$j>e1#*cI3qLEsGEl?9883NQAm_Rf@L`cXTTWEFn;}3Q}yKa-z zTh-mqukPRt9fV=E%uLvNY&OXTlIBi$*oVwN-fhh-{mkIBVG{->U%^%uUh!0!_{El^s*wQZGJdH$!;x zFr1y>>4N;=Pa5fzb@FK9&aLL-8{v0f`{v*OKm8|%XHF`ufG7%;j~R`$zj`;Jk(&=Mko7g zRCmdx?pn2Pb?!GQ#@DPCoahs^FJ@nZ;6PTrQc;JE3|)+d`Xc%=9BjS5QsS(Mdf&F! zJ%=+uKL%-1hXUcie)9g$I1(ETA#ZKlWsmSUBuSrrxvx78XzET2AIxpqpZk&42>1$v zbQ9VwJPcU3%IFH*E_G9H;~WKxZv88I1&%l3@M^?GANI5d z?2r8ESwb(E?k|pD|6K6?cxdTA>W;Ry?V&SU;*yW#HbaPf-|xNNEsBrtfjlWTVupLb z1~ubAkpwWzhd)H-{T#kjD-RC?Sq$mCk=~C3UMbVcroH8NXr$rfb5NjX*a$H+^SE}1 z=dX=!5gSCbZM#-2zxA^p|2zMezrVM+cIM3ZFa3)PUwPdIY*gxH75K=2NzhscLC6re z5SBC&k#pPkK}X=%RJ{qCJE20{S){k``-SUq|A z?8b(8|0Dm!=ab1app^B7x_`euF_zAxQwSaa3c=e(V*&y&;Oi)YaB|X4=S8GLP2dIQ z?gyKX?u5%vqEd-KV^D>OV)pcfsh|Je=|ca8isbri~7f3r9FfXzo-kQOp%yE6o4$THSvC-t~t&Dw9e( zQ)7!KryqTE`O&9W#unyN`SCjHiPQ7B*_kNFjKA=e!bBc2dDn59wTMe@S&}qy6o6!u zMnK6K7lIT48LbU+E+pRoW%fE7Q_Wai% zifkv99$Uy1X1z*eOJS#F$ge%V z`thU7Z%Q6;tqeE(Ofhl#2opNk-A-i}EGMHiIJS+R(vc!Sn{&<(iE-vmOr5mt6d9q2 zkV({lM%xKHP~qBVAMJkf5tlOk+^NLUOl@~3m7bVbIAbNobq*{LTl^G$LgIQDe6f20=P)gH{GjB9|1xR-V>m6f=!52+)Y>q?k{M zf<>hebi_jp_k!kTouwqtN|ADG5~|XWQ?8h>n~!P{(=uy0^BLw?$)aOPmo>R#$wJn~ zs^{(20RrL5h&PKf2D#o?ZH`SwufKshP}i>O(@V~&bIP#5gp_bGQfLfG2dZUUer&2` zT3BH7^RTf&@4TmiruFTgOD--&J0*4JwqbyCi)?NQENN5(Trh~p?7#7mh+y9#Xvl<0 z0SKE3E_S#1t(&3oX<6L*?MWEBa=H_>1M5ec>f3QT5k~TanEZn> zkE+P1RD<$7)qXmP-VbfzzDy7BRCMNJAN?3v{Soh7?M~`v9#bQoY0r=}_V=LU(0_^% z{;cz&cW}n+DRCCm6RpGO0Z8Bwt>kylSefp(S?g8WV0IxvDQq>l1zad-cs2ibc5o_B+_PJ0?vQCn2bz==Oq=kE_ z@1RJ7Cx~JTOxG$l^eiTf82as{rV|0_H6qBaE z_M^fOg&o(bJ=wP_Wegc(5Wsfq2e+^Pzy8br_aDFY!&4_SU;9_S{rp!f1IwP?t5>Up z#&!gNQGSF-jt!1u194&TP-CM(_aFGH%hA?`@Q4B=YvW`*U|4SY*_=Fntl%cd50uu1ONPY4 zP$3{kRA9Vj?fjXMwrvo2L`0 zy<0cm-r8=uN$#dZ7yw0}0wp9(&$jNXT@gr4#_rdcCI71_%j}0oYttDy4e4JXTl`$ipy1 zNs$gJ%}^_{9b5aP!$?{(2o-6tq~5&t@%FWkaeOlWm9NxRmm4>3WKN!+ef?{Gr3#42 z;`r9%jr{CfHfKNl=yMga$)o2J*~#sPck|xd?}U8F%&DeFWr0VcNwp^XAd`5>SQ_j=buX+p4|N6QnE@QtTn7w8&9Vu{(mL=x9aIWqb`;kApk7Eb0OO|Bh1YO? z5w2Y}D#G~%WMpa^j3FdrW`e!yuAy1$B2jqOhhD5DQGQVe$#LPTwoAFq(NFN^6{<90Sf+Z+19BeHCE z{HS1zN+n<%XJ>gfXBuVAU1A&?n^7)pZEvy%kHSJhrc$iDr}wt0nBuO5_pdfyx|q(S z>HVM9xSIak|I*(%fAZ^1zacG~j6q=W^|(jL_3O;m$(Hu%mVGzJ{+XHm0RcT^T#SK}`9#nM@CYp>Ex}c&2j^+CWjg=%+XA z1M$%q`T+7X3YEq&#=%hXVAe6}VV@JD57i7UvCAcZp!W)9>}(@!!=2WX{S*Ij+7kzk z(Dn|sAXt03?0#5 zJ1_9*8JT^vxyNCBKowdI3$VYEwEl06&5^b443xOm8yGf2s732v6RXOIdD3?SOsCO? zh670BVCDd1v@t}+7(}#fYh&g9fAsJFJAd?p_rCMXul=9@jWg1D;^FG{+A3#(WiiHB z;QO}260YP@YDHlnOM7~AJ6eAdlxjg~k2vRJd2#MgBA-RaB_ho&t`s#Ic>88_<9cIa znq|kE`3ah*g!16g9?bVHHt)a4GY0Kh7 z1{n`k7zW0+g=GtEc<6<>w3E*WWQsG8n0@lF9)>|KpITXMhIRkNi!-?iSt@HGB?2dd zz!?`VH`Bt+7js5MUI0NRW81D3hCvvHoEgT#W>Yb4IGTiI*}$vihQtXc_hMa4y!F$M ze)oU=qiT62Uvx)D+^!ws)`zoho9%pTwM6-FX*V&ESECH3Dr=^bS{-h`i~!wSIJJzIN1pz zB5uGGUWa+bgSy+}PByb8dEg<>qG( zKKuiqN^)T?s5Al-<-YQ2{`e^aWjm3j9CK1*uI*UDrAPw_TQUZSz!_%@KpTT7Tho9O z0V!^AA?4o2!_7-?M(Yo)qtn@oX9Y^8oQcCnZFdYJ$qWd|P#F+XT9R8r2N5StjJXh& z?%a9u!Fvxs{X8j&B9$6THX+h836@I;WBl7&jlC+HbW)2`s;+A5C2c9EnB+xUdA{Qa zF)K7zYQw8-?FAK&E3k`c9r^a*ls#^HJ5|5gunr}isYI~ZFhth4n>?HkgtBrD)pfY% zPmUM!Dbw7l*DDpriMYig@Wy8K_?(H9Sv-k{j+0M72|RgPC422mh|wU7Aswepbl zf}r0LL_{6CTU#&3^<(>XPK*Jdj)J5ShNK>w+y4FjqqK3K?!{g(GUP-%?!WE^+UsU~ z^%8Mh;36K+>ZzRP8S@+rqudug%mI7q72kUT z05I^D1&F~v1E#;JDfTzMDEA%O84B*9=RFX8cITlrI=D54BE5kz06q44fX*Zs)q0&K z=tS)SY@KSx=32Lc(1S?hp%3I7FsKe5*ez{eq|$7^B(YD$`hoEffkuVC&2UeRzn}B48w=t; z$KyObjAnSlqYn(_XO|pCRI{Hyw@3W5RN+fmVq&RcT|6>U|Li(A+u_naOXGAD+2~&D zXNLPm#eKy(d~s~^%>O+?YdUEnqcuZhNY_65^ndst|I4yp{=fe>|H1K7Y1_W^;K9vM z)vcryfB-6ykZ3HlM6If~ci8F^Z*$8pl@u9DC2(Oe`O*v4SkWdE5NQoYh0v@kZop`5 zLIwsbR|fT9yIx(Ka?hR2fAntk5B_j1oe+QhUp^s4?arlTbt0RcvUFe)2?P^GI+6}b zSNLU3M%lKd6x-blG^f&Tc;!<4qxYKGqAZNd(i$=+8E6q{71Wf{kWRWg+ohkp{jo@7 z((VZvE{5fMdQuu!G7}i1!$2towk0_ezOQwNwj)WaC9*_O%FC`YI9>4W{J2!p!=l@(- zYi!>5B0WBx9GmfcZ6{n7L1V9}nowMvMsOOHKqhnCvHWt)awG*R44Q&LB4MKjt+li* z1`vgc3(h$wjSP9{`>3EewvfrsS1NmVKmDWf*3IncS!AqveKm9B`25A!qGn_Qw)FhZ z`_;PTjI+pL+|ot~1Sy!-ganA3h&W@2=!X%v5eR}tU?=QGY2)!b-{1M*T_LlDi!bD7 z7W}5k=NF6Piwz$lU!x%gXj{?}TsQ0fp2xMwq|&D9Rn~6Y{o@~OT)Bpk5n~yal#zpw zaP(9bT^{UInqEzV&K{YPv*Ua3-Dn2Q>|!x>IK8)5He99WQX%s~-xvtU24~7nr(G5x zHB53^sxYjsm5c_rkU@pDM|%|L%&B~2l&Kq8H{QdFsDWj>6i`sv<+_@mOYW7cPR3t4 zAuI{In?a^1yuj3(W@bX<^9(pe0qT&L1x%ygguRks4j!K7*}M(|tqAP|6eq!vW_w%R zeQ4H}0Re26R2XE7j+5feimx>ZixZJn+GtXmI3p*CfDrhGb4c2_y9f6lgxMrJbp`>0 zy&bAGX?BjEH~~gS+dH~aqVaKL7B;H{2ugtoA(3PcpO{KXT{!L3n?booM_j(SY$C%# zPaQd#y#9Ih?sfR3H@^25zWc9AZX2`zt_j9iiyaJkUqGME>}t9A4?UW6l+xY*?O^2@ zyTN}DraUEayok62UmEs5>)QHMKS@{Yr=8^N%lxT1_dOYEW_`xuo+b2qW@2c2=!U}9 zZ++7C-_zCJJ>HY5Hy}PG|9IxlT$?{-=r`oIk@=q`%f9afJv&qS`+8WH4vv-sdcQC7 z!P56f9y%-s3&Pkzi7y|%6lU&A*tN3{o&KY0O9wXuG2E|<=;2b(MVfJ!#=#Dd9$EY5 z(txET9;fSm8P%$>iy*oW04P3#x*i6I6TwcQ@rwk8Dw@7Zb$H>RejD^Bv{QBJurEp1 zfEMe9PDx!iPOmfJskWK^HUxs+_rpM}{kugBs;ypk;b7*S4EN6w#lk^C#tMoL-1q<( z3|(vCFfZBQ8q;T|iC1I<;T+P`?I%P;T5HCDbMvD=`oVwr@BIUj*8l1M^WQyjHhb;T z|IqZWTWR89!f55D5#|q z2$~@iz>pz289MVEo;sTZlc+Y~`p3=NS4$5chKw-O{Ks#t@MiVwOF6WiYAG0-P8c#< zn@vqx2o$KB)j-(1R;qiUbNhzBy4tK%qn%B&vq`%Z^Y}@Wb}Yv+UZavLCi2DP&Q`+` zVtak_4}bUfgr&dv`q$5&`Gsr-_L|qCK-p=lR`D&m`ae;K!xPYHli_QRUAbPMBAZbN9N~UaoYj^$TWhPzMatJ}#79tr^(vplb07C#uX#~avfB^$W zS~e+T!lnSum@rx+l2)2pcabp&b;K>kxCpgQq@8ec{lWkC+gmq2nSA{f_t^2x%RdoP zEPVABj8Qu`-_2$UnW@9XE$L_}1p+zgT;as|?BX$$!gYi(er5e(v$Q>aG9{Or8!8Yyhr!ksj1nQzLCsk zn^cymL%CehjA^YnV+pN{l#=n*!7xJHf6+2yxPP)pppFzX&C>1bn_s+Nz49>!EC2dS zmUK-NR<*?B1^c{7asy{2>p zD@vC`DkCd*Dt3{BG|iHyJ(W6~Nlm)-%^LVBHIucc?8sACqvpLjTMu2vp{}a+3b*Ui za}wPkErTORS=Pb(_k(1bAt~Q86H^XGe0P_^fC^Jw3L*qQ#GP#lBAA#Exguy~LPcm} z!evNicQ<_U2v+VH$Hl}rW-?}O(aIEM6lfrBI}#XqO{F6s0?vWU{R1{kfMfH(XAhSR zLpXex*{=3I@D#W<%pAhP6s@nBon7J*xP_4+Y41B9vT5!&aeGsb=eU!>2RFT$L%d!$ z%a4^M=6Jy*Q;8Ij{M43Vl2 zrFL7W2QTe^ZXF?RkEOv4HA8{lzSm*^n02^EXJB{yu&vLdTw8;9wWr+nl^!&3=`;2r z+P-Z^gZ(~Wj_**HgW+PUiTVf9!6b{i{Wv&6TC4>DMOzo_qvZV&INGB(C|{2yV6@Mq zKc8o&h$Gl1KxZ(uJE7B>gGhQv4!sY0>>Q&f;i#)Ydh+QV>w_nhhVtVtYqseSFo?H9 zOqPR<0mGg`&(=PQk;YL1jDAABews4wNy#1iDvF@QJX-Bh@&g);vWHRU` z8GsHW-}6<_Fo926b3|#|G6=OYWJ#`+Qc>h4Eyos{>$J8Ku5Re7U+D6-N@d~5snps= zbnk9$%;D>s_M->&Tv|Q%dUE|q_~dqtENoUIH^H5RC9G)oNz>Ej$!f5^>{%QVZo*DP zei%8x$EFJm7z#aqG=&knce_TKEly227XAM3e7~|)`)hywH^*nkFMa&K*3{Le->8(0 zlrou2XvIR$2%Er=3AGTyXzShgR#zYG{@SlBjn5?a$~D`y6A7VAq!n=?HGxvv7%rHN zL|$#B8EkmX4PY8Li^4!_(xffvpi)8EmzbZQdZXwZ`r?z%!*b!+xo>UxnQK>m`u1=C zt`6$yR4#IziL<9m6%2T0{>85rrWWtN{R1X*GZ)^_scaM}&Un-a%Uhd<%>1!4ZXyw> zhzU{MT;alUGWj5gBxj+DP?M07$dCch$SoN)_G&w8nc}=529c7IX{`Z>A)p3dX(=7x zT>E5&mDRU?wEpf-MLsuv_W7N=cd9oZF8=DTI1}R=AN-LEJU@3@3n!`vwj-GaB1{$M z68RZBRg64iC&Rtf2c&XU30Z3I))hJuZX*Bo$~whTDP&gJ!^8n+q8>wP21A zsmFIee)!2BqlNC&Oy$mPwOwEQrC&+U9ICBe=OSU}3XzwvEGY!3zzCFr0g=)~f-@pg z5CJl!jERg8sHz?stsC1<-uY?y$|W$S_|;byzxqqkO8T4I%ru(bo-IVuPDsSC7IDt% zTU$G~FE{VpN-GQ=diQT!S-tbHzPC#Z-RUfId4Q(c^z7qPR7@!^@YZ*|wGz*}>7!F7 z^mlGPvd1&IvlD);Uf!-ig4ttkq{6@pQJ`>zk{(ZprmxDSusEGY&KjE)@=b0cZ311n zy~9&h>QK&v0hKXa4Z}x%!m#{IMn@jH)#<|=72n(}EuDmgCHuw=e`nXsAGH&CWkMD< z@b(w__H{Kj%}!e!wFU;&3WNsJNlYZb_YILTKon?BBa5T!$omhezN=21a-J+39pTcHeETQS&bEHx`TWc0PQ3FcpPid} z)`kYKY42Y2M26l zD+&NTJvsu)cQ@6yj>*JPc<=kldmeVOhZrs%xE6be?RD6%Fr@F|yk*F3V1r>0ll-aO z4Bca1Z74YOobZ0!fd=aNHh805pM7BP&`a#6PK++??-k=F-kjt+ln0D5rf@!rI^ z%`+yB`+T0tvW9n3e6Ynd`aTWq&HU-+hiB$`F}v57Yy6>Rs&34|^08m6K_gTA`N1o} zKgTe7L_MuJ+JT4+wJ4266y3Oa_3!<=|6sGS`S1Nlzxnd(a`oQ-)>O-O!UhmVBbUIq z*j{fucu<|6E?hX9EfzwhJrLOR!*W?gN|OO$S$4uPMj4-&;7CRql#*!xX|Yt&VWEBJ zF24EWN~7#$CV8%i&!0~mJL4wu&ZGN{pouGwq7UBNHW9t}V(Rk`>+36OXH`2{tGXK& zXH%AofGU%8ceZJBBgl>OLsO}hXb#9Y2ZSgxkwQ+Ea2&#FrM4GEW$7YHPDUXMxPXMTkWgzUn_bG~ zUYMPGuDr9mxgxXK^I#X={Qe(*^n)Ko;AiKi-9vMQ<4Yb-m;@|+>ziZKhs*aq2Uc5p z{achCi*&>tA%zSBABC7a_2T%6)7$~nR%K^<IG2nQpjO%tq0!nWA)Qn*yL|1+jko`a7LC;0jQ{9~+S;6Y`HivD7lPeK-s(L! ze^QKF0=Ws5WZaRmg;j|QhGYyFqd_nPrj@Zc!$zgK_ApYu32M>C8kN1o)WqDG^To+R z`PRMNk3X-kZzKvcGsn)##F*fA=$TSbjcOax+s(L=H^Ys4k7}jeW~0GVg69%^F{#2Z z3N)r%``Cn4w7olP^(#+Ugo$EGGTghjENsjiFPKbJ->M*jJ&~|7%xm~)k)4(*^ko4Y z+p64aump3aY$Jh`Nl)Zlnb>%+gA$VqS)O6wlmFPG9dL*j(g`<(&RBDDo(faAy4sjn zGDlBZ+k5)ax;}Qy&Sniqw!6b_-&R}8CX;ZY0PkP-iv{Ck848#l7m|aCNGak1EeDXX z&=dFX!`2qdrD1%|NK2M?Xnl2GCm-qREBc`)igB^J&#gpbdv-UnI=L+Zrr2@0TT3#i-->_0ouys# zdFyVbQIO=>#g7BaSgXdlQ|C#aFXc-Ouu-!2u&&~SI*8d(Ch8$b@L5R z(kF1df*5~m614_qcWk#u$^Mbe!Me93=&;oxBDLcW9i4-ttxws;b3VXs)Z?0ryM214 z>G0#YNb#;8Wg+Xa=K=IOO!vEuwWP=X5%MeqX@u3P#|ALe@ks3eL`sD#%c~!L^zJ|Y zC;#N??JK|em%sAji_zZR+X3I*tDCQwk!S>OHUVlL}wT`$+0VW ztH1z|f>0|&vJ=AhLeeOu00t1~q{A&ncOKE7{B*|>_{+bLo;|`>9_U&PA3fGPpKTsK z#GZdS|Kq0i1Dc<4CuW_Eb*~w)Fx0A|ZP%@qY41^eY!YTBlaH1I0QGa541<%WQ;psFjVoKVYLH6E$1Cd`?Nevx)^|4lyZ`DRg?|(O(qH;j z6Mp0F)h9+ibR5~Nct&gC$ZEy&JU^LF)T`nByW0!X?$^IQPOMR{H?4#Xj71SK$qWJ+ zj1(aXV_2j$<27vpv`HqUiIg8G6-md-TqdHob;leD3JP#S>^Hb*@le*ZJ9{nPcaaSKheysVq!elSfp-BF|%*X+|7asyOL7 zX_9Uf7=y6-@TNhQ$&W>vv>_cCVR4R(3~6l;1p_1<5TIpefeS-qlwk}RLqLcE4MJGS zMD@|VmFw5?nQZmuO@F(ZNaWmXX7h`yEMreS_p*QgZu!=g+0!pVaWc{oMIpBx(xCl_ zITipg!l1NQ-Ff0w8u{6i*|D)5ye6EKNM#};EJ+)8E*sa*%p9c<5kVf4NpgP+cHseZ}aAgYDPi5NvO3TXD$gvmrYv!!zu+)^5P-PCs;WMZY-O%CT9+- z=*I0WZ>v;%u4ollb*Ie8@U)dI$jJ9p=sD?xD(R@%C`=?00~Owq+6RlVy35(Po6Y_z(0RpC=H)o@ryZFI;<_h z9^J(+E=OM7y!LV`Q*b`MRIx3}Pf9n7pvbZ@@HHVxoBV(T0UBI=LicW(Oh#nKjq7r+ zA+Fts0GeO_hDaBg?<>C}k{rEPxgy0SPPIm9{Yz$dN2v6fz}Nz9o3C#|V~b{HL}ND+k*JsO!w*8G*l+y$um6o-{!f!u z=I~$qHUKECEGd!5#BGS(jWqlExr<8>x|qDRnDr_Dm^$rMo+GVl1f5b^>sf4_gC1be zr>n7L32y7#jtcH5=zhf=bK0~pX^)A%^|_r7w9WO{{@PhK4zf)5F1~{@w_B(l@ZVTq%fF*Y_joe8n8gB9;@uEDIHh4$=6>)_8e;Dp#DXfeQ^rY49*i#_SX zT`hM_yonCDNT8jvuVp%w?98~qTJ(8f+Cq-3evGBGUj{X>V{PR4+^=r`6zEOW?&1!- zeA>abnAol6>Sh(MN87E0Vqf}wEfEK!ovwH$XYPnP_G^%K@@LAVTkc53+mW%mpRaY_ zTBndvhcpH^J`M`p&A&U7`bKJdw#2OwegF2A4nv02P=+w-$)FSFfH1W0p3;f2A>6S= z#A*Ftp{*4AOWpwW8u0$&!A%q|Y-k0C3J}YE2s`RTGp40Wz>@Ou!~6f*zxH>2{N~5g zhqC|1-}}xRZ@|{dr%G43hp8Xx4x547sE_JaFMz3N#pK~IuSO#kXzx`zCJ!ZmHhPP%4=Uqzy9LbfAvqF*ctly zucbEj{5Rj-R*D@tWY5j=jmORMZYY^ZB;@XPHSq4`r$kWlmv1lMxb?{=mlm>?d+xd4 z@bvvs^-2&f+bQ7%bHYuJRiIBrFL?WC$4uDKs!+2+6p)B4<)7jcotI4bp}fptP7{>+;r} zKm2EVckf42v*nd#JD*EV&Dmo)E8*u~xF|D;mA8IeoH?F4^+F?vF!Eg6=7a_fN(Q7E zAVa9_?wLT1%^puq95RMdbH`=UVy^8<_sJLUFW>(3_{BGpi9|E2)VAQ%oKw3`u z;e+MNKPj)>NY56iTy8#joLf46_&dJ=ez^77+e|@m@j@~`>DMCCmYuZG02u;~oHGQ} zq&XnxA~ISSKP{u?quY;u^3&4wo5sLywQ3l%QYjPq58nJ47d+)A^Qno{Sk{0Dx7Nd2 zSX&Njm71HBVZ9mpwMN-@Wr8@MgKjZtAIqAA^h$MLIx$yp7pJu&{hKS{t+LHsVOie8 z8k8H(l9QNngTRX#5o01bodixm9j9-tQ zd)}R#;5v+=2($qr&>EzL$bb|mMI69(vDsu-uS8+PJoloN&SSj>O^>;*aUH($gq1e* z(ZeVuxG4k%mJLjxR$xg=q&T-&;A_`rwr%f~*y>8;-By(neC6WtfBmoiT}vbyepLz! z8E3!%1hRbykKMJWqt0*yJn15U0fjnB;qI%)gN#;vC&-6s*Mkb_S=vb`IOLA;ict;)AK$tIsHmen2&c!hi!pUnxU#9{k!D zCyufX@JDs%5Wq-e)ybz5r{8iqdReF5o3#$80=Au&FoI;lu$GK>&CuEn9f3VydQ{!1 zi{s;t3m9NEPY=`s(%Q9y7_IN*-7~4N8*gMdXlTVu2JzB|B%onCz&b+o1HEB}k65&) z(V2t7sOq+)6WuQ{UehDZGxtjWDR$W3);Z{zI-o9bO*dSLU`%CWY!!nKzj@= z9UA0@i~(Q_0f0qHYcM)AOduBm0kt-ap^CIt+Hs{o1crgn$N(3j(J-Nh<+2JRU9Uus zRvHiPMV7MdS^H1kYutX&$WJ841pCg{(@XPgehF_r^#9lImomxZx4to+a=fryedC*x zh>7JpRmK@`bW-rm?-l>rUtRd8zq6Xnz;FJA`Q^37-AC1b;kzlzihloxWk0}Q`*V{M zV?MCJ_e5^o2^wmC(S3Md?NsU?U%F)(HnW(2eD~%*{0IN=#aCYV_22lFN#~G|i;=!r zDP8kx_Y%2;;f|d zVa?_8N0XVcN~L`5+BGMYo19ztPAz}@Cr&H;722BhlV^OFWFyJ7hotAT% z@hKf?6``Zg`^tOHOp1Y1 zUtSl_rxHCAW8sP12T(VdzID(oAxTYo_bF zU))&x=x5ts++c*l<$kp)3rTw-7w(v7FJMSUt9rdwt=9ZT6TMLRQ5X`pr7F5!t;uc7 z&K06c)NC}Zw39lP_a%T7&ARVql9^M78<7;Hz`M1nHUmPNXH29Nb9iRRgvf?lQ%C8@rf2rEo72ETvjdKT zy!&5)hTyHInN~;T1|wQ~)YAN=V8GBYG)7#* zwVgI!Vz$N$=^K7udiu7-=_GCUHpMLOeL);BTlUF43>hDBal6l{%{Z~Y-D1fB*;?gWb)Iw?BCQ(&tysTs--WUr0=5gV0+h;aL_#gOM?$i8DlwS_2ti zLI4A!2n+~;h!_T>mF5zpZ8?r(B3NCi-o58(!>y#;TKB>LxIoEaZzJ3-0}ogx1FP$$ z@mcwQ_!sj_i%w8ise-e&9sc0QwI9CMutEOZ>qQWrvecOiV}-2w_`TA`YQ!v-o8&LO zp8l79V|;JV`|w)%+utf&IG6cnKi*!NaW0+~pImKJJ@&nC7GHY7+1x836IQ|!mO6GS zy|9$<8x6;H8lJDDI8}Y>aIGd0q zF3D&jj?xmqkcbIxF_ffjDI}9pM<|$UyJ^nSj1>~e3C@caA5W#HxRrRkdjGAT{p_=k zZ!evU9zEXs!{7Q}?tFH`O{Q!0nidK($?V1F=Dzk-tC$QMVKQ0Fxs~viahyHUK&j3;@w+0wlpW=ax~P*Q_9S z0g#XrV?+duj8PFFaVD6kJbC=+%^&Vw{*(nZUm2OnC8uWHiP@Ux*^`;+(`U;!Zu#Y% zWMwvz^4u(&@3W zc?DdBk(3gV0zV`qH<{ADxBThbmAfB1HVH+|$Ll@~NZ1ds0C`@wtO+6qLPC2W?EcG@;+8Kn`7 zZ3{A`pjq~Uph|*J8{4%N8d-2;Dy1-D<9z(ov}K&tPoA(mvzAh9*4056RO{|oEFu5-s0Ab^8RS?(dn$x;-mDAbnA?1CLCk6C01E8OtHa>%%l+EQiHcopJMAxp@r)Kfh*X?GAw;uXu z&xrY>@bIC&ziiGN5vQNCOS|g*_d}V$Q)gr*8wP;}4pIPdNG8SVI{KcT921sJz7KW+nLwif&{#H?5`l<9lw4M8c;{BrG}-Ji2YL0>{K=pH z>Td>Nz?nc`?YDg+0vj|dwbp^I0&H8-_KnLe?BCU>(6+F3mH#O0+rRpBydphTykSPq zUe?qHhzCoIt>dvOJRyQ2fC4#Xkx9WgX;QUH1(Q+)M*Hft=!j#lj( zkl~rzwy)6+pn}kW!7)Efd;Sf983@?VihH5fexcA0k`WwV8$ zhrKoFYX@UYH=AC7*3&qx%+3CtgB=G>543AX97-b(deR~#F=*ZA5$Urvz<%382g7zg z4XZ1NPKE=pwq2P6%nTz~Yu``3o!Z*8MWYTF^;PDe(4ilLF`r>-jGUHqV7(3!Wj|l& z_{T?t1DbRw&lwyye+q9*m(_H6bm!lZxwRR3ha>l!1Y!w$?^1*o&xQD87#Qq5Vmw9u zFYA4Z1tK!0brTv$DS*_E-+J@!{$Kwy6ZpUOD~H~AH5Hnj(vFA5aNde$7-QNPGztK< zF{qL4YY-L%NSc5M1yg}0MhsM>jOT}L`v1qOQ8f% zKmiSaXn__a(QG!A%?@{F%ywurn>8Eb?EYHYwH>aJw!0joS_T6Fh86``y0R)O zb!J3lW@sHxzpGsBkBIl;J{6f&XpWm@#(Vd=IPTZ|obNlwuRr3%7-M2&*vKTANjO&I z?mc5+KGdNe9y1#Op%z+Qaqr%(7fV_wR4mcORo`~tcfXuYCE*8emOlNt)UjDSccb?9 z&wW=oga*?S`q#ghOsCC%{fG0J6ny?u$*p32Wy5{xNk?(~-i`XHQ>jmVI@xf`Ldukr zT3@UysZO6xDX;Y8g;<>@fAE84?)pp1#o}&#dL|dtYG41uKXV)9wc-N<885%^U&phE4i|@x3swCRmw&x&f+n5Hx#B}%}h;v{!_8kP<6MM7#hir zjf9m@dJ?pf7#o?P!9*S>oRAACH6aXR5CJEYxIt(j;GXB!t4OO%u3(r>;D!|Req>E4 zjW7^I3_^Do=c;bKFm+yIA_9R70D^>&1V9MQ93!k37k=%n#v6Rd1P zb0*C?AyXj_H7GVe1eUuz*yPd`X2L{LyL-M=8apU9ouV-sZU>f&y)|F%ig-4q>cWbt!WhJDaqm{W z<^{j`D@HPjzV%(#qkOC;-NSYsmo+D1j8hfd-{i zB86>cR;xrR4@)I{w7sP~57G$|`g(Um859o=Q(&QL0AYX$V9>v-cTlJ|(sfQP!T--z}{%29xR1P6<{2Rc;kp<64m59`q1&~t<$ zHTQ_)x7YtM2uWL0eRyzJpyQBTqb51g(B6x#q3h^N+c-xSU{C1}EMU7OYu5aD5uT5t zQjb<}ZKJV2v-f}JT}ny`Lb_hBxk|tA*(ZMWSEf!)_&b&BfghSSQW^=a5ddKXwAM-k zmP!MrNJ)e#CYWl_T&e>H3xdE8gaWJ$(}Brxa_Wrb#4y5=2eMj2S3lq%Txs07<5LD> zL&ip#uWtLy#90SVOj?%9mzMe3S|gWZfAh=Er=GF@(_d8w#_S8Hm=t2+fv8sr1$Ar| zKJ$g-%rWDgD|>T`jbHthf!Ue#AOGd*=$LW&x#YX=?;?z!dCE!_#Lk=_Gch1t^TL_a zNy7<{6JEGH{^m~_1`+XGY`5seAnoCWepA zdbMHg7e?aDPGuT7kb)CJrBHwoB7{%|fW2C|xOP7=GHV(! zp@cFOU@aABEfF;+C4#%VSKldKeVc)mJA26*$;Ws1f?BnqxidK&pPqt|q`S2;@XS;3 zq48=}HFmZb!B#HMl2))&5e+X0c{)8nDI&m#on?JwBS9i=ID|IZ6LtQO-$krrFxRSzCR@{_fsFZSYj@;qi1E1E2LO@a&1NO=u zu}Gp2GYdw&UZ!!D7)ls97S=;m(R@eAJ&}sVErxJPPn@t~M!2^w*7y8ppSO<9petAX ztsQykY10oxHBe7pVxt9o@0R@OFGAZOr!U}iK?%?bYfN$Ig9Ic!tqFKFsO*ZBEeN@u znIz+rI6fdP3zv8Gm3Lhb_~cpBj!VuZVHjy7q*hW>rV+*haB%}FH90(vQb|_a#B;ZT z)PPQAaHWPyMV(BbOb*u?Qfe3&Ayyo;)XW5p5W;{Nq6i5I)W8_A-ECN03=4Vdb6+Yn zLT_n3c#k-PZb$26UU(N2bTIiQUnO{f1i->BQK6q%wTcBkVbyuF2 zt?ZwohQ4?7rZupSs_OAuIXd&vC_IYs9`V#3*P{2x))W66foh_TT@;zokp>Q%*+)Lm zYpS#+cE^WkhUmdj2SF|9RZp9=kzh_w-))b9YN% z;9vI?)B51}l;+_9(G$?3l64nr7qRKb*M~1fMASjgO4=&wZ0mr^_ZT33fX<_XbwvED zUyQXwo@g|wO`SDwAJoW*kV+UVa zVvKHXuKv4!^VQehe*M?~_PHmYuy;1@HR^SZwGu)j#Y1iwR7j1q22cnANNrlC#54@F z@B7Tqj2Ti$zagZF49iHyOb}XzvRc!-HCS73xISN96suc$cT*%B^wdRb=A;#J+^G4_ zJs&%BIxgz^?e}Uom;Losg%Et{3$ZW0>U`_R-rS1#hrb&iF37jvs^7V$taz$XY0Msv z%^btk694hftD{5Ci;C)imrlLoQXZFrUH z@w0JF@co6IC!Z=1!~F60m(t1X`bwoztv_{ns#5Yb7ZwqJ^zZ*b%0K(UZ++>^#dC}I z<`R~A;guI1dJ@NFCQpdL??1SHXJNiDl%LI|v=>k+y&xzRcNI}J*PCBh-Pqm?LnYnt z-8bKxzq?4dK}}t+)mc92%oH%iwR;;PkYp-P24aD`v+$#DqXs?s>%Rq-?UyQ4Dm!6? zp%PqTgbBe)fK-waf;3QpLN%|rwYpfozsM-2>6oa??1@uD$In(CEL69*CeOc=96P?ZQ9?nG8ORfa z8(W*60$_1F;jow}t<3MVzo|aNG6H%bs+p1WSI#f;^LJm7S zni+8JEEyc6p~p=vZAMosN^yOBnvPB*5lR(kL=j++TnC;;7#Ks9GJfzt8B9-1fLDV% zx5HvlPM^d`>(xcssKV$F5nPqa${;wK1+7HrOJX9%0JH{$gjNWFW16LPa_gD|j9-4a zfVKJVJ6m=fy?Ei}oO786k|45w;AhLXeSokIK@)0e;x?_=reF`R_IAWIv+dKT$BLq$ zLxXqd9YdXYy5Az`w#Y}P$3eXvwH@Gwc7v<6Zox7X$=_{oJB)st;fuiLHlW$U!Tm8} zN5@-Ib$R^`+l}<-5p1Uu(H{BuI$*;gb882kJz+-AN}$i9j3Do>v5L6x+u+rs$XKMI z=t0lXf~}K@P?Ov0Za&dN{^oRz?qrF+!my8NdraVd5r;?%hrdD6-N$_ja0nth&~gMx zM#Kl`JDDNkQ|?HuH4BgTlsj(eNZG^Tj%4c|iK8cEyT>{5(qFUJZKEAIspMcTH3e#V zYar@yZ|ede+JxmzPSLNoj~y^QqBBQk+n2M?c(yP7uIXXk1VjsE0K^Hr^88xA8LxXxgtB*H-`igYq5g;uy2cVTw2*5B59t8Im z?)=+-^Pm3HfB3`mPtQyZR<^g6+^}p|k}}e$x=L$1MwF5wkd$GA5lXRN*R?8?%5rPH z48V_{8DM}3MV9Rtgz!Lc7Mq(d-CuRLwgc>tgh7Y$#%O`ej^T71hKESCA-C&+tcd5H zj}@|N;X&}tzo>tBE%ZGs0Kfc6`*WX$2RrE7Z+I^~;hdQXiVc`sLBw)&BRGEEc;Peg zsR{hfJKp?~`zxQ#jSN|T@JGv9>yu~WYfDAV`RNO0Jfi{uP8=CFbwg=dtT2F%&6tCO z>7V^{&rZVUzBuv5PdAcDoGBO^t2NtZ8iHD_HaeO}r^)=iy>i9>&;R;A0H)jx#>aCv zZr?q9^2~)NpUe%8>{NEX|NYnAdgJwxsqv?txI8{ImKdx5UG3ytv6i9F|rqrCrB#a1ctZ z1ZbtTNs!VCGfWVr7=U2J5!J}C9mZ&gi$D}2R3junAy68$kP=~yC>Ba;X8Iz;RHTkg zgX5@x6QY423}6C9fxmtK=HA15P%DNzyM}G+AaIxOD-kqAIemQGo;jgXvB38b(adm^ zWRy_DjxlDLOm1!5^eUUFctI%=D-6ZbIq*ekV^K+&$c|9P2p|BUm|#FiAy5)itT9Gd z5sE=-!!k6;^?Nsq+YgALVl;G14aw!u)8`5oE>+fdG!JJlznB_5UfL~U#Z!eGB~ag9 zEv;>v14FsVq`SMa^}(IW`px>r3a_Lh-_^r>LdHJcoOLSThp8#!oV^BnoweYS!{DsAq8tkji+wSz-`29F;wN_n+zGUb^ zCm$spwP)dIo!%>b4ExtDz~dSw)Vs;<0emE?>m}CXiSXC7TkMFZ(C!|6>DJciQGnr=O-v$R3lUe^5B;{^_No z4`@HMqw74rb*1W|f-^XPsyi?~hpL{kmJYgcG z!+N;7STC3K-2LF4YjU%!a(VpHWh-v!_deiX|GKxjs10l)A*PQTzwrfX#$#Xmv)b^0 z_1VuT)8fDQk-U2i*$xU_@5Gt(v2p3T?E60}<`U$&^XB~h@;g^+mo8*d8NIx$&YiX= zCyX%Qp6jO5PNj^N9|Vp?b6Gh%6I)vG79Lcd`@~=&uR_1}`QMsk24%QDG?CugY;0~c zh6WNF%N4CvJ|C-BwaNHbLMulnXL6dT+VUP9iYLE(mQLp@@6LxCJ2;oZ&tHJaG3mOf zq3JYd%cZ^d-t!%D}67%r+QNEARf|-VeT`>vbocg;0n< z6Rj&t50%B@=T2nLoorAua6>ajg^(%)+p#5A1R179WLV@iHy+O`h^L0~cCr9MZautN z*;yN&JWCBnNrgdE#DAqqfh zj09pP!HhJj4Mn(fCXbRveXC-P52l~GMAAv%+TU6ZHg*6bYa&haR_W@7ZiL2c7TdV` zu!Jx*CNo~xXo%3B%Ety%I%Xhj3=EE&EGIZqzKYv)=fP&Mx}6xY3g_aS_?7J%b6EC7 zS_xNrLL(Fuz2r<*g&{Sp#-4z>v|?6ur%q<6X_%FbGWU39HYKR=YGEvEJBI0P`h45R zWx$@uCzB?Uhy()@HZ|1NR;|j*&pvCImVEEsu)GTwp1_HO$P9pE;M*Un>-Xf?Fg-S+ zVrf-rXsN-ZKsc-}(;FXfld02Zuw&7M1umsJ`y?Kl!1w3X?RoXg^VBi%{2W)V9xP~L zsvyt^A!=aHRYGV4fDqocLxHdE+)?$aJ~0Cb3%{yC z0I`(}wFJ#fgb?shQwoMnvB32my|k(p?x{F25D)J^sOJmzKlqK~zxA1aJeYVzNKPu?p(9oG!W_}ieY3^Zy~Elb z0S)_`yl5*e$9bzrw0JbTJ*d>?CFr|z^!^% z3Yw;0x4P2lT}9E_4lC(kH9a@ycWkOWN~C=t-Ih&5D+F{Hao8^y8MJ7&wg-d&4$qQ3 zl)gD3dW_X0Np)AKr|sfn{`S%S2YuMz&MDnBA-ij9>*=GSYJJne*dDlBI+trR0|h{+ zecp6rJF1BzLlE5)qCF(bdO%gpU*9=~Y{E<+ZD=)_m$9Z0K<3Xv-o+az<8rN9#Je)1Ybi z_BV%Xt=sfWv>%Vr^~n4|?e*|K;}GyP+z7 z{<9~3?KcYm%jN1Grar+q2z_Q^f~ZimTobhl*HUS$%X>aHP%`OUoKBbqjya}~9#_)y z`PP>E;RnS=9h|uF^5xi>nRGUje*bFut3ThFyXV#`YIj$M5-8E9&pWTaXg+ZPY^FZA z#=rhwytM~Ble9HeP8$8jZze9B)UUl4REqjnKTC(Q?nY5Qc!2ye!oojy*?HnJi<$J> z->==BZ+!W0WD{xl#y58hIqUqnm;yO4WaV-RCq@+F2vFdwhfDhYeR+J=7#gFPuzPcr zT!KDz(OKPe69snhDa$MS<0FGkCieBOF4_(dDr#kEnAD0Jq2z>%Y(kwnnIE4$ogRp9 zmECvm++W>m5N0?TyS~-%_Zp?`TIhvRD9k7}O@s+1CTOJ%&Bl{-z^)dz(X?%T?gDw{ zguAvH?5xu9obie0)YPaX3>RXU0IAl(xeZ=iSHlZjUIZhKK^p`kDFJIt@&0;NQUL`< z2nGxY1tR29P&0;1Qv)zYF(8aVBP=z=1~P%k(q4J~DxtPvBnZ($OC*sQvozABmHR92 zy&f#BVPXiwCjbhNVKJ7lViU(=$4-J12PsU$R3apb+K$OgDm5pBU`#kCiR>6PZEU1c z>9q8`jXNK5w>EzKk`>EqAu+-T5sdNv{!~mbD3DSCLYg3CnTjI;va)ekR(Gs{Ozrk! zz7{cVWrfD><301Zz&RsCF87CjFU0sCHNu*R5po}h-|q!m_*W=U!yB}2`9Ze~qu*y0W+8pj+HN=g+a zU)KgFg=|8F(zIk|*kM!@i(yr`XD?crEWbO?*EjU>DP!uCPR9XbJa-#z-I8MkIDHW# zsmgVs31qSe0z7wvzWX-M+WMI%h!ZF8eIUza_3SfvVuUQ*g}2@mmo6D+PLi!vy}XEX zY0V6+2{KG1xRx3y1+75@y0{1Pb213v*c2{|N*=(S`>Ijb=g*T=4&A=R*VpvPlQfY= zo~H-`#E|3~fo4pD0sw>&7#LxJcDB*{b-lhK(uu*dlg{G(yOSqR{h$7ue>Ri(EY?}6 z1jb}vr5$S8HvQRhBk2gpJ9Nw*@ROFUL!FwpeLG1HW%~$)eDHtd<&y(^-euyuTWNOW z2-jo>Qa{4*we6E>b*UG^ix%tGTojyj+sA%n?;y3_$B1rWYTxA6(}Q_n96N6S=)(c* z*v}t*KenTAcNcm~+l4hdgzS*^k=UarjOnQPunQ={3A>P3ztoQS59^A6bJVo+`(Hb` zU_VmV%GDiT+8=5ZISshGl0(mO54;zd!}_4(y4iu&^3`w{RB0cyL-f`)9&J}1NisVs zi7EoEH5|~+gSf{2m8b-r$|UL}IdTu=BOMdJY-&-(9y(38I!a-m*&y^-kn^z{kI?HL z>Z3Jk9Rf!m{zpwcDBxq%(^uQJ^T2}$(tb4KuiN7M$KHI@ocpbH7KcdSqgi1G ztNu8##a8Xnw%dM9;g?EB2IsU=QYlR+aU0ct_wW9HU;TqW8K0iY55-?Nm-xi<$y(__ zrM6+m5ysN@J&FJu*4CQ0Q4deq7F4Ri=`*&}dU-j> zrY#}^Gp3U<8iw9ePg!s|UfqL@6<(>yy`54b$)3DC^5n(gGZ!bVtaE36<9@9eJMJV0 zt<8tk;#SFTaKkbnP|627(3#1&%*a$#s%m^k(NQE$Flt`&TX@n3Eq9juUGm3ZD?$*{HWRga> zQ?4#-6F`a}nqr# zC@F*OIxQq(Gbu%+SC*#fAkzSCQj)gptl|^_Vu*Qr_4O+^YUPc>r92veQpKxP1U8VB zqoD{8#r0y9#i>2y1beUEv94G4(mrHIb$ef6&81lj}k$3ct3YP<2 z=A;41Ow2TBpo7e~9dl&0E=q1~`ZSq2k5@N>xdk;o%ubv^jwKi+E6eD{Z80%IX3uD1 z@LEk92}B4IAzpe&-hEpPrN}3q#}upA-xa$h{nE4aiZ8>K1Gks zU^ff{7l?(B2F|tCni3RpjX@_8gkmy(UCqtmy*(`}&lstZSzSOo7xlv~>`RdyQEj_)61t5}yZZT@;phh1*M>`p-3|FF}Zzcl~& zZoXFjzH;_x5}|&#x+{P~Qqle*?PE#R!4QrhX}y`-(QQ2jIgH*t;wf~eZh8J1>~p)* zI?8w-e@^znMQz_AAEM0vBle)Zoda&uOU@q5?cj6&x_cm=kFqHH6PSa~?Y-@Y9Q<`* z)Q;30r8qkE3TgD22EQx|(HgYYnjV>_`4=6q*k)1Pt&cjQu`TA>ukJPnROF%tfF|?q zj&B|nyX?ZyhdDdWXY1oRXqzqvyQ-R{Bb7AAWS{4>G1pe0pj(oTuSXAN&l>cRvE!aa zI#?xiO&hd-J;F8*U+O{;|3M`67^`Rq3)-hjr`>JS7d>1lJv!2?spN%DUwFlT+};UrAj! zj}UVo+<}{O@V%e%oudB2D=F#1Pu{IxypZ~}Urnb{`kTK9VoCh;)5uA|Y8mft<4RG* zQtHx+&e_xE?hgIWf3nFadj6T1#<0B?92+->Mv1}-W1_JFq?MM2$r>S^U#QL9aF5NV z&R#HW8(+W24I5@o$4WI_-0`PoNnzaF+SF^y)npbv`Pn=Q(YtR|Y9%RoF!fCKmCv1c z>BZy8eB%1z)_32&{pK4>o)j`=mt9}jikBreFf|$XU6iEG*@7{gs;}&UAF7xM({UKd zatJwc$y2lB;z^aH!JSR;x$(-=#<`Qe*T75}BPm&`fm>%6#z@`s7Ixx|;`ZGeTX)M- zpL%h6aF_yBey9LzeDDh%2qCQ`Fye;+AYi6RDFdlY!!(83o4dNRvM~M9mr%w8CAaUq zv$K5X%%^|X9-pX{cELn`z1G-TU%U0r=KF6~uPtJZDMHj@q3bG#vYBzhEJ)dcQN=Jd zkiv*Ej2JN)lU!mA6c7-Q3IJhdImEWHqK%!R>++G&lTIwj{Q!YRlwyRGMnC`)tfWR7 z7$b-P0^&D3g#s?!#h?6S@7CPdsSJ>sqDm1&3Qqiq@#Lu?Rc|y_N#7Un#pBNg^2E`uV`N8$- z8@COH?dc38SY>5b31LrWNP^YZDkNjrlSwmY_?~Y%Ceai)iRE)KE2||j48l0|?yau9 zam!twOHNs_lZLPAq014$iGsmm#H)q19hX@~ESHdB5J-uDI)+IasJPRhgrsxHV9WDM zE{hvx)&`Rh%@`Qk3;C`H_hdR5%jDup)&`F|v9zuggBq{QUWBtxlS(mI+k$+S%$&xV zA*~5rzK?Fr$)O=~>=aN(H5!_kV8uvj7eBlW_vZM_G4j+o#0C89Ewx)!FI{G*j>)BE z^6l@76SKzU7qHafhwqC@k(@qdr}Ii6ff!auE2*gg7-Ok`BQRrnCP@ZIB_e8X2d%E@ zxD7MM39(^)QRdV1%t<0Oms}HykpiuNAV3Ilp)m$VD3)~Tp}zVKh>$Um&zyVq*Ps1I z$0tucb^P}LC>NX{ikq8E0HLOlI#6VXQSct_?xv~S&vD>~YO4K+qVBI(5AAi-7`5eS zD%G~F)(0%7SC}FqWAvDxmKE;lwCriuq93B1p;Njp&v9!9$Kg0c2CgRrYzcq3TQ4eP z`xEFH-#9|fo_*|>+BV2F<>~hvQRFP$&dMWTI%;Hfyn+rI%_^QRk2blmOk zGPHxY);63d;c4AP29w1qySDbNgWZ#|Yq~rl5OElw(H+x3 zx7X1AZqGr$q?Mt^(`;?*?-?J9g1R1CmJsS%)X+qIo#bSH+fhsVG@nYeK7FvqwR6!$ zJJ{WYND~L$?t=Yoi|$}5MwtBmPBP=*5~37C9h&aJE;3@%EVckLweOD(FY%Ir{F=LBL10(la-}!A^&k zwuyvg`xWZJj}E2nb{92m%Ok^-QT^L|l+juarR|wCXsr%bEY?T}J~lG;KmL>d;s5^s z_?P$ZT>tO>r^%sX)jKzrnPbT?u$T{ERCm?-2CCHc%xo@~w1IG`LSKf0D+9izrLbJnNWtio`Kf2gr6&x+)oX8v+e_7BWArzEb>QhIjrqCq z!b&hdZ@>RxxVawu>fgxx?O#iN?XT)~27UUK#K|fA!94%PJGIZf7@rtZyQ|*nL$a}> zeP4}DhzqCfc+CETKPlb3QT@tq4NXqq;*MuC%PCk$%SK5WhM|%6T%Qpdl*Rf=xL1|O zW}Q!eCVl3DxwGxAF1h0)MvRiVg=#Vl((z&g{+aV*(=*xG zlLOOJqg?9`7uWydjk(u;yt=dCCdOl7*^?$>Qwev^qZSqzLO;ZVwiu54+}AWj0~Q)h z;;EFjNm!}j6JzwHvr0i&tZD#uV#Yo-tsKg?s@O6>3Q?^hi=cAZpIcFD_3dSx z&tQCBW8s&Jd#fAifeD(;aKTY1nTZKPlJn3P2y2s4qyQ=9Sj=Ca-@5&7W@O4R96ywz zw6uKvoq=Od#E+dUmv=?5>z6jyKDfSj({R6 zL~8VNUqCkVU6&Ec2t^Vw#s(&cOCgmK+@OY1Qh5?#L?|r`P8wDWxI_Z9BE%w6A zh=4{IQ-gxgNQ=hi+WZ@Dg+W>AdgJ8gJERV!8HAZ(f0XO2N3(P#v?>{TC>`JQja z?Z!r(Yhez>{9RZ1k|Y>lL1Lzrh=+CF*e$cPWn}HJ5oo1Q3?oa$&t)J+8x1*l@oaAF zSXcrxLFCeU<-J>|%ISFA%9~yo1iN)JX{5%|uHR5K&l$=k#}cj(N+Lo*lvR8n=~x*g z4J8mG#G6}N``MN9;&N=9B_|!9H+(k?TuCt4HsYSBl>$&GF`fx(oO`7mSWpk_xFvTvUkgM@P>xdr4h26xLadDN0$vf-iIeKg1&|_~ zyU(j7dFnJur=$u{X$xO@Pg0~tPZErzS66n7c{R1NfEOR?dQqR7Bs0g+?ykD>p$Y>1 z;&bHej9S^mfBpkGF#Zc;`AG#P}j5S6WQGE!;4mBa@{hy@nrG{JN0-9Thd;6-|^=gNL?N+?q zx1x?KXd?gKHZNMP9k4_Zc8BrmHj6!xbksxFO%IxsskcEmY$DQ9*L5$!#KPQE8>MMhH{J5Ww2z+G}sTj_s|l{MJ}1x3ya- zFRun$n|s5f{2`2$8S-h5y5!R4!bO|M&lJFqc7J`(|nWPUwf^{zARx zhM)Uv^6&hPqkufv@Lzd3^{JOxDIni@qdGHgUbuibgpB|%EvsS~3S;E?Pdl^I)|>CR zKm1wwiSwy*=PfWO3Q&v^j1VFSYXTai)`n%8Cf10qtv9q1uYPIxxo2aJ=~i7?$Qx&7 zonkqxG{VytGqI#`|4K={(p(1RjY|P*}PlO;f#5;Xk;cm&+(_@>N&qigjLlb9a`uYCAV?YOpT- z=2skhz^?}Y3SkWzE5Lw&Qmhq17))Y9=x;r^0j521;gcj&5Wcs&JV%_^=yOlkM7gpy zUtGGqb^S`|{WJprG?f8uv|W>}6wU8!!uyoy0i&b-WO8B znM>44Yk`nZw75dn9;!-7*am*)Sp#!1cTe70P^JOTKSR!*)?1tSFTW$wCVTohgh*I+ zK_N6b#!^WnmCuF36qM2kv|*qyKpR`ST2ah^WDbGU+=EID0O_d-TqvMGXrUlKKnw%C zKq`eO0R(^n5CN?~X@oIQKwB$t>wR5WMWf^RH^2Oq-~Zx2%OuAF?xX$9?Faw>BiyCs z_PwH!A4_SP_8!{sQF^tdC;J(kX!)ZpMITetywMMOz=7yJxmNUZKPPF2cs)`0BhVJ~ z1&BQwji9-st?50cIw0!X zK;OCD)x;y`a|ez2<VuOxQ4n3VK2leVh{QA*?3H!<#p=iSz zpvlkM;+P#Rw*EhCF2ZV}$5MBm1JgzwBTKFeHn(4lM5`j<^{7Z4@^lPWH-qoE*gbR| z?w@FdEuR7Wbtlw(1pOqBO4v=V_CFl%1n4CD2Y>fVVT`-WMz2IFk4}(->^+)37^r<` z8=?dUfxo!A`mg@=fB5sS{o(Kb-E-Li|NXZ%>(wF;ENofZdwP2*AOvM{wn0@Q$)q1h z5Kf#iN>#|E($$h!S@G`P^4GWI)<#&XtI&r;nof<9k#ThXQha#As26vWIW2tp-5-aq zztK2%A@TQrGr_3(kAGCXa;2V58S$JhZu`$ZAN!lXlSrh@*Waoq9sJZK+a&ZaUaPLJ z`@i>Vxl~Ln-}kqx)AR~jT8LjWvhk)-7|e93{@2pgE+-y)k^==z#m ztZGR~(vqQ%h!M=~tgZi8TZXFpg%@51N_KZ$+d{TuYEWK1WQ80&=E!8ZwzGES?aIUJyYGL9y_znDQWNSJJn(b^n=_NlNAAKy zGBs{~;#@`ef!1K#yK{>T<44CP#;n|^q8I=nKwL^KHP(O$(uxQUlv2=I1qvZ7r2+|> zHVX3@%_uk(8g7SC5^&L@jgP@TbOejPvl}ciEz*C~WTx1C+K0V?iQmgp! zEEDV1+MO*d!5WP7JzrDJYvut77K+%cQxLzkGzSh%&l@{{*#50{JtOPq|M0bQ-uDPvyMbyCcBSZT|ZuE>sM zLlr2OXEG_hr|MVsP^i+0Bn~j8R0FuKZ;rC~gaan=i#(M~HWsSJwjwpn6v+?9l6g%n z<@2yEs^cfgiPM}QHTOWRuBgEQIx--m@50<2Zc}vX z6ivn?X2FA1SXftsIduL4J~pEF_UJdhBd8+JKWCa2uU3>9$5ss6HkMj=b*T|h6Nj$W z3M`YZEW(|;VsH#4QYiEkVGsgxT|JPe`K-~X^4+2~ZRA+mb5*5?EE`cn2fjiWD8nKE z&b4C$=XmZWtS;-A6Z#j%B!mtF`TGYqwLo)^%n-fRu{pUZTMwJqy7frM zAM~+Mt+I!e=!4(u0qC^L{RHUc4?nE%kutOjbXWe!F>g5pQ50GqY3h4Mb^67Ex(|Bo zDAkQOq8W}Dz@vi$J%c>`nm`Ax*4`|u?LkE_LYr&5SLTj6)^?>u&LczAn?iSub3adX z3#9cNnQkT-oiKfT_q{*wH`Y6IGoBeO63yD(Ow>(*BcHoz($Q`R=o;`Aw2xrHcCnh! zy5ID89P+RAzH$YMnvdWSW7((bqfQZNUXB)zw)Dug*d#fv5Lth{&~i&e*wDePzeXN< z=tby#bY`pF4z6;$%pfJG%qwVeO?|kR`-~7S1A3R)s>d9l8mwx`k9Y82QnDy!*woG@gQY*8O3ENDv zLJly6dWkCuAauy})`nVm=-s{9*xl8|vJ_Go2A(=b2Xkn6oE35?H_XDihoqOt8g3B( z@sIpBeqQ;+)5$OYs*PpitAAR#I|mF?#lZ{sv#%t+^0x-EX}P{DE1`V)x%ly8?ETyR zdp8>|Tu7am)n4dPlP=DQP)KQ@jOc^I z02MP3Gsw=4c;`yVHpnMGT^Jn)t-@ke0fC7Ld$%U4K0I+UE|lIYhxrjZKgn^#poN~`|yvxc4c!X;J$_sX|7Z)1d8!=9A_=P5vrOC62Txf&W@O; zMgz{t#TlGT2GS3_3Lec_=TFI`C8UQeiV!7~V9QWiYoQ6nC=Av17TkKEmWuG82o%F; zObuqyP7UvQa=oFIC%3A`$Y5$PyFEX@=gm)@8V)#vcwE|cI%XqZVa-j;Vn$4Izq;`- zH+eF9_7Vtcgh2&7pUT~(<*hsKm2S_0TZgi*Qx=#4QBw=hRKU4$^Ak^ozj#-tC3$|P zK8S^?(y5p}mX!6-udedV`OvR;d*#f)P-1#Y5CUAAi0mI=KmZerK`AXH0HOpa!9r_{ z0b!&G!BPin%X2?}ZRg!9VskGuo}rqlhG!)RjhW@ml8#f9Gm-YJf@9`lmA!_Cuyb}K z+^z)6n~=4PT-+Xr>!or~QfxX09`{%F@PH9NKPIItZEx7;MpG|b2(qNMSHdI1cp%QV zH){)xu2>0xHDnJMkq2UHNw66+UwVgH|DGa&Oe>QBdQkoU{EOlV-!or1I~q(nX#l) zKIdL)DA%~<)^1l(4QB>YP}h!abFQT!tpOu86*JRD0Fq)RHv+V*)UL3VksFRB2Cy?I z+#sy@<&jx^>Pc#0cz91ge4sKpHg!^Gh5>OjcN3P@`NU(!c|uuonBj#z_#hKnHkj zh1|HsL7~DBu^fRk3I(n=WUfF43X}&>tdUwn#8P0yaivD;b!A!#Q=n24j6fqzfFKB5 zRM{n=Z|cCKgg$ZlQv>PaK^Ra%000vTQ6F~HkGt>YNBY1%Llc@DxW@N0b!xr?=-y$A z`)JOO>2QP=N_M`dW{>hwiEh8T}4d`C}vHqeQKyY^!AG`>eS zdPH-5i=ZAL;Q-S7at_S4H(LAQv_5F^jR!2=e`qgV? zb)dMYNc~{dqbZ#3BTY(Vvw+^tNc)Tsu9PO|P0BZ_+olUP}``BK7i;9NyF&dx=|vgCfIppkVt9 zT%?({5$qw|;iV&`YDyL@+5h#y9@X_(jYl`v>5)1z+mSN&@Jw_s=C;|{zA3p|q)4ru zquMcT`i;_K%&x9yq7TkaR7&p$g5G=o%K!TR{FkeX4`2EGg_mDSc-1+|Dk(^8Z}Qy= z+9|@$?TvF!CXzWrDejgP#@Gvjy-lxPgZ(R#=Qh)mQ1|~-F z<_^Dp!^;(%nQ?~;^1~l*PY#(ce=_OUN_)FuD2&Bb)u;rY_*CrTtaIi1fIsRkq)G8{mpSc=1Ns+g0)Nrwgxq z(qxXey3I@@J3g+FxpIH5v{M{?=2BU??&dO9mDPv0)~~%&yY)a9i@GL|W21y4igh%a zpov^~a~V=VFPu=dQgHtv3?%iLW8uaQq!NfCX(}=j(^YTx``-_g_IVX#oisdqLvly&xYXj3`1!FLwITuvGprZ#e^4=Es+&Vvo zMq|ZW_en0E{>;TNZkM;Vtz42OV~r};H6*Cxj85dIpK_cb|Ka-9Pp+tt%Ru@I51|pF zL6Z%|L&@vwB|GCJ^YMDE8gdmMNrO#%*Vjr@oiOducz#y+4rWaAaP!9e?)4kg;;9oE zHco1RC$I!e{XH)|6w^Z0_grT%;n#gp_tPU;SwW>cRkLBlEypHCd9NCRlr}QPjQE)Z z#IaimnPH0}_wNU2LmC1Z6bi$pm6U-D>aw1nP&4OrBF1+&;Ng9lij&iqh;911A!{zo zFUn(MWab`Km!2c};n3$2 zGlUWNbzxXY0}29dFl|^Qa8ckx*f6fXFV~mVvoBK1kf4;|(5)5i*Y(H%VhlDn<;pTo zr?6w|dQohyK&hzHX^>nKgs4HQWspL|9I~^Gmggb#wZp`-=b!z=lb_e10coWb!2}}$ zO-gg1%et_OK2W3)n7wbLTh6;fZ|s3GZ!w{LI2<_%x*HcY?;QMO*`qP!p|4dR+Vj3v zMn^t$d1SjYcW$icvMEQKi4N%5*Zw{ZVresso!07+>Ch}jJmm);bf?{Hlm7^u(dOWO zH1g|>xg&$$o#By>zaNf|V)2hkm?Qb4j{J}5!-bDa!+LZLweR}rJ|znfL}p-5@%l$T zAeQMhK z*^jNAGJ5&t#PLb9S`iBm1P|cYRC;L0`rdb!0uGp+5b|R3f3JRD?1BFl;Ina_by{aAJfYq_tK`j19-fhEkcdiF6$St^1rA za%3d2w&e!_I)5guk?%1=bz=6FvB9%Ks^yKUNR8j#Vh6xHG z(*Q)2)<(?Kpm^OSptL}G(-jhw5^#P9UYOR(g*zc2fhQ8WAu&dXLFMj4Y8kP7hT_n> zvl^C`aST;)di&ak&g97Glh1=2Zr*q^*jV+#vi?cU-`tRXwXs!FHBVJJvH%b<3Rw;T z!qj+T7D`ocIDYoHF+0xx>c6}O7TyZ2PUbD#P|=7|ei zyASK@EAi1$z*Z)own#dzEl`3ON_$)fz88ds1dOqkP}#0DR_04r-v}1wh{9$f-6&NR zKx&{s9kjQ-=R;7qJc?)-?v#*ekwn27PcT{aw@Tr?ii(?LG|v|Xa1agm?8EbgLN)4jWxEQxGeX^txmy1m8I4&sPyZ|a@ZaA+X;xBl+0|IX+B@$}eJN{Ri` z@u0aur5*G~Oap3e8gJU22)^jRqY<@x5E|LXC5POm!;Uqby!%G68HPX9->79$TUOuz zFSRTlYVMV49?8{Hr62CuJ~XdQJ_gM|PSZw5H`Vp5@X%Oy*-+>*8Qr$>@bmr$jJr!6 zw$f!VqayVLRXs)^YNDE>+z$eF*W7|Gt=H}MFCP7JZxjo)z8-L)gKBiYj(7L8L)0GO zi{_1v3DZ&bF@iP+)3sG=&+R$gPocAd{;BV?jz}2kSLYnikmH{!N9u|8w_`w# zm^>X1rj-+Qg>j;j>X1b@h3nbbmPoMw3P5{~Lk!;fzZ>Iq&93f#LH|5$J=MC|6pAz* zIbXZWY0_kO5e(VtK=*=ZKA-5}0bP&(gf5DV0*v zG|i>O`(OXspFes2^yk0);`hGw?GJCA%1aDC;~B@o1j8XYlnX*4`)j1AF|Nh4)4+fZd!?N*Gr`EdS0wYpKwWz6+0 zdhdQ6WAuerQ=fbmt*wi1yyjOc_{mdrcGSbte(TgI^umMc*jOf=ws!VPiL?_>Ft5hr z$>ZbWpSJKs7$|I1-@W?IxBv2Lu?Wrp^`!5YJSn9)ody?zTAAc+4Z!Dj5w+3rA$4z^ z5R6S$TU-}w8#I?Q(;2M^2&4c3!bnOG8W_fuh(>?`5vgi(%iuO**_dDPgUz}U2=WfR zG7E+Q>t*l-Y*u9^E}3n;GHb@H>g{dQVXzkpq_v3v^YZQMe0xjm6&0GeyKztN?1)N< zGN>$G)xJa_!WI>KK4JtrOjSL0Zqytf3x56{x;(81^5NC%XgtYYctTb-!?jhMO~R!y zxwwteCQz>KEkP{|r~xTv*eSkR3cS7A%A&urE|>_(u`p1LC9HWenHiyo8gcNJcSUKZ zv092bMi>YIq1@b*YwJ*{I)yZ5W@)2BER;VzR$s6C+kPlq=R%GY%<8ozaN>z)p0~%Q z-O|HgaaEKn3J^)BX*T6wpGR)P9?OYx13Aes;J)(WPmXC@`Qz?LZL)H zEtTf30%0(jOJrv$3}V;N_1f0ESGQh&8#T7$Cv9`u^0Dx_#0K?ip;pSuIrUut`45BjLySZg6t1wh(tW+C~h7o6AV@POggeu0Bt1Zle4Ocg4+_OvzH*DWY!oV0s zreAW)sgZDeQYDj0`DA`x2qDj2VsR(rHQ_jTaZx{fD9)c{v4r&M5>ccP1im&X7={)K zDUAq&Mp-KbmIa)XJGb@fx;Qywo_+#3w$c)mM!qW$2E)WWP*`ch#C|~T%yAv)p+fwF ztFpN1&z__z2&Ey3Y0TY|UR|b7VjjZ%2clNfv&U&FsYOi&J`$h@3gFn9V&K5$7qs&A zScb0NS4($!E}i)O-~9creCeM$#vm6VArzB{LOVjuYaQ`sqAr7WwEm6QuC|Q(cv1J< z)zVh`(V_AK*_-gC56*tXMGYOG;;#W?JWgskD7DsoM&aNcr*;QuN1lErsmUfk+A#n< zxZKAYj7RUFi)1*0ARSFC+fsyBHz(^+j?|-=N&oZ+0MLc|qb>H8Jdz@zjOaGbzJv3a zGJm8w0KK01M?+{m!?OC&58WnGbIyU*t+nt-$FuH#zn?#%qupjSs7LA%goyUyKmZ*r zaQL@t!S26hL!&dJLu(#l?#Ldb-ZDjc0va^Z2cG-(?1%kts>rtDeFC_LT{z?+E$yuj z!w4D>I$$i(BMmw_($;Q-+jI=+0Ru)z_ZXJLnh$$@*o#Bg6w)Yq+D0ow#8=m=hDW8x z%=|dS;E}N)v~OE==i=|3IpXvCNTPP6Ui|QI)S8b4nomh-t(4M2hL%IW_{Gmv%azxD z^uzbwe+xTalDT(ox}_cQ%#(%ZpG%AkpvtaV-SI!TTAG`4i$x(2P=XQ}GI)DAp&B8=v@W{O&{R#%o(4=U@3p`InwX4<7Kp z_;#bXN6wz4&pc0JaqC;(4emYUzxivKY^wTjg}(V-Fr21iQwb~1-hX3ltYDu%m(s-N zTDx_1^TVm#VHI?KTsHf)Cv(CgkiblDuI(32P1-z zrY1&M2Yv_&2-b#ex?X5IB$am7Hyf!0oju`b;@WY`uq~yO{B*=Km2yy*e?>F|!=DDH7`I*L6Bb?hyT|AzD@u|(Z`+fz{=@DuX-Eavt z)Mj1!9@3Zq6|M`%Gl@@LY^*$lJRuiPiQO%z`Q)Xi(P%RK)>|k}*okR19MgUsa{((w zgq5bC(->!S#0!)eHs?$|CLRa$xI#8xu)g^5jNcZPgo&Aw#Y} zB0><6IG?a42E4tJ&_Q3z{Nl;@_@p2hJEnmU76NI_6myJhDl>x2 z1Zd(dt?vBv3Y0=LXvIzsBgYJDMRP3S45vI%M{$-I&6@^rg&ZSpSe6$G9hz~c5T}#z z8e5AYN0A2Nhh@EQFy!mKvw^m^(Obf>Wy@-^#nQXJsNT z!a8|y9~v&q&eFkIC~rv$s9HAW?~CzcZ19-WL{o%9AAkX&00g82%76d}PZJ6zLxGFu zZ>rs0ID5$&&O^)z2vx*FUR42T!Z08WNNb5oMS5pZfYg_tPH*q3-MTw|oDLsDno5l5 z`YPVs<}=4Iqv+w1Dpho$fOB~Oq>x5n;QT0=I)TzT?Ujs`HBu=DQ$tJw-P+*FlVA9? zFa7Ob`=?B20^ys6v9CEX!Urm=r7t5#-$J{FZP{};*s7%AV24cPEp}+f3kN^{fFdNM z<^OJ})&u3)alKz8p;aV`omw&BEpz8)WN+10(*~ekl^6 z>T<|8N8yOwR*wX!9r#oC>ems$pXk?!ac{fdv-N22B0Y;Z@X=xPqK_o4a-D&uju()+ zF-&({qIIiZ@TcdM?$iM<+rvlDkAxq><9)8)T%S=I(S};v$TLD(t9{}7c{`$0qWz(F z%$C-Nj&bOkMY`kfeh&{%&^^>qefUpHEx-XAX(_;F#acC8LUdoD_8z?UykiVjJ@tr!j;@ooxa#2qMu0%+!=K`6eLzhJzF!w=zKPl5<=bho27u`@Nco4o=5JIhwJwkJ#a{>qj_a`t>my;XD|r z)-j|Xg|T#Z?U628Y>T!N}*RNkr)BN}bOy^P9K5g$H4! z#2pKU2kCRq#zzL!a2~z)f&Si)H>izYeKmjigt&J{{l)hh$ViM2$?5UNNH%kK0lxji zs>Sg5fV;M+e)e`)D~spPXHYfRsPfSDXC^Y4Jlk5_#SGTA#r%VykYX=9O`JIW;Wz3J z=l$RQa;{LILBN?|i2x)Q%)o(AJd|?I5Dhntq3X0yfn>BraT`f2f;Dye8#dff|$OqBp|}5;sAiaCIG;Fjx|;&;2T@v zy%n_PD(=ggix`$XMA;;HX;vx>zCs%%D057cYA=L>!E2r}fQ%1#_x5;o53pv($M`_L ze(eq&%H=-!T$skf@a?nHi8H5^fkaTJwd(HAu7wMGB$w2l(gC(Ud4}Yi;1>(%@(E%S zaqlKNH$=}L7i+7kw1*~!@a1D+%>ynlrE+l>c08Oi@lZy*x5f)8!p zKV8C8F_xj>LRGCxJZ6N|BDhMsV8k8O2vsA%!-lSgI&CJ-PlUUkw^PoX8C3-KZa*wM zH6Aj|1`~pFKaA&Jd@g?eDOD`*z5WA#{XR;^6*XAO(WO1{aM2kZw#El*cOH;jN&|D3 zH)t%TGbt;TOy-9OvVtHmOhYT-S6x$*bgmGOk8t0hh#6FFzI#>Nd59B~jl|fPBN`z9 zH%F5QptMo8Ch$DuL`X6=pd;S)%;!Q*m!D^Xe9wO zwFwV(CMhxwCK|Sj=?ZG;Ru4T)}&kSIz!8c20#L#=1hyws0?v@)RnR<8{gbs?0_ z=YkH0t1W{*GBfJokc=X_o-m*rHlWDt>72LiHTUdkcZyQSRxB+#3;GV){{IJq8+}YY zx*7fUNSe{B)P9S7o%`**=!9ym58W4|eQ6PuHrmjKneNxp#%)>`BiJ?Cm;K{vd$-&A zKQdhpT_El2=!j|D`VgH|&~sY0iP84+OGkJUq78L(>1NgY#eqh+$x+j>cYOIVW=ZSi z2WTyoqaFY43{vZ(!{^P^3KVrmta{0KIOu(%V;?#7+j`j{O!w!eJZ*VDR-ogN=?HFf zM3LsFkKEkjaKa-BwqI%)?86lxHE5-jR*aESY5Qw`_9x%?`d`!ot&w-`g8Avs6eh>C zV+W>zY87$i+V)#lYSjvl+xn>s$?;KZXuvcWGAzQhZyCyS!)t4Nb2}{Usr5}akSgJz zQ?usOL~3N*j>SNOxABnw`S;b={<1PX9{=LY*4P-iaxHlKNKKHpyHrKfQfZm?-p15dUIv3w9>-TSOotjM!jXPjSYT~V3es>|nSibzJ+_Nv` zmLCT1zF#kln$xG59S5nIR2max*$fZ{tg}fcZrcQFz)C62B`7U1(Zs+)OU;pCnU-mm zD|}!eHZWlZ%GV(RM6$UPgSi(?dQ1e`HubJo{>8Oh-~Ou)*5~$gSu)GeLTVz(#e#i# zJiM|76=gh^w#NqidIP6yYkEM;EkT@-u>nb$A_h1_X(B-)gaIK$F~SrfB&Ea#MG^&@ zdwgY!BrH9UR7+(5jS>b*FnoCg9nT?x(4C4}*k<{x6&P+sK;G5^CdxZ3PsD5Y!SM0e zARWuf`U;8#iRWIVNqh75+g8jOKJy9V*o3frcY9^$=S$ozLWe40Y{-tE9@u_s z&YDiMW7(h@(!wC7wl$M-PRwY(w(;6)_3PKn^P?h$dCk|widxjtPY5pvTpwwaOy&xO2@x1z;8=`qz4PJj&)>rov#AWqAZ07T zC5*=H@t6W%VQnOAWFoBz1A+trX7zm%ml|>@}w^ZPmH8e$+ZXTnyJ*Wq)~uC1o1SB=Z#=B2v$N; zVM)u9MUfjY6NS(j2u)M2tcSb4cYH>tvH~;hhfv-V*%Tg{)MiGy9#Fvd?!$IjKJx?_ z8WP0{Ubv?m8>Ny6BOn+k(ujgqKp0{M)c5G^8_J+?>O65`60ks^OapOO83s}cL7$z6$2V-Je)#*5>5-81W2eU& zpFRcutJeQ9s{P2L+A(wbFF^oMU0r@;*Sc5EezDfA#}T&&_3hVKPcqVKybpDJ?4(;P zj6RO`JVI4LDV}` zyRAbGK8oX^!*A4nyS-lr!ZyW)W+=5eEZuw{8s_R~v8OPt&(W%mFateP_qauc?Cuft zI^wgZ$KnW4y9GG#;_QEm%ptwcYNRktqg*cjum87y{)b=v97v2z`!C*e&U|-*a!yaTBBIWA^0>smU2D zm!YvV;=bA~`X5|rl&a|c_xaTuji*kJgHWVH?O!!2QHsaF>3$f?F}zb`A;M;pvq-`e6A&Sx&2jVVRm zdfVGr^qzetIWfYt(1>8kH3qN@V|h*aE*TxL2-3b65{ePh!Vd{U2w^3(7YK?;Iu$Eb zwI7hdK@$35BTz~^CY>EByqZYPR7+e*7hB@S{POpIczfm69tt!z4X%}H1n5-Ce0e&+ z;FfDJPVvPlNW{@-!Le)zRc(2TIyTLx{CXI2ObF!yAx1%K!2z3uQl_|40Rh#86qJvpd3Mq28XEm-$SE`>lUE^*Q(XNSSS>h=b|@c<;oCq^VR z8rQFx>50sVnd-(0qip=rbBXa&d*w$m51jpON2oN~gAHTL3DArFJqCF_M} z5y;@d96fbRj%RdOgj^ik3CJWw%>zHgsW@zu^hO2tLNrnU7)gEVlosX2+c%wK1!s`> z)ruN4@aZ9yaQItGIA`H_T-@Gevjt#SFV?lxbSABHOcwWGGRMvyuf2PRe;Ftsd0>M#rf;3|_Yvwl=zE6y8`$UrE8M9fS z6!*0iH$SH&|&D21YZ5!pfah4$2uyILDY*t4RnlnGC8! zxGusCNNFpZNYraJPywZ!CFJf__;Ar1nn7ceAgape02CZs#dA2uy!yI`+hqPBx^_D} zebTsaQP=DE!>dYiG&4&rsw%rkW0lTfj1{kIlR@aQ`8jP7e0&yVvMLNDXhazDTtzW} z*4zU?h+wk1h_7Db=?uPbk@8S~@S&hgpT9`s3Awo;oCJ1Vyl_uA6wOZ2dQonzsB8kK z5~xuU%tF{gwTfbZEKoa}=+2z-D(d8kxNWe-+a9lq-+tw9{_3m$E!X?M*9rg%5Qd27 zQn%jYXy+WLrAJ%ufS~=KpX;4J?!QQE#9+UqtyRny&x+N1@5Bg|FQ>~;)kM{|cB(tS&`&vOv$ zb3)xduu)emL~eC^pt~8%K{kER@uo5CM2X!7Q8#BsUlP&_h8^IC7IKKV*W3KnD3UWG z^rM0AB4U)9)yN-nox4GE=(6Z3k5Ql5}>u`-vY0yP98* z1~9EFADJFUUMBC&Dp8+)H6vWz)AEtvum@i4LWw=S?VaGfe+Gc=g&f)E8Ral70Nhnu zw5t6D(ma^)V7VUzoT5b#0zfoUaW{MGdG%1@mIU45ijGO#I`p9TjYdUWv7sg3jW zS*2|x>Tn34rGPMCKy3lLkLrPlPKD@t==hQQA4G1*SS}SU>dZYTMfBL6?_N{L}^XjMn z-v8nE2Mf!q+Z8vc`gI9dGs{!}7{j@<*$d~fVW?0BKIefa0Su)PLckT~phhR{!f4C03hEk39$UUeVL2W}PZ?5e$@+};jfekt{L{{~su!hiaM`tG_odm%PDVm-XI zb>eLLsb`XFiL6H^H;0_l^&(Am+UUoq&6=V@$!)cBo+g>U}i z>e^BfVGIt|8iCR<;owhAp^F3l+HPn|_Q@0E)R4;qNXBtI;qO(2=i9lonTZR8btpou zH6s`ZQW`K2gCar!Yh+>_3h{6S*0;bFdbbMoDx4p}7iM6$hzw1RWhK_IzN?qFP&SSj zm7a%2Y&1QDvsn^UgT;Adh4}Oo8BeIaBFn@x=PrOnm4h>5m&}P{*02*#@wNL`ciwzo zhXD*G%(Iih;yoBESQF#^>K!sQXw1%f_ivz)BsxE>1`v2YN+)$p1H;-=C}|N&aj0d{ z1!BZbpMuP&5m(iPJv@~GlNRqR%0``B9#2e6)^Fa|1nlD@qUP#z3Fq>FzggD<6dcES zVKmUb+zsf3|2*-VLC6}ApguMkxi?tlNg-i1V@E{`+u;M!dv zA-oFM}_4WXH{nPK{FNKIcO&YPBmZsRN zY`*=Aop;_vOgLu^Hq1f{L7)sqErS`9gubr{rnW&$%)`J;8;*4RRoPhc3Zp}bSbBGT zCqO}bJZ27PZup$?RoY=oOFEH2sgyzt>^PADxp!AV zNY7u2J5DvIhsZ$j6boHRO{9cY5-JErO&=%0_Y$8)C17ZJZmP?s!|K> zlr|`xTYyHOpL&86M$EhSLdy_C9nfgQq(cJhb>mloUh_ss@0=)6kBDN*!QVN4A3O@0I9Lp;T=-I*T;@=4}VZp|;vOa7dH7_mHs|k5(TU8$J4uV21$O$8Wu+oYPp+FKt0uEf^c`g?MV`>0K2qQqm_oZQ?<1_ZfbGB&(cjtG$ z`}6HT{mZTI{IGKUT2Nfm#T_UX@!od$>~rzI|9ctNC;#!!D_iT{6Q}6eW5(jWS~6um z|A`EfYI#!=hM#%bI(wSTJrFLV#)4O? z@#zWELBaBh_m|(@TbOTLI&00$63PG+k)dD&nauq0Pc};H{`g=FBoF)$BgDCqLQz7L zP=JZ=a<>v%Eb-1;yKla=MTw(4yc5$^rJ&DK+G1&(j(MBVZCOG_nnh5aE!>4$wr7jL*>FacekH zS$t5xcE?Ja(k+V*m(^Cy$;G|<5BdA|*{Pwxb;I?FF+0R#G%Qu<6NAQ!6T09?5x_{2 zOiYBkHOR)}mrqvfA1l2aIitsncv5(h5T>>7&fn$tR`q5*ynbKp?xE4V0;cxr zC^v#er)8&GSA*1S7&Ed3Rn}*4(q}d33B@iP9MTBr>gfSBa(#cs<4%(2#zFd0ajlB=v)?N); z(nteXLJ|l(g{f&UL;A`u`lik7gb{ikrI2)DVpo-~?`85sBgd!qc8kSIDK-~5P7cQ9j5hYxSDAp7Oo+ea#H4*q| zuSkCJx?qO>)bg_s`W`M$?p|wvJ=E?dp%ubA^lZKEA zFlLN$Pcw=QlSm&a0a}s8IsD!go=W3qKEW7LAABfkb(onZxxA{^h3{&|ghmlPEUq>Wvzht)qCK_lybO|(Th?b2y{tw^pKaxR4yVHXMMSF%0#cRf0^$}C2 zee_YM->28<^+$(Ij^OvAeYn}`SyHOaqJ zI{M*uWrmhpEgD&kYGh{_~$av?>1Niv`-1S`BwS%b$@is zcZQm?}o7X|NAJEH5sVKliEWu~EYp4MH#=pa-vvDufY5SV&?KQYy-uH+BoD z`0>dC!#H2aPfR>(7*m0-3FUR^|Lo@Vul~h1@BQ=!1Pa9&AdLnSBoULs!&3=7l@^;7 zwNqu8IGsodES1uR$*@I)iLI$&yO5I_WFRSHh#?`RCJY$_Aw&&Bg2dQBZe84X0N1x* zPorX}9f_Vfg{MZ;ty@49nw|SftW6qG*@)0K#z|q9?IQSV1UjZr-MT@ zbZOR1Cnr;hA*C6zFpH-v8;grK-thL;P%S_h&}1%tcBXOlLpV7?&Wv#3^;{?wvhIe_5?LRQ_Ou| z20{hG06Uu-iP?GS;=psu8*A%7`=I*s4|P~iTpG+@9x86_fr*l%c_+zah(gQ*q|B5Z zi`!TdL&U7)SS&ta8iNF7!)kTutsj>^`~^_~9ji^Fvd56^8M1l)a0>qXSS9XJY371OS2)QsV{2Wj@y=R@%uPjB)GyD!tnydMwpr4 z@r-6k?)$nHh_k2Y$W(}_L=1~SNu_NE14UY)tu=DvmJk9y^E`?>`X@iv*KWy|UNmOU zi1N04xP-${9-lQv#ucF&VOlM+Tetj+r-p_{jos~S!c=C6Q4?#43D#Oj)6%|+7U$vi zU6D?bi_hcCpj?`V^(8(#V@w{?t{-xxO&gFRYb%O#dH#ZtOp$lrb#JvDadx)t$vM!jop#~ie6vW9qls5qHAU^d?z4HSt=jg( zxY`wdSKr#*_)V8?kDs=Krm1L&*A4!3!WA{ zAc|62eQ0C!DDqji&RXb`Ix%!BX7)?qeuy61&^cg-Qgsx1WOE%DvIX-xd(ryZ8trDZ zrwu?K`GZ2y%A@tS7D&eggZ-brY2Q-VbEWj`d%ug&VhV@K=IB9+mWS4}>^Zgw05wlV z>zp7x3bbE{O5C|66m`wS?$(=mI#^9qfUbpccz|@Lcn91evS_1=pnvKa1MQ#ZD8BK? z)H?S$s&1fb=JhMyua%zSp+cR|NxYjqVH7KPF z!`Rv0_?Q3U|Mk;1-uVar&ENmZ@BT)uzWDa-|8V=}pJh_E>7R=|S*5KxKpe*XF7*%|Zg z_iJxl@khqY^JfVl=i0sS)RcAdn7X@Z{Kb#Uuf7zcvQ{sW@4i-De9-uZzc+ep#QgVP zTUp<3{N8U*oj7UjZj|Clc!`?v&T#VI1IH$%Cgw{ zhWP%E)-RtgTz)zcaz6|eCP+y|DArPokee|>N@I7go=GRd02tFxUYZygA63#$=T61U z$%d;r;&n6p_PwiL{ljmpyfu#-LMIHJk7=yw?11)_-m2@Nq|``n6k(^XN0XdTr4XWq z3_)QHRuT*;&6wmGQ3GM3xCDcNL|iHXk`aw<3jw%qE(G7cfwnn9MD2xOIdE=NRcmT_ z6~@NEi9^v-w-%w!;nFNrLnVEbO2Fi}l7vYwC>N2HGESaUp{eRPnVn3gM|EgxMPk`x zqfuLW^9S`0KfvQ7s3zq?iN1O%3>s=_o&5Hzf`JA~3#qW&P&x!k0U;eKU;vCMsSrXy zmpGpJhe z@2$q3JDDCz){DEoS5M3g`<_%rPF4j;ILwI!RcRSX(;U>=wj2jI1fEY~hG-P)Z@tIg zT_%R1snj)&&g3;Px#JpRlg8L+Fn>psD~U^&kjZ2tK%r0+QHu&528{+N9XC@6I^dwR z^1&+?w{OmEymM2nY$Fknypg#ypke@QK$E|)Tdvso1dSPrfF`(7@`NCXWRkF$3LV=R zv5ZNB4H+a^-`>6d_G`s^KXLNX7>Jd(U1m{*5TaDoMcj70HNUa#T1k?hifJmnhDccZ$QAQBsOtim-r8KxS_K#2Z6Nnh{PM2V=|eP zVGTBR{DDDy>;ytc`YytTRsu{5L#VkA+dJgmZGn(};RT$_!H-|p*YC-fpS4dO58RsE zDT5t@Y*G!5OYX`>T{v;NvlUDg*z}COxVWjYpBqF7Y2iysk!VOnkOsQ)P~N*E#>VZ5 z8Rf*d>mr5lspGUTuB1@)8iYb8lBm3=7jDb3L3-}Ib#IQ}ycWz(Qyr*cRf&*Qc4amX zF`GQNrytIVe40&&FNB-ZOEgu z+<^z^(HgiHFY3F$tJ!p${_kbOBX#Po4?XjDNbsnQURrB7*i~|Py&LnjlNr=W7Q4zK zgbsjORJLZ?R zU$D`t`jPg-h0u<}9}#2dNhgk+5}oK2bmuVkqzS!J*P>}_rj>_kfI|m=dt*l|k;g*w z-Lf{-O{c2@MRGU&I-O0R=D%K~tK(&|{>vsJo!0Gn_n&2-u6*?K#JYs{!kF2Mg z{&gFQK#yiNU8$cWJ-ssBBhkzC)3P7?(Hc!D6=Cq5Z+`QS{^*;3<9B}J zD_{9sY3F-C{Kdbj`wO{D$}k;J2w@_n1cV5|djG6;f(XG#N)alhG?D@%LMg!nn~WHg z1U}l^7H`j$w>SOWoscV7TMk#Z`SBC6FMoDm&vl=F(J?GJwSXjF^VyzN&%P*fe~^|ZG$i- zgwhOy!K6YU6as_@V3P(5E5RE#VATagkx2j{bZ!uj<<;UcAWqI7M}}65OHe7oXaQZE zgt;}yI%sg%x;VwC7F!#LaCCasO5_dCh$oDUkxeBjU-?M2!Q|~c;739i5YWp`Rt5E6TYmL*B+|v z1p{inC;0r1SlL2KqkNX08V3~0g;kxz&XebuZ8z@D(V;~C^*42&P>pF92Ae` z1`Gn+qY#7!iP=WMjHj_SL24mGVi{Vg(mNk|AKV8H%Erh<5I68t2BoOVS~!{4wLQ7A zKofCiVuYEPSGhqbC0MwAz+DxFCP}1X14%0{TvA%w*}8VK_Tde&ut6;oM$P1zv~x1I zS1M@?_Gp@A_D^w;pb29p!%343nk-}3gI0Wi2wGiPT=>b4D$7^mvuJ3>X;jo+Lz{7? z4I+R$Sqpo}uLs0LX3Vs5v4(O@mVt(`cXyY%=HS5C{o4yWYYzra#*88C$+{H6v8k>g zz9jWJrbUQjE1o81N+pkRGwElBuyl2ZWqw3WP7@7cZ57w5Vq^-%62LI>LcDMr?yrbM z44!@x4G!uz-qjD6;nUBVGpEJYt}Hbm&d|^xa9=6TeNQ6{LP07;Vu;;*X9X;M@*H(y zp;k&OAVgskyLEK`E??W!)5qtOe*P%YIs%=y@C~7V87Y?PHaFeD_>bs>r1-bKI9~>V0GOn2q&-!bec4o@3jyr7o1; zJ2LPX=`iZ@(dkF4p=PI=JiUjQhwXvxTo*m1I{5I>h3e@0BY;!SXBjEcGX@g9-4}5_ zGU+}8)oXnE&F~{aOph}T-IS@D-e`TeTd76DdmoR{YYugV6Cb^J_V3gEk6Oj!o%dWCh{-$&YUu5E8e>U)YE0jp=kH#r{@!m5=Hq&K1%K~{rJ)S{tuLhB zy;1qkUtNFx*}|)zEl9=7TeVEuESJz0OT`qdR^J~+Y6s|UW(3lV;6~Y8SYOSSZvE8z|cC*YSN@vCm4r4hh8=Lm4 z19m!3?6fPv!}3q>-TI?%{AKBbdpJ}oPU*9gdZHk&J;3>t=18sYkV~T|8B-5d!8DD0 zI#x(?p>?Ru7*iT4p_xfQY9$atOmYpFQk!@_S5liXN0w{#`TO99XmK0X_aJF%Ol8?a z8HZe&gnC0SE}?W5rBblHqaNIcxP@k?P{_crVPc4mPhp3tu-e$z)B>EL8AoRw$qLzQ zOj#%(M1V6GzxCk#;%nbW>s2y63=hld)+TxJlHRQAj7v9pg~E{ z8eyz8fL6$$5NZ;Fqmsj!Y34Fc!-ij~&D~TFm(4hZ+dFP$nN1|IZENNbC(Ab%B^7Z5J6ZNo74dcs;)ga5K9%@Qo!QbnB~Z7F(}p;O***&+sQNH=l}%)*N7P@ zd-wX)+S?z18^UBlOQh>{GMyn~Sy}Uen%FYM;=J%{+2bcIJI<>fRmd=@3c2ssg$yhs znU0SznUWq0{YH6xwRH6!pIbHaam-AQmz`t7lEL0;kq~Mm9Y7FgiYxB!+0~(rC~9>mF13fNC087g65WyG1*HYOV>tfxTnV&6h?X0dZCgvl?00dzB1r9zihxj|9deg>zo-j2@ zfay;9IO_4T6|of-UElPoPWjkj&^58NM6O;9W+sVlpbny1CfBdZyElXJ33%dZjKtuB zPesXwuYE-uh|7ET{rvzYN0bN)2nY#aJAxyq484-5?DEakijVThxRyvt&ZS+Hss>yU zo{cLH_|^uWp4LXEL2$2F=BSat1>pt2P;hXnKozi}WNk&R-W6xgD(NJ?@kX^+gtO1+ z!uRuA5=gLdBd|=ivBK^?a4E$zr!C>i<@?^3Klhct`dfc%C_WBo2#^E`Gz?XTHmf<~ zTfv!-E{B>?XnOXr?qY-{BkILI>XfEl8Z=2jmxgbnH?{5Mt*}7DWz?;B8#+8(VJMx?ZCvQfDhJ@shq~%|R?&bFEpX8j2({o%KT(^#*8WONd)TMheRcHKsxFLkI=2Q% zfacc0meAdu5f0b%W*YU98t}0xe=lCugmb;$1!_`?UNy<4tWt&=-;t>`hh%79Q#aD> z52Bz^Pa9-!%hUP=Yx~k`74<9-ny|1&CqvBt0Jzl@^`Xw$Zuy$cZ}xw)ANt|0#*jS> z1NC~cDHb$lY>Uqxz^3|LZ&Ns3!2S`|V+Wk;-QEzlsaM)faJn`hbyJMmOhkb8qc@tB zN(Qp74Ld66$M6nl*a1m~8*vZ|>1^nq#GBHX>jzSi&qkGd&d!>$c=*8y;ip&fWR1g^^f29n}7Z9KJlf~f9-Gn){znY z=8a!!5uQ#C>r5-;Z3(EFsuYq4fhc`Dpp>Yl%1}x{sRB|G+mS09{@%8|vTUzyxqI7z zqLPRKXU|&mhoTsepS`lPxaJHWQUC1krk*=x{*ymg8yYeaad_*U@_yDo^JMhsW4OKn zxr+CzU$acZ{P#cFnVvJAdeI;{d~_jO$X37pozb;z{!jn?`r)JTZ+;`A7(uC0Rdm&J z$<^zXl_mSd7Y4>g)ek=|z4ObWV#2q6HFM%*1cc`cDG5O&SFRVY+{%9Ox#`JK#p5

tiE>Lt})*g{s}(-@CNBcCoPa;gu`7 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

  • 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⪼`*CmNsq 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 +Portada en español de Think Python, 3.ª edición Puedes pedir las versiones impresa y electrónica de *Think Python 3e* en [Bookshop.org](https://bookshop.org/a/98697/9781098155438) y From 5edec74cfeaea59f2d016f0fdcca6b733f4255b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Wed, 20 May 2026 12:10:52 +0200 Subject: [PATCH 13/18] chore: ignorar imagen fuente de portada en extra_html MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Añade `jb/extra_html/cover-source.jpg` al .gitignore: es la imagen original sin optimizar usada para derivar la portada y la OG image, y no necesita versionarse junto al resto de assets ya optimizados. --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4fadad7..f978a8d 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,5 @@ pip-log.txt .mr.developer.cfg jb/_build/ -jb/.wrangler/cache/wrangler-account.json \ No newline at end of file +jb/.wrangler/cache/wrangler-account.json +jb/extra_html/cover-source.jpg \ No newline at end of file From c02129d3fe3b73f67aed51c87b0a24bc03bb41ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Wed, 20 May 2026 12:11:03 +0200 Subject: [PATCH 14/18] =?UTF-8?q?feat(jb):=20a=C3=B1adir=20favicons,=20OG?= =?UTF-8?q?=20image=20y=20manifest=20en=20extra=5Fhtml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Incluye los assets estáticos servidos en la raíz del sitio publicado: - `favicon.ico`, `favicon.svg`, `favicon-16.png`, `favicon-32.png`, `favicon-32x32.png`: iconos de pestaña para distintos navegadores. - `apple-touch-icon.png` e `icon-512.png`: iconos para iOS y PWA. - `og-image.jpg`: imagen 1200x630 usada en metaetiquetas Open Graph y Twitter Card al compartir el libro en redes. - `site.webmanifest`: manifiesto web con nombre, iconos y colores. Estos archivos se copian tal cual al sitio gracias a `html_extra_path` en el config de Jupyter Book. --- jb/extra_html/apple-touch-icon.png | Bin 0 -> 24191 bytes jb/extra_html/favicon-16.png | Bin 0 -> 823 bytes jb/extra_html/favicon-32.png | Bin 0 -> 1768 bytes jb/extra_html/favicon-32x32.png | Bin 0 -> 1768 bytes jb/extra_html/favicon.ico | Bin 0 -> 4598 bytes jb/extra_html/favicon.svg | 4 ++++ jb/extra_html/icon-512.png | Bin 0 -> 145900 bytes jb/extra_html/og-image.jpg | Bin 0 -> 384825 bytes jb/extra_html/site.webmanifest | 23 +++++++++++++++++++++++ 9 files changed, 27 insertions(+) create mode 100644 jb/extra_html/apple-touch-icon.png create mode 100644 jb/extra_html/favicon-16.png create mode 100644 jb/extra_html/favicon-32.png create mode 100644 jb/extra_html/favicon-32x32.png create mode 100644 jb/extra_html/favicon.ico create mode 100644 jb/extra_html/favicon.svg create mode 100644 jb/extra_html/icon-512.png create mode 100644 jb/extra_html/og-image.jpg create mode 100644 jb/extra_html/site.webmanifest diff --git a/jb/extra_html/apple-touch-icon.png b/jb/extra_html/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ade399adeb10bc25d819e31d3f68d491a1ab973d GIT binary patch literal 24191 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 literal 0 HcmV?d00001 diff --git a/jb/extra_html/favicon.svg b/jb/extra_html/favicon.svg new file mode 100644 index 0000000..3e2a3e1 --- /dev/null +++ b/jb/extra_html/favicon.svg @@ -0,0 +1,4 @@ + + + Py + diff --git a/jb/extra_html/icon-512.png b/jb/extra_html/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..9fe41360624af7b7f0138d2b6dbcb207976ca59c GIT binary patch literal 145900 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 z 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

    {k<3{)+M(ZjViLtR_MPKhMOr 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

  • fHmWGXi!~`A%%cl2bEFeU8_B;&47X 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 SG?B^6tghrzc=9Kq?zCYw?F5=O>H(L&?Jo_ca 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 Date: Wed, 20 May 2026 12:11:12 +0200 Subject: [PATCH 15/18] =?UTF-8?q?feat(jb):=20a=C3=B1adir=20extensi=C3=B3n?= =?UTF-8?q?=20SEO=20con=20Open=20Graph,=20Twitter=20Card=20y=20JSON-LD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Nueva extensión Sphinx `_extensions/seo.py` que inyecta en cada página un contexto `seo` con título, descripción, URL canónica, imagen, autor, traductor y locale. La home recibe un título sin sufijo y se mapea a la raíz del dominio. - Nuevo template `_templates/layout.html` que extiende el layout del tema y, usando ese contexto, añade en ``: - `` y `<meta name="description">`. - Etiquetas Open Graph (`og:title`, `og:description`, `og:image`, `og:url`, dimensiones e idioma) y Twitter Card (`summary_large_image`). - Enlaces a favicons (`.ico`, `.svg`, PNG), `apple-touch-icon` y `site.webmanifest`. - JSON-LD de tipo `Book` con autor, traductor, idioma, licencia y `isAccessibleForFree`, mejorando la indexación en buscadores. --- jb/_extensions/seo.py | 66 +++++++++++++++++++++++++++++++++++++++ jb/_templates/layout.html | 60 +++++++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 jb/_extensions/seo.py create mode 100644 jb/_templates/layout.html diff --git a/jb/_extensions/seo.py b/jb/_extensions/seo.py new file mode 100644 index 0000000..8d2d88c --- /dev/null +++ b/jb/_extensions/seo.py @@ -0,0 +1,66 @@ +"""SEO metadata for the public book site.""" + +SITE_URL = "https://libropython.es" +SITE_NAME = "Libro Python" +BOOK_TITLE = "Think Python en español" +AUTHOR = "Allen B. Downey" +TRANSLATOR = "midudev" +TWITTER_SITE = "@midudev" +THEME_COLOR = "#2d3748" +LOCALE = "es_ES" + +DEFAULT_DESCRIPTION = ( + "Think Python en español: introducción gratuita a Python de Allen B. Downey. " + "3.ª edición traducida con capítulos online, notebooks en Colab y PDF descargable." +) + +PAGE_DESCRIPTIONS = { + "index": DEFAULT_DESCRIPTION, +} + + +def _page_url(app, pagename: str) -> str: + base = SITE_URL.rstrip("/") + if pagename in {app.config.root_doc, "index"}: + return f"{base}/" + return f"{base}/{pagename}.html" + + +def _page_title(app, pagename: str, title: str) -> str: + if pagename in {app.config.root_doc, "index"}: + return BOOK_TITLE + return f"{title} — {BOOK_TITLE}" + + +def update_seo_context(app, pagename, templatename, context, doctree): + description = PAGE_DESCRIPTIONS.get(pagename, DEFAULT_DESCRIPTION) + is_home = pagename in {app.config.root_doc, "index"} + page_title = _page_title(app, pagename, context.get("title", BOOK_TITLE)) + page_url = _page_url(app, pagename) + image_url = f"{SITE_URL.rstrip('/')}/og-image.jpg" + + if is_home: + context["title"] = BOOK_TITLE + context["titlesuffix"] = "" + context["pageurl"] = page_url + + context["seo"] = { + "site_url": SITE_URL, + "site_name": SITE_NAME, + "book_title": BOOK_TITLE, + "description": description, + "page_title": page_title, + "page_url": page_url, + "image_url": image_url, + "author": AUTHOR, + "translator": TRANSLATOR, + "twitter_site": TWITTER_SITE, + "theme_color": THEME_COLOR, + "locale": LOCALE, + "is_home": is_home, + } + + +def setup(app): + app.connect("html-page-context", update_seo_context, priority=800) + return {"parallel_read_safe": True, "parallel_write_safe": True} diff --git a/jb/_templates/layout.html b/jb/_templates/layout.html new file mode 100644 index 0000000..0c0a274 --- /dev/null +++ b/jb/_templates/layout.html @@ -0,0 +1,60 @@ +{% extends "!layout.html" %} + +{% block htmltitle -%} +<title>{{ seo.page_title }} +{%- endblock %} + +{% block extrahead %} + {{ super() }} + {%- if seo -%} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {%- endif -%} +{% endblock %} From da593136ef5663e24076f19b9d66eaf91252cc1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Wed, 20 May 2026 12:11:20 +0200 Subject: [PATCH 16/18] =?UTF-8?q?feat(jb):=20renombrar=20a=20"Think=20Pyth?= =?UTF-8?q?on=20en=20espa=C3=B1ol"=20y=20activar=20SEO/favicon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Cambia el título del libro a "Think Python en español" en `_config.yml` e `index.md` (eliminando el sufijo "edición en español") para un branding más claro y mejor SEO. - Añade en `_config.yml`: - `html.favicon: extra_html/favicon.ico`. - Registro de la extensión local `seo` (`_extensions/seo.py`). - `language: es`, `html_title`, `html_short_title` y `html_extra_path: [extra_html]` para que Sphinx use el idioma correcto y publique los assets estáticos. - Añade frontmatter (`title`, `description`) a `index.md` para que la home aparezca con metadatos optimizados en buscadores. --- jb/_config.yml | 9 ++++++++- jb/index.md | 7 ++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/jb/_config.yml b/jb/_config.yml index 814aed4..65e043f 100644 --- a/jb/_config.yml +++ b/jb/_config.yml @@ -1,5 +1,5 @@ # Book settings -title: Think Python (edición en español) +title: Think Python en español author: Allen B. Downey latex: @@ -14,6 +14,7 @@ repository: branch: v3 html: baseurl: https://libropython.es + favicon: extra_html/favicon.ico use_repository_button: true extra_footer: | @@ -53,7 +54,13 @@ parse: sphinx: local_extensions: full_book_pdf: _extensions + seo: _extensions/seo.py config: + language: es + html_title: Think Python en español + html_short_title: Libro Python + html_extra_path: + - extra_html templates_path: - _templates html_static_path: diff --git a/jb/index.md b/jb/index.md index 3ae82b3..4718a1d 100644 --- a/jb/index.md +++ b/jb/index.md @@ -1,4 +1,9 @@ -# Think Python (edición en español) +--- +title: Think Python en español +description: Think Python en español — introducción gratuita a Python de Allen B. Downey, 3.ª edición traducida con notebooks y PDF. +--- + +# Think Python en español *Think Python* es una introducción a Python para personas que nunca han programado, o para quienes lo han intentado y se han encontrado con dificultades. From c851c6dd72b62dd6a8a2a203381ed66a7a93b2c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Wed, 20 May 2026 12:36:50 +0200 Subject: [PATCH 17/18] fix(jb): sanear titles en metaetiquetas SEO para evitar HTML colado MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El `title` que Sphinx pasa al contexto de cada capítulo incluye HTML (p. ej. `6. Valores de retorno`). Al inyectarlo dentro de ``, las comillas internas del `class="…"` rompían el atributo y el resto del título quedaba como texto suelto visible en la cabecera del sitio desplegado. Cambios: - `_extensions/seo.py`: nueva utilidad `_strip_html` que elimina las etiquetas y decodifica entidades antes de construir `page_title`, para que los hijos del contexto no contengan markup. - `_templates/layout.html`: - Aplica `|striptags|e` a `seo.page_title` y `seo.description` en `` y en todas las meta de Open Graph y Twitter Card como defensa frente a regresiones. - Escapa el resto de valores con `|e`. - Reescribe el bloque JSON-LD usando `|tojson`, que es la forma correcta de serializar strings dentro de `application/ld+json` (evita romper el JSON con comillas o caracteres especiales). --- jb/_extensions/seo.py | 22 +++++++++++++++++++++- jb/_templates/layout.html | 38 +++++++++++++++++++------------------- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/jb/_extensions/seo.py b/jb/_extensions/seo.py index 8d2d88c..1678a2e 100644 --- a/jb/_extensions/seo.py +++ b/jb/_extensions/seo.py @@ -1,5 +1,8 @@ """SEO metadata for the public book site.""" +import html +import re + SITE_URL = "https://libropython.es" SITE_NAME = "Libro Python" BOOK_TITLE = "Think Python en español" @@ -26,10 +29,27 @@ def _page_url(app, pagename: str) -> str: return f"{base}/{pagename}.html" +_TAG_RE = re.compile(r"<[^>]+>") + + +def _strip_html(value: str) -> str: + """Return *value* without HTML tags and with entities decoded. + + Sphinx feeds template titles with markup like + ``<span class="section-number">6. </span>Valores de retorno``. Embedding + that verbatim inside ``<meta content="...">`` or ``<title>`` breaks the + HTML because of the inner double quotes, so we sanitise it before use. + """ + + text = _TAG_RE.sub("", value or "") + return html.unescape(text).strip() + + def _page_title(app, pagename: str, title: str) -> str: + clean = _strip_html(title) if pagename in {app.config.root_doc, "index"}: return BOOK_TITLE - return f"{title} — {BOOK_TITLE}" + return f"{clean} — {BOOK_TITLE}" def update_seo_context(app, pagename, templatename, context, doctree): diff --git a/jb/_templates/layout.html b/jb/_templates/layout.html index 0c0a274..5b9fba2 100644 --- a/jb/_templates/layout.html +++ b/jb/_templates/layout.html @@ -1,31 +1,31 @@ {% extends "!layout.html" %} {% block htmltitle -%} -<title>{{ seo.page_title }} +{{ seo.page_title|striptags|e }} {%- endblock %} {% block extrahead %} {{ super() }} {%- if seo -%} - - + + - - - - - - + + + + + + - - - - + + + + @@ -38,20 +38,20 @@ { "@context": "https://schema.org", "@type": "Book", - "name": "{{ seo.book_title }}", - "description": "{{ seo.description }}", - "url": "{{ seo.site_url }}/", + "name": {{ seo.book_title|tojson }}, + "description": {{ (seo.description|striptags)|tojson }}, + "url": {{ (seo.site_url ~ "/")|tojson }}, "inLanguage": "es", "author": { "@type": "Person", - "name": "{{ seo.author }}" + "name": {{ seo.author|tojson }} }, "translator": { "@type": "Person", - "name": "{{ seo.translator }}", + "name": {{ seo.translator|tojson }}, "url": "https://midu.dev" }, - "image": "{{ seo.image_url }}", + "image": {{ seo.image_url|tojson }}, "isAccessibleForFree": true, "license": "https://creativecommons.org/licenses/by-nc-sa/4.0/" } From a4ab297edd9ac3186f6627027b66ae89ec43a4f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Dur=C3=A1n=20=28midudev=29?= Date: Wed, 20 May 2026 12:43:15 +0200 Subject: [PATCH 18/18] =?UTF-8?q?fix(jb):=20ocultar=20tambi=C3=A9n=20la=20?= =?UTF-8?q?celda=20de=20imports=20cuando=20va=20en=20su=20propia=20celda?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `prep_notebooks.py` añadía `remove-cell` solo cuando una misma celda incluía a la vez `def download(url):` y `import thinkpython`. En chap04 esos dos bloques están repartidos en dos celdas consecutivas, por lo que ninguna de las dos cumplía la condición AND y el HTML desplegado mostraba el código de descarga y de configuración de autoreload al principio del capítulo. Ahora se detectan dos patrones independientes: - Celdas con `def download(url):` (setup de descarga). - Celdas con `import thinkpython` y `%autoreload` (setup de autoreload). Cualquier celda que coincida con alguno de los dos recibe los tags `remove-cell` y `keep`, así que se ocultan tanto cuando van juntas (resto de capítulos) como cuando van separadas (chap04). Verificado reconstruyendo el HTML: ya no aparecen los bloques en chap04 y el resto de capítulos siguen igual. --- jb/prep_notebooks.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/jb/prep_notebooks.py b/jb/prep_notebooks.py index 86a66aa..00e1593 100644 --- a/jb/prep_notebooks.py +++ b/jb/prep_notebooks.py @@ -3,14 +3,21 @@ def process_cell(cell): - # get tags - tags = cell['metadata'].get('tags', []) + tags = cell['metadata'].setdefault('tags', []) if cell['cell_type'] == 'code': source = cell['source'] - if 'def download(url):' in source and 'import thinkpython' in source: - tags = cell['metadata'].setdefault('tags', []) + # Hide the setup cells that download modules and configure autoreload. + # In most chapters both bits live in the same cell, but in some (e.g. + # chap04) they are split across two consecutive cells, so we detect + # each pattern independently to cover both layouts. + is_download_cell = 'def download(url):' in source + is_autoreload_cell = ( + 'import thinkpython' in source and '%autoreload' in source + ) + + if is_download_cell or is_autoreload_cell: for tag in ['remove-cell', 'keep']: if tag not in tags: tags.append(tag)
  • C#%W;yAW_baHao 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