0% encontró este documento útil (0 votos)
1 vistas25 páginas

PROGRAMACION

La guía de laboratorios de la asignatura Lenguaje de Programación II de la Universidad Nacional Mayor de San Marcos se centra en las estructuras de control en Python, abordando buenas prácticas de codificación, tipos de control de flujo, y el uso de comentarios. Se explican conceptos como condicionales, operadores de comparación y lógicos, así como la importancia de la indentación y la legibilidad del código. Además, se presentan ejemplos prácticos para ilustrar el uso de estas estructuras en programación.

Cargado por

bmerinomore
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
1 vistas25 páginas

PROGRAMACION

La guía de laboratorios de la asignatura Lenguaje de Programación II de la Universidad Nacional Mayor de San Marcos se centra en las estructuras de control en Python, abordando buenas prácticas de codificación, tipos de control de flujo, y el uso de comentarios. Se explican conceptos como condicionales, operadores de comparación y lógicos, así como la importancia de la indentación y la legibilidad del código. Además, se presentan ejemplos prácticos para ilustrar el uso de estas estructuras en programación.

Cargado por

bmerinomore
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD NACIONAL MAYOR DE SAN

MARCOS

FACULTAD DE INGENIERÍAS

GUÍA DE LABORATORIOS

ASIGNATURA
LENGUAJE DE PROGRAMACION II
TERCER CICLO (III)
TIPO DE AMBIENTE
LABORATORIO DE CÓMPUTO
Docente: Dr. Ing. Eladio Llamoga Sánchez

LIMA – PERÚ

2025
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

LENGUAJE DE PROGRAMACION II
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

PRÁCTICA - SEMANA N.º 02

TEMA: ESTRUCTURAS DE CONTROL EN PYTHON

I. OBJETIVOS:
a. Conocer las buenas prácticas al escribir un código en Pyhton
b. Reconocer los diferentes tipos de control de flujo
c. Conocer la función print, tipos de datos, variables, conversión

II. INTRODUCCIÓN:

CONTROL DE FLUJO
• Todo programa informático está formado por instrucciones que se ejecutan en forma
secuencial de «arriba» a «abajo», de igual manera que leeríamos un libro.
• Este orden constituye el llamado flujo del programa. Es posible modificar este flujo
secuencial para que tome bifurcaciones o repita ciertas instrucciones. Las sentencias que
nos permiten hacer estas modificaciones se engloban en el control de flujo.

Condicionales
✓ Definición de bloques
o A diferencia de otros lenguajes que utilizan llaves para definir los bloques de código,
cuando Guido Van Rossum creó el lenguaje quiso evitar estos caracteres por
considerarlos innecesarios.
o Es por ello que en Python los bloques de código se definen a través de espacios en
blanco, preferiblemente 4. En términos técnicos se habla del tamaño de indentación.
(PEP 8 – Guía de estilo para código Python | [Link])

✓ Comentarios
o Los comentarios son anotaciones que podemos incluir en nuestro programa y que nos
permiten aclarar ciertos aspectos del código.
o Estas indicaciones son ignoradas por el intérprete de Python. Los comentarios se
incluyen usando el símbolo almohadilla # y comprenden hasta el final de la línea.

Tipos de comentarios en Python


a. Comentarios de una sola línea

La línea que comienza con # es un comentario, por lo que no será ejecutada. Solo la
segunda línea, que contiene el código print(), será ejecutada.
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

# Este es un comentario de una sola línea


print("Hola, Mundo")

• También puedes añadir comentarios al final de una línea de código:

print("Hola, Mundo") # Este es un comentario al final de una línea de código

b. Comentarios de varias líneas


En Python, no existe un símbolo específico para los comentarios de varias líneas. Sin
embargo, puedes crear comentarios que abarquen varias líneas utilizando varias
líneas de comentarios individuales con #, o utilizando comillas triples (""" o '''), que
normalmente se utilizan para docstrings.

Opción 1: Varias líneas de comentarios con #

# Este es un comentario de varias líneas


# Cada línea debe comenzar con el símbolo de almohadilla
# para que sea considerado un comentario

Opción 2: Comentarios de varias líneas con comillas triples

Aunque las comillas triples se utilizan oficialmente para documentar funciones,


también puedes usarlas para hacer comentarios extensos.

"""
Este es un comentario de varias líneas que puede abarcar
varias líneas de texto sin necesidad de utilizar el símbolo #
en cada una de ellas.
"""
print("Hola, Mundo")

