Python Basics - A Practical Introduction To Python 3, 4th Edition-Páginas-1
Python Basics - A Practical Introduction To Python 3, 4th Edition-Páginas-1
Pitón real
Machine Translated by Google
Para obtener información en línea y realizar pedidos de este y otros libros de Real
Python, visite realpython.com. Para obtener más información, contáctenos en
[email protected].
Gracias por descargar este libro electrónico. Este libro electrónico tiene licencia para
su disfrute personal únicamente. Este libro electrónico no puede revenderse ni
regalarse a otras personas. Si desea compartir este libro con otra persona, compre
una copia adicional para cada destinatario. Si está leyendo este libro y no lo compró,
o no lo compró para su uso exclusivo, regrese a realpython.com/pybasicsbook y
compre su propia copia. Gracias por respetar el arduo trabajo detrás de este libro.
2
Machine Translated by Google
Alejandro Ramos, Beni_begin, AJ, Melvin, Sean Yang, Sean, Velu.V, Peter
Cavallaro, Charlie Browning 3, Milind Mahajani, Jason Barnes, Lucien Boland,
Adam bretel, William, Veltaine, Jerry Petrey, James, Raymond E Rogers, Espera,
Bimperng Uen, CJ Hwang, Guido, Evan, Dave, Miguel Galan, Han Qi, Jim
Bremner, Matt Chang, Daniel Drazan, Cole, Bob, Reed Howald, Edward Duarte,
Mike Parker, Aart Kleinendorst, rock, Johnny, Rock Lee, Dusan Ranisavljev,
Grant, Jack, Reinhard, Ceejay Cervantes, David, Vivek Vashist, Mark, Dan,
Garett, Peter, Jun Lee, James Silk, Nik Singhal, Charles, Allard Schmidt, Jeff
Desalle, Miguel, Steve Poe, Jonathan Seubert, Marc Poulin, MELVIN, Idris,
Lucas, John Chirico, Wynette Espinosa, JP, Gregory, Mark Edgeller, David
Melanson, Raul Pena, Darrell, Shriram, Tom Flynn, Velu, michael lindsey, Sulo
Kolehmainen, Michael, Jay, Richard, Milos “Ozzyx” Kosik, hans de Cocq, Glen
Mules, Nathan Lundner, Phil, Shubh, Puwei Wang, Alex Mück, Alex, Hitoshi,
Bruno F. De Lima, Dario David, Rajesh, Haroldas Valčiukas, GVeltaine, Susan
Fowle , Jared Simms, Nathan Collins, Dylan, Les Churchman (luckyles en
Pythonistacafe), Stephane LITHIAOTE, Frank P, Paul, Damien Murtagh, Jason,
Thắng Lê Quang, Neill, Lele, charles wilson, Damien, Christian, Jon, Andreas
Kreisig, Marco, Mario Panagiotopoulos, nerino, Mariusz, Thomas, Mihhail,
Mikönig, Fabio, Scott, Pedro Torres, Mathias Johansson, Joshua S., Mathias,
scott, David Koppy, Rohit Bharti, Phillip Douglas, John Stephenson, Jeff Jones,
George Mast, Allards, Palak, Nikola N., Palak Kalsi, Annekathrin, TsungJu Yang,
Nick Huntington, Sai, Jordan, Wim Alsemgeest, DJ, Bob Harris, Martin, Andrew,
Reggie Smith, Steve Santy, tstalin22 @gamil.com, Mohee Jarada, Mark Arzaga,
Poulose Matthen, Brent Gordon, Gary Butler, Bryant, Dana, Koajck, Reggie, Luis
Bravo, Elijah, Nikolay, Eric Lietsch, Fred Janssen, Don Stillwell, Gaurav Sharma,
Mike, Mike McKenna, karthik babu, bulat, Bulat Mansurov, August Trillanes,
Darren Saw, Jagadish, Nathan Eger, Kyle, Tejas Shetty, Baba Sariffodeen, Don,
Ian, Ian Barbour, Redhouane, Wayne Rosing, Emanuel, Toigongonbai, Jason
Castillo, krishna chaitanya swamy kesavarapu, Corey Huguley, Nick,
[email protected], xuchunyang, Daniel BUIS, kenneth, Leodanis Pozo
Ramos, John Phenix, Linda Moran, W Laleau, Troy Flynn, Heber Nielsen, ROCK,
Mike LeRoy, Thomas Davis, Jacob, Szabolcs
3
Machine Translated by Google
Al final de cada sección del libro encontrará un enlace de comentarios "mágico". Al hacer
clic en el enlace, accederá a un formulario de comentarios en línea donde podrá compartir
sus opiniones con nosotros.
Siéntase libre de ser tan conciso o detallado como mejor le parezca. Todos los
comentarios se almacenan de forma anónima, pero puede optar por dejar su nombre e
información de contacto para que podamos realizar un seguimiento o mencionarlo en
nuestra página de "Gracias".
Usamos un enlace de comentarios diferente para cada sección, por lo que siempre
sabremos a qué parte del libro se refieren sus notas.
Gracias por ayudarnos a hacer de este libro un recurso de aprendizaje aún más valioso
para la comunidad Python.
Lo que dicen los Pythonistas sobre los conceptos básicos de Python: una
introducción práctica a Python 3
“¡Me encanta [el libro]! La redacción es informal, fácil de entender y hace que la
información fluya bien. Nunca me siento perdido en el material y no es
demasiado denso, por lo que me resulta fácil repasar capítulos antiguos una y otra vez.
encima.
Thomas Wong
"Tres años después, todavía vuelvo a mis libros de Real Python cuando necesito
un repaso rápido sobre el uso de comandos vitales de Python".
—Rob Fowler
Las instrucciones paso a paso, fáciles de seguir, dividen los grandes conceptos
en fragmentos pequeños escritos en un inglés sencillo. Los autores nunca
olvidan a su audiencia y son consistentemente minuciosos y detallados en sus
explicaciones. Ya estoy en funcionamiento, pero consulto constantemente el
material para obtener orientación”.
Jared Nielsen
Machine Translated by Google
“Me encanta el libro porque al final de cada lección en particular hay desafíos
interesantes y del mundo real. Acabo de crear una calculadora de ahorros que
realmente refleja mi cuenta de ahorros. ¡Excelente!”
Drew Prescott
“Como práctica de lo que enseñaste, comencé a crear guiones simples para que las
personas de mi equipo los ayudaran en sus tareas diarias. Cuando mis gerentes se
dieron cuenta de eso, me ofrecieron un nuevo puesto como desarrollador.
Sé que hay muchas cosas que aprender y que habrá grandes desafíos, pero
finalmente comencé a hacer lo que realmente me gustó.
Kamil
“Lo que encontré genial de los cursos de Real Python en comparación con otros es
cómo explican las cosas de la manera más sencilla posible.
Stephen Grady
“Después de leer el primer curso de Real Python, escribí un script para automatizar
una tarea mundana en el trabajo. ¡Lo que antes me llevaba entre tres y cinco horas,
ahora me lleva menos de diez minutos!
Brandon Youngdale
Machine Translated by Google
“Honestamente, a lo largo de todo este proceso lo que encontré fue que estaba buscando
con mucha atención cosas que tal vez pudieran agregarse o mejorarse, ¡pero este tutorial
es increíble! Haces un trabajo maravilloso al explicar y enseñar Python de una manera que
personas como yo, un completo novato, realmente podrían comprender.
El flujo de las lecciones funciona perfectamente en todo momento. Los ejercicios realmente
te ayudaron a lo largo del camino y te sientes muy realizado cuando terminas el libro. Creo
que tienes un don para hacer que Python parezca más accesible para personas ajenas al
mundo de la programación.
¡Esto es algo que nunca pensé que estaría haciendo o aprendiendo y con un pequeño
empujón de tu parte lo estoy aprendiendo y puedo ver que no será más que beneficioso
para mí en el futuro!
Shea Klusewicz
“Los autores de los cursos NO han olvidado lo que es ser un principiante – algo que muchos
autores hacen – y no asumen nada sobre sus lectores, lo que hace que los cursos sean
lecturas fantásticas. Los cursos también van acompañados de excelentes vídeos, así como
de muchas referencias para aprendizaje adicional, tareas y código de ejemplo con el que
puedes experimentar y ampliar.
Realmente me gustó que siempre hubiera ejemplos de código completo y que cada línea
de código tuviera buenos comentarios para que pudieras ver qué está haciendo qué.
Ahora tengo varios libros sobre Python y los de Real Python son los únicos que he
terminado de principio a fin, y son sin duda los mejores del mercado. Si, como yo, no eres
programador (trabajo en marketing online), estos cursos te resultarán como un mentor
gracias a las explicaciones claras y sin complicaciones. ¡Muy recomendable!"
—Craig Addyman
Machine Translated by Google
Todos los que trabajaron en este libro son profesionales con varios años de
experiencia profesional en la industria del software. Estos son los miembros del
equipo de tutoriales de Real Python que trabajaron en los conceptos básicos de Python:
Joanna Jablonski es la editora ejecutiva de Real Python. Ama los lenguajes naturales
tanto como ama los lenguajes de programación.
Cuando no está produciendo materiales educativos para ayudar a los desarrolladores
de Python a subir de nivel, encuentra nuevas formas de optimizar varios aspectos de
su vida.
Machine Translated by Google
Contenido
Contenido 10
Prefacio 15
10
Machine Translated by Google
Contenido
11
Machine Translated by Google
Contenido
12
Machine Translated by Google
Contenido
13
Machine Translated by Google
Contenido
14
Machine Translated by Google
Prefacio
Este libro está dirigido a principiantes que conocen un poco de programación pero no
el lenguaje y el ecosistema Python, así como conocimientos completos.
principiantes.
¿Qué quiero decir con esto? Algunos idiomas son muy buenos para principiantes.
Te toman de la mano y hacen que la programación sea muy fácil. Podemos ir
al extremo y fijarse en lenguajes visuales como Scratch.
15
Machine Translated by Google
Contenido
Puedes hacer cosas increíbles con estos idiomas. Pero son totalmente hostiles con
los recién llegados que buscan una presentación amable.
Es posible que no hayas leído mucho código C++. Casi puede hacer que te ardan
los ojos. He aquí un ejemplo, real aunque complejo:
dieciséis
Machine Translated by Google
Contenido
imprimir("Hola mundo")
Eso es todo. Sin embargo, considero que esta es una prueba insatisfactoria.
Aquí está la nueva prueba: ¿Qué se necesitaría para escribir un programa que
acceda a un sitio web externo, descargue el contenido de su aplicación en la
memoria y luego muestre una subsección de ese contenido al usuario? Probemos
ese experimento con Python 3 con la ayuda del paquete de solicitudes (que debe
instalarse; más sobre esto en el capítulo 12):
solicitudes de importación
Este es el lado fácil y fácil de comenzar del espectro de Python. Unas pocas líneas
triviales y se desata un poder increíble. Debido a que Python tiene acceso a tantas
bibliotecas poderosas pero bien empaquetadas, como solicitudes, a menudo se
describe que tiene baterías incluidas.
17
Machine Translated by Google
Contenido
YouTube, el sitio de transmisión de vídeos más popular del mundo, está escrito en
Python y procesa más de 1.000.000 de solicitudes por segundo. Instagram es otro
ejemplo de una aplicación Python. Más cerca de casa, incluso tenemos realpython.com
y mis sitios como talkpython.fm.
Este aspecto de espectro completo de Python significa que puede comenzar con
facilidad y adoptar funciones más avanzadas a medida que las necesite cuando crezcan
las demandas de su aplicación.
Python es popular
Es posible que hayas oído que Python es popular. Por un lado, puede parecer que
realmente no importa qué tan popular sea un idioma si puedes crear la aplicación que
deseas con él.
Entonces, ¿Python es realmente tan popular? Sí, lo es. Por supuesto, encontrará
muchas exageraciones e hipérboles. Pero hay muchas estadísticas que respaldan esta.
Veamos algunos análisis disponibles y presentados por StackOverflow.com.
Dirigen un sitio llamado StackOverow Trends. Aquí puede ver las tendencias de diversas
tecnologías por etiqueta. Cuando comparamos Python con otros posibles candidatos
que podrías elegir para aprender a programar, verás que uno es diferente a los demás:
18
Machine Translated by Google
Contenido
Este es sólo un gráfico, ¿qué nos dice realmente? Bueno, veamos otro.
StackOverflow realiza una encuesta anual a los desarrolladores. Es completo y
está muy bien hecho. Puede encontrar los resultados completos de 2018 en
insights.stackoverflow.com/survey/2018/. De ese artículo, me gustaría llamar su
atención sobre una sección titulada Idiomas más queridos, temidos y buscados.
En la sección de los más buscados, encontrará respuestas para:
Nuevamente, en el siguiente gráfico, verá que Python encabeza las listas y muy
por encima incluso del segundo lugar:
19
Machine Translated by Google
Contenido
Eso puede ser cierto o no. Pero lo más importante para usted es que programar (incluso
un poco de programación) puede ser un superpoder para usted personalmente.
20
Machine Translated by Google
Contenido
Para ilustrar esta idea, supongamos que usted es biólogo. ¿Deberías abandonar
la biología y conseguir un trabajo de desarrollador web frontend? Probablemente no.
Pero tener habilidades como la que abrí este prólogo, usar solicitudes para obtener
datos de la web, será increíblemente poderoso para ti mientras haces biología.
Finalmente, déjame dejarte un comentario sobre tus autores. Dan Bader junto con
los otros autores de Real Python trabajan día tras día para brindarnos explicaciones
claras y poderosas de los conceptos de Python a través de realpython.com.
Tienen una visión única del ecosistema Python y están enfocados en lo que los
principiantes necesitan saber.
Confío en dejarte en sus manos en este viaje con Python. Continúe y aprenda este
increíble idioma usando este gran libro. Lo más importante es ¡recuerda divertirte!
21
Machine Translated by Google
Capítulo 1
Introducción
No importa cuáles sean sus objetivos finales, si trabaja con una computadora, pronto
encontrará infinitas formas de mejorar su vida automatizando tareas y resolviendo
problemas a través de los programas Python que usted cree.
Python también tiene una comunidad increíble que ha creado una serie de
herramientas útiles adicionales que puede utilizar en sus propios programas.
¿Necesita trabajar con documentos PDF? Existe una herramienta integral para eso.
¿Quiere recopilar datos de páginas web? ¡No es necesario empezar de cero!
Python fue creado para ser más fácil de usar que otros lenguajes de programación.
22
Machine Translated by Google
calibres. Por lo general, es mucho más fácil leer código Python y mucho más
rápido escribir código en Python que en otros lenguajes.
Por ejemplo, aquí hay un código simple escrito en C, otro lenguaje de programación
de uso común:
#incluir <stdio.h>
Lo único que hace el programa es mostrar el texto Hola mundo en la pantalla. ¡Fue
mucho trabajo producir una frase! Aquí está el mismo programa, escrito en Python:
imprimir("Hola mundo")
Eso es bastante simple, ¿verdad? El código Python es más rápido de escribir y más
fácil de leer. ¡Descubrimos que también parece más amigable y accesible!
Al mismo tiempo, Python tiene todas las funciones de otros lenguajes y más. Te
sorprenderá saber cuántos productos profesionales se crean con código Python:
Instagram, YouTube, Reddit, Spotify, por nombrar solo algunos.
Pero muchos principiantes que estudian solos tienen problemas para entender
23
Machine Translated by Google
Quizás se esté preguntando: "¿Qué debo aprender sobre Python al principio para
obtener una base sólida?" Si es así, este libro es para usted, ya sea que sea un
completo principiante o que ya haya incursionado en Python u otros lenguajes.
Python Basics está escrito en inglés sencillo y desglosa los conceptos básicos que
realmente necesitas saber en fragmentos pequeños. Esto significa que sabrás "lo
suficiente como para ser peligroso" con Python, rápidamente.
Una vez que haya dominado el material de este libro, habrá adquirido
24
Machine Translated by Google
una base lo suficientemente sólida como para que aventurarse por su cuenta en territorios
más avanzados sea muy sencillo.
El realpython.com El sitio web se lanzó en 2012 y actualmente ayuda a más de dos millones
de desarrolladores de Python cada mes con libros, tutoriales de programación y otros recursos
de aprendizaje en profundidad.
Todos los que trabajaron en este libro son profesionales de Python reclutados del equipo de
Real Python con varios años de experiencia profesional en la industria del software.
• realpython.com
• @realpython en Twitter
Como principiante, le recomendamos que lea la primera mitad de este libro de principio a fin.
La segunda mitad cubre temas que no se superponen tanto para que puedas saltar más
fácilmente, pero los capítulos aumentan en dificultad a medida que avanzas.
25
Machine Translated by Google
Los archivos de práctica que acompañan a este libro también incluyen soluciones
completas a los desafíos, así como algunos de los ejercicios más complicados.
Pero para aprovechar al máximo el material, debes hacer todo lo posible para
resolver los problemas desafiantes por tu cuenta antes de mirar las soluciones de ejemplo.
Aprender haciendo
Este libro trata sobre aprender haciendo, así que asegúrese de escribir los
fragmentos de código que encuentre en el libro. Para obtener mejores resultados,
le recomendamos que evite copiar y pegar los ejemplos de código.
Aprenderá mejor los conceptos y aprenderá la sintaxis más rápido si escribe cada
línea de código usted mismo. Además, si cometes un error (lo cual es totalmente
normal y les sucede a todos los desarrolladores a diario), el simple hecho de
corregir errores tipográficos te ayudará a aprender cómo depurar tu código.
Intente completar los ejercicios de revisión y los desafíos de código usted mismo
antes de obtener ayuda de recursos externos. Con suficiente práctica, dominarás
este material y te divertirás a lo largo del camino.
26
Machine Translated by Google
Recursos en línea
Este libro incluye una serie de recursos adicionales gratuitos a los que puede acceder
en realpython.com/pythonbasics/resources. En esta página web también puede
encontrar una lista de erratas con correcciones mantenidas por el equipo de Real Python.
Cuestionarios interactivos
La mayoría de los capítulos de este libro vienen con un cuestionario en línea gratuito
para verificar su progreso de aprendizaje. Puede acceder a los cuestionarios utilizando
los enlaces que se proporcionan al final del capítulo. Los cuestionarios están alojados
en el sitio web de Real Python y se pueden ver en su teléfono o computadora.
27
Machine Translated by Google
Este libro tiene un repositorio de código adjunto en la web. Contiene código fuente de
ejemplo, así como respuestas a ejercicios y desafíos de código. El repositorio está dividido
por capítulos para que pueda comparar su código con las soluciones que le proporcionamos
después de terminar cada capítulo. Aquí está el enlace:
realpython.com/pythonbasics/exercises
Los scripts de Python de ejemplo asociados con este libro tienen una licencia de dominio
público Creative Commons (CC0). Esto significa que puedes utilizar cualquier parte del
código para cualquier propósito en tus propios programas.
Nota
El código que se encuentra en este libro se ha probado con Python 3.8 en Windows,
macOS y Linux.
Convenciones de formato
$ python holamundo.py
28
Machine Translated by Google
Los accesos directos del menú tendrán el siguiente formato: Archivo Nuevo archivo
Nota
Esta es una nota completa con texto de marcador de posición. El veloz zorro
marrón salta sobre el perro perezoso. La veloz pitón marrón se desliza sobre el
cerdo perezoso.
Importante
Comentarios y erratas
realpython.com/pythonbasics/feedback
29
Machine Translated by Google
Capitulo 2
Configurando Python
Este libro trata sobre la programación de computadoras con Python. Podrías leer
este libro de principio a fin y absorber la información sin siquiera tocar un teclado,
pero te perderías la parte divertida: la codificación.
Para aprovechar al máximo este libro, necesita tener una computadora con Python
instalado y una forma de crear, editar y guardar archivos de código Python.
¡Empecemos!
30
Machine Translated by Google
Muchos sistemas operativos, como macOS y Linux, vienen con Python preinstalado.
La versión de Python que viene con su sistema operativo se llama sistema Python.
El sistema Python casi siempre está desactualizado y es posible que ni siquiera sea
una instalación completa de Python. Es esencial que tenga la versión más reciente
de Python para poder seguir con éxito los ejemplos de este libro.
Nota
Incluso si ya tiene instalado Python 3.8, es una buena idea leer este capítulo
para verificar que su entorno esté configurado para seguir este libro.
Este capítulo se divide en tres secciones: Windows, macOS y Ubuntu Linux. Busque
la sección correspondiente a su sistema operativo y siga los pasos para configurarlo,
luego pase al siguiente capítulo.
31
Machine Translated by Google
2.2. ventanas
2.2 Ventanas
Siga estos pasos para instalar Python 3 y abrir IDLE en Windows.
Importante
El código de este libro solo se prueba con Python instalado como se describe en
esta sección.
Tenga en cuenta que si ha instalado Python por otros medios, como Anaconda
Python, puede encontrar problemas al ejecutar los ejemplos de código.
Instalar Python
Los sistemas Windows normalmente no vienen con Python preinstalado. Afortunadamente,
la instalación no implica mucho más que descargar el instalador de Python desde el sitio
web python.org. y ejecutándolo.
Abra una ventana del navegador y navegue hasta la página de descarga para Windows. en
python.org.
Debajo del encabezado en la parte superior que dice Versiones de Python para Windows,
haga clic en el enlace para ver la última versión de Python 3: Python 3.xx.
Al momento de escribir este artículo, la última versión es Python 3.8. Luego, desplácese
hasta la parte inferior y seleccione el instalador ejecutable de Windows x8664.
Nota
32
Machine Translated by Google
2.2. ventanas
Importante
Haga clic en Instalar ahora para instalar Python 3. Espere a que finalice la
instalación y luego continúe abriendo IDLE.
Abrir inactivo
Puede abrir IDLE en dos pasos:
33
Machine Translated by Google
2.2. ventanas
Nota
El símbolo >>> que ve se llama mensaje. Siempre que veas esto, significa que
Python está esperando que le des algunas instrucciones.
34
Machine Translated by Google
2.3. Mac OS
Prueba interactiva
realpython.com/quizzes/pythonbasics2
2.3 MacOS
Siga estos pasos para instalar Python 3 y abrir IDLE en macOS.
Importante
El código de este libro solo se prueba con Python instalado como se describe
en esta sección.
Instalar Python
La mayoría de las máquinas macOS vienen con Python 2 instalado. Querrá instalar
la última versión de Python 3. Puede hacerlo descargando un instalador desde
python.org sitio web.
Abra una ventana del navegador y navegue hasta la página de descarga para
macOS en python.org.
35
Machine Translated by Google
2.3. Mac OS
Debajo del encabezado en la parte superior que dice Lanzamientos de Python para
macOS, haga clic en el enlace para la última versión de Python 3: Python 3.xx Al
momento de escribir este artículo, la última versión es Python 3.8. Luego,
desplácese hasta el final de la página y seleccione el instalador de macOS de 64 bits/32 bits.
Esto inicia la descarga.
36
Machine Translated by Google
2.3. Mac OS
3. Haga clic en Cerrar para cerrar la ventana del instalador. Ahora que Python está
instalado, puede abrir IDLE y prepararse para escribir su primer programa Python.
Abrir inactivo
Puede abrir IDLE en tres pasos:
También puede abrir IDLE utilizando la función de búsqueda de Spotlight. Presione Cmd
+ barra espaciadora para abrir la búsqueda de Spotlight, escriba la palabra inactivo y
luego presione Retorno para abrir IDLE.
Nota
Recomendamos utilizar IDLE para seguir este libro.
IDLE abre un shell de Python en una nueva ventana. El shell de Python es un entorno
interactivo que le permite escribir código Python y ejecutarlo inmediatamente. ¡Es una
excelente manera de comenzar con Python!
37
Machine Translated by Google
2.3. Mac OS
El símbolo >>> que ve se llama mensaje. Siempre que veas esto, significa que
Python está esperando que le des algunas instrucciones.
Prueba interactiva
realpython.com/quizzes/pythonbasics2
38
Machine Translated by Google
2.4 UbuntuLinux
Siga estos pasos para instalar Python 3 y abrir IDLE en Ubuntu Linux.
Importante
Instalar Python
Es muy probable que su distribución de Ubuntu ya tenga Python instalado, pero
probablemente no sea la última versión y puede que sea Python 2 en lugar de
Python 3.
Para saber qué versión(es) tiene, abra una ventana de terminal y pruebe los
siguientes comandos:
$ python versión
$ python3 versión
Uno o más de estos comandos deberían responder con una versión, como se muestra
a continuación (su número de versión puede variar):
$ python3 versión
Pitón 3.8.1
39
Machine Translated by Google
$ lsb_release a
ID de distribuidor: Ubuntu
Liberar: 18.04
Ubuntu 18.04+
Ubuntu 17 y anteriores
Abrir inactivo
Puede abrir IDLE desde la línea de comando escribiendo lo siguiente:
40
Machine Translated by Google
$ inactivopython3.8
$ inactivo3
Nota
41
Machine Translated by Google
Importante
Prueba interactiva
realpython.com/quizzes/pythonbasics2
42
Machine Translated by Google
Capítulo 3
Ahora que tiene la última versión de Python instalada en su computadora, ¡es hora
de comenzar a codificar!
43
Machine Translated by Google
La ventana interactiva
La ventana interactiva contiene un shell de Python, que es una interfaz de usuario
textual que se utiliza para interactuar con el lenguaje Python. De ahí el nombre de
“ventana interactiva”.
Cuando abre IDLE por primera vez, el texto que se muestra se parece a este:
La primera línea le indica qué versión de Python se está ejecutando. En este caso, IDLE
ejecuta Python 3.8.1. La segunda y tercera líneas brindan información sobre el sistema
operativo y algunos comandos que puede usar para obtener más información sobre
Python.
El símbolo >>> en la última línea se llama mensaje. Aquí es donde escribirás tu código.
Continúe y escriba 1 + 1 cuando se le solicite y presione Entrar.
>>> 1 + 1
2
>>>
44
Machine Translated by Google
Nota
Para imprimir texto en la pantalla en Python, usa la función print() . Una función es un
fragmento de código que normalmente toma alguna entrada, llamada argumento, hace
algo con esa entrada y produce alguna salida, llamada valor de retorno.
45
Machine Translated by Google
Importante
Por ejemplo, puede escribir una función en Python que tome el nombre de
alguien como entrada, almacene el nombre en un archivo en la computadora
y luego genere la ruta al archivo que contiene el nombre. La operación de
guardar el nombre en un archivo es un efecto secundario de la función.
Aprenderá más sobre las funciones, incluido cómo escribir las suyas
propias, en el Capítulo 6.
La función print() de Python toma algo de texto como entrada y luego muestra
ese texto en la pantalla. Para usar print(), escriba la palabra print cuando se le
solicite en la ventana interactiva, seguida del texto "Hola, mundo" entre paréntesis:
Nota
46
Machine Translated by Google
La ventana de guión
Los scripts se escriben utilizando la ventana de script de IDLE. Puede abrir la
ventana del script seleccionando Archivo Nuevo archivo en el menú en la parte
superior de la ventana interactiva.
Observe que cuando se abre la ventana del script, la ventana interactiva permanece
abierta. Cualquier resultado generado por el código ejecutado en la ventana del
script se muestra en la ventana interactiva, por lo que es posible que desee
reorganizar las dos ventanas para poder ver ambas al mismo tiempo.
En la ventana del script, escriba el mismo código que utilizó para imprimir "Hola,
mundo" en la ventana interactiva:
imprimir("Hola mundo")
Al igual que la ventana interactiva, el código escrito en la ventana del script está
resaltado.
47
Machine Translated by Google
Importante
Sin embargo, recuerde que no se recomienda copiar y pegar ejemplos del libro.
¡Escribir cada ejemplo en ti mismo realmente vale la pena!
De hecho, si guarda su script con cualquier extensión que no sea .py, el código resaltado
desaparecerá y todo el texto del archivo se mostrará en negro. IDLE solo resaltará el
código Python cuando esté almacenado en un archivo .py .
Una vez guardado el script, todo lo que tienes que hacer para ejecutar el programa es seleccionar
Ejecute Ejecutar módulo desde la ventana del script y verá aparecer Hola, mundo en la
ventana interactiva:
Hola Mundo
Nota
También puede presionar F5 para ejecutar un script desde la ventana del script.
Cada vez que ejecute un script verá algo como el siguiente resultado en la ventana
interactiva:
Esta es la forma que tiene IDLE de separar la salida de distintas ejecuciones de un script.
De lo contrario, si ejecuta un script tras otro, es posible que no quede claro qué
48
Machine Translated by Google
Nota
Al hacer doble clic en un archivo .py desde un administrador de archivos, como
el Explorador de Windows, se ejecuta el script en una nueva ventana. Sin
embargo, la ventana se cierra inmediatamente cuando el script termina de
ejecutarse, a menudo antes de que puedas ver lo que sucedió.
Para abrir el archivo en IDLE para poder ejecutarlo y ver el resultado, puede
hacer clic derecho en el icono del archivo ( Ctrl + clic en macOS) y elegir
Editar con IDLE. .
1. Errores de sintaxis
En esta sección verá algunos ejemplos de errores de código y aprenderá cómo usar la
salida que Python muestra cuando ocurre un error para comprender qué error ocurrió y
qué fragmento de código lo causó.
49
Machine Translated by Google
Errores de sintaxis
print("Hola mundo)
En este ejemplo, se han eliminado las comillas dobles al final de "Hola, mundo" . Python
no podrá saber dónde termina la cadena de texto. Guarde el script modificado y luego
intente ejecutarlo. ¿Lo que sucede?
EOL significa End Of Line, por lo que este mensaje le indica que Python leyó hasta el final
de la línea sin encontrar el final de algo llamado literal de cadena.
Un literal de cadena es texto contenido entre dos comillas dobles. El texto "Hola, mundo"
es un ejemplo de cadena literal.
Nota
Para abreviar, los literales de cadena a menudo se denominan cadenas, aunque
el término "cadena" técnicamente tiene un significado más general en Python.
Aprenderá más sobre las cadenas en el Capítulo 4.
De vuelta en la ventana del script, observe que la línea que contiene "Hola, mundo" está
resaltada en rojo. Esta útil función le ayuda a encontrar rápidamente qué línea de código
causó el error de sintaxis.
IDLE detecta errores de sintaxis antes de que un programa comience a ejecutarse, pero
algunos errores no se pueden detectar hasta que se ejecuta el programa. Estos errores son
50
Machine Translated by Google
Se conocen como errores de tiempo de ejecución porque solo ocurren en el momento en que
se ejecuta un programa.
imprimir(Hola mundo)
Ahora se han eliminado las dos comillas de la frase "Hola, mundo" . ¿Notaste cómo
el color del texto cambia a negro cuando eliminaste las comillas? IDLE ya no
reconoce Hola mundo como una cadena.
¿Qué pasó? Al intentar ejecutar el programa, Python generó un error. Cada vez que
ocurre un error, Python deja de ejecutar el programa y muestra el error en la
ventana interactiva de IDLE.
Faltan las comillas alrededor de Hola mundo , por lo que Python no entiende que es
una cadena de texto. En cambio, Python piensa
51
Machine Translated by Google
En la siguiente sección, verá cómo definir nombres para valores en su código. Sin
embargo, antes de continuar, puede practicar un poco con los errores de sintaxis y
los errores de tiempo de ejecución trabajando en los ejercicios de revisión.
Ejercicios de revisión
1. Escribe un script que IDLE no te permita ejecutar porque tiene una sintaxis.
error.
2. Escriba un script que solo bloquee su programa una vez que ya se esté
ejecutando porque tiene un error de tiempo de ejecución.
2. Las variables dan contexto a los valores: el número 28 podría significar muchas
cosas diferentes, como la cantidad de estudiantes en una clase o la cantidad
de veces que un usuario ha accedido a un sitio web, etc. Nombrar el valor 28
algo así como num_students aclara el significado del valor.
52
Machine Translated by Google
En esta sección, aprenderá cómo usar variables en su código, así como algunas
de las convenciones que siguen los programadores de Python al elegir nombres
para las variables.
El operador de asignación
Los valores se asignan a una variable mediante un símbolo especial = llamado
operador de asignación. Un operador es un símbolo, como = o +, que realiza
alguna operación en uno o más valores.
Por ejemplo, el operador + toma dos números, uno a la izquierda del operador y
otro a la derecha, y los suma. Asimismo, el operador = toma un valor a la derecha
del operador y lo asigna al nombre a la izquierda del operador.
53
Machine Translated by Google
Nota
Aunque = parece el signo igual en matemáticas, tiene un significado diferente
en Python. Distinguir el operador = del signo igual es importante y puede ser
una fuente de frustración para los programadores principiantes.
Solo recuerde, cada vez que vea el operador = , todo lo que esté a la
derecha se asignará a una variable a la izquierda.
Los nombres de las variables distinguen entre mayúsculas y minúsculas, por lo que una variable
Cuando tenga problemas con los ejemplos de código de este libro, asegúrese de
verificar que cada carácter de su código (incluidos los espacios) coincida exactamente
con los ejemplos. Las computadoras no pueden usar el sentido común para
interpretar lo que usted quiso decir, por lo que ser casi correcto no hará que una
computadora haga lo correcto.
Los nombres de las variables pueden ser tan largos o tan cortos como quieras, pero
hay un par de reglas que debes seguir. Los nombres de variables solo pueden
contener letras mayúsculas y minúsculas (A–Z, a–z), dígitos (0–9) y guiones bajos
(_). Sin embargo, los nombres de las variables no pueden comenzar con un dígito.
Por ejemplo, frase, cadena1, _a1p4a y lista_de_nombres son nombres de variables válidos,
pero 9lives no lo es.
54
Machine Translated by Google
Nota
Los nombres de las variables de Python pueden contener muchos caracteres Unicode
válidos diferentes. Unicode es un estándar para representar digitalmente texto utilizado
en la mayoría de los sistemas de escritura del mundo.
Eso significa que los nombres de las variables pueden contener letras de alfabetos no
Sin embargo, no todos los sistemas pueden mostrar personajes decorados, por lo que
Es una buena idea evitarlos si tu código va a ser compartido.
con personas de muchas regiones diferentes.
El hecho de que el nombre de una variable sea válido no significa necesariamente que sea
es un buen nombre. Elegir un buen nombre para una variable puede resultar sorprendentemente
difícil. Sin embargo, existen algunas pautas que puedes seguir.
para ayudarle a elegir mejores nombres.
s = 3600
El nombre s es totalmente ambiguo. Usar una palabra completa lo hace mucho más fácil
para entender lo que significa el código:
segundos = 3600
55
Machine Translated by Google
segundos_por_hora = 3600
Cuando lees el código anterior, no hay duda de que 3600 es la cantidad de segundos
en una hora. Aunque se tarda más en escribir segundos_por_hora que la letra s y la
palabra segundos, la recompensa en claridad es enorme.
Si bien no existe una regla estricta que obligue a escribir los nombres de las variables
en caso de serpiente, la práctica está codificada en un documento llamado PEP. 8,
que es ampliamente considerada como la guía de estilo oficial para escribir Python.
Seguir los estándares descritos en PEP 8 garantiza que su código Python sea legible
por una gran cantidad de programadores Python. Esto hace que compartir y colaborar
en código sea más fácil para todos los involucrados.
56
Machine Translated by Google
Nota
Todos los ejemplos de código de este curso siguen las pautas de PEP 8, por
lo que obtendrá una gran exposición a cómo se ve el código Python que sigue
las pautas de formato estándar.
En esta sección aprendió cómo crear una variable, reglas para nombres de variables
válidos y algunas pautas para elegir buenos nombres de variables.
A continuación, aprenderá cómo inspeccionar el valor de una variable en la ventana
interactiva de IDLE.
Ejercicios de revisión
Puede encontrar las soluciones a estos ejercicios y muchos otros recursos adicionales
en línea en realpython.com/pythonbasics/resources.
3. Realice cada uno de los dos primeros ejercicios nuevamente guardando primero su código en
un script y ejecutarlo.
Ya has visto cómo usar print() para mostrar una cadena que ha sido asignada a una
variable. Hay otra forma de mostrar el valor de una variable cuando trabaja en el shell
de Python.
57
Machine Translated by Google
Cuando presiona Enter después de escribir la frase por segunda vez, se muestra
el siguiente resultado:
'Hola Mundo'
>>> imprimir(frase)
Hola Mundo
Por otro lado, cuando imprimes() una variable, Python muestra una representación
más legible por humanos del valor de la variable. Para las cadenas, ambas
formas de mostrarse son legibles por humanos, pero este no es el caso para
todos los tipos de valores.
58
Machine Translated by Google
>>> x = 2
>>> x
2
>>> imprimir(x)
2
>>> x = 2
>>> y = "2"
>>> imprimir(x)
2
>>> imprimir(y)
2
>>> x
2
>>> y
'2'
59
Machine Translated by Google
>>> imprimir
< función incorporada de impresión>
Tenga en cuenta que sólo puede inspeccionar variables en un shell de Python. Por
ejemplo, guarde y ejecute el siguiente script:
60
Machine Translated by Google
También puede escribir comentarios en línea, que son comentarios que aparecen en la
misma línea que algún código. Simplemente coloque un # al final de la línea de código,
seguido del texto de su comentario.
La primera línea no hace nada porque comienza con #. Del mismo modo, se ejecuta
print(phrase) en la última línea, pero se ignora todo lo que sigue a # .
Por supuesto, aún puedes usar el símbolo # dentro de una cadena. Por ejemplo, Python
no confundirá lo siguiente con el comienzo de un comentario:
imprimir("#1")
En general, es una buena idea mantener los comentarios lo más breves posible, pero a
veces es necesario escribir más de lo que cabe razonablemente en una sola línea. En
ese caso, puedes continuar tu comentario en una nueva línea que también comience
con el símbolo # :
Además de dejarte notas, los comentarios también se pueden utilizar para comentar el
código mientras pruebas un programa. En otras palabras, agregar un # al comienzo de
una línea de código le permite ejecutar su programa como si esa línea de código no
existiera sin tener que eliminar ningún código.
Para comentar una sección de código en IDLE, resalte una o más líneas
61
Machine Translated by Google
• Ventanas: Alt + 3
Se insertan dos símbolos # al principio de cada línea. Esto no sigue las convenciones
de formato de comentarios de PEP 8, ¡pero hace el trabajo!
Para descomentar su código y eliminar los símbolos # del principio de cada línea,
resalte el código que está comentado y
prensa:
• Ventanas: Alt + 4
Para comentarios en línea, PEP 8 recomienda al menos dos espacios entre el código
y el símbolo # :
Una de las principales cosas que molestan a los programadores son los comentarios que describen
62
Machine Translated by Google
63
Machine Translated by Google
Prueba interactiva
Este capítulo viene con un cuestionario en línea gratuito para verificar su progreso
de aprendizaje. Puede acceder al cuestionario usando su teléfono o computadora
en la siguiente dirección web:
realpython.com/quizzes/pythonbasics3
Recursos adicionales
64
Machine Translated by Google
Capítulo 4
Muchos programadores, independientemente de su especialidad, tratan con texto a diario. Por ejemplo,
los desarrolladores web trabajan con texto que recibe datos de formularios web. Los científicos de datos
procesan texto para extraer datos y realizar cosas como análisis de sentimientos, que pueden ayudar a
Las colecciones de texto en Python se denominan cadenas. Para manipular cadenas se utilizan funciones
especiales llamadas métodos de cadena . Existen métodos de cadena para cambiar una cadena de
minúsculas a mayúsculas, eliminar espacios en blanco desde el principio o el final de una cadena, o
¡Empecemos!
sesenta y cinco
Machine Translated by Google
Nota
Hay varios otros tipos de datos integrados en Python. Por ejemplo, aprenderá
sobre los tipos de datos numéricos en el Capítulo 5 y los tipos booleanos en
el Capítulo 8.
Decimos que las cadenas son un tipo de datos fundamental porque no se pueden
dividir en valores más pequeños de un tipo diferente. No todos los tipos de datos son
fundamentales. Aprenderá sobre los tipos de datos compuestos, también conocidos
como estructuras de datos, en el Capítulo 9.
La salida <class 'str'> indica que el valor "Hola, mundo" es una instancia del tipo de
datos str . Es decir, "Hola mundo" es una cadena.
66
Machine Translated by Google
Nota
Por ahora, puedes pensar en la palabra “clase” como sinónimo de “tipo de datos”,
aunque en realidad se refiere a algo más específico. Verás qué es una clase en
el Capítulo 10.
type() también funciona para valores que han sido asignados a una variable:
Las cadenas tienen tres propiedades que explorará en las siguientes secciones:
3. Los caracteres de una cadena aparecen en una secuencia, es decir, cada carácter
El actor tiene una posición numerada en la cadena.
Literales de cadena
Como ya has visto, puedes crear una cadena encerrando algún texto entre comillas:
Se pueden utilizar comillas simples (cadena1) o dobles (cadena2) para crear una cadena,
siempre que ambas comillas sean del mismo tipo.
Siempre que crea una cadena encerrando el texto entre comillas, la cadena se denomina
literal de cadena. El nombre indica que la cadena está literalmente escrita en su código.
Todas las cuerdas que tu
67
Machine Translated by Google
Nota
No todas las cadenas son literales de cadena. Por ejemplo, una cadena capturada
como entrada del usuario no es una cadena literal porque no está escrita
explícitamente en el código del programa.
Aprenderá cómo trabajar con la entrada del usuario en la sección 4 de este capítulo.
ter.
Las comillas que rodean una cadena se llaman delimitadores porque le dicen a Python dónde
comienza y dónde termina una cadena. Cuando se usa un tipo de comillas como delimitador,
el otro tipo de comillas se puede usar dentro de la cadena:
Después de que Python lee el primer delimitador, todos los caracteres posteriores se
consideran parte de la cadena hasta que se lee un segundo delimitador coincidente. Es por
eso que puedes usar comillas simples en una cadena delimitada por comillas dobles y
viceversa.
Si intenta utilizar comillas dobles dentro de una cadena delimitada por comillas dobles,
obtendrá un error:
Python arroja un SyntaxError porque cree que la cadena termina después del segundo " y no
sabe cómo interpretar el resto de la línea.
68
Machine Translated by Google
Nota
Las cadenas pueden contener cualquier carácter Unicode válido. Por ejemplo, la
cadena "¡Somos el número 1!" contiene el signo de almohadilla (#) y "1234" contiene
números. "×Pýŧħøŋ×" también es una cadena Python válida.
>>> len("abc")
3
También puedes usar len() para obtener la longitud de una cadena asignada a una
variable:
Primero, se asigna la cadena "abc" a las letras variables. Luego se usa len() para
obtener la longitud de las letras y este valor se asigna a la variable num_letters .
Finalmente, el valor de num_letters, que es 3, es
69
Machine Translated by Google
desplegado.
Cadenas multilínea
El PEP 8 La guía de estilo recomienda que cada línea de código Python no
contenga más de 79 caracteres, incluidos los espacios.
Nota
Ya sea que decida seguir PEP 8 o elegir una mayor cantidad de caracteres para la
longitud de su línea, a veces necesitará crear cadenas literales con más caracteres
que el límite elegido.
Para trabajar con cadenas largas, puede dividir la cadena en varias líneas en una
cadena de varias líneas. Por ejemplo, supongamos que necesita incluir el siguiente
texto en una cadena literal:
70
Machine Translated by Google
Este párrafo contiene mucho más de 79 caracteres, por lo que cualquier línea de código
que contenga el párrafo como una cadena literal viola PEP 8. Entonces, ¿qué haces?
Hay un par de formas de abordar esto. Una forma es dividir la cadena en varias líneas
y colocar una barra invertida (\) al final de todas las líneas excepto la última. Para
cumplir con PEP 8, la longitud total de la línea, incluida la barra invertida, debe tener
79 caracteres o menos.
Así es como puedes escribir el párrafo como una cadena de varias líneas usando el
método de barra invertida:
parrafo = "Este planeta tiene o mejor dicho tenia un problema, que era \
esto: la mayoría de las personas que vivían allí eran infelices durante la mayor parte del
tiempo. Se sugirieron muchas soluciones para este problema, pero \
la mayoría de ellos se referían en gran medida a los movimientos de pequeños \
trozos de papel verdes, lo cual es extraño porque en general no lo era \
los pequeños trozos de papel verdes que estaban infelices."
Cuando imprime() una cadena de varias líneas dividida por barras invertidas, el
resultado se muestra en una sola línea:
También se pueden crear cadenas de varias líneas utilizando comillas triples como
delimitadores (""" o '''). A continuación se explica cómo escribir un párrafo largo
utilizando este enfoque:
71
Machine Translated by Google
parrafo = """Este planeta tiene o mejor dicho tenia un problema, que fue
esto: la mayoría de las personas que vivían allí eran infelices la mayor parte del
tiempo. Se sugirieron muchas soluciones para este problema, pero
la mayoría de ellos se referían en gran medida a los movimientos de pequeños
trozos de papel verdes, lo cual es extraño porque en general no era
los pequeños trozos de papel verdes que estaban infelices."""
Las cadenas entre comillas triples conservan los espacios en blanco. Esto significa que
ejecutar print(paragraph) muestra la cadena en varias líneas tal como está en el literal de
cadena, incluidas las nuevas líneas. Esto puede ser lo que desea o no, por lo que deberá
pensar en el resultado deseado antes de elegir cómo escribir una cadena de varias líneas.
Para ver cómo se conservan los espacios en blanco en una cadena entre comillas triples,
escriba lo siguiente en la ventana interactiva de IDLE:
Observe cómo la segunda y tercera línea del resultado tienen sangría exactamente de la
misma manera que en la cadena literal.
Nota
Cuando se utilizan para documentar código, las cadenas entre comillas triples se denominan
72
Machine Translated by Google
Ejercicios de revisión
Puede encontrar las soluciones a estos ejercicios y muchos otros recursos adicionales
en línea en realpython.com/pythonbasics/resources.
3. Imprima una cadena que abarque varias líneas, conservando los espacios en blanco.
4. Imprima una cadena que esté codificada en varias líneas pero que se muestre en una sola línea.
línea recta.
¡Vamos a sumergirnos!
Concatenación de cadenas
73
Machine Translated by Google
'abracadabra'
>>> nombre_completo
'Arturo Dent'
Indexación de cadenas
Cada carácter de una cadena tiene una posición numerada llamada índice.
Puede acceder al carácter en la posición N poniendo el número N entre dos
corchetes ([ y ]) inmediatamente después de la cadena:
'pag'
74
Machine Translated by Google
>>> sabor[0]
'a'
Nota
Los errores uno por uno son una fuente común de frustración para ambos
¡Programadores principiantes y experimentados por igual!
Si intenta acceder a un índice más allá del final de una cadena, Python genera
un error de índice:
>>> sabor[9]
Rastreo (llamadas recientes más última):
El índice más grande de una cadena es siempre uno menos que la longitud de la cadena.
Dado que "tarta de manzana" tiene una longitud de nueve, el índice más grande permitido es 8.
>>> sabor[1]
'mi'
El último carácter de una cadena tiene índice 1, que para "tarta de manzana" es el
letra e. El penúltimo carácter i tiene índice 2, y así sucesivamente.
75
Machine Translated by Google
Al igual que los índices positivos, Python genera un IndexError si intenta acceder a
un índice negativo menor que el índice del primer carácter del
cadena:
>>> sabor[10]
Rastreo (llamadas recientes más última):
Archivo "<pyshell#5>", línea 1, en <módulo>
sabor[10]
IndexError: índice de cadena fuera de rango
Los índices negativos pueden no parecer útiles al principio, pero a veces lo son.
una mejor opción que un índice positivo.
Por ejemplo, supongamos que una cadena ingresada por un usuario se asigna a la
variable entrada_usuario. Si necesita obtener el último carácter de la cadena, ¿cómo
¿Sabes qué índice usar?
Una forma de obtener el último carácter de una cadena es calcular el valor final.
índice usando len():
índice_final = len(entrada_usuario) 1
último_carácter = entrada_usuario[índice_final]
último_carácter = entrada_usuario[1]
76
Machine Translated by Google
Cortar cuerdas
Supongamos que necesita la cadena que contiene sólo las tres primeras letras
de la cadena "tarta de manzana". Podrías acceder a cada carácter por índice y
concatenarlos, así:
'aplicación'
Si necesita algo más que las primeras letras de una cadena, obtener cada
carácter individualmente y concatenarlos es complicado y largo. Afortunadamente,
Python proporciona una manera de hacer esto con mucho menos tipeo.
Puede extraer una parte de una cadena, llamada subcadena, insertando dos
puntos entre dos números de índice dentro de corchetes, así:
'aplicación'
Para recordar cómo funciona el corte, puedes pensar en una cuerda como una
secuencia de ranuras cuadradas. Los límites izquierdo y derecho de cada ranura
están numerados desde cero hasta la longitud de la cadena, y cada ranura se
llena con un carácter de la cadena.
77
Machine Translated by Google
0 1 2 3 4 5 6 7 8 9
>>> sabor[:5]
'manzana'
>>> sabor[5:]
' tarta'
>>> sabor[:]
'tarta de manzana'
78
Machine Translated by Google
>>> sabor[:14]
'tarta de manzana'
>>> sabor[13:15]
''
El segundo muestra lo que sucede cuando intentas obtener una porción donde
todo el rango está fuera de límites. sabor[13:15] intenta obtener el
caracteres decimotercero y decimocuarto, que no existen. En lugar de
generando un error, se devuelve la cadena vacía "" .
Puedes usar números negativos en sectores. Las reglas para los sectores con números
negativos son exactamente las mismas que las de los sectores con números positivos.
Es útil visualizar la cadena como ranuras con los límites etiquetados por
números negativos:
>>> sabor[9:6]
'aplicación'
Observe, sin embargo, que el límite más a la derecha no tiene un índice negativo. La
elección lógica para ese límite parecería ser la
número 0, pero eso no funciona:
79
Machine Translated by Google
>>> sabor[9:0]
''
En lugar de devolver la cadena completa, [9:0] devuelve la cadena vacía "". Esto se
debe a que el segundo número en un segmento debe corresponder a un límite que
viene después del límite correspondiente al primer número, pero tanto 9 como 0
corresponden al límite más a la izquierda de la figura.
>>> sabor[9:]
'tarta de manzana'
Python arroja un TypeError y le indica que los objetos str no admiten la asignación
de elementos.
Nota
El término str es el nombre interno de Python para el tipo de datos de cadena.
Si desea modificar una cadena, debe crear una cadena completamente nueva.
Para cambiar la cadena "meta" por la cadena "potro", puedes usar una cadena
80
Machine Translated by Google
corte para concatenar la letra "f" con todo menos la primera letra de la palabra
"objetivo":
>>> palabra
'potro'
Ejercicios de revisión
Puede encontrar las soluciones a estos ejercicios y muchos otros recursos adicionales
en línea en realpython.com/pythonbasics/resources.
81
Machine Translated by Google
¡Vamos!
El punto (.) le dice a Python que lo que sigue es el nombre de un método; en este caso,
el método lower() .
Nota
Nos referiremos a los nombres de los métodos de cadena con un punto al
principio. Entonces, por ejemplo, el método .lower() se escribe con un punto,
en lugar de lower().
Los métodos de cadena no solo funcionan con cadenas literales. También puedes usar
el método .lower() en una cadena asignada a una variable:
>>> nombre.inferior()
'jean luc picard'
82
Machine Translated by Google
Compare los métodos de cadena .upper() y .lower() con la función len() de propósito
general que vio en la última sección. Aparte de los diferentes resultados de estas
funciones, la distinción importante aquí es cómo se utilizan.
>>> len(voz_alta)
20
Por otro lado, .upper() y .lower() deben usarse junto con una cadena. No existen de
forma independiente.
A veces es necesario eliminar espacios en blanco del principio o del final de una
cadena. Esto es especialmente útil cuando se trabaja con cadenas que provienen de
la entrada del usuario, donde es posible que se hayan introducido espacios en blanco
adicionales por accidente.
Hay tres métodos de cadena que puede utilizar para eliminar espacios en blanco de
una cadena:
1. .rstrip()
2. .lstrip()
3. .tira()
.rstrip() elimina los espacios en blanco del lado derecho de una cadena:
83
Machine Translated by Google
"
>>> nombre = "Jeanluc Picard
>>> nombre
>>> nombre.rstrip()
'Jeanluc Picard'
"
>>> nombre = JeanLuc Picard"
>>> nombre
' JeanLuc Picard'
>>> nombre.lstrip()
'Jeanluc Picard'
Para eliminar espacios en blanco tanto del lado izquierdo como del derecho del
cadena al mismo tiempo, use el método .strip() :
" "
>>> nombre = Jeanluc Picard
>>> nombre
' Jeanluc Picard '
>>> nombre.strip()
'Jeanluc Picard'
Nota
Ninguno de los métodos .rstrip(), .lstrip() y .strip() elimina
espacio en blanco desde el centro de la cadena. En cada uno de los
ejemplos anteriores, el espacio entre “Jeanluc” y “Picard” es
siempre conservado.
84
Machine Translated by Google
El método .endswith() se utiliza para determinar si una cadena termina con ciertos
caracteres:
85
Machine Translated by Google
Nota
>>> nombre.superior()
'PICARD'
>>> nombre
'Picard'
'PICARD'
86
Machine Translated by Google
encontrar nuevos métodos de cadena. Para ver cómo, primero asigne un literal de
cadena a una variable en la ventana interactiva:
Ahora espera un par de segundos. IDLE muestra una lista de cada método de cadena
por el que puede desplazarse con las teclas de flecha.
Esto incluso funciona con nombres de variables. Intente escribir solo las primeras letras
de nave estelar y, asumiendo que no tiene ningún otro nombre ya definido que
comparta esas primeras letras, IDLE completa el nombre nave estelar cuando presiona
la tecla Tab .
Ejercicios de revisión
Puede encontrar las soluciones a estos ejercicios y muchos otros recursos adicionales
en línea en realpython.com/pythonbasics/resources.
3. Escriba un script que elimine los espacios en blanco de las siguientes cadenas:
"
cadena1 = Filete Miñón"
"
cadena2 = "pechuga
87
Machine Translated by Google
5. Usando las mismas cuatro cadenas del Ejercicio 4, escriba un script que use
métodos de cadena para alterar cada cadena de modo que .startswith("be")
devuelva Verdadero para todas ellas.
Ahora que ha visto cómo trabajar con métodos de cadena, hagamos las cosas interactivas.
En esta sección, aprenderá cómo obtener información de un usuario con la función
input() . Escribirás un programa que le pida al usuario que ingrese un texto y luego se lo
mostrará en mayúsculas.
>>> entrada()
,
Cuando presionas Enter parece que no pasa nada. El cursor se mueve a una
nueva línea, pero no aparece un nuevo >>> . ¡Python está esperando que ingreses
algo!
>>> entrada()
¡Hola!
'¡Hola!'
>>>
88
Machine Translated by Google
El texto que ingresó se repite en una nueva línea con comillas simples.
Esto se debe a que input() devuelve cualquier texto ingresado por el usuario como una cadena.
Para hacer que input() sea un poco más fácil de usar, puede darle un mensaje para que se lo
muestre al usuario. El mensaje es solo una cadena que se coloca entre los paréntesis de
input(). Puede ser cualquier cosa que desee: una palabra, un símbolo, una frase, cualquier
cosa que sea una cadena Python válida.
La función input() muestra el mensaje y espera a que el usuario escriba algo en su teclado.
Cuando el usuario presiona Enter, input() devuelve su entrada como una cadena que puede
asignarse a una variable y usarse para hacer algo en su programa.
"
inmediato = "Oye, ¿qué pasa?
entrada_usuario = entrada (mensaje)
print("Dijiste :", entrada_usuario)
Cuando ejecutes este script, verás Oye, ¿qué pasa? se muestra en la ventana interactiva con
un cursor parpadeante.
El espacio único al final de la cadena "Oye, ¿qué pasa? Asegúrate de que " marcas
cuando el usuario comience a escribir, el texto se separe del mensaje con un espacio.
Cuando escribes una respuesta y presionas Enter , tu respuesta se asigna al variable de
entrada_usuario .
Una vez que tenga la información de un usuario, puede hacer algo con ella. Por ejemplo, el
siguiente script toma la entrada del usuario y la convierte a mayúsculas con .upper() e imprime
el resultado:
89
Machine Translated by Google
Ejercicios de revisión
1. Escriba un script que reciba información del usuario y muestre esa información.
volver.
Por ahora, está bien si su programa falla cuando el usuario no ingresa nada como
entrada; es decir, simplemente presiona Enter en lugar de escribir algo.
En el próximo capítulo aprenderá un par de formas en las que puede afrontar esta
situación.
90
Machine Translated by Google
Puede encontrar las soluciones a este desafío de código y muchos otros recursos
adicionales en línea en realpython.com/pythonbasics/resources.
En esta sección aprenderá cómo manejar cadenas de números. Verá cómo funcionan
las operaciones aritméticas en cadenas y cómo a menudo conducen a resultados
sorprendentes. También aprenderá a convertir entre cadenas y tipos de números.
'22'
Las cadenas se pueden "multiplicar" por un número siempre que ese número sea un
número entero o un número entero. Escriba lo siguiente en la ventana interactiva:
91
Machine Translated by Google
'121212'
>>> 3 * número
'121212'
Python genera un TypeError y le dice que no puede multiplicar una secuencia por
un número no entero. Cuando el operador * se usa con una cadena
en el lado izquierdo o derecho, siempre espera un número entero en el
otro lado.
Nota
Una secuencia es cualquier objeto de Python que admita el acceso a
elementos por índice. Las cadenas son secuencias. aprenderás sobre
otros tipos de secuencia en el Capítulo 9.
¿Qué crees que sucede cuando intentas agregar una cadena y un número?
>>> "3" + 3
92
Machine Translated by Google
imprimir(número_duplicado)
Cuando ingresa un número, como 2, espera que el resultado sea 4, pero en este
caso, obtiene 22. Recuerde, input() siempre devuelve una cadena, por lo que si
ingresa 2, a num se le asigna la cadena " 2", no el número entero 2.
Por lo tanto, la expresión num * 2 devuelve la cadena "2" concatenada consigo
misma, que es "22".
Para realizar aritmética con números contenidos en una cadena, primero debe
convertirlos de un tipo de cadena a un tipo de número. Hay dos formas de hacer
esto: int() y float().
int() significa entero y convierte objetos en números enteros, mientras que float()
significa número de coma flotante y convierte objetos en números con coma
decimal. Así es como se ve su uso en la ventana interactiva:
93
Machine Translated by Google
>>> int("12")
12
>>> flotante("12")
12.0
Observe cómo float() agrega un punto decimal al número. Los números de coma
flotante siempre tienen al menos un decimal de precisión. Por esta razón, no puedes
cambiar una cadena que parece un número de punto flotante a un número entero
porque perderías todo después del punto decimal:
>>> int("12.0")
Aunque el 0 adicional después del lugar decimal no agrega ningún valor al número,
Python no cambiará 12.0 a 12 porque resultaría en una pérdida de precisión.
Revisemos el script del principio de esta sección y veamos cómo solucionarlo. Aquí
está el guión de nuevo:
imprimir(número_duplicado)
imprimir(número_duplicado)
94
Machine Translated by Google
Ahora, cuando ejecuta este script e ingresa 2, obtiene 4.0 como se esperaba. Intentar
¡fuera!
>>> numero_panqueques = 10
"
>>> "Voy a comer + num_pancakes + "panqueques."
Rastreo (llamadas recientes más última):
Archivo "<stdin>", línea 1, en <módulo>
TypeError: solo se puede concatenar str (no "int") con str
>>> numero_panqueques = 10
"
>>> “Voy a comer 'Voy a + str(núm_panqueques) + " panqueques."
comer 10 panqueques'.
"
>>> “Voy a comer 'Voy a + cadena(10) + " panqueques."
comer 10 panqueques'.
>>> total_panqueques = 10
>>> panqueques_comidos = 5
>>> "Solo quedan " + str(total_pancakes pancakes_eaten) + " panqueques."
"Sólo quedan 5 panqueques".
95
Machine Translated by Google
>>> cadena(imprimir)
>>> cadena(int)
"<clase 'int'>"
>>> str(flotar)
"<clase 'flotante'>"
Estos ejemplos pueden no parecer muy útiles, pero ilustran cuán flexible es str() .
Ejercicios de revisión
1. Cree una cadena que contenga un número entero, luego convierta esa cadena
en un objeto entero real usando int(). Pruebe que su nuevo objeto es un
número multiplicándolo por otro número y mostrando el resultado.
3. Cree un objeto de cadena y un objeto entero, luego muéstrelos uno al lado del
otro con una única declaración de impresión usando la función str() .
4. Escriba un script que obtenga dos números del usuario usando la función input() dos
veces, multiplique los números y muestre el resultado. Si el usuario ingresa 2 y 4, su
programa debería imprimir el siguiente texto: El producto de 2 y 4 es 8,0.
96
Machine Translated by Google
imprimir(nombre + " tiene " + str(cabezas) + "cabezas y" + str(brazos) + " brazos")
Ambas técnicas producen código que puede resultar difícil de leer. tratando de mantener
Hacer un seguimiento de lo que está dentro o fuera de las comillas puede ser difícil.
Afortunadamente, existe una tercera forma de combinar cadenas: cadena formateada
literales, más comúnmente conocidas como cuerdas f.
La forma más sencilla de entender las cuerdas f es verlas en acción. Aquí está
cómo se ve la cadena anterior cuando se escribe como una cadena f:
Hay dos cosas importantes a tener en cuenta sobre los ejemplos anteriores:
97
Machine Translated by Google
>>> norte = 3
>>> metro = 4
Es una buena idea mantener las expresiones utilizadas en una cadena f lo más
simples posible. Empaquetar un montón de expresiones complicadas en una cadena
literal puede dar como resultado un código difícil de leer y de mantener.
Las cadenas f son más cortas y, a veces, más legibles que usar .format(). Verá
cuerdas f utilizadas a lo largo de este libro.
Para obtener una guía detallada sobre cadenas f y comparaciones con otras
técnicas de formato de cadenas, consulte fStrings de Python 3: una sintaxis de
formato de cadenas mejorada (guía) en realpython.com
Nota
98
Machine Translated by Google
Ejercicios de revisión
1. Cree un objeto flotante llamado peso con el valor 0.2 y cree un objeto de cadena
llamado animal con el valor "tritón". Luego use estos objetos para imprimir la
siguiente cadena usando solo concatenación de cadenas: 0,2 kg es el peso del
tritón.
Uno de los métodos de cadena más útiles es .find(). Como su nombre lo indica,
puede utilizar este método para encontrar la ubicación de una cadena en otra
cadena, comúnmente denominada subcadena .
99
Machine Translated by Google
Tenga en cuenta que esta comparación se realiza exactamente, carácter por carácter,
y distingue entre mayúsculas y minúsculas. Por ejemplo, si intentas encontrar
"SORPRESA", el método .find() devuelve 1:
Si una subcadena aparece más de una vez en una cadena, .find() solo devuelve el
índice de la primera aparición, comenzando desde el principio de la cadena:
El método .find() solo acepta una cadena como entrada. Si desea encontrar un número
entero en una cadena, debe pasar el número entero a .find() como una cadena. Si pasa
algo que no sea una cadena a .find(), Python genera un TypeError:
100
Machine Translated by Google
Al igual que .find(), agrega .replace() al final de una variable o cadena literal. Sin
embargo, en este caso, debes colocar dos cadenas dentro de los paréntesis
en .replace() y separarlas con una coma. La primera cadena es la subcadena a
buscar y la segunda cadena es la cadena con la que reemplazar cada aparición
de la subcadena.
Por ejemplo, el siguiente código muestra cómo reemplazar cada aparición de "la
verdad" en la cadena "Te estoy diciendo la verdad; nada más que la verdad" con
la cadena "mentiras":
>>> my_story = "Te estoy diciendo la verdad; ¡nada más que la verdad!" >>> mi_historia.replace("la
verdad", "mentiras")
Dado que las cadenas son objetos inmutables, .replace() no altera my_story.
Si escribe inmediatamente my_story en la ventana interactiva después de
ejecutar el ejemplo anterior, verá la cadena original, sin modificaciones:
>>> mi_historia
>>> mi_historia
.replace() solo puede reemplazar una subcadena a la vez, por lo que si desea
reemplazar varias subcadenas en una cadena, debe usar .replace() mul
101
Machine Translated by Google
tres veces:
>>> nuevo_texto
Ejercicios de revisión
• La letra a se convierte en 4
• La letra b se convierte en 8
102
Machine Translated by Google
• La letra e se convierte en 3
• La letra l se convierte en 1
• La letra o se convierte en 0
• La letra s se convierte en 5
• La letra t se convierte en 7
Puede encontrar las soluciones a este desafío de código y muchos otros recursos adicionales
en línea en realpython.com/pythonbasics/resources.
Las cadenas vienen con numerosos métodos. Los métodos .upper() y .lower() convierten
todos los caracteres de una cadena a mayúsculas o minúsculas, respectivamente. Los
métodos .rstrip(), .lstrip() y strip() eliminan los espacios en blanco de las cadenas, y los
métodos .startswith() y .endswith() le dirán si una cadena comienza o termina con una
subcadena determinada.
También vio cómo capturar la entrada de un usuario como una cadena usando la función in
put() y cómo convertir esa entrada en un número usando int() y float(). Para convertir números
y otros objetos en cadenas, debe
utilizar str().
103
Machine Translated by Google
Finalmente, vio cómo se utilizan los métodos .find() y .replace() para encontrar la
ubicación de una subcadena y reemplazarla con una nueva cadena.
Prueba interactiva
Este capítulo viene con un cuestionario en línea gratuito para verificar su
progreso de aprendizaje. Puede acceder al cuestionario usando su teléfono o
computadora en la siguiente dirección web:
realpython.com/quizzes/pythonbasics4
Recursos adicionales
Para obtener más información, consulte los siguientes recursos:
104
Machine Translated by Google
Capítulo 5
Números y Matemáticas
• Trabajar con los tres tipos de números integrados de Python: números enteros, de
punto flotante y complejos
¡Empecemos!
105
Machine Translated by Google
Enteros
Un número entero es un número entero sin decimales. Por ejemplo, 1 es un número
entero, pero 1,0 no lo es. El nombre del tipo de datos entero es int, que puedes ver con
la función type() :
>>> tipo(1)
<clase 'int'>
>>> int("25")
25
Un literal entero es un valor entero que está escrito explícitamente en su código, al igual
que un literal de cadena es una cadena que está escrita explícitamente en su código. Por
ejemplo, 1 es un literal entero, pero int("1") no lo es.
>>> 1000000
1000000
>>> 1_000_000
1000000
106
Machine Translated by Google
En Python, no puedes usar comas para agrupar dígitos en literales enteros, pero puedes
usar un guión bajo (_). El valor 1_000_000 expresa un millón de una manera más legible.
No hay límite en cuanto al tamaño que puede tener un número entero, lo que podría
resultar sorprendente teniendo en cuenta que las computadoras tienen una memoria
finita. Intente escribir el número más grande que se le ocurra en la ventana interactiva de IDLE.
¡Python puede manejarlo sin problemas!
>>> tipo(1.0)
<clase 'flotante'>
>>> flotante("1.25")
1.25
Un literal de punto flotante es un valor de punto flotante que está escrito explícitamente
en su código. 1.25 es un literal de punto flotante, mientras que float("1.25") no lo es.
Los literales de punto flotante se pueden crear de tres formas diferentes. Cada uno de
los siguientes crea un literal de punto flotante con un valor de un milímetro.
107
Machine Translated by Google
león:
>>> 1000000.0
1000000.0
>>> 1_000_000.0
1000000.0
>>> 1e6
1000000.0
Las dos primeras formas son similares a los dos métodos para crear literales
enteros que vio anteriormente. El segundo método, que utiliza guiones bajos
para separar dígitos en grupos de tres, es útil para crear literales flotantes con
muchos dígitos.
Nota
La notación electrónica es la abreviatura de notación exponencial y es el
nombre más común para muchas calculadoras y lenguajes de
programación que muestran números grandes.
Python también usa notación E para mostrar números grandes de punto flotante:
>>> 200000000000000000.0
2e+17
108
Machine Translated by Google
>>> 1e4
0.0001
>>> 2e400
inf
inf significa infinito y simplemente significa que el número que intentaste crear supera
el valor máximo de punto flotante permitido en tu computadora. El tipo de inf sigue
siendo flotante:
inf
>>> tipo(n)
<clase 'flotante'>
También está inf que significa infinito negativo y representa un número de punto
flotante negativo que está más allá del número mínimo de punto flotante permitido
en su computadora:
>>> 2e400
inf
109
Machine Translated by Google
Ejercicios de revisión
1. Escriba un script que cree las dos variables, num1 y num2. Tanto a num1 como
a num2 se les debe asignar el literal entero 25.000.000, uno escrito con
subrayado y el otro sin subrayado. Imprima num1 y num2 en dos líneas
separadas.
Suma
>>> 1 + 2
110
Machine Translated by Google
>>> 1.0 + 2
3.0
Observe que el resultado de 1,0 + 2 es 3,0, que es flotante. Cada vez que se agrega un
flotante a un número, el resultado es otro flotante. Sumar dos números enteros siempre
da como resultado un int.
Nota
PEP 8 recomienda separando ambos operandos de un operador con un espacio.
Python puede evaluar 1+1 muy bien, pero 1 + 1 es el formato preferido porque
generalmente se considera más fácil de leer. Esta regla general se aplica a todos
los operadores de esta sección.
Sustracción
Para restar dos números, simplemente coloca un entre ellos:
>>> 1 1
0
>>> 5.0 3
2.0
Al igual que sumar dos números enteros, restar dos números enteros siempre da como
resultado un int. Siempre que uno de los operandos es flotante, el resultado también es un
flotar.
>>> 3
3
Puedes restar un número negativo de otro número, pero como puedes ver a continuación,
esto a veces puede parecer confuso:
111
Machine Translated by Google
>>> 1 3
4
>>> 1 3
4
>>> 1 3
4
>>>13
4
De los cuatro ejemplos anteriores, el primero es el que más cumple con PEP 8.
Dicho esto, puedes rodear 3 entre paréntesis para que quede aún más claro
que el segundo está modificando 3:
>>> 1 (3)
4
Usar paréntesis es una buena idea porque hace que el código sea más explícito.
Las computadoras ejecutan código, pero los humanos leen el código. Todo lo
que pueda hacer para que su código sea más fácil de leer y comprender es algo
bueno.
Multiplicación
Para multiplicar dos números, use el operador * :
>>> 3 * 3
9
>>> 2 * 8.0
16.0
El tipo de número que se obtiene al multiplicar sigue las mismas reglas que la
suma y la resta. Multiplicar dos números enteros da como resultado un int y
multiplicar un número con un flotante da como resultado un flotante.
112
Machine Translated by Google
División
El operador / se utiliza para dividir dos números:
>>> 9/3
3.0
>>> 5.0 / 2
2.5
Tenga en cuenta que int() descarta cualquier parte fraccionaria del número:
>>> int(5.0 / 2)
2
5.0/2 devuelve el valor flotante 2.5 e int(2.5) devuelve el número entero 2 sin la
parte .5 .
División entera
Si escribir int(5.0 / 2) le parece un poco largo, Python proporciona un segundo
operador de división, //, llamado operación de división de enteros.
erador:
>>> 9 // 3
3
>>> 5.0 // 2
2.0
113
Machine Translated by Google
>>> 3 // 2
2
Por ejemplo, 3 // 2 devuelve 2. Primero, 3 se divide por 2 para obtener 1,5.
Luego 1,5 se redondea hacia abajo a 2. Por otro lado, 3 // 2 devuelve 1
Otra cosa que ilustra el ejemplo anterior es que // devuelve un número de punto
flotante si uno de los operandos es flotante. Es por eso que 9 // 3 devuelve el
número entero 3 y 5.0 // 2 devuelve el flotante 2.0.
>>> 1/0
Rastreo (llamadas recientes más última):
Archivo "<stdin>", línea 1, en <módulo>
ZeroDivisionError: división por cero
Exponentes
Puedes elevar un número a una potencia usando el operador ** :
>>> 2 ** 2
4
>>> 2 ** 3
8
>>> 2 ** 4
dieciséis
Los exponentes no tienen por qué ser números enteros. También pueden ser flotadores:
114
Machine Translated by Google
>>> 3 ** 1,5
5.196152422706632
>>> 9 ** 0,5
3.0
>>> 2 ** 1
0,5
>>> 2 ** 2
0,25
El operador de módulo
El operador % , o módulo, devuelve el resto de dividir el operando izquierdo por
el operando derecho:
>>> 5 % 3
>>> 20 % 7
115
Machine Translated by Google
>>> 16 % 8
0
Uno de los usos más comunes del % es determinar si un número es divisible por otro.
Por ejemplo, un número n es par si y sólo si n % 2 es 0.
>>> 1 % 0
Esto tiene sentido porque 1 % 0 es el resto de dividir 1 entre 0. Pero no se puede dividir
1 entre 0, por lo que Python genera un ZeroDivisionError.
Nota
Sin embargo, cada vez que Python encuentra un error al ejecutar un script, la
ejecución se detiene. Se dice que el programa falló .
En el Capítulo 8, aprenderá cómo manejar los errores para que sus programas
no colapsen inesperadamente.
Las cosas se ponen un poco complicadas cuando usas el operador % con números
negativos:
116
Machine Translated by Google
>>> 5 % 3
1
>>> 5 % 3
1
>>> 5 % 3
2
Estos resultados potencialmente impactantes están bastante bien definidos. Para calcular
el resto r de dividir un número x por un número y, Python usa la ecuación r = x (y * (x //
y)).
Por ejemplo, para encontrar el 5 % 3, primero busque (5 // 3). Dado que 5/3 es
aproximadamente 1,67, 5 // 3 es 2. Ahora multiplica eso por 3 para obtener 6.
Finalmente, resta 6 de 5 para obtener 1.
Expresiones aritméticas
Puede combinar operadores para formar expresiones complejas. Una expresión es una
combinación de números, operadores y paréntesis que Python puede calcular o evaluar
para devolver un valor.
>>> 2*3 1
5
>>> 1 + (3*2 + 4)
3
Las reglas para evaluar el trabajo de expresiones son las mismas que en la aritmética
cotidiana. En la escuela, probablemente aprendiste estas reglas bajo el nombre de "orden
de operaciones".
117
Machine Translated by Google
Quizás observes que las expresiones del ejemplo anterior no siguen la regla de
poner un espacio a cada lado de todos los operadores.
PEP 8 dice lo siguiente sobre los espacios en blanco en expresiones complejas:
Una ejecución de muestra del programa debería verse así (con la entrada de
ejemplo proporcionada por el usuario incluida a continuación):
Introduzca un exponente: 3
118
Machine Translated by Google
1. Antes de poder hacer algo con la entrada del usuario, tendrás que
asigne ambas llamadas a input() a nuevas variables.
2. La función input() devuelve una cadena, por lo que necesitarás convertir la entrada
del usuario en números para poder hacer aritmética.
Puede encontrar las soluciones a este desafío de código y muchos otros recursos
adicionales en línea en realpython.com/pythonbasics/resources.
0.30000000000000004
Bueno, eso es… ¡casi correcto! ¿Qué diablos está pasando aquí? ¿Es esto un error
en Python?
El número 0,1 se puede representar como la fracción 1/10. Tanto el número 0,1 como
su fracción 1/10 son representaciones decimales o representaciones en base 10. Las
computadoras, sin embargo, almacenan números de punto flotante en representación
de base 2, más comúnmente llamada representación binaria.
119
Machine Translated by Google
0.00011001100110011001100110011...
Las computadoras tienen memoria finita, por lo que el número 0,1 debe
almacenarse como una aproximación y no como su valor verdadero. La
aproximación que se almacena es ligeramente mayor que el valor real y tiene este aspecto:
0.10000000000000000055511151231257827021181583404541015625
Sin embargo, habrás notado que cuando se le pide que imprima 0.1, Python
imprime 0.1 y no el valor aproximado anterior:
>>> 0.1
0.1
Esto explica por qué, en el primer ejemplo de esta sección, 0,1 + 0,2 no es igual a
0,3. Python suma las aproximaciones binarias para 0,1 y 0,2, lo que da un número
que no es la aproximación binaria para 0,3.
Si todo esto te empieza a dar vueltas la cabeza, ¡no te preocupes! A menos que
esté escribiendo programas para finanzas o informática científica, no necesita
preocuparse por la imprecisión de la aritmética de punto flotante.
120
Machine Translated by Google
También aprenderá sobre un método que tienen los números de punto flotante para
verificar si tienen o no un valor entero.
¡Vamos!
La función redonda()
Puedes usar round() para redondear un número al entero más cercano:
>>> ronda(2.3)
2
>>> ronda(2.7)
3
>>> ronda(2.5)
2
>>> ronda(3.5)
4
2,5 se redondea hacia abajo a 2 y 3,5 se redondea hacia arriba a 4. La mayoría de la gente
espera que un número que termina en 0,5 se redondee hacia arriba, así que echemos un vistazo
más de cerca a lo que está sucediendo aquí.
121
Machine Translated by Google
lazos para igualar. Un empate es cualquier número cuyo último dígito es un cinco. 2,5 y
3,1415 están empatados, pero 1,37 no.
Cuando redondeas empates a pares, primero miras el dígito un decimal a la izquierda del
último dígito del empate. Si ese dígito es par, se redondea hacia abajo. Si el dígito es
impar, se redondea. Es por eso que 2,5 se redondea a 2 y 3,5 se redondea a 4.
Nota
El IEEE mantiene un estándar llamado IEEE 754 sobre cómo se tratan los
números de punto flotante en una computadora. Se publicó en 1985 y los
fabricantes de hardware todavía lo utilizan habitualmente en la actualidad.
>>> ronda(3.14159, 3)
3.142
>>> ronda(2.71828, 2)
2.72
122
Machine Translated by Google
redondo(2,65, 1,4)
TypeError: el objeto 'flotante' no se puede interpretar como un número entero
Tratar con números de punto flotante puede resultar frustrante, pero esta frustración
no es específica de Python. Todos los lenguajes que implementan el estándar de punto
flotante IEEE tienen los mismos problemas, incluidos C/C++, Java y JavaScript.
Sin embargo, en la mayoría de los casos, los pequeños errores encontrados con los
números de punto flotante son insignificantes y los resultados de round() son
perfectamente útiles.
La función abs()
>>> abs(3)
3
>>> abs(5.0)
5.0
123
Machine Translated by Google
abs() siempre devuelve un número positivo del mismo tipo que su argumento. Es
decir, el valor absoluto de un número entero es siempre un número entero positivo
y el valor absoluto de un flotante es siempre un flotante positivo.
La función pow()
>>> poder(2, 3)
8
>>> poder(2, 3, 2)
0
124
Machine Translated by Google
Los métodos numéricos no se utilizan con mucha frecuencia, pero hay uno que
puede resultar útil. Los números de punto flotante tienen un método .is_integer()
que devuelve True si el número es entero (lo que significa que no tiene parte
fraccionaria) y devuelve False en caso contrario:
>>> num.is_integer()
FALSO
>>> num.is_integer()
Verdadero
El método .is_integer() puede resultar útil para validar la entrada del usuario. Por
ejemplo, si está escribiendo una aplicación para un carrito de compras para una
tienda que vende pizzas, querrá verificar que la cantidad de pizzas que ingresa el
cliente sea un número entero. Aprenderá cómo realizar este tipo de comprobaciones
en el Capítulo 8.
Ejercicios de revisión
1. Escriba un script que solicite al usuario que ingrese un número y luego muestre
ese número redondeado a dos decimales. Cuando se ejecute, su programa
debería verse así:
Introduzca un número: 5.432
2. Escriba un script que solicite al usuario que ingrese un número y luego muestre
el valor absoluto de ese número. Cuando se ejecute, su programa debería
verse así:
Introduce un número: 10
3. Escriba un script que le pida al usuario que ingrese dos números usando la
función input() dos veces y luego muestre si la diferencia entre esos dos
números es un número entero o no. Cuando se ejecuta, su programa
125
Machine Translated by Google
Esas llaves admiten un lenguaje de formato simple puede utilizar para alterar la
apariencia del valor en la cadena formateada final.
Por ejemplo, para formatear el valor de n en el ejemplo anterior con dos decimales,
reemplace el contenido de las llaves en la cadena f con {n:.2f}:
Los dos puntos (:) después de la variable n indican que todo lo que sigue es parte
de la especificación de formato. En este ejemplo, la especificación de formato es
.2f.
126
Machine Translated by Google
Python para mostrar n como un número de punto fijo. Esto significa que el número
se muestra exactamente con dos decimales, incluso si el número original tiene
menos decimales.
Cuando formatea un número como punto fijo, siempre se muestra con el número
preciso de decimales especificado:
>>> norte = 1
Puedes insertar comas para agrupar la parte entera de números grandes por miles
con la opción :
>>> n = 1234567890
127
Machine Translated by Google
>>> f"Más de {proporción:.1%} de Pythonistas dicen '¡Las verdaderas Python son geniales!'"
"Más del 90,0 % de los pitonistas dicen '¡La auténtica Python es genial!'"
"Más del 90,00% de los pitonistas dicen '¡Las verdaderas Python son geniales!'"
Ejercicios de revisión
Puede encontrar las soluciones a estos ejercicios y muchos otros recursos adicionales en línea en
realpython.com/pythonbasics/resources.
128
Machine Translated by Google
2. Imprime el número 150000 como moneda, con los miles agrupados con comas. La
moneda debe mostrarse con dos decimales.
Nota
Los números complejos sólo surgen en algunas situaciones específicas.
Muchos programadores nunca necesitan usarlos.
Siéntase libre de omitir esta sección por completo si no tiene interés en cómo
trabajar con números complejos en Python. Ninguna otra parte del libro
depende de la información de esta sección.
Hay varias formas de denotar números complejos, pero un método común es indicar
el componente real con la letra i y el componente imaginario con la letra j. Por ejemplo,
1i + 2j es el número complejo con parte real 1 y parte imaginaria 2.
Para crear un número complejo en Python, simplemente escribe la parte real, seguida
de un signo más y la parte imaginaria con la letra j en el
129
Machine Translated by Google
fin:
>>> norte = 1 + 2j
>>> norte
(1+2j)
Los números imaginarios vienen con dos propiedades, .real y .imag, que
devuelven el componente real e imaginario del número, respectivamente:
>>> n.real
1.0
>>> n.imag
2.0
>>> n.conjugar()
(12j)
130
Machine Translated by Google
Nota
Todos los operadores aritméticos que trabajan con números flotantes y enteros
también funcionan con números complejos, excepto el operador de división de piso (//) .
Como éste no es un libro de matemáticas, no analizaremos la mecánica de la
aritmética compleja. En cambio, aquí hay algunos ejemplos del uso de números
complejos con operadores aritméticos:
>>> a = 1 + 2j
>>> b = 3 4j
>>> a + b
(42j)
>>> a b
(2+6j)
>>> un * b
(11+2j)
>>> un ** b
(932.1391946432212+95.9465336603419j)
>>> a / b
(0,2+0,4j)
131
Machine Translated by Google
>>> a // b
Rastreo (llamadas recientes más última):
Archivo "<stdin>", línea 1, en <módulo>
TypeError: no se puede tomar la palabra de un número complejo.
>>> x = 42
>>> x.real
42
>>> x.imag
0
>>> x.conjugar()
42
>>> y = 3.14
>>> y.real
3.14
>>> y.imag
0.0
>>> y.conjugar()
3.14
Ahora que has visto los conceptos básicos de los números complejos, quizás te
preguntes cuándo necesitarás usarlos. Si está aprendiendo Python para el
desarrollo web o la automatización, la verdad es que es posible que nunca necesite
utilizar números complejos.
Por otro lado, los números complejos son importantes en ámbitos como la
informática científica y los gráficos por ordenador. Si alguna vez trabaja en esos
dominios, es posible que encuentre el soporte integrado de Python para tareas complejas.
132
Machine Translated by Google
Números útiles.
Una mirada detallada a esos temas está más allá del alcance de este libro. Sin
embargo, obtendrá una introducción al paquete NumPy, una herramienta común para
la computación científica con Python, en el Capítulo 17.
Primero, aprendiste cómo hacer aritmética básica con números usando los operadores
+, , *, / y % . Viste cómo escribir expresiones aritméticas y aprendiste cuáles son las
mejores prácticas en PEP 8. para formatear expresiones aritméticas en su código.
Luego aprendiste sobre los números de punto flotante y cómo es posible que no siempre
sean 100% precisos. Esta limitación no tiene nada que ver con Python. Es un hecho de
la informática moderna y se debe a la forma en que se almacenan los números de
punto flotante en la memoria de una computadora.
133
Machine Translated by Google
Prueba interactiva
Este capítulo viene con un cuestionario en línea gratuito para verificar su
progreso de aprendizaje. Puede acceder al cuestionario usando su teléfono
o computadora en la siguiente dirección web:
realpython.com/quizzes/pythonbasics5
Recursos adicionales
Para obtener más información, consulte estos recursos:
134
Machine Translated by Google
Capítulo 6
Funciones y bucles
Las funciones son los componentes básicos de casi todos los programas de Python.
¡Es donde tiene lugar la verdadera acción!
Ya has visto cómo utilizar varias funciones, incluidas print(), len() y round(). Todas estas
son funciones integradas porque vienen integradas en el propio lenguaje Python.
También puede crear funciones definidas por el usuario que realicen tareas específicas.
Las funciones dividen el código en fragmentos más pequeños y son excelentes para
tareas que un programa usa repetidamente. En lugar de escribir el mismo código cada
vez que el programa necesite realizar la tarea, ¡simplemente llame a la función!
Pero a veces es necesario repetir algún código varias veces seguidas, y aquí es donde
entran los bucles .
¡Vamos a sumergirnos!
135
Machine Translated by Google
En esta sección, observará más de cerca len() para aprender más sobre qué es una
función y cómo se ejecuta.
Una de las propiedades más importantes de una función en Python es que las
funciones son valores y se pueden asignar a una variable.
>>> len
Cuando presionas Enter, Python te dice que el nombre len es una variable cuyo valor
es una función incorporada.
Así como los valores enteros tienen un tipo llamado int y las cadenas tienen un tipo str,
los valores de función también tienen un tipo:
>>> tipo(len)
<clase 'función_o_método_incorporada'>
Como cualquier otra variable, puedes asignarle cualquier valor que quieras :
Ahora len tiene un valor de cadena y puedes verificar que el tipo es str con
tipo():
136
Machine Translated by Google
>>> tipo(len)
<clase 'cadena'>
Importante
La palabra clave del se utiliza para desasignar una variable de un valor. del significa
eliminar, pero no elimina el valor. En cambio, separa el nombre del valor y elimina el
nombre.
>>> len
Al seguir cada uno de estos pasos, hemos visto que el nombre de una función está
separado de la función misma.
Lo primero que hay que notar es que no puedes ejecutar una función simplemente
137
Machine Translated by Google
escribiendo su nombre. Debes llamar a la función para decirle a Python que realmente
la ejecute.
>>> len()
len()
En este ejemplo, Python genera un TypeError cuando se llama a len() porque len()
espera un argumento.
Cuando una función termina de ejecutarse, devuelve un valor como salida. El valor
de retorno generalmente, pero no siempre, depende de los valores de los argumentos
pasados a la función.
138
Machine Translated by Google
>>> numero_letras = 4
Ha aprendido cómo llamar a una función y que devuelven un valor cuando terminan
de ejecutarse. Sin embargo, a veces las funciones hacen más que simplemente
devolver un valor.
Cuando una función cambia o afecta algo externo a la función misma, se dice que
tiene un efecto secundario. Ya has visto una función con un efecto secundario:
imprimir().
Para ver qué devuelve print() , puede asignar el valor de retorno de print() a una
variable:
¿Qué devuelvo ?
>>> valor_retorno
>>>
139
Machine Translated by Google
print() devuelve un valor especial llamado Ninguno que indica la ausencia de datos. Ninguno
tiene un tipo llamado NingunoTipo:
>>> tipo(valor_retorno)
<clase 'NingunoTipo'>
>>> imprimir(valor_retorno)
Ninguno
Ahora que sabe que las funciones son valores, al igual que las cadenas y los
números, y ha aprendido cómo se llaman y ejecutan las funciones, veamos cómo
puede crear sus propias funciones definidas por el usuario.
A medida que escribe programas más largos y complejos, es posible que necesite
utilizar las mismas pocas líneas de código repetidamente. O tal vez necesites calcular
la misma fórmula con diferentes valores varias veces en tu código.
Es posible que tengas la tentación de copiar y pegar código similar en otras partes
de tu programa y modificarlo según sea necesario, ¡pero esto suele ser una mala idea!
Mantener el código repetitivo puede ser una pesadilla. Si encuentra un error en algún
código que se ha copiado y pegado por todos lados, terminará teniendo que aplicar
la solución en todos los lugares donde se copió el código. ¡Eso es mucho trabajo y
es posible que te pierdas algún lugar!
En esta sección, aprenderá cómo definir sus propias funciones para evitar repetirse
cuando necesite reutilizar código. vamos
140
Machine Translated by Google
¡ir!
Comencemos escribiendo una función que tome dos números como entrada y
devuelva su producto. Así es como se vería esta función, con la firma, el cuerpo y
la declaración de devolución identificados con comentarios:
devolver producto
Puede parecer extraño crear una función para algo tan simple como el operador * .
De hecho, multiplicar no es una función que probablemente escribirías en un
escenario del mundo real. ¡Pero es un excelente primer ejemplo para comprender
cómo se crean las funciones!
La firma de la función
La primera línea de código de una función se llama firma de función.
Siempre comienza con la palabra clave def , que es la abreviatura de "definir".
141
Machine Translated by Google
Cuando Python lee una línea que comienza con la palabra clave def , crea
una nueva función. La función se asigna a una variable con el mismo
name como nombre de la función.
Nota
Dado que los nombres de funciones se convierten en variables, deben seguir las
Las mismas reglas para los nombres de variables que aprendiste en el Capítulo 3.
Por lo tanto, el nombre de una función sólo puede contener números, letras y
guiones bajos, y no debe comenzar con un número.
Un parámetro es algo así como una variable, excepto que no tiene valor.
Es un marcador de posición para los valores reales que se proporcionan siempre que el
La función se llama con uno o más argumentos.
Una función puede tener cualquier número de parámetros, ¡incluso ningún parámetro!
142
Machine Translated by Google
El cuerpo funcional
devolver producto
multiplicar es una función bastante simple. ¡Su cuerpo tiene sólo dos líneas de
código!
La primera línea crea una variable llamada producto y le asigna el valor y. Dado
*
X que x e y aún no tienen valores, esta línea es en realidad una plantilla para
el valor del producto se asigna cuando se ejecuta la función.
Por ejemplo, la función print() en el siguiente ejemplo no forma parte del cuerpo de
la función porque no tiene sangría:
devolver producto
143
Machine Translated by Google
devolver producto
Otro error ocurre cuando una línea de código tiene una sangría menor que la línea
encima, pero la sangría no coincide con ninguna línea anterior. Modificar
el archivo multiplicar.py se verá así:
144
Machine Translated by Google
Nota
Aunque Python no tiene reglas para la cantidad de espacios utilizados para
sangrar el código en el cuerpo de una función, PEP 8 recomienda sangrar con
cuatro espacios.
Una vez que Python ejecuta una declaración de devolución , la función deja de ejecutarse
y devuelve el valor. Si aparece algún código debajo de la declaración de devolución con
sangría para formar parte del cuerpo de la función, nunca se ejecutará.
devolver producto
print("¡ No puedes verme!")
Si llamas a esta versión de multiplicar(), nunca verás la cadena "¡No puedes verme!"
desplegado.
Llamas a una función definida por el usuario como cualquier otra función. Escriba el
nombre de la función seguido de una lista de argumentos entre paréntesis.
Por ejemplo, para llamar a multiplicar() con los argumentos 2 y 4, simplemente escriba:
multiplicar(2, 4)
A diferencia de las funciones integradas, las funciones definidas por el usuario no están
disponibles hasta que se hayan definido con la palabra clave def . Debe definir la función
antes de llamarla.
145
Machine Translated by Google
número = multiplicar(2, 4)
imprimir(núm)
Cuando Python lee la línea num = multiplicar(2, 4), no reconoce el nombre multiplicar y
genera un NameError:
Para corregir el error, mueva la definición de la función a la parte superior del archivo:
número = multiplicar(2, 4)
imprimir(núm)
print(f"¡Hola, {nombre}!")
146
Machine Translated by Google
>>> saludar("Dave")
Hola dave!
Cuando crea sus propias funciones, siempre debe documentar lo que hacen. De
esa manera, otros desarrolladores pueden leer la documentación y saber cómo
usar la función y qué esperar cuando se llama.
>>> ayuda(len)
Ayuda sobre la función incorporada len en los módulos incorporados:
len(obj, /)
Devuelve la cantidad de artículos en un contenedor.
147
Machine Translated by Google
Nota
Un contenedor es un nombre especial para un objeto que contiene otros objetos. Una
cadena es un contenedor porque contiene caracteres.
>>> ayuda(multiplicar)
Ayuda sobre la función multiplicar en el módulo __main__:
multiplicar(x,y)
help() muestra la firma de la función, pero no hay ninguna información sobre lo que hace la
función. Para documentar mejor la multiplicación (), debemos proporcionar una cadena de
documentación.
Una cadena de documentación es una cadena literal entre comillas triples colocada en la parte
superior del cuerpo de la función. Las cadenas de documentos se utilizan para documentar lo
que hace una función y qué tipo de parámetros espera.
devolver producto
>>> ayuda(multiplicar)
Ayuda sobre la función multiplicar en el módulo __main__:
multiplicar(x,y)
Devuelve el producto de dos números x e y.
148
Machine Translated by Google
PEP 8 no dice mucho sobre las cadenas de documentación, excepto que cada
función debería tener una.
Ejercicios de revisión
Puede encontrar las soluciones a estos ejercicios y muchos otros recursos adicionales
en línea en realpython.com/pythonbasics/resources.
2. Escriba una función llamada greet() que tome un parámetro de cadena llamado
nombre y muestre el texto "¡Hola <nombre>!", donde <nombre> se reemplaza
con el valor del parámetro de nombre .
F = C * 9/5 + 32
C = (F 32) * 5/9
149
Machine Translated by Google
El script primero debe pedirle al usuario que ingrese una temperatura en grados
Fahrenheit y luego mostrar la temperatura convertida a Celsius.
Luego solicite al usuario que ingrese una temperatura en grados Celsius y muestre
la temperatura convertida a Fahrenheit.
Puede encontrar las soluciones a este desafío de código y muchos otros recursos
adicionales en línea en realpython.com/pythonbasics/resources.
Un bucle es un bloque de código que se repite una y otra vez, ya sea un número
específico de veces o hasta que se cumpla alguna condición. Hay dos tipos de
bucles en Python: bucles while y bucles for . En esta sección, aprenderá a utilizar
ambos.
150
Machine Translated by Google
El bucle while
Los bucles while repiten una sección de código mientras alguna condición sea verdadera.
Hay dos partes en cada bucle while :
1. La declaración while comienza con la palabra clave while , seguida de una condición
de prueba y termina con dos puntos (:).
Si la condición de prueba es verdadera y se ejecuta el cuerpo del bucle, una vez que
Python llega al final del cuerpo, regresa a la declaración while y reevalúa la condición de
prueba. Si la condición de prueba sigue siendo verdadera, el cuerpo se ejecuta
Este proceso se repite una y otra vez hasta que la condición de prueba falla, lo que hace
que Python repita el código en el cuerpo del bucle while .
>>> norte = 1
...
1
2
3
4
Primero, se asigna el número entero 1 a la variable n. Luego se crea un bucle while con
la condición de prueba n < 5, que verifica si el valor de n es menor que 5.
151
Machine Translated by Google
La ejecución del bucle se lleva a cabo en cinco pasos, que se describen a continuación.
mesa:
>>> norte = 1
152
Machine Translated by Google
Nota
Los bucles infinitos no son inherentemente malos. A veces son exactamente
el tipo de bucle que necesitas.
153
Machine Translated by Google
Se notifica al usuario que su entrada fue incorrecta y se le solicita nuevamente que ingrese
un número positivo.
Los bucles while son perfectos para repetir una sección de código mientras se cumple
alguna condición. Sin embargo, no son adecuados para repetir una sección de código un
número específico de veces.
El bucle for
Un bucle for ejecuta una sección de código una vez para cada elemento de una colección
de elementos. La cantidad de veces que se ejecuta el código está determinada por la
Al igual que su contraparte while , el bucle for tiene dos partes principales:
1. La declaración for comienza con la palabra clave for , seguida de una expresión de
membresía y termina en dos puntos (:).
2. El cuerpo del bucle contiene el código que se ejecutará en cada paso del
el bucle y tiene una sangría de cuatro espacios.
Veamos un ejemplo. El siguiente bucle for imprime cada letra de la cadena "Python" una a
la vez:
En cada paso del ciclo, a la variable letra se le asigna la siguiente letra en la cadena
"Python" y luego se imprime el valor de la letra .
Los bucles se ejecutan una vez por cada carácter de la cadena "Python", por lo que el
cuerpo del bucle se ejecuta seis veces. La siguiente tabla resume la ejecución de este
bucle for :
154
Machine Translated by Google
Para ver por qué los bucles for son mejores para recorrer colecciones de elementos,
Reescribamos el bucle for del ejemplo anterior como un bucle while .
Para hacerlo, podemos usar una variable para almacenar el índice del siguiente carácter.
en la cuerda. En cada paso del ciclo, imprimiremos el carácter en
el índice actual y luego incrementar el índice.
El ciclo se detendrá una vez que el valor de la variable de índice sea igual al
longitud de la cuerda. Recuerde, los índices comienzan en 0, por lo que el último índice de
la cadena "Python" es 5.
palabra = "Python"
índice = 0
El bucle for no sólo es menos complejo, sino que el código en sí parece más natural.
Se parece más a cómo se podría describir el bucle en inglés.
155
Machine Translated by Google
Nota
Es posible que a veces escuches a personas describir algún código como
particularmente "pitónico". El término Pythonic se usa generalmente para
describir código que es claro, conciso y que utiliza las características
integradas de Python a su favor.
A veces es útil recorrer un rango de números. Python tiene una práctica función
incorporada range() que produce precisamente eso: ¡un rango de números!
para n en el rango(3):
imprimir("Python")
156
Machine Translated by Google
entre 2, 3, 4 y 5 personas:
Los bucles for generalmente se usan con más frecuencia que los bucles while en Python.
La mayoría de las veces, un bucle for es más conciso y más fácil de leer que un bucle
while equivalente .
Bucles anidados
Siempre que apliques sangría al código correctamente, puedes incluso colocar bucles
dentro de otros bucles.
Cuando Python ingresa al cuerpo del primer bucle for , a la variable n se le asigna el valor
1. Luego se ejecuta el cuerpo del segundo bucle for y a j se le asigna el valor 4. Lo primero
que se imprime es n = 1 y j = 4 .
157
Machine Translated by Google
norte = 1 y j = 4
n=1yj=5n=1
yj=6
norte = 2 y j = 4
norte = 2 y j = 5
norte = 2 y j = 6
norte = 3 y j = 4
norte = 3 y j = 5
norte = 3 y j = 6
Un bucle dentro de otro bucle se llama bucle anidado y aparecen con más
frecuencia de lo que cabría esperar. Puedes anidar bucles while dentro de
bucles for , y viceversa, ¡e incluso anidar bucles de más de dos niveles de
profundidad!
158
Machine Translated by Google
Importante
Los bucles son una herramienta poderosa. Aprovechan una de las mayores
ventajas que ofrecen las computadoras como herramientas de cálculo: la
capacidad de repetir la misma tarea una gran cantidad de veces sin cansarse y
sin quejarse.
Ejercicios de revisión
1. Escriba un bucle for que imprima los números enteros del 2 al 10, cada uno
en una nueva línea, utilizando la función range() .
2. Utilice un bucle while que imprima los números enteros del 2 al 10 (Pista:
primero deberá crear un nuevo número entero).
3. Escribe una función llamada doubles() que tome un número como entrada y
duplique ese número. Luego use la función doubles() en un bucle para
duplicar el número 2 tres veces, mostrando cada resultado en una línea
separada. Aquí hay algunos resultados de muestra:
4
dieciséis
159
Machine Translated by Google
Se realiza un depósito inicial, llamado monto principal. Cada año, la cantidad aumenta en un
porcentaje fijo, llamado tasa de rendimiento anual.
Por ejemplo, un monto principal de $100 con una tasa de rendimiento anual
del 5% aumenta el primer año en $5. El segundo año, el aumento es del 5%
de la nueva cantidad de $105, que es $5,25.
Escriba una función llamada invertir con tres parámetros: el monto del capital,
la tasa de rendimiento anual y el número de años a calcular. La firma de la
función podría verse así:
año 1: $105.00
año 2: $110,25 año
3: $115,76
año 4: $121,55
Para finalizar el programa, solicite al usuario que ingrese una cantidad inicial,
una tasa de porcentaje anual y una cantidad de años. Luego llame a invest()
para mostrar los cálculos de los valores ingresados por el usuario.
160
Machine Translated by Google
¿Qué es un alcance?
Cuando asignas un valor a una variable, le estás dando un nombre a ese valor.
Los nombres son únicos. Por ejemplo, no puedes asignar el mismo nombre a dos
números diferentes.
>>> x = 2
>>> x
2
>>> x = 3
>>> x
3
Resulta que hay una manera de asignar el mismo nombre a dos valores diferentes.
Intente ejecutar el siguiente script:
x = "Hola mundo"
161
Machine Translated by Google
función()
¿Cómo es posible que x siga teniendo el valor "Hola mundo" después de llamar a
func(), lo que cambia el valor de x a 2?
La respuesta es que la función func() tiene un alcance diferente al código que existe
fuera de la función. Es decir, puedes nombrar un objeto dentro de func() con el mismo
nombre que algo fuera de func() y Python puede mantener los dos separados.
El cuerpo de la función tiene lo que se conoce como ámbito local, con su propio
conjunto de nombres disponibles. El código fuera del cuerpo de la función está en el
ámbito global.
Resolución de alcance
Los ámbitos tienen una jerarquía. Por ejemplo, considere lo siguiente:
x=5
162
Machine Translated by Google
def función_externa():
y=3
def función_interior():
z=x+y
regresar z
devolver función_interior()
Nota
Puede leer más sobre las funciones internas en el artículo de Real Python
Funciones internas: ¿para qué sirven?
La regla LEGB
Una forma útil de recordar cómo Python resuelve el alcance es con la regla LEGB .
Esta regla es un acrónimo de Local, Enclosing, Global, Builtin.
163
Machine Translated by Google
Local (L): el alcance local o actual. Podría ser el cuerpo de una función o el
alcance de nivel superior de un script. Siempre representa el ámbito en el que
está trabajando actualmente el intérprete de Python.
Adjunto (E): El alcance adjunto. Este es el alcance un nivel por encima del
alcance local. Si el alcance local es una función interna, el alcance circundante
es el alcance de la función externa. Si el alcance es una función de nivel
superior, el alcance circundante es el mismo que el alcance global.
Global (G): el alcance global, que es el alcance más alto del script. Contiene
todos los nombres definidos en el script que no están contenidos en el cuerpo
de una función.
Integrado (B): el alcance integrado contiene todos los nombres, como palabras
clave, que están integrados en Python. Funciones como round() y abs() están
en el alcance integrado. Todo lo que pueda utilizar sin definirse primero está
contenido en el alcance integrado.
total = 0
def agregar_a_total(n):
total = total + norte
agregar_al_total(5)
imprimir(total)
Pensarías que el script genera el valor 5, ¿verdad? Intente ejecutarlo para ver
qué sucede.
164
Machine Translated by Google
¡Espera un minuto! De acuerdo con la regla LEGB, Python debería haber reconocido
que el nombre total no existe en el alcance local de la función add_to_total() y haber
ascendido al alcance global para resolver el nombre, ¿verdad?
El problema aquí es que el script intenta realizar una asignación a la variable total, lo
que crea un nuevo nombre en el ámbito local. Luego, cuando Python ejecuta el lado
derecho de la asignación, encuentra el nombre total en el ámbito local sin nada
asignado todavía.
Este tipo de errores son complicados y son una de las razones por las que es mejor
utilizar nombres únicos de variables y funciones sin importar en qué ámbito se
encuentre.
Puede solucionar este problema con la palabra clave global . Intente ejecutar el
siguiente script modificado:
total = 0
def agregar_a_total(n):
total mundial
total = total + norte
agregar_al_total(5)
imprimir(total)
La línea total global le dice a Python que busque en el ámbito global el nombre total.
De esa manera, la línea total = total + n no crea una nueva variable local.
165
Machine Translated by Google
Aunque esto “arregla” el script, el uso de la palabra clave global se considera de mala
educación en general.
Si utiliza global para solucionar problemas como el anterior, deténgase y piense si existe
una mejor manera de escribir su código. ¡A menudo descubrirás que sí!
Primero, aprendió a definir sus propias funciones personalizadas. Viste que las funciones
se componen de dos partes:
1. La firma de la función, que comienza con la palabra clave def e incluye el nombre de la
función y los parámetros de la función.
2. El cuerpo de la función, que contiene el código que se ejecuta cada vez que
se llama la función.
1. Los bucles while repiten algún código mientras alguna condición sigue siendo verdadera
2. Los bucles for repiten algún código para cada elemento en un conjunto de objetos.
Finalmente, aprendió qué es un alcance y cómo Python lo resuelve usando la regla LEGB.
166
Machine Translated by Google
Prueba interactiva
Este capítulo viene con un cuestionario en línea gratuito para verificar su
progreso de aprendizaje. Puede acceder al cuestionario usando su teléfono o
computadora en la siguiente dirección web:
realpython.com/quizzes/pythonbasics6
Recursos adicionales
Para obtener más información sobre funciones y bucles, consulte el siguiente informe.
fuentes:
167
Machine Translated by Google
Capítulo 7
IDLE es bastante bueno para detectar errores como errores de sintaxis y de tiempo de
ejecución, pero hay un tercer tipo de error que quizás ya haya experimentado. Los errores
lógicos ocurren cuando un programa que de otro modo sería válido no hace lo que se
esperaba.
¡Saber cómo encontrar y corregir errores en su código es una habilidad que utilizará durante
toda su carrera de codificación!
¡Vamos!
168
Machine Translated by Google
Nota
Abra una nueva ventana de secuencia de comandos y organice las tres ventanas en su
pantalla para que pueda verlas todas simultáneamente. Esta es una forma de reorganizar
las ventanas:
169
Machine Translated by Google
Nota
En esta sección aprenderá cómo está organizada la ventana Depurar, cómo recorrer su
código con el depurador línea por línea y cómo establecer puntos de interrupción para
ayudar a acelerar el proceso de depuración.
Cuando guarda y ejecuta este script con la ventana de depuración abierta, notará que
la ejecución no llega muy lejos. La ventana de Control de depuración se verá así:
170
Machine Translated by Google
Esto le indica que la línea 1 (que contiene el código para i en el rango(1, 4):)
está a punto de ejecutarse pero aún no ha comenzado. La parte '__main__'.module()
del mensaje en el depurador se refiere al hecho de que actualmente estamos en
la sección "principal" del guión, en lugar de estar, por ejemplo, en
una definición de función antes de que se haya alcanzado el bloque principal de código.
Debajo del panel Pila , hay un panel Locales que enumera algunas cosas extrañas.
buscando cosas como __annotations__, __builtins__, __doc__, etc.
Estas son algunas variables internas del sistema que puedes ignorar por ahora.
A medida que se ejecuta su programa, verá variables declaradas en el código.
se muestran en esta ventana para que pueda realizar un seguimiento de su valor.
171
Machine Translated by Google
En las siguientes secciones, exploraremos qué hace cada uno de estos botones,
comenzando con el botón Paso .
El botón de paso
Hay dos diferencias a las que prestar atención aquí. Primero, el mensaje en la ventana
Pila cambia a:
172
Machine Translated by Google
Continúe presionando el botón Paso para recorrer su código línea por línea y observar lo que sucede
en la ventana del depurador. Cuando llegue a la línea print(f"i es {i} y j es {j}"), podrá ver el resultado
mostrado en la ventana interactiva pieza por pieza.
Más importante aún, puede realizar un seguimiento de los valores crecientes de i y j a medida que
avanza por el bucle for . Probablemente puedas imaginar lo beneficiosa que es esta característica
cuando intentas localizar la fuente de errores en tus programas. Conocer el valor de cada variable
en cada línea de código puede ayudarle a identificar dónde van mal las cosas.
Los puntos de interrupción le indican al depurador cuándo pausar la ejecución del código para que
pueda observar el estado actual del programa. En realidad no rompen nada.
Para establecer un punto de interrupción, haga clic derecho (Mac: Ctrl + Clic ) en la línea de código
en la ventana de secuencia de comandos en la que desea hacer una pausa y seleccione Establecer
punto de interrupción . IDLE resalta la línea en amarillo para indicar que se ha establecido su punto
de interrupción. Puede eliminar un punto de interrupción en cualquier momento haciendo clic derecho
en la línea con un punto de interrupción y seleccionando Borrar punto de interrupción .
Continúe y presione el botón Salir en la parte superior de la ventana de control de depuración para
desactivar el depurador por ahora. Esto no cerrará la ventana y querrás mantenerla abierta porque
la volverás a usar en un momento.
Establezca un punto de interrupción en la línea de código con la declaración print() . La ventana del
script ahora debería verse así:
173
Machine Translated by Google
Ahora ejecute el script presionando F5. Al igual que antes, el panel Pila de la ventana
de control de depuración indica que el depurador se ha iniciado y está esperando
ejecutar la línea 1. Esta vez, en lugar de hacer clic en el botón Paso , haga clic en el
botón Ir y observe lo que sucede en la ventana de depuración:
El panel Pila ahora muestra el siguiente mensaje que indica que está esperando ejecutar
la línea 3:
174
Machine Translated by Google
Si observa el panel Locales , verá que ambas variables i y j tienen los valores 1 y 2,
respectivamente. Al hacer clic en Ir , le indicó al depurador que ejecutara su código
continuamente hasta llegar a un punto de interrupción o al final del programa. Ahora
presione “Ir” nuevamente. La ventana de depuración ahora se ve así:
¿Ves lo que cambió? El mismo mensaje que antes se muestra en el panel Pila , lo que
indica que el depurador está esperando para ejecutar la línea 3 nuevamente. Sin
embargo, ahora los valores de las variables i y j son 2 y 4. La ventana interactiva
también muestra el resultado de ejecutar la línea con print() la primera vez.
Cada vez que presiona el botón Ir , el depurador ejecuta el código continuamente hasta
que se alcanza el siguiente punto de interrupción. Dado que establece el punto de
interrupción en la línea 3, que está dentro del bucle for , el depurador se detiene en esta
línea cada vez que pasa por el bucle.
175
Machine Translated by Google
Presione Ir por tercera vez. Ahora i y j tienen los valores 3 y 6. ¿Qué crees que sucede
cuando presionas Ir una vez más? Dado que el bucle for solo se repite 3 veces, cuando
presiona Ir esta vez, el programa termina de ejecutarse.
“Arriba” y “Fuera”
El botón Over funciona como una especie de combinación de Step and Go . Pasa por
encima de una función o bucle. En otras palabras, si está a punto de ingresar a una
función con el depurador, aún puede ejecutar el código de esa función sin tener que
recorrer cada línea. El botón Over lo lleva directamente al resultado de ejecutar esa función.
Del mismo modo, si ya está dentro de una función o bucle, el botón Fuera ejecuta el
código restante dentro del cuerpo de la función o bucle y luego
pausas.
El siguiente código define una función add_underscores() que toma una sola palabra de
objeto de cadena como argumento y devuelve una nueva cadena que contiene una
copia de la palabra con cada carácter rodeado por guiones bajos.
Por ejemplo, add_underscores("python") debería devolver "_p_y_t_h_o_n_".
176
Machine Translated by Google
frase = "hola"
imprimir (agregar guiones bajos (frase))
Nota
4. Repita los pasos 1 a 3 según sea necesario hasta que el código funcione como se esperaba.
177
Machine Translated by Google
Observe que el script está dividido en dos secciones distintas: una definición de
función (donde se define add_underscores() ) y un bloque de código "principal" que
define una frase variable con el valor "hola" y luego imprime el resultado de la
llamada. add_underscores(frase).
frase = "hola"
178
Machine Translated by Google
En este punto, el código se pausa justo antes de ingresar al bucle for en la función
add_underscores() . Observe que en el panel Locales se muestran dos variables
locales, palabra y nueva_palabra . Actualmente, palabra tiene el valor "hola" y
nueva_palabra tiene el valor "_", como se esperaba.
179
Machine Translated by Google
Haga clic en el botón Paso una vez para ingresar al bucle for . La ventana de depuración cambia y
se muestra una nueva variable i con el valor 0 en el panel "Locals". i es el contador usado en el
bucle for y puedes usarlo para realizar un seguimiento de qué iteración del bucle for estás viendo
actualmente:
Haga clic en Paso una vez más. Si observa el panel Locales , verá que la variable
nueva_palabra ha tomado el valor "h_":
180
Machine Translated by Google
Míralo de cerca. Esta línea le dice a Python que obtenga el siguiente carácter de
la palabra, agregue un guión bajo al final y asigne esta nueva cadena a la variable
nueva_palabra. ¡Este es exactamente el comportamiento que has presenciado al
recorrer el bucle for !
181
Machine Translated by Google
Nota
Si cerró el depurador en el paso anterior sin hacer clic en Salir , es posible
que vea el siguiente error al volver a abrir el
Ventana de control de depuración:
Al igual que antes, su script ahora está en pausa justo antes de ingresar al bucle for
en la función add_underscores() . Presione el botón Paso repetidamente y observe
lo que sucede con la variable new_word en cada iteración.
¿Qué ves ahora? ¡Éxito! ¡Todo funciona como se esperaba!
182
Machine Translated by Google
nueva_palabra = "_"
devolver nueva_palabra
frase = "hola"
yo = 0; nueva_palabra = h_
yo = 1; nueva_palabra = e_
yo = 2; nueva_palabra = l_
yo = 3; nueva_palabra = l_
yo = 4; nueva_palabra = o_
o_
Esto le muestra cuál es el valor de new_word en cada iteración del bucle for . La
línea final que contiene solo un guión bajo es el resultado de ejecutar
print(add_underscore(phrase)) al final del script.
183
Machine Translated by Google
Muchos programadores de Python prefieren este método simple para realizar una
depuración rápida y sucia sobre la marcha. Es una técnica útil pero tiene algunas
desventajas en comparación con el depurador de IDLE.
La desventaja más importante es que la depuración con la función print() requiere que
ejecute el script completo cada vez que desee inspeccionar los valores de sus
variables. Para scripts largos, esto puede ser una enorme pérdida de tiempo en
comparación con establecer puntos de interrupción y usar el botón "Ir" en la ventana
de control de depuración.
Otra desventaja es que tendrás que recordar eliminar esas llamadas a la función print()
de tu código cuando hayas terminado de depurarlo. De lo contrario, los usuarios
pueden ver resultados innecesarios y potencialmente confusos cuando ejecuten su
programa.
El bucle de ejemplo de esta sección puede ser un buen ejemplo para ilustrar el
proceso de depuración, pero no es el mejor ejemplo de código Pythonic. El uso del
índice i indica que podría haber una mejor manera de escribir el bucle.
Una forma de mejorar este bucle es iterar directamente sobre los caracteres de la
palabra de cadena . Aquí hay una forma de hacerlo:
nueva_palabra = "_"
devolver nueva_palabra
El proceso de reescribir el código existente para que sea más limpio, más fácil de leer
y comprender, o para que cumpla con los estándares de código establecidos por un
equipo, se llama refactorización. No discutiremos mucho la refactorización en este
curso, pero es una parte esencial para escribir código de calidad profesional.
184
Machine Translated by Google
Prueba interactiva
Este capítulo viene con un cuestionario en línea gratuito para verificar su
progreso de aprendizaje. Puede acceder al cuestionario usando su teléfono
o computadora en la siguiente dirección web:
realpython.com/quizzes/pythonbasics7
Recursos adicionales
Para obtener más información sobre la depuración de código Python, consulte los
siguientes recursos:
185
Machine Translated by Google
Capítulo 8
Lógica condicional y
Flujo de control
¡Empecemos!
186
Machine Translated by Google
187
Machine Translated by Google
>>> tipo(Verdadero)
<clase 'bool'>
>>> tipo(Falso)
<clase 'bool'>
>>> 1 == 1
Verdadero
>>> 3 > 5
FALSO
Importante
Un error común al escribir condicionales es usar como en lugar de ==, para probar
no . si dos valores del operador de signo =, son iguales o
Puede resultarle útil pensar que los comparadores booleanos plantean una pregunta sobre
dos valores. a == b pregunta si a y b tienen el mismo valor o no . Del mismo modo, a != b
pregunta si a y b tienen valores diferentes.
188
Machine Translated by Google
Verdadero
FALSO
Verdadero
FALSO
Los dos últimos ejemplos anteriores pueden parecerle divertidos. ¿Cómo podría
una cuerda ser mayor o menor que otra?
Los comparadores < y > representan las nociones de mayor que y menor que
cuando se usan con números, pero de manera más general representan la
noción de orden. En este sentido, "a" < "b" comprueba si la cadena "a" va antes
de la cadena "b". Pero, ¿cómo se ordenan las cuerdas?
Dado que las cadenas pueden contener caracteres distintos de las letras del
alfabeto, el orden debe extenderse también a esos otros caracteres.
No entraremos en detalles sobre cómo son los caracteres distintos de las letras.
189
Machine Translated by Google
ordenado. En la práctica, los comparadores < y > se utilizan con mayor frecuencia con
números, no con cadenas.
Ejercicios de revisión
Puede encontrar las soluciones a estos ejercicios y muchos otros recursos adicionales
en línea en realpython.com/pythonbasics/resources.
"bueno" != "malo"
"bueno" != "Bueno"
123 == "123"
"jack" __ "jill"
42 __ "42"
190
Machine Translated by Google
La palabra clave y
Considere las siguientes declaraciones:
Cuando combinamos estas dos afirmaciones usando y, la frase resultante “los gatos tienen cuatro
patas y cola” también es una afirmación verdadera.
Si se niegan ambas afirmaciones, la afirmación compuesta “los gatos no tienen cuatro patas y los
gatos no tienen cola” es falsa.
es falsa. “Los gatos tienen cuatro patas y los gatos no tienen cola” y “los gatos no tienen cuatro patas
y los gatos tienen cola” son ambas falsas.
declaraciones.
Cuando dos enunciados P y Q se combinan con y, el valor de verdad del enunciado compuesto “P y
El operador and de Python funciona exactamente de la misma manera. Aquí hay cuatro ejemplos
de declaraciones compuestas con y:
Verdadero
FALSO
FALSO
191
Machine Translated by Google
FALSO
Verdadero
FALSO
FALSO
FALSO
La palabra clave o
Cuando usamos la palabra "o" en una conversación cotidiana, a veces nos
referimos a una o exclusiva. Es decir, sólo la primera opción o la segunda opción
pueden ser verdaderas.
192
Machine Translated by Google
1. P es verdadera
2. Q es verdadera
Verdadero
FALSO
Verdadero
Verdadero
Verdadero
193
Machine Translated by Google
Verdadero
Verdadero
FALSO
La palabra clave no
La palabra clave not invierte el valor de verdad de una sola expresión:
Uso de no resultado
no es verdad FALSO
no falso verdadero
>>> no es cierto
FALSO
>>> no es falso
Verdadero
Verdadero
194
Machine Translated by Google
Falso == no verdadero
^
Esto sucede porque Python analiza los operadores lógicos según la precedencia
de operadores, al igual que los operadores aritméticos tienen un orden de
precedencia en las matemáticas cotidianas.
Mirando nuevamente la expresión False == not True, not tiene una precedencia
menor que == en el orden de las operaciones. Esto significa que cuando Python
evalúa False == not True, primero intenta evaluar False == not , que es
sintácticamente incorrecto.
195
Machine Translated by Google
Verdadero y no (1 != 1)
Verdadero y no (Falso)
Verdadero y verdadero
Finalmente, Verdadero y Verdadero es simplemente Verdadero. Entonces, después de algunos pasos, puede
ver que Verdadero y no (1! = 1) se evalúa como Verdadero.
Comience evaluando las dos expresiones entre paréntesis. "A" != "A" es falso porque
"A" es igual a sí mismo. 2 >= 3 también es falso porque 2 es menor que 3. Esto le
da la siguiente expresión equivalente, pero más simple:
(Falso) o no (Falso)
Dado que not tiene mayor precedencia que o, la expresión anterior equivale a lo
siguiente:
not False es True, así que puedes simplificar la expresión una vez más:
196
Machine Translated by Google
Falso o Verdadero
Por ejemplo, tras la primera inspección, puede esperar que lo siguiente dé como
resultado Verdadero, pero en realidad devuelve Falso:
FALSO
La razón por la que esto es Falso es que el operador == tiene una precedencia mayor
que y, por lo que Python interpreta la expresión como Verdadero y (Falso ==
Verdadero) y Falso. Dado que False == True es False, esto es equivalente a True y
False y False, que se evalúa como False.
Verdadero
Con un poco de práctica, podrás entender lo que está sucediendo y crear tus propias
declaraciones condicionales compuestas cuando las necesites.
Ejercicios de revisión
Puede encontrar las soluciones a estos ejercicios y muchos otros recursos adicionales
en línea en realpython.com/pythonbasics/resources.
197
Machine Translated by Google
(1 <= 1) y (1! = 1)
no (1 != 2)
("bueno" != "Bueno") y no (1 == 1)
2. Agregue paréntesis cuando sea necesario para que cada una de las siguientes
expresiones se evalúe como Verdadera:
Falso == no verdadero
Verdadero y Falso == Verdadero y Falso
La declaración si
Una declaración if le dice a Python que solo ejecute una parte del código si se cumple
una condición.
si 2 + 2 == 4:
En inglés, puedes leer esto como "si 2 + 2 es 4, entonces imprime la cadena '2 y 2 es 4'".
Al igual que los bucles while , una declaración if tiene tres partes:
198
Machine Translated by Google
1. La palabra clave if
si 2 + 2 == 5:
print("¿Es este el universo espejo?")
Nota
Dejar fuera los dos puntos (:) después de la condición de prueba en una
declaración if genera un error de sintaxis:
>>> si 2 + 2 == 4
Error de sintaxis: sintaxis invalida
Una vez que se ejecuta el bloque de código sangrado en una declaración if , Python
continuará ejecutando el resto del programa.
grado = 95
199
Machine Translated by Google
La salida se ve así:
¡Pasaste la clase!
Gracias por atender.
grado = 40
200
Machine Translated by Google
No pasaste la clase :(
Gracias por atender.
Afortunadamente, existe una palabra clave que hace para Python lo que hace la
palabra "de lo contrario" en inglés.
El siguiente script usa else para acortar el código del script anterior para mostrar si un
estudiante aprobó o no una clase:
grado = 40
En inglés, las declaraciones if y else juntas dicen: "Si la calificación es al menos 70,
imprima la cadena "¡Aprobaste la clase!"; de lo contrario, imprima la cadena "No
pasaste la clase :(".
Observe que la palabra clave else no tiene condición de prueba y va seguida de dos
puntos. No se necesita ninguna condición, porque se ejecuta para cualquier condición
que falle la condición de prueba de la declaración if .
201
Machine Translated by Google
Importante
Dejar fuera los dos puntos (:) de la palabra clave else generará un
Error de sintaxis:
>>> si 2 + 2 == 5:
... print("¿Quién rompió mis matemáticas?")
... demás
Error de sintaxis: sintaxis invalida
No pasaste la clase :(
Gracias por atender.
La línea que imprime "Gracias por asistir". todavía se ejecuta, incluso si se ejecuta el bloque
de código sangrado después de else .
Las palabras clave if y else funcionan bien juntas si solo necesita probar una condición con
exactamente dos estados.
Al igual que las declaraciones if , las declaraciones elif tienen tres partes:
202
Machine Translated by Google
Importante
Dejar los dos puntos (:) al final de una declaración elif genera
un error de sintaxis:
>>> si 2 + 2 == 5:
... print("¿Quién rompió mis matemáticas?")
... elif 2 + 2 == 4
Error de sintaxis: sintaxis invalida
El siguiente script combina if, elif y else para imprimir la calificación con letras que
obtuvo un estudiante en una clase:
grado = 85 # 1
Tanto la calificación >= 80 como la calificación >= 70 son Verdaderas cuando la calificación es 85,
por lo que es de esperar que se ejecuten ambos bloques elif en las líneas 3 y 4 .
Sin embargo, sólo se ejecuta el primer bloque para el cual la condición de prueba
es Verdadera . Todos los bloques elif y else restantes se omiten, por lo que la
ejecución del script produce el siguiente resultado:
203
Machine Translated by Google
Las palabras clave if, elif y else son algunas de las palabras clave más utilizadas en el
lenguaje Python. Le permiten escribir código que responde a diferentes condiciones con
diferente comportamiento.
La declaración if le permite resolver problemas más complejos que el código sin ninguna
lógica condicional. ¡Incluso puedes anidar una declaración if dentro de otra para escribir
código que maneje una lógica tremendamente compleja!
Declaraciones if anidadas
Al igual que los bucles for y while se pueden anidar uno dentro de otro, se anida una
declaración if dentro de otra para crear una toma de decisiones complicada.
estructuras.
Considere el siguiente escenario. Dos personas practican un deporte uno contra otro. Debes
decidir cuál de los dos jugadores gana dependiendo de las puntuaciones de los jugadores y
del deporte que practican:
• Si los dos jugadores juegan baloncesto, gana el jugador con mayor puntuación.
• Si los dos jugadores están jugando al golf, entonces el jugador con el menor
la puntuación gana.
• En cualquiera de los deportes, si los dos puntajes son iguales, el juego es un empate.
204
Machine Translated by Google
#1
si sport.lower() == "baloncesto":
si puntuación_p1 == puntuación_p2:
demás:
print("Deporte desconocido")
Este programa primero le pide al usuario que ingrese un deporte y los puntajes de dos
jugadores.
205
Machine Translated by Google
La salida del script depende del valor de entrada. Aquí hay una muestra
ejecución utilizando el "baloncesto" como deporte:
El jugador 1 gana.
Aquí está el resultado con las mismas puntuaciones de los jugadores y el deporte cambiado.
a "golf":
El jugador 2 gana.
Si ingresa algo además de baloncesto o golf para el deporte, el programa muestra Deporte
desconocido.
En total, hay siete formas posibles en las que se puede ejecutar el programa,
los cuales se describen en la siguiente tabla:
206
Machine Translated by Google
Las declaraciones if anidadas pueden crear muchas formas posibles de ejecutar su código. Si tiene
muchas declaraciones if profundamente anidadas (más de dos niveles), entonces la cantidad de
formas posibles en que se puede ejecutar el código crece rápidamente.
Nota
if p1_score == p2_score:
print("El juego es un empate.")
207
Machine Translated by Google
demás:
print("Deporte desconocido.")
Todavía quedan bastantes maneras. ¿Se te ocurre alguna forma de simplificar el programa?
deporte = deporte.inferior()
p1_wins_basketball = (deporte == "baloncesto") y (p1_score > p2_score)
p1_wins_golf = (deporte == "golf") y (p1_score < p2_score) p1_wins =
jugador1_gana_basketball o jugador1_gana_golf
En la siguiente línea, tenemos una estructura que puede parecer un poco extraña.
Hay un operador de asignación (=) seguido de una expresión con el comparador de igualdad
(==). Esta línea evalúa la siguiente expresión lógica compuesta y asigna su valor a la variable
p1_wins_basketball :
208
Machine Translated by Google
es "golf" y la puntuación del jugador 1 es menor que la puntuación del jugador 2, entonces p1_
wins_golf es Verdadero.
si puntuación_p1 == puntuación_p2:
print("Deporte desconocido")
En esta versión revisada del programa, solo hay cuatro formas en que se
puede ejecutar el programa y el código es más fácil de entender.
Ejercicios de revisión
1. Escriba un script que solicite al usuario que ingrese una palabra usando la función
input() , almacene esa entrada en una variable y luego muestre si la longitud de esa
cadena es menor de 5 caracteres, mayor de 5 caracteres o igual a 5 caracteres usando
un conjunto de if, elif
209
Machine Translated by Google
y más declaraciones.
Por ejemplo, 3 es factor de 12 porque 12 dividido por 3 es 4, sin resto. Sin embargo, 5 no
es factor de 12 porque 5 entra en 12 dos veces y el resto es 2.
Escriba un script factores.py que le pida al usuario que ingrese un número entero positivo
y luego imprima los factores de ese número. Aquí hay una ejecución de muestra del
programa con salida:
Sugerencia: recuerde del Capítulo 5 que puede usar el operador % para obtener el resto
de dividir un número por otro.
Puede encontrar las soluciones a este desafío de código y muchos otros recursos
adicionales en línea en realpython.com/pythonbasics/resources.
210
Machine Translated by Google
El siguiente ejemplo utiliza un bucle for con una instrucción if para calcular y mostrar
la suma de todos los números enteros pares menores de 100:
suma_de_pares = 0
suma_de_pares = suma_de_pares + n
imprimir(suma_de_eventos)
211
Machine Translated by Google
romper
La palabra clave break le dice a Python que literalmente salga de un bucle. Es decir,
el ciclo se detiene por completo y se ejecuta cualquier código posterior al ciclo.
Por ejemplo, el siguiente código recorre los números del 0 al 3, pero detiene el ciclo
cuando se encuentra el número 2 :
romper
imprimir(n)
Terminado con n = 2
continuar
Por ejemplo, el siguiente código recorre los números del 0 al 3, imprimiendo cada
número a medida que avanza, pero omite el número 2:
continuar
imprimir(yo)
212
Machine Translated by Google
0
1
3
Terminado con i = 3
Nota
Siempre es una buena idea dar nombres cortos pero descriptivos a las
variables que faciliten saber lo que se supone que deben representar.
En resumen, la palabra clave break se usa para detener un bucle si se cumple una
determinada condición, y la palabra clave continue se utiliza para omitir una iteración
de un bucle cuando se cumple una determinada condición.
para...si no Bucles
Los bucles pueden tener su propia cláusula else en Python, aunque esta
estructura no se usa con mucha frecuencia.
Veamos un ejemplo:
213
Machine Translated by Google
Si ejecuta el código del ejemplo, verá que No había ninguna 'X' en la frase
impresa en la consola.
Ahora intenta cambiar la frase a la cadena "X marca el lugar". Cuando ejecuta el mismo
código con esta frase, no hay resultado. ¿Qué está sucediendo?
Por otro lado, cuando ejecuta el código con la frase = "X marca el lugar", la
línea que contiene la instrucción break se ejecuta, por lo que el bloque else
nunca se ejecuta y no se muestra ningún resultado.
A continuación se muestra un ejemplo práctico que le brinda a un usuario tres intentos para ingresar
una contraseña:
para n en el rango(3):
contraseña = entrada("Contraseña: ")
si contraseña == "Yo<3Bieber":
romper
Después de tres intentos fallidos, el bucle for termina sin ejecutar la línea de
código que contiene break. En ese caso, lo demás
214