Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tarea 5 Listas
Tarea 5 Listas
ipynb - Colaboratory
Portada
Ingeniería en mecatrónica
Algoritmos y programación
When you make the finding yourself —even if you're the last person on Earth to see the light— you'll never forget it.
—Carl Sagan
Los tipos de datos simples pueden contener un solo valor en un momento dado, en el momento en que se les asigna un nuevo valor, el valor
anterior se pierde.
velocidad = 25
velocidad
25
velocidad = 50
velocidad
50
A diferencia de esto, los tipos de datos estructurados, permiten almacenar varios valores al mismo tiempo. Esto permite manejar el conjunto
de datos como una unidad. También, a través de la estructura propia de cada tipo, es posible acceder a los valores individuales almacenados.
Tipo de dato Ejemplos
Listas
El tipo de datos estructurado básico de Python es la lista ( list ). Una lista es una secuencia ordenada de datos, que pueden ser de cualquier
tipo, y se indican como una lista de expresiones separadas por comas y entre corchetes. Cada una de las expresiones se convierte en un
elemento de la lista.
El tamaño o longitud de una lista es el número de elementos que tiene y se obtiene con la función len .
len(alumnos)
Ejercicio: Crea (y muestra) una lista equipo y asígnale los nombres de tus compañeros de equipo para el proyecto. Muestra también la longitud
de la lista.
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 1/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
equipo = ["César", "Giovanni"]
longitud=len(equipo)
print(equipo,"El equipo es de ", longitud, "personas")
En los ejemplos anteriores, las listas han sido homogéneas, es decir, todos sus elementos son del mismo tipo ( str para la lista alumnos , e int
para la lista calificaciones ).
Esto no es un requisito, los elementos de una lista pueden ser de diferente tipo (listas heterogéneas).
Ejercicio: Crea (y muestra) una lista heterogénea donde el primer elemento sea tu nombre; el segundo, la ciudad donde naciste; el tercero, tu
estatura en metros, y el cuarto, tu sabor favorito de helado.
No solo eso, sino que los elementos de una lista pueden ser de cualquier tipo, es decir, pueden ser también listas.
grupo = [["Hugo", 90, True], ["Paco", 75, True], ["Luis", 80, False]]
grupo
Esta misma lista se puede construir a partir de variables que son listas.
Cada elemento de la lista principal es una lista que representa a un miembro de la familia, y la lista de cada miembro incluye, como primer
elemento, el nombre y, como segundo elemento, su papel en la familia (papá, mamá, hermano, tú, mascota, etc.).
Si se te hace más fácil, primero asigna las listas internas a variables y luego haz la lista familia .
papa = [...]
mama = [...]
etc...
familia = [...]
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 2/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
Operadores de listas
El operador + se puede usar para concatenar listas y el operador * para replicarlas.
lista_1 = [1, 2, 3]
lista_2 = [9, 10, 11, 12, "a", "b"]
lista_3 = lista_1 + lista_2
print("lista_3 = ", lista_3)
Ejercicio: Crea cualquier par de listas y concaténalas. Luego, replica la primera lista 10 veces. Muestra el resultado de ambas operaciones.
l3 = l1 * 10
print(l3)
Los mejores grupos son: ['México', 'Portugal', 'Turquía', 'España', 'Egipto', 'Costa Rica']
['México', 'Portugal', 'Turquía', 'España', 'Egipto', 'Costa Rica', 'México', 'Portugal', 'Turquía', 'España', 'Egipto', 'Costa Rica',
Indexado de listas
La estructura que tienen las listas (y que permite acceder a sus elementos individuales) es su orden. De acuerdo con ese orden, a cada uno de
sus elementos le corresponde un índice. Así, al primer elemento le corresponde el índice 0 ; al segundo, el 1 , y así, sucesivamente.
Para acceder aun elemento individual, se indica el nombre de la lista y, enseguida, entre corchetes, el número de elemento.
alumnos[0]
'Hugo'
Se permite también el indexado negativo, en donde el elemento -1 es el último; el -2 , el penúltimo, y así sucesivamente.
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 3/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
calificaciones[-1]
80
Slicing de listas
Igualmente, se puede acceder a secuencias de elementos contíguos utilizando dos índices: inicial y final, que se escriben dentro de los
corchetes separados por dos puntos ( : ).
Se debe tomar en cuenta que el elemento en la posición final no se incluye en la secuencia regresada.
comunidad = ["Gandalf", "Frodo", "Sam", "Aragorn", "Legolas", "Gimli", "Pippin", "Merry", "Boromir"]
comunidad[2:5] # Incluye los elementos en las posiciones 2, 3, y 4, pero no el de la 5
# El primer elemento
print("Primero:", comunidad[0])
Primero: Gandalf
Penúltimo: Merry
['Legolas', 'Gimli', 'Pippin', 'Merry']
['Frodo', 'Sam', 'Aragorn', 'Legolas', 'Gimli', 'Pippin', 'Merry']
Para acceder a elementos no contíguos de la lista, pero espaciados regularmente, se puede utilizar un tercer entero, después de otros dos
puntos ( : ), que indica el paso (cada cuántos elementos regresar).
[2, 5, 8, 11]
Si se omite cualquiera de los tres índices del slicing (inicio, fin y/o paso), se usan valores predeterminados:
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 4/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
Para indexar listas dentro de listas, hay que usar dos índices, cada uno dentro de sus propios corchetes, el primero se refiere a la lista "exterior",
y el segundo, a la "interior".
En el siguiente ejemplo, tenemos una lista donde cada personaje está representad por una lista que indica su nombre y su raza. Para conocer
la raza del quinto integrante de la comunidad, podemos usar:
comunidad2 = [
["Gandalf", "mago"],
["Frodo", "hobbit"],
["Sam", "hobbit"],
["Aragorn", "humano"],
["Legolas", "elfo"],
["Gimli", "enano"],
["Pippin", "hobbit"],
["Merry", "hobbit"],
["Boromir", "humano"]
]
nombre = comunidad2[4][0]
raza = comunidad2[4][1]
print(f"La raza de {nombre} es {raza}.")
Si se facilita, se puede utilizar una variable intermedia para extraer la lista interior y, así, utilizar solamente un índice cada vez.
personaje = comunidad2[4]
nombre = personaje[0]
raza = personaje[1]
print(f"La raza de {nombre} es {raza}.")
Ejercicio: Utilizando la lista familia que hiciste, añade, para cada integrante, el dato de su edad y, luego, imprime un mensaje del tipo:
"Fulanito es mi hermano y tiene 7 años" .
familia = [
["Maricela", "mamá", 56],
["Victor", "papá", 54],
["Maricela", "hermano", 17],
]
quien_es = familia[0]
nombre = quien_es[0]
rol = quien_es[1]
edad = quien_es[2]
print(f"{nombre} es mi {rol} y tiene {edad} años")
Lista original: ['Reed Richard', 'Sue Storm', 'Tony Stark', 'Ben Grimm']
Lista corregida: ['Reed Richard', 'Sue Storm', 'Johny Storm', 'Ben Grimm']
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 5/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
Ejercicio: Escribe en la siguiente celda una instrucción de asignación para corregir el apellido de Reed. Debe ser "Richards", no "Richard".
Muestra, al final, la lista corregida.
Lista original: ['Reed Richard', 'Sue Storm', 'Tony Stark', 'Ben Grimm']
Lista corregida: ['Reed Richards', 'Sue Storm', 'Tony Stark', 'Ben Grimm']
Es posible, mediante una única asignación, reemplazar varios elementos contiguos en la lista, reemplazar un único elemento de una lista por
más de un elemento, o reemplazar varios elementos contiguos en la lista por una cantidad diferente de elementos, haciendo la asignación a
una slice de la lista en lugar de a un elemento.
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("Original: a =", a)
a[5:7] = [500, 600] # Reemplazar elementos 5 y 6
print("Cambio 1: a =", a)
a[5:6] = [10, 20, 30] # Reemplazar el elemento 5 por tres elementos
print("Cambio 2: a =", a)
a[1:4] = ["a", "b"] # Reemplazar tres elementos (1,2,3) por dos
print("Cambio 3: a =", a)
Original: a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Cambio 1: a = [0, 1, 2, 3, 4, 500, 600, 7, 8, 9]
Cambio 2: a = [0, 1, 2, 3, 4, 10, 20, 30, 600, 7, 8, 9]
Cambio 3: a = [0, 'a', 'b', 4, 10, 20, 30, 600, 7, 8, 9]
Ejercicio: Añade una instrucción de asignación en la siguiente celda para cambiar el elemento "cebolla" por los elementos "mandarina" y "kiwi".
No modifiques el código que ya está escrito. Muestra, al final, la lista corregida.
Es común utilizar append para recibir un número variable de entradas del usuario, como en el siguiente ejemplo:
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 6/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
alumno = input("Nombre del alumno: ")
alumnos
Tip: El ejemplo anterior muestra el uso de un valor centinela, un valor especial (en este caso, la cadena nula — "" ) para indicar el fin de los
datos.
Observación: Debido a que el valor de la variable alumno es la que controla la ejecución del ciclo, la instrucción input que le asigna valor
aparece duplicada en el código:
Una vez antes del inicio del ciclo, para obtener un valor inicial.
Otra vez dentro del ciclo, al final del mismo, ya que por cada ejecución del ciclo es necesario asignarle un nuevo valor.
Por ejemplo, haciendo uso de las expresiones de asignación, podemos cambiar nuestro código como sigue:
Contesta: ¿Qué fue lo que cambió entre el ejemplo de la celda de arriba y el anterior?
while numero != 0:
while numero:
Porque Python interpreta el valor 0 como falsy (equivalente a False ) y cualquier otro valor numérico como truthy (equivalente a True ).
Igualmente, también a manera de ejemplo, las siguientes tres líneas son equivalentes:
if cadena != "":
if len(cadena) > 0:
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 7/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
if cadena:
Porque, igualmente, Python interpreta la cadena vacía ( "" ) como falsy y cualquier otra cadena como truthy.
cero 0 , 0.0
cadena nula ""
Valores falsy
(Se evalúan a False ) lista vacía []
(o cualquier secuencia o colección vacía)
constantes literales None y False
Por:
while alumno:
Y quedaría:
Ejercicio: Completa el código de la celda de abajo para construir una lista con las estaturas de una muestra de personas y, después, calcular el
promedio.
estaturas=[]
while True:
estatura = float(input("Ingresa una estatura (o -1 para finalizar): "))
if estatura == -1:
estaturas.append(estatura)
if len(estaturas) > 0:
promedio = sum(estaturas) / len(estaturas)
print(f"El promedio de las estaturas es: {promedio}")
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 8/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
<ipython-input-76-14bb01ebef62> in <cell line: 2>()
1 estaturas=[]
2 while True:
----> 3 estatura = float(input("Ingresa una estatura (o -1 para finalizar): "))
4 if estatura == -1:
5 break
1 frames
Añadir elementos a una lista por concatenación
/usr/local/lib/python3.10/dist-packages/ipykernel/kernelbase.py in _input_request(self, prompt, ident, parent, password)
893 except KeyboardInterrupt:
El método894 # re-raise
append añade el nuevo KeyboardInterrupt,
dato al final to truncate
de la lista. Es el método traceback
más común y eficiente.
--> 895 raise KeyboardInterrupt("Interrupted by user") from None
896 except Exception as e:
También se puede usar la concatenación para añadir datos al final de una lista. Con concatenación, se pueden añadir los elementos de uno en
897 self.log.warning("Invalid Message:", exc_info=True)
uno o de varios.
KeyboardInterrupt: Interrupted by user
Igualmente, se pueden usar los operadores de asignación modificados += y *= con las listas.
BUSCAR EN STACK OVERFLOW
a = [0, 1, 2]
b = ["A"]
c = ["x", "y", 100]
print("Original: ", a)
a += b # Equivalente a: a = a + b
print("Después de añadir b:", a)
a += c # Equivalente a: a = a + c
print("Después de añadir c:", a)
a *= 2 # Equivalente a: a = a * 2
print("Después de duplicar:", a)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-72-e1dc2709c880> in <cell line: 4>()
2 b = ["A"]
3 c = ["x", "y", 100]
----> 4 print("Original: ", a)
5 a += b # Equivalente a: a = a + b
6 print("Después de añadir b:", a)
insert y extend
a = [0, 1, 2]
a.insert(1, 100)
a
[0, 100, 1, 2]
a = [0, 1, 2]
b = [10, 11, 12]
a.extend(b)
a
Un método eqivalente a extend es asignar una lista a una slice de la que se desea modificar después del último elemento de esta.
a = [0, 1, 2]
b = [10, 11, 12, 13]
a[len(a):] = b # El último elemento de a es a[len(a)-1], ¿cierto?
a
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 9/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
Contesta: Cómo interpretas la slice a la que se le hizo la asignación en el último ejemplo?
a[len(a):]
¿Dónde inicia, dónde termina? ¿Por qué se dice que está después del final de la lista?
Respuesta: Inicia a poner la lista b al final de la lista gracias a lo dos puntos al final de a[len(a):]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-78-0395cc3105d5> in <cell line: 1>()
----> 1 print("Original: ", comunidad)
2 del(comunidad[2]) # Borrar el elemento en posición 2
3 print("Después: ", comunidad)
remove
remove elimina el primer elemento que coincida con su parámetro. Ocasiona un error si no lo encuentra.
comunidad.remove("Boromir")
comunidad
pop
pop elimina el último elemento de la lista pero, adicionalmente, regresa el valor eliminado. Es muy usado para procesar uno a uno los
elementos de una lista, comenzando por el último, hasta que queda vacía.
Este tipo de procesos, en donde el último elemento añadido es el primer elemento procesado (LIFO: last in, first out) reciben el nombre de pilas
(stacks en inglés) y es un patrón recurrente en programación.
comunidad = ["Gandalf", "Frodo", "Sam", "Aragorn", "Legolas", "Gimli", "Pippin", "Merry", "Boromir"]
print("Lista original:", comunidad)
print()
while comunidad:
siguiente = comunidad.pop()
print("Procesando:", siguiente)
print("Restante:", comunidad)
print()
print("Lista final:", comunidad)
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 10/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-83-d88d4dfed0a3> in <cell line: 2>()
1 comunidad = ["Gandalf", "Frodo", "Sam", "Aragorn", "Legolas", "Gimli", "Pippin", "Merry", "Boromir"]
----> 2 print("Lista original:", comunidad)
Un proceso 3similar,
print()pero en el cual el primer elemento añadido es el primero procesado (FIFO: first in, first out), también es recurrente en
4 while comunidad:
programación y recibe el nombre de filas (queues en inglés).
5 siguiente = comunidad.pop()
El método pop admite un parámetro opcional, la posición de la cual extraer el elemento, por lo tanto, también se pueden implementar las filas
TypeError: 'list' object is not callable
usando listas y pop , indicando la posición 0 , aunque esto no es muy eficiente. (Es eficiente añadir y quitar elementos del final de una lista,
hacerloBUSCAR
al principio o en
EN STACK una posición intermedia, no es eficiente porque hay que desplazar de lugar el resto de los elementos.)
OVERFLOW
comunidad = ["Gandalf", "Frodo", "Sam", "Aragorn", "Legolas", "Gimli", "Pippin", "Merry", "Boromir"]
print("Lista original:", comunidad)
print()
while comunidad:
siguiente = comunidad.pop(0)
print("Procesando:", siguiente)
print("Restante:", comunidad)
print()
print("Lista final:", comunidad)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-82-2fff27b2d499> in <cell line: 2>()
1 comunidad = ["Gandalf", "Frodo", "Sam", "Aragorn", "Legolas", "Gimli", "Pippin", "Merry", "Boromir"]
----> 2 print("Lista original:", comunidad)
3 print()
4 while comunidad:
5 siguiente = comunidad.pop(0)
Contesta: Cuáles fueron las diferencias entre los últimos dos ejemplos? En particular, ¿cómo cambio el uso de pop y el orden en que se
"procesó" la lista?
Respuesta: El elemento a cambiar, y que en el segundo caso como se dice, no es tan eficiente
clear
a = list()
Es equivalente a:
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 11/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
a = []
También podemos indicar como argumento de list un iterable y cada elemento del iterable se convierte en un elemento de la lista creada.
Por ejemplo, una cadena es iterable, y cada carácter se convertiría en un elemento de la lista.
['E',
's',
't',
'o',
' ',
'e',
's',
' ',
'u',
'n',
' ',
'e',
'j',
'e',
'm',
'p',
'l',
'o',
'.']
range
Existe la función range , que es una generadora de secuencias. En particular, genera una secuencia de números enteros en un rango dado.
Si se le llama con dos parámetros ( range(n, m) ), genera la secuencia desde n hasta n-1 .
Si se le llama con tres parámetros ( range(n, m, p) ), genera la secuencia: n , n+p , n+2p , ..., n+ip , ..., n+qp < m .
Si se combina la generadora range con la constructora list , el rango generado se convierte en una lista.
rango = range(10)
lista = list(range(10))
print(rango)
print(lista)
range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Las funciones max , min , sum y len regresan, respectivamente, el elemento mayor, el menor, la suma de los elementos y el número de
elementos de una lista (y otro iterable).
Ejercicio: Completa el código de la siguiente celda para calcular los estadísticos de la muestra. Muestra los resultados con dos decimales.
import random
muestra = random.sample(range(1000), k=17)
minimo = min(muestra)
maximo = max(muestra)
promedio = sum(muestra) / len(muestra)
minimoo = "{:.2f}".format(minimo)
maximoo = "{:.2f}".format(maximo)
promedioo = "{:.2f}".format(promedio)
print(f"Muestra: {muestra}")
print(f"Mínimo: {minimoo}")
print(f"Máximo: {maximoo}")
print(f"Promedio: {promedioo}")
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 12/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
Muestra: [989, 35, 629, 220, 922, 79, 924, 228, 646, 993, 395, 173, 528, 294, 297, 374, 175]
Mínimo: 35.00
Máximo: 993.00
Promedio: 464.76
sorted y sort
La función sorted y el método sort se utilizan para ordenar iterables, entre ellos, listas.
La función sorted no modifica el iterable, sino que regresa una copia del iterable en orden.
Ambos tienen un parámtero opcional, reverse para indicar si se desea el orden inverso (de mayor a menor).
x = random.sample(range(1000), k=15)
print("Lista original: x =", x)
y = sorted(x)
print("Lista ordenada: y =", y)
print("x sigue igual: x =", x)
x.sort(reverse=True) # Ojo: no hay asignación
print("x modificada: x =", x)
Lista original: x = [789, 951, 77, 729, 843, 584, 247, 664, 347, 254, 910, 493, 185, 287, 367]
Lista ordenada: y = [77, 185, 247, 254, 287, 347, 367, 493, 584, 664, 729, 789, 843, 910, 951]
x sigue igual: x = [789, 951, 77, 729, 843, 584, 247, 664, 347, 254, 910, 493, 185, 287, 367]
x modificada: x = [951, 910, 843, 789, 729, 664, 584, 493, 367, 347, 287, 254, 247, 185, 77]
Ejercicios
Continuando con el desarrollo del sistema de control de alumnos, vamos a guardar los datos de los alumnos en una estructura de la siguiente
forma:
Tendremos una lista alumnos con los datos de todos los alumnos.
De esta manera, cada alumno, será un elemento de la lista alumnos .
Al mismo tiempo, cada alumno será, a su vez, una lista.
Por ejemplo:
alumnos = [
["Scott Summers", [85, 90, 80], 85.0], # Primer alumno
["Bobby Drake", [60, 60, 50, 60], 57.5], # Segundo alumno
["Hank McCoy", [100, 100, 100, 100], 100.0] # Tercer alumno
]
Todos los alumnos están en una lista, cada alumno es una lista y, adentro de esa lista, hay otra lista con sus respectivas calificaciones.
Estamos manejando listas anidadas en tres niveles: listas adentro de listas adentro de listas.
Nos vamos a ir por partes para poder darle entrada a todos los elementos de esta estructura.
Primera parte: Completa el código de la celda de abajo para construir una lista con las calificaciones de un alumno.
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 13/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
Puedes usar el mismo código que para el ejercicio de las estaturas más arriba, ya sea usando expresiones de asignación con el operador
walrus, o duplicando la instrucción input (una vez fuera del ciclo y otra vez dentro).
if calificacion == -1:
break
calificaciones.append(calificacion)
# Calcula el promedio
if len(calificaciones) > 0:
promedio = sum(calificaciones) / len(calificaciones)
# Muestra las dos variables
print(f"Las calificaciones ingresadas son: {calificaciones}")
print(f"El promedio de las calificaciones es: {promedio:.2f}")
else:
print("No se ingresaron calificaciones.")
if calificacion == -1:
break
calificaciones.append(calificacion)
# Calcula el promedio
if len(calificaciones) > 0:
promedio = sum(calificaciones) / len(calificaciones)
# Muestra las dos variables
print(f"Las calificaciones ingresadas son: {calificaciones}")
print(f"El promedio de las calificaciones es: {promedio:.2f}")
else:
print("No se ingresaron calificaciones.")
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 14/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
Ingresa una calificación (o -1 para finalizar): -1
Las calificaciones ingresadas son: [10.0, 10.0, 10.0]
El promedio de las calificaciones es: 10.00
Nombre del alumno: cesar
Calificaciones: [10.0, 10.0, 10.0]
Promedio: 10.00
Tercera parte: Completa el código de abajo para colocar el código que escribiste antes dentro de un ciclo que se va a repetir hasta que se
hayan introducido los datos de todos los alumnos:
2. Solicitar el nombre del alumno. Hay que pensar en un valor centinela para indicar que ya se terminó con la captura de alumnos, puede ser
la cadena vacía ( "" ).
while True:
nombre = input("Ingrese el nombre del alumno (o presione Enter para terminar): ")
if nombre == "":
break
calificaciones = []
while True:
calificacion = float(input("Ingresa una calificación (o -1 para finalizar): "))
if calificacion == -1:
break
calificaciones.append(calificacion)
if len(calificaciones) > 0:
promedio = sum(calificaciones) / len(calificaciones)
else:
promedio = 0
maestra_alumnos.append(alumno)
output Ingrese el nombre del alumno (o presione Enter para terminar): cesar
Ingrese el nombre del alumno (o presione Enter para terminar):
Ingresa una calificación (o -1 para finalizar): 10
Ingresa una calificación (o -1 para finalizar): 10
Ingresa una calificación (o -1 para finalizar): 10
Ingresa una calificación (o -1 para finalizar): -1
Lista maestra de alumnos:
Nombre: , Calificaciones: [10.0, 10.0, 10.0], Promedio: 10.00
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 15/16
8/10/23, 23:20 Copia de Listas.ipynb - Colaboratory
https://colab.research.google.com/drive/1YDfXwJ4lDlq5yEKKHNaRgEwlpnqXjTZ-#scrollTo=rUtXpLlar2lp&uniqifier=1&printMode=true 16/16