Reglas para escribir buenos comentarios


1. Los comentarios no deberían duplicar el código.
2. Los buenos comentarios no arreglan un código poco claro.
3. Si no puedes escribir un comentario claro, puede haber un problema en el código.
4. Los comentarios deberían evitar la confusión, no crearla.
5. Usa comentarios para explicar código no idiomático.
6. Proporciona enlaces a la fuente original del código copiado.
7. Incluye enlaces a referencias externas que sean de ayuda.
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

8. Añade comentarios cuando arregles errores.


9. Usa comentarios para destacar implementaciones incompletas.

Ancho del código

o Los programas suelen ser más legibles cuando las líneas no son excesivamente largas.
o La longitud máxima de línea recomendada por la guía de estilo de Python es de 80
caracteres.
o Sin embargo, esto genera una cierta polémica hoy en día, ya que los tamaños de
pantalla han aumentado y las resoluciones son mucho mayores que hace años. Así las
líneas de más de 80 caracteres se siguen visualizando correctamente. Hay personas que
son más estrictas en este límite y otras más flexibles.
o En caso de que queramos romper una línea de código demasiado larga, tenemos dos
opciones:

1. Usar la barra invertida \:

Ejemplo1. (Modo normal y usando la barra invertida)

factorial = 4 * 3 * 2 * 1
print(factorial)

factorial = 4 * \
3 * \
2 * \
1
print(factorial)

2. Usar los paréntesis (...): A través de la línea de comandos de Python (CLI)


UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

Las sentencia if, else

• La sentencia condicional en Python (al igual que en muchos otros lenguajes de


programación) es if.
• En su escritura debemos añadir una expresión de comparación terminando con dos
puntos al final de la línea. Veamos un ejemplo:

temperatura = 40
if temperatura > 35:
print('Aviso por alta temperatura')

Salida:
Aviso por alta temperatura

• En el caso anterior se puede ver claramente que la condición se cumple y por tanto se
ejecuta la instrucción que tenemos dentro del cuerpo de la condición. Pero podría no
ser así. Para controlar ese caso existe la sentencia else.
• Veamos el mismo ejemplo anterior, pero añadiendo esta variante:
Ejemplo:
temperatura = 20
if temperatura > 35:
print('Aviso por alta temperatura')
else:
print('Parámetros normales')

Salida:
Parámetros normales

Ejemplo:
Podríamos tener incluso condiciones dentro de condiciones, lo que se viene a llamar
técnicamente condiciones anidadas. Veamos un ejemplo ampliando el caso anterior:

temperatura = 20
if temperatura < 20:
if temperatura < 10:
print('Nivel azul')
else:
print('Nivel verde')
else:
if temperatura < 30:
print('Nivel naranja')
else:
print('Nivel rojo')

Salida:
Nivel naranja
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

• Python nos ofrece una mejora en la escritura de condiciones anidadas cuando aparecen
consecutivamente un else y un if. Podemos sustituirlos por la sentencia elif:

Construcción de la palabra elif

Apliquemos esta mejora al código del ejemplo anterior

temperatura = 20
if temperatura < 20:
if temperatura < 10:
print('Nivel azul')
else:
print('Nivel verde')
elif temperatura < 30:
print('Nivel naranja')
else:
print('Nivel rojo')

Salida:
Nivel naranja

Asignaciones condicionales
Supongamos que queremos asignar un nivel de riesgo de incendio en función de la
temperatura. En su versión clásica escribiríamos:
temperature = 35
if temperature < 30:
riesgo_fuego = 'LOW'
else:
riesgo_fuego = 'HIGH'

print(riesgo_fuego)

Salida:
HIGH

Operadores de comparación

Operador Símbolo
Igualdad ==
Desigualdad !=
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

Menor que <


Menor o igual que <=
Mayor que >
Mayor o igual que >=

value = 8

print(value == 8)
print(value != 8)
print(value < 12)
print(value <= 7)
print(value > 4)
print(value >= 9)
Salida
True
False
True
False
True
False

Python ofrece la posibilidad de ver si un valor está entre dos límites de manera directa. Así,
por ejemplo, para descubrir si x está entre 4 y 12 haríamos:

x = 8

print(4 <= x <= 12)


Salida:
True

