Temas vistos en los ejercicios de esta semana:
- Tuplas y diccionarios
- Transformaciones (listas a tuplas/diccionarios, etc)
- Zip function
- Comprensión
- Listas vs tuplas
A partir de una lista de tuplas, armar:
- diccionario. Armá a partir de la lista un diccionario dic_notas que tenga como clave el nombre y como valor la nota de cada alumno.
- lista diccionarios. Armá ahora una nueva lista en la que a cada alumno le corresponde un diccionario con las claves 'nombre', 'dni' y 'nota'.
- Ejercicios 1) y 2) pero con compresión
alumnos = [
('Carlos Gómez', 41008418, 5),
('Gabriela Torres', 45790918, 8),
('Juan Pérez', 48327044, 9),
('Éric Guay', 35360531, 7),
('Juana Monte', 31583398, 10),
('Carla Díaz', 43772387, 6)
]
# 1
d = {}
for alumno in alumnos:
d[alumno[0]] = alumno[2]
print(d)
# 2
list = []
for alumno in alumnos:
d = {}
d['nombre'] = alumno[0]
d['dni'] = alumno[1]
d['nota'] = alumno[2]
list.append(d)
print(list)
# 3
# . . ej 1 de nuevo
dic_notas = {a[0]: a[2] for a in alumnos}
print(dic_notas)
dic_notas2 = {nombre:nota for nombre, dni, nota in alumnos}
print(dic_notas2)
# . . ej 2 de nuevo
list_dic2 = [{'nombre':nombre, 'dni': dni, 'nota': nota} for nombre, dni, nota in alumnos]
print(list_dic2)
Escribir un código que tome una lista de cadenas y que imprima la cadena más larga de la lista. Si fuese una tupla en lugar de una lista, ¿cambiaría algo?
strings = ['We', 'Are', 'Never', 'Getting', 'Back', 'Together']
stringsTuple = ('We', 'Are', 'Never', 'Getting', 'Back', 'Together')
def longerString(list):
str = ''
length = 0
for string in list:
if len(string) > length:
str = string
length = len(string)
print(f'The longer string is {str} with {length} characters')
longerString(strings)
longerString(stringsTuple)
Escribir un código cree una lista de los números del 1 al 10 después la modifique de tal manera que los números impares sean reemplazados por el valor None. Si fuese una tupla en lugar de una lista, ¿cambiaría algo?
list = []
for i in range(1, 11):
list.append(i)
# version 1
def version1(list):
for num in list:
if (num % 2) == 1:
index = list.index(num)
list[index] = None
print(list)
# version 2
def version2(list):
for i, n in enumerate(list):
if (n % 2) == 1:
list[i] = None
print(list)
version2(list)
Hacé un código que le pida al usuario tres números, que armé una tupla con ellos, y que imprima en pantalla el primer y último elemento de la tupla.
t = ()
for i in range(3):
num = int(input('Ingrese numero: '))
t += (num, )
print(t)
print(t[0], t[-1])
Crea una tupla conteniendo los números del 1 al 10.
# version 1: tupla directamente
t = ()
for i in range(10):
t += (i+1, )
print(t)
#version 2: lista a tupla
list = []
for i in range(10):
list.append(i+1)
tup = tuple(list)
print(tup)
A partir de dos listas, una de nombres y otra de fechas de cumpleaños, creá un diccionario donde las claves sean los nombres y los valores los cumpleaños. Usá tu diccionario para mostrar cuándo es el cumpleaños de Juan. Extra: hacelo usando zip().
names = ['Meredith', 'Derek', 'Christina', 'Lexie']
birthdays = ['07/09', '11/11', '03/03', '14/02']
d = dict(zip(names, birthdays))
print(d)
print(d['Lexie'])
Dado el siguiente diccionario de notas de un examen:
- Agregá las entradas de Lucas y Paula, quienes se sacaron un 8 y un 6, respectivamente.
- Imprimí en pantalla los alumnos que hayan aprobado (nota >= 7) junto con su nota.
dic_notas = {'Alan':4, 'Brenda':9.5, 'Tomás':6.5, 'Juan':7, 'Ana':7, 'Sol':6}
dic_notas['Lucas'] = 8
dic_notas['Paula'] = 6
for alumno in dic_notas:
if dic_notas[alumno] >= 7:
print(f'{alumno} APROBADO - Nota: {dic_notas[alumno]}')
Dada las listas de antes de nombres y compleaños:
- Usando la función zip(). Creá una lista de tuplas (nombre, cumpleaños)
- Ordená la lista de tuplas alfabéticamente según el nombre. ¿Qué pasaría sí quisieramos ordenarla por la fecha?
- Haciendo la operación inversa del zip(), recuperá las dos listas originales a partir de la lista de tuplas.
names = ['Meredith', 'Derek', 'Christina', 'Lexie']
birthdays = ['07/09', '11/11', '03/03', '14/02']
t = list(zip(names, birthdays))
print(t)
print(sorted(t)) #ordenado por nombre
#unzip
unzip = list(zip(*t))
firstNames = list(unzip[0])
dates = list(unzip[1])
print(firstNames)
print(dates)
Escribe un programa que pida al usuario ingresar una lista de números separados por comas. Luego, crea una tupla con esos números y muestra por pantalla la tupla creada y la suma de sus elementos. Si la lista que ingresa el usuario tiene elementos erroneos, que el programa se frene y le avise al usario. Pista: Para que sum() funcione todos los elementos del contenedor tiene que ser int o float.
stringNumbers = input('Insert numbers separated by a coma:\n')
# with split
stringList = stringNumbers.split(',')
numbers = []
for number in stringList:
numbers.append(int(number))
print(numbers)
#with comprehension
numberList = [int(n) for n in stringList]
print(numberList)
#list to tuple
numbersTuple = tuple(numberList)
print(numbersTuple)
#sum tuple elements
print(sum(numbersTuple))
Escribir un programa que pregunte al usuario su nombre, apellido, edad y teléfono, y que lo guarde en un diccionario. Después debe mostrar por pantalla el mensaje: tiene años y su número de teléfono es .
d = {}
d['nombre'] = input('Nombre: ')
d['apellido'] = input('Apellido: ')
d['edad'] = int(input('Edad: '))
d['telefono'] = int(input('Telefono: '))
nombre = d['nombre']
apellido = d['apellido']
edad = d['edad']
tel = d['telefono']
print(f'{nombre} {apellido} tiene {edad} años y su telefono es {tel}')
Escribir un programa que pregunte una fecha en formato dd/mm/aaaa y muestre por pantalla la misma fecha en formato dd de de aaaa donde es el nombre del mes. Para ello cree un diccionario que relacione el valor de mm con el nombre del mes.
d = {
'01': 'enero',
'02': 'febrero',
'03': 'marzo',
'04': 'abril',
'05': 'mayo',
'06': 'junio',
'07': 'julio',
'08': 'agosto',
'09': 'septiembre',
'10': 'octubre',
'11': 'noviembre',
'12': 'diciembre'
}
fecha = input('Ingrese fecha en formato dd/mm/aaaa: ')
fechaString = fecha.split('/')
for mes in d.keys():
if(fechaString[1] == mes):
mm = d[mes]
break
fechaInt = [int(x) for x in fechaString]
print(f'{fechaInt[0]} de {mm} de {fechaInt[2]}')
Escribe un programa que pida al usuario que ingrese dos listas de números enteros separados por espacios. Luego, crea dos conjuntos con los elementos de cada lista y muestra por pantalla los siguientes conjuntos:
- La unión de los dos conjuntos
- La intersección de los dos conjuntos
- Los elementos que están en el primer conjunto pero no en el segundo
- Los elementos que están en el segundo conjunto pero no en el primero
num1 = input('Ingrese una lista de números enteros separados por espacios: \n')
num2 = input('Ingrese otra lista de números enteros separados por espacios: \n')
numString1 = num1.split(' ')
numString2 = num2.split(' ')
numList1 = [int(x) for x in numString1] # [1, 2, 3, 4, 5]
numList2 = [int(x) for x in numString2] # [3, 4, 5, 6, 7]
union = numList1 + numList2 # [1, 2, 3, 4, 5, 3, 4, 5, 6, 7]
intersection = list(set(numList1) & set(numList2)) # [3, 4, 5]
onlyIn1 = [x for x in numList1 if x not in numList2] # [1, 2]
onlyIn2 = [x for x in numList2 if x not in numList1] # [6, 7]
print(union)
print(intersection)
print(onlyIn1)
print(onlyIn2)
Crear una lista de tuplas que contenga los nombres y las edades de las personas mayores de 18 años. Atención, usar la función zip(). Ordenar la lista resultante de forma alfabética por el nombre de las personas.
nombre=['Juan', 'Ana', 'Marcela', 'Claudio', 'Nicolás', 'Cecilia', 'Tomas', 'Pedro']
edades=[25, 15, 13, 21, 45, 32, 17, 33]
list = [(nombre, edad) for nombre, edad in zip(nombre, edades) if edad > 18]
print(sorted(list))
Usando la herramienta de compresión de listas y diccionarios aprendidas en clases:
- Crea una lista de los cuadrados de los números del 1 al 10 utilizando una comprensión de listas.
- Crea una lista de los números pares del 1 al 20 utilizando una comprensión de listas.
- Crea un diccionario que asocie ciudades con sus temperaturas actuales de las siguiente listas. ciudades = ["Buenos Aires", "Madrid", "Roma", "París"] temperaturas = [28, 16, 21, 19]
cuadrados = [x**2 for x in range(1, 11)] #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
pares = [x for x in range (1, 21) if (x%2)==0] #[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
ciudades = ["Buenos Aires", "Madrid", "Roma", "París"]
temperaturas = [28, 16, 21, 19]
d = {nombre:temp for nombre, temp in zip(ciudades, temperaturas)} # {'Buenos Aires': 28, 'Madrid': 16, 'Roma': 21, 'París': 19}
Escribe un programa que lea una lista de palabras separadas por espacios y cree una tupla con ellas. Luego, muestra por pantalla la tupla creada y la cantidad de veces que aparece la letra más repetida en todas las palabras.
stringList = input('Ingrese lista de palabras separadas por espacios: ')
stringList = stringList.split(' ')
stringTuple = tuple(stringList)
print(stringTuple)
freq = {}
for string in stringTuple:
for char in string:
if char in freq:
freq[char]+=1
elif (char != ' '):
freq[char] = 1
else:
break
max_char = max(freq, key=freq.get)
print(max_char)
Escribe un programa que le permita al usuario registrar información sobre estudiantes en una escuela. Cada estudiante tendrá un nombre y apellido, una edad y una lista de materias en las que está inscrito. El programa deberá guardar toda la información guardada, y además deberá indicar cuantas y cuales son las materias a las que hay por lo menos un estudiante inscrito.
cant = int(input('Ingrese cantidad de alumnos a registrar: '))
alumnos = []
for i in range(cant):
nombre = input('Nombre y apellido: ')
edad = int(input('Edad: '))
materias = input('Materias: ')
materias = materias.split(' ')
t = (nombre, edad, materias)
alumnos.append(t)
print(alumnos)
materiasList = []
for alumno in alumnos:
for materia in alumno[2]:
if materia not in materiasList:
materiasList.append(materia)
print(materiasList)