Skip to content

Latest commit

 

History

History
377 lines (335 loc) · 11.3 KB

File metadata and controls

377 lines (335 loc) · 11.3 KB

Week 04

Temas vistos en los ejercicios de esta semana:

  • Tuplas y diccionarios
  • Transformaciones (listas a tuplas/diccionarios, etc)
  • Zip function
  • Comprensión
  • Listas vs tuplas

Clase asincrónica

Ejercicio

Descripcion

A partir de una lista de tuplas, armar:

  1. 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.
  2. lista diccionarios. Armá ahora una nueva lista en la que a cada alumno le corresponde un diccionario con las claves 'nombre', 'dni' y 'nota'.
  3. Ejercicios 1) y 2) pero con compresión

Solucion

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)

Clase sincrónica

Ejercicio 1

Descripcion

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?

Solucion

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)

Ejercicio 2

Descripcion

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?

Solucion

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)

Ejercicio 3

Descripcion

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.

Solucion

t = ()
for i in range(3):
    num = int(input('Ingrese numero: '))
    t += (num, )
print(t)

print(t[0], t[-1])

Ejercicio 4

Descripcion

Crea una tupla conteniendo los números del 1 al 10.

Solucion

# 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)

Ejercicio 5

Descripcion

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().

Solucion

names = ['Meredith', 'Derek', 'Christina', 'Lexie']
birthdays = ['07/09', '11/11', '03/03', '14/02']

d = dict(zip(names, birthdays))
print(d)
print(d['Lexie'])

Ejercicio 6

Descripcion

Dado el siguiente diccionario de notas de un examen:

  1. Agregá las entradas de Lucas y Paula, quienes se sacaron un 8 y un 6, respectivamente.
  2. Imprimí en pantalla los alumnos que hayan aprobado (nota >= 7) junto con su nota.

Solucion

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]}')

Ejercicio 7

Descripcion

Dada las listas de antes de nombres y compleaños:

  1. Usando la función zip(). Creá una lista de tuplas (nombre, cumpleaños)
  2. Ordená la lista de tuplas alfabéticamente según el nombre. ¿Qué pasaría sí quisieramos ordenarla por la fecha?
  3. Haciendo la operación inversa del zip(), recuperá las dos listas originales a partir de la lista de tuplas.

Solucion

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)

Homework

Ejercicio

Descripcion

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.

Solucion

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))

Ejercicio 2

Descripcion

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 .

Solucion

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}')

Ejercicio 3

Descripcion

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.

Solucion

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]}')

Ejercicio 4

Descripcion

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:

  1. La unión de los dos conjuntos
  2. La intersección de los dos conjuntos
  3. Los elementos que están en el primer conjunto pero no en el segundo
  4. Los elementos que están en el segundo conjunto pero no en el primero

Solucion

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)

Ejercicio 5

Descripcion

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.

Solucion

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))

Ejercicio 6

Descripcion

Usando la herramienta de compresión de listas y diccionarios aprendidas en clases:

  1. Crea una lista de los cuadrados de los números del 1 al 10 utilizando una comprensión de listas.
  2. Crea una lista de los números pares del 1 al 20 utilizando una comprensión de listas.
  3. 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]

Solucion

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}

Ejercicio 7

Descripcion

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.

Solucion

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)

Ejercicio 9

Descripcion

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.

Solucion

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)