Ejemplo:
x = 'SPAM'
if 'rubbery' in 'shrubbery':
print(x * 8)
x += 'NI'
if [Link]('NI'):
x *= 2
print(x)
Salida:
SPAMSPAMSPAMSPAMSPAMSPAMSPAMSPAM
SPAMNISPAMNI

Nota:
El método endswith() en Python es una función que permite comprobar si una cadena
termina con una subcadena específica. En nuestro caso verifica que en la cadena (‘SPAMNI’)
termine con la subcadena (‘NI’).
Devuelve True si la cadena termina con el valor especificado, y False si no.
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

Sintaxis:

[Link](subcadena[, inicio[, fin]])

Donde:

• cadena : La cadena en la que deseas buscar la subcadena al final.


• subcadena : La subcadena que deseas buscar al final de la cadena.
• inicio (opcional): Índice opcional para especificar el inicio de la búsqueda en la
cadena.
• fin (opcional): Índice opcional para especificar el fin de la búsqueda en la cadena.
El método endswith() devuelve True si la cadena termina con la subcadena especificada
y False en caso contrario.

Ejemplo:
if 1: print('hello')
Salida:
hello

Nota: 1 tiene el valor booleano True y 0 tiene el valor booleano False

Operadores lógicos
Podemos escribir condiciones más complejas usando los operadores lógicos:
✓ and
✓ or
✓ not

x = 8

print(x > 4 or x > 12) # True or False


print(x < 4 or x > 12) # False or False
print(x > 4 and x > 12) # True and False
print(x > 4 and x < 12) # True and True

Salida:
True
False
False
True
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

Cortocircuito lógico
• Las expresiones lógicas no se evalúan por completo si se dan una serie de
circunstancias. Aquí es donde entra el concepto de cortocircuito que no es más que una
forma de denominar a este escenario.
• Supongamos un ejemplo en el que utilizamos un teléfono móvil que mide la batería por
la variable power de 0 a 100% y la cobertura 4G por la variable signal_4g de 0 a 100%.

Para poder enviar un mensaje por Telegram necesitamos tener al menos un 25% de
batería y al menos un 10% de cobertura:
power = 10
señal_4g = 60

print(power > 25 and señal_4g > 10)


Salida:
False

• Dado que estamos en un and y la primera condición power > 25 no se cumple, se


produce un cortocircuito y no se sigue evaluando el resto de la expresión porque ya se
sabe que va a dar False

Cortocircuito para expresión lógica «and»

Ejemplo:
print(2 and 3, 3 and 2)
Salida:
32

Nota:
Aquí, ambos operandos son verdaderos en la primera línea, por lo que Python evalúa ambos
lados y devuelve el objeto de la derecha.

Ejemplo:
print([] and {})

print(3 and [])


Salida:
[]
[]

Nota:
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

En la segunda prueba, el operando izquierdo es falso ([]), por lo que Python se detiene y lo
devuelve como resultado. En la última prueba, el lado izquierdo es verdadero (3), por lo que
Python evalúa y devuelve el objeto de la derecha, que resulta ser un [] falso.

Otro ejemplo. Para poder hacer una llamada VoIP necesitamos tener al menos un 40%
de batería o al menos un 30% de cobertura:

power = 50
señal_4g = 20

print(power > 40 or señal_4g > 30)


Salida:
True

Cortocircuito para expresión lógica «or»

Dado que estamos en un or y la primera condición power > 40 se cumple, se produce un


cortocircuito y no se sigue evaluando el resto de la expresión porque ya se sabe que va a
dar True.

Ejemplo:
print(2 or 3, 3 or 2)
Salida:
23

Ejemplo:
print([] or 3)

print([] or {})
Salida:
3
{}

Nota:
En las otras dos pruebas, el operando izquierdo es falso (un objeto vacío), por lo que Python
simplemente evalúa y devuelve el objeto de la derecha, que puede tener un valor verdadero
o falso al realizar la prueba

Booleanos» en condiciones
Cuando queremos preguntar por la veracidad de una determinada variable «booleana» en
una condición, la primera aproximación que parece razonable es la siguiente:
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

is_cold = True #variable booleana

if is_cold == True:
print('Usar chaqueta')
else:
print('Usar camiseta')

Salida:
Usar chaqueta

Se puede simplificar esta condición tal que así:

is_cold = True

if is_cold:
print('Usar chaqueta')
else:
print('Usar camiseta')

Salida:
Usar chaqueta

En el caso de que la comparación fuera para un valor falso lo haríamos así:


is_cold = False

if not is_cold: # Equivalente a if is_cold == False


print('Usar camiseta')
else:
print('Usar chaqueta')

Salida:
Usa camiseta

Valor nulo
• None es un valor especial de Python que almacena el valor nulo4. Veamos cómo se
comporta al incorporarlo en condiciones de veracidad:
value = None

if value:
print(' El valor tiene que ser u valor util')
else:
# value podría contener None, False (u otro)
print('El valor parece ser nulo')
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

Salida:
El valor parece ser nulo

• Para distinguir None de los valores propiamente booleanos, se recomienda el uso del
operador is.
• Veamos un ejemplo en el que tratamos de averiguar si un valor es nulo:
value = None

if value is None:
print('El valor claramente es None')
else:
# value podría contener True, False (u otro)
print('El valor tiene que ser un valor util')

Salida:
El valor claramente es None

• De igual forma, podemos usar esta construcción para el caso contrario. La forma
«pitónica» de preguntar si algo no es nulo es la siguiente:
• Aquí utilizamos is en vez del operador == al comprobar si un valor es nulo, ya que ambas
aproximaciones nos dan el mismo resultado

value = 99

if value is not None:


print(f'{value=}')
Salida:
value=99

Observe la comparación
value = None

print(value is None)
print(value == None)

Salida:
True
True

• La respuesta es que el operador is comprueba únicamente si los identificadores


(posiciones en memoria) de dos objetos son iguales, mientras que la comparación ==
puede englobar muchas otras acciones. De este hecho se deriva que su ejecución sea
mucho más rápida y que se eviten «falsos positivos».
• Cuando ejecutamos un programa Python existe una serie de objetos precargados en
memoria. Uno de ellos es None:
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

value = None

print (value is None)


print (value == None)

print(id(None))
print(id(value))

Salida:
True
True
140726574984336
140726574984336

Veracidad

• Cuando trabajamos con expresiones que incorporan valores booleanos, se produce una
conversión implícita que transforma los tipos de datos involucrados a valores True o
False.
• Lo primero que debemos entender de cara comprobar la veracidad son los valores que
evalúan a falso o evalúan a verdadero.
• Veamos las únicas «cosas» que son evaluadas a False en Python:

print(bool(False))
print(bool(None))
print(bool(0.0))
print(bool('')) # Cadena vacía
print(bool([])) # lista vacía
print(bool(())) # tupla vacía
print(bool({})) # diccionario vacío
print(bool(set())) # conjunto vacío

Salida:
False
False
False
False # Sale el valor True si fuera bool(‘ ‘) donde hay un espacio entre las comillas
False
False
False
False

Asignación lógica
• Es posible utilizar operadores lógicos en sentencias de asignación sacando partido de las
tablas de la verdad que funcionan para estos casos.
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

• Veamos un ejemplo de asignación lógica utilizando el operador or:

b = 0
c = 5
a = b or c

print(a)

Salida:
5

Nota:
▪ En la línea 3 podemos ver que se está aplicando una expresión lógica, por lo tanto se
aplica una conversión implícita de los valores enteros a valores «booleanos».
▪ En este sentido el valor 0 se evalúa a falso y el valor 5 se evalúa a verdadero.
▪ Como estamos en un or el resultado será verdadero, que en este caso es el valor 5
asignado finalmente a la variable a.

Veamos el mismo ejemplo anterior, pero utilizando el operador and:


b = 0
c = 5
a = b and c

print(a)

Salida:
0

Operador morsa (walrus)

• A partir de Python 3.8 se incorpora el operador morsa que permite unificar sentencias de
asignación dentro de expresiones.
• Su nombre proviene de la forma que adquiere := (te permite asignar un valor a una
variable dentro de una expresión, combinando asignación y uso en un solo paso).
• Supongamos un ejemplo en el que computamos el perímetro de una circunferencia,
indicando al usuario que debe incrementarlo siempre y cuando no llegue a un mínimo
establecido.
Versión tradicional:
radio = 4.25
perimetro = 2 * 3.14 * radio
if perimetro < 100:
print('Incrementar el radio para alcanzar el perímetro mínimo')
print('Perimetro Actual:', perimetro)
Salida:
Incrementar el radio para alcanzar el perímetro mínimo
Perímetro Actual: 26.69
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

Con operador morsa


radio = 4.25
if (perimetro := 2 * 3.14 * radio) < 100:
print('Incrementar el radio para alcanzar el perimetro minimo')
print('Perimetro Actual:', perimetro)

Salida:
Incrementar el radio para alcanzar el perímetro mínimo
Perímetro Actual: 26.69

Ejemplo: (Versión tradicional)


value = input("Enter a number: ")
if value:
print(f'You entered {value}')
Salida:
Enter a number: 23
You entered: 23

Ejemplo: Realice el mismo ejemplo, pero con el operador morsa

Bucles
• Cuando queremos hacer algo más de una vez, necesitamos recurrir a un bucle.
• En esta sección veremos las distintas sentencias en Python que nos permiten repetir un
bloque de código.

La sentencia while
• El primer mecanismo que existe en Python para repetir instrucciones es usar la
sentencia while.
• La semántica tras esta sentencia es: «Mientras se cumpla la condición haz algo».

want_greet = 'S' # importante dar un valor inicial

while want_greet == 'S':


print('Hola qué tal!')
want_greet = input('¿Quiere otro saludo? [S/N] ')
print('Que tenga buen dia')

Salida:
¡Hola qué tal!
¿Quiere otro saludo? [S/N] S
¡Hola qué tal!
¿Quiere otro saludo? [S/N] S
¡Hola qué tal!
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

¿Quiere otro saludo? [S/N] N


Que tenga un buen día

Nota: La condición del bucle se comprueba en cada nueva repetición.


En este caso chequeamos que la variable want_greet sea igual a ‘S’. Dentro del cuerpo del
bucle estamos mostrando un mensaje y pidiendo la opción al usuario

Romper un bucle while (con break)


• Python ofrece la posibilidad de romper o finalizar un bucle antes de que se cumpla la
condición de parada.
• Supongamos que, en el ejemplo anterior, establecemos un máximo de 4 saludos:

MAX_GREETS = 4

num_greets = 0
want_greet = 'S'

while want_greet == 'S':


print('Hola qué tal!')
num_greets += 1
if num_greets == MAX_GREETS:
print('Máximo número de saludos alcanzado')
break
want_greet = input('¿Quiere otro saludo? [S/N] ')

print('Que tenga un buen día')

Salida:
Hola qué tal!
¿Quiere otro saludo? [S/N] S
Hola qué tal!
¿Quiere otro saludo? [S/N] S
Hola qué tal!
¿Quiere otro saludo? [S/N] S
Hola qué tal!
Máximo número de saludos alcanzado
Que tenga un buen día

Nota: Como hemos visto en este ejemplo, break nos permite finalizar el bucle una vez que
hemos llegado al máximo número de saludos.
✓ Pero si no hubiéramos llegado a dicho límite, el bucle habría seguido hasta que el usuario
indicara que no quiere más saludos

Otra forma de resolver este ejercicio sería incorporar una condición al bucle:
while want_greet == ’S’ and num_questions < MAX_GREETS:

MAX_GREETS = 4
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

num_greets = 0
want_greet = 'S'

while want_greet == 'S' and MAX_GREETS:


print('Hola qué tal!')
num_greets += 1
if num_greets == MAX_GREETS:
print('Máximo número de saludos alcanzado')
break
want_greet = input('¿Quiere otro saludo? [S/N] ')

print('Que tenga un buen día')

Comprobar la rotura
• Python nos ofrece la posibilidad de detectar si el bucle ha acabado de forma ordinaria,
esto es, ha finalizado por no cumplirse la condición establecida.
• Para ello podemos hacer uso de la sentencia else como parte del propio bucle. Si el bucle
while finaliza normalmente (sin llamada a break) el flujo de control pasa a la sentencia
opcional else.
• Veamos su comportamiento siguiendo con el ejemplo que venimos trabajando:

MAX_GREETS = 4

num_greets = 0
want_greet = 'S'

while want_greet == 'S':


print('Hola qué tal!')
num_greets += 1
if num_greets == MAX_GREETS:
print('Máximo número de saludos alcanzado')
break
want_greet = input('¿Quiere otro saludo? [S/N] ')
else:
print('Usted no quiere más saludos')
print('Que tenga un buen día')

Salida:
Hola qué tal!
¿Quiere otro saludo? [S/N] S
Hola qué tal!
¿Quiere otro saludo? [S/N] N
Usted no quiere más saludos
Que tenga un buen día

Nota Importante: Si hubiéramos agotado el número de saludos NO se habría ejecutado la


UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

cláusula else del bucle ya que habríamos roto el flujo con un break.

Continuar un bucle
• Hay situaciones en las que, en vez de romper un bucle, nos interesa saltar adelante
hacia la siguiente repetición. Para ello Python nos ofrece la sentencia continue que
hace precisamente eso, descartar el resto del código del bucle y saltar a la siguiente
iteración.
• Continuamos con el ejemplo anterior y vamos a contar el número de respuestas válidas:
want_greet = 'S'
valid_options = 0

while want_greet == 'S':


print('Hola qué tal!')
want_greet = input('¿Quiere otro saludo? [S/N] ')
if want_greet not in 'SN':
print('No le he entendido pero le saludo')
want_greet = 'S'
continue
valid_options += 1

print(f'{valid_options} respuestas válidas')


print('Que tenga un buen día')

Salida:
Hola qué tal!
¿Quiere otro saludo? [S/N] S
Hola qué tal!
¿Quiere otro saludo? [S/N] A
No le he entendido pero le saludo
Hola qué tal!
¿Quiere otro saludo? [S/N] B
No le he entendido pero le saludo
Hola qué tal!
¿Quiere otro saludo? [S/N] N
2 respuestas válidas
Que tenga un buen día

Bucle infinito
• Si no establecemos correctamente la condición de parada o bien el valor de alguna
variable está fuera de control, es posible que lleguemos a una situación de bucle infinito,
del que nunca podamos salir. Veamos un ejemplo de esto:
num = 1

while num != 10:


num += 2
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

print(num)

• No aparece un resultado, dando la apariencia que estuviera colgado,


• El problema que surje es que la variable num toma los valores 1, 3, 5, 7, 9, 11, ... por lo
que nunca se cumple la condición de parada del bucle. Esto hace que repitamos
«eternamente» la instrucción de incremento.
• Para abortar una situación de bucle infinito podemos pulsar en el teclado la combinación
CTRL-C. Se puede ver reflejado en el intérprete de Python por KeyboardInterrupt.

Ejemplo:
Imaginemos que queremos escribir un programa que ayude al profesorado a introducir las
notas de un examen. Si la nota no está en el intervalo [0, 10] mostramos un mensaje de
error, en otro caso seguimos pidiendo valores:

while True:
marcacion = float(input('Introduzca nueva nota: '))
if not(0 <= marcacion <= 10):
print('Nota fuera de rango')
break
print(marcacion)

Salida:
Introduzca nueva nota: 5
5.0
Introduzca nueva nota: 3
3.0
Introduzca nueva nota: 11
Nota fuera de rango

Usando el operador morsa:


while 0 <= (marcacion := float(input('Introduzca una nueva nota: '))) <= 10:
print(marcacion)
print('Nota fuera de rango')
Salida:
Introduzca nueva nota: 5
5.0
Introduzca nueva nota: 3
3.0
Introduzca nueva nota: 11
Nota fuera de rango

La sentencia for
• Python permite recorrer aquellos tipos de datos que sean iterables, es decir, que
admitan iterar sobre ellos. Algunos ejemplos de tipos y estructuras de datos que
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

permiten ser iteradas (recorridas) son: cadenas de texto, listas, diccionarios, ficheros,
etc. La sentencia for nos permite realizar esta acción.
• A continuación, se plantea un ejemplo en el que vamos a recorrer (iterar) una cadena de
texto:
palabra = 'Python'

for letra in palabra:


print(letra)
Salida:
P
y
t
h
o
n

Nota: El bucle va tomando, en cada iteración, cada uno de los elementos de la variable que
especifiquemos. En este caso concreto letra va tomando cada una de las letras que existen
en palabra, porque una cadena de texto está formada por elementos que son caracteres.

Romper un bucle for


• Una sentencia break dentro de un for rompe el bucle, igual que veíamos para los bucles
while.
• Veamos un ejemplo con el código anterior. En este caso vamos a recorrer una cadena
de texto y pararemos el bucle cuando encontremos una letra t minúscula:

palabra = 'Python'

for letra in palabra:


if letra == 't':
break
print(letra)
Salida:
P
Y

Secuencias de números
Función range
• Python tiene una función range() que devuelve un flujo de números en el rango
especificado. Una de las grandes ventajas es que la «lista» generada no se construye
explícitamente, sino que cada valor se genera bajo demanda. Esta técnica mejora el
consumo de recursos, especialmente en términos de memoria.
• La técnica para la generación de secuencias de números es muy similar a la utilizada
en los «slices» de cadenas de texto.
Sintaxis:
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

range(start, stop, step)

• start: Es opcional y tiene valor por defecto 0.


• stop: es obligatorio (siempre se llega a 1 menos que este valor).
• step: es opcional y tiene valor por defecto 1.

range() devuelve un objeto iterable, así que iremos obteniendo los valores paso a paso con
una sentencia for ... in
Ejemplo
Rango: [0, 1, 2]

for i in range(0, 3):


print(i)

Salida
0
1
2

for i in range(3): # No hace falta indicar el inicio si es 0


print(i)
Salida
0
1
2

Ejemplo
Rango: [1, 3, 5]
for i in range(1, 6, 2):
print(i)
Salida:
1
3
5

Ejemplo

Rango: [2, 1, 0]
for i in range(2, -1, -1):
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

print(i)
Salida:
2
1
0

Usando el guion bajo


• Hay situaciones en las que no necesitamos usar la variable que toma valores en el
rango, sino que únicamente queremos repetir una acción un número determinado de
veces.
• Para estos casos se suele recomendar usar el guión bajo _ como nombre de variable,
que da a entender que no estamos usando esta variable de forma explícita:

for _ in range(10):
print('Repetir 10 veces!')
Salida:
Repetir 10 veces!
Repetir 10 veces!
Repetir 10 veces!
Repetir 10 veces!
Repetir 10 veces!
Repetir 10 veces!
Repetir 10 veces!
Repetir 10 veces!
Repetir 10 veces!
Repetir 10 veces!

Bucles anidados
• El anidamiento es una técnica por la que incluimos distintos niveles de encapsulamiento
de sentencias, unas dentro de otras, con mayor nivel de profundidad. En el caso de los
bucles también es posible hacer anidamiento.
• Veamos un ejemplo de 2 bucles anidados en el que generamos todas las tablas de
multiplicar:
for num_table in range(1, 10):
for mul_factor in range(1, 10):
result = num_table * mul_factor
print(f'{num_table} * {mul_factor} = {result}')
Salida:
1x1=1
1x2=2
1x3=3
1x4=4
1x5=5
1x6=6
1x7=7
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

1x8=8
1x9=9
2x1=2
2x2=4
2x3=6
2x4=8

9x1=9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81

Nota: Lo que está ocurriendo en este código es que, para cada valor que toma la variable i, la
otra variable j toma todos sus valores. Como resultado tenemos una combinación completa
de los valores en el rango especificado.

Recursividad
Calcular factorial
Uno de los ejemplos más usados para entender la recursividad, es el cálculo del factorial de
un número n! .

El factorial de un número n se define como la multiplicación de todos sus números


predecesores hasta llegar a uno. ¡Por lo tanto 5!, leído como cinco factorial, sería 5*4*3*2*1 .
Utilizando un enfoque tradicional no recursivo, podríamos calcular el factorial de la siguiente
manera.
def factorial_normal(n):
r = 1
i = 2
while i <= n:
r *= i
i += 1
return r

print(factorial_normal(5))

Salida:
120

El factorial es una tarea que puede ser dividida en subtareas del mismo tipo
(multiplicaciones), podemos darle un enfoque recursivo y escribir la función de otra manera.
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERÍAS

def factorial_recursivo(n):
if n == 1:
return 1
else:
return n * factorial_recursivo(n-1)

print(factorial_recursivo(5))

Salida:
120

Nota: Lo que realmente hacemos con el código anterior es llamar a la


función factorial_recursivo() múltiples veces. Es decir, 5! es igual a 5 * 4! y 4! es igual
a 4 * 3! y así sucesivamente hasta llegar a 1.

Serie de Fibonacci
Otro ejemplo de la recursividad, es calcular la serie de fibonacci. Dicha serie calcula el
elemento n sumando los dos anteriores n-1 + n-2 . Se asume que los dos primeros
elementos son 0 y 1.
def fibonacci_recursivo(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci_recursivo(n-1) + fibonacci_recursivo(n-2)

print(fibonacci_recursivo(7))
Salida:
13
Nota:
Podemos calcular el elemento 7, que será 0,1,1,2,3,5,8,13, es decir, 13.

Podemos ver que siempre que la n sea distinta de cero o uno, se llamará recursivamente a
la función, buscando los dos elementos anteriores. Cuando la n valga cero o uno se dejará
de llamar a la función y se devolverá un valor concreto.

También podría gustarte