Skip to content

Latest commit

 

History

History
380 lines (336 loc) · 11.4 KB

File metadata and controls

380 lines (336 loc) · 11.4 KB

Week 03

Temas vistos en los ejercicios de esta semana:

  • Funciones
  • Ciclos
  • Comparaciones
  • Listas

Clase asincró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.

Solucion

strings = ['Flor', 'Nacho', 'Momi', 'Leuco', 'Occhiato']

def longerString(list):
    longer = ''
    for string in list:
        if len(string) > len(longer):
            longer = string
    print(f'The longer string is {longer}')

longerString(strings)

Ejercicio 2

Descripcion

Escribir un código que tome dos listas como entrada y que cree una nueva lista conteniendo sólo los elementos en común que están en las dos listas. Nota: no te preocupes por el tema de que pueden haber elementos duplicados en las listas.

Solucion

list1 = ['Flor', 'Nacho', 'Momi', 'Leuco', 'Occhiato']
list2 = ['Manu', 'Flor', 'Mar', 'Tini', 'Leuco']

def repeatedElements(list1, list2):
    list = []
    for string1 in list1:
        for string2 in list2:
            if(string1 == string2):
                list.append(string1)
    return list

new_list = repeatedElements(list1, list2)
print(new_list)

Ejercicio 3

Descripcion

Escribir un programa que imprima los primeros diez números de la sucesión de Fibonacci. La sucesión de Fibonacci es una secuencia de números donde cada elemento es la suma de los dos anteriores, y se comienza con el 0 y el 1.

Solucion

def secuenciaFibonacci():
    base = [0, 1]
    serie = []
    for i in range(10):
        if i in base:
            serie.append(i)  # el cero y el uno son los primeros de la lista
        else:  # "cada elemento es la suma de los dos anteriores"
            f = serie[-2] + serie[-1]  # Tomo el último y anteúltimo valor contando desde atrás con -1, -2
            serie.append(f)
    print(serie)
secuenciaFibonacci()

Ejercicio 4

Descripcion

Escribir un programa que tome una cadena como entrada y cuente la cantidad de vocales que hay en ella.

Solucion

def numberOfVocals(str):
    str = str.lower()
    vocals = 0
    for s in str:
        if(s=='a' or s=='e' or s=='i' or s=='o' or s=='u'):
            vocals+=1
    print(f'{str} has {vocals} vocals')

numberOfVocals('VAlentina')

Ejercicio 5

Descripcion

Escribir un programa que tome una lista de palabras (cadenas) y que imprima sólo aquellas que son palíndromos.

Solucion

strings = ['world', 'radar', 'level', 'sky', 'kayak', 'madam']
def palindrome(list):
    palindromeList = []
    for string in list:
        if(string == string[::-1]):
            palindromeList.append(string)
    if len(palindromeList) > 0:
        print(palindromeList)
    else:
        print("None of the strings in the list is a palindrome")

palindrome(strings)

Ejercicio 6

Descripcion

El siguiente código tiene un problema. ¿Podés identificar cuál es y corregirlo?

Solucion

def oddOrEven(number):
    if (number % 2) == 1:
        print(f'{number} is odd')
    elif (number % 2) == 0:
        print(f'{number} is even')
    if (number % 2) != 0 and (number % 2) != 1:
        print(f'{number} is not even or odd')

oddOrEven(10)
oddOrEven(6.5)

Ejercicio 7

Descripcion

El siguiente código también tiene un problema. ¿Podés identificar cuál es y corregirlo?

Solucion

def hasAnA(string):
    string = string.lower()
    hasAnA = 0
    for s in string:
        if (s == 'a'):
            hasAnA = 1
    if hasAnA:
        print(f'\"{string}\" has an \"a\"')  # \"\"
    else:
        print(f'\"{string}\" doesnt have an \"a\"')  # \"\"

hasAnA('Cocos')
hasAnA('Valen')

Ejercicio 8

Descripcion

FizzBuzz es un juego de palabras grupal para que los niños aprendan sobre la división, pero se suele usar como un ejercicio clásico de programación. En el juego los jugadores se turnan para contar de forma incremental, reemplazando cualquier número divisible por tres con la palabra "fizz", y cualquier número divisible por cinco con la palabra "buzz", y cualquier número divisible por 3 y 5 con la palabra "fizzbuzz". Hace un programa que imprima los números del 1 al 30, pero reemplazando los múltiplos de 3 y/o 5 por "fizz", "buzz" ó "fizzbuzz" siguiendo las reglas del juego.

Solucion

def FizzBuzz():
    list = []
    for i in range(1, 30):
        if (i % 3) == 0 and (i % 5) == 0:
            list.append('fizzbuzz')
        elif (i % 3) == 0:
            list.append('fizz')
        elif (i % 5) == 0:
            list.append('buzz')
        else:
            list.append(i)
    print(list)

FizzBuzz()

Ejercicio 9

Descripcion

En base a las listas ficticias de alumnos, con datos como nombre, apellido, y nota (calificación). Escribir un programa que:

  1. Imprima la nombre y apellido de los alumnos de manera ordenada alfabéticamente por el apellido
  2. Calcule el promedio de notas de la cursada, e informe la nota máxima y la mínima.
  3. Genere una variable llamada "aprobados" con una lista de alumnos aprobados (se aprueba con 7)
  4. Genere una variable (lista) conteniendo valores booleanos (True/False), que corresponda a los alummnos aprobados (True) o desaprobados (False) NOTA: el orden de las listas es el mismo, vale decir, la nota de Laura Pérez es 7, y asi sucesivamente.

Solucion

nombres = ['Laura', 'Juan', 'Tomás', 'Ana', 'Diego', 'Carla', 'Kim', 'Sofía']
apellidos = ['Pérez', 'Isla', 'Gómez', 'Castro', 'Roca', 'Romero', 'Díaz', 'López']
notas = [7, 4, 9, 5, 7, 8, 6, 10]

#nombre y apellido
def concatenate(names, lastNames):
    namesList = []
    for i in range(len(names)):
        completeName = lastNames[i] + ', ' + names[i]
        namesList.append(completeName)
    return namesList

list = concatenate(nombres, apellidos)
print(sorted(list))
#promedio, max y min
def promedio(list):
    length = len(list)
    suma = 0
    min = 10
    max = 0
    for nota in list:
        suma+=nota
        if(nota > max):
            max = nota
        if(nota < min):
            min = nota
    print(f'El promedio de la cursada es {suma / length}')
    print(f'El maximo es {max} y el minimo es {min}')
promedio(notas)

#lista aprobados
def aprobados(notas, nombres):
    aprobados = []
    i = 0
    for nota in notas:
        if(nota >= 7):
            aprobados.append(nombres[i])
        i+=1
    print(aprobados)
aprobados(notas, nombres)

#lista booleanos
def aprobadosBooleanos(notas):
    aprobados = []
    i = 0
    for nota in notas:
        if(nota >= 7):
            aprobados.append(True)
        else:
            aprobados.append(False)
        i+=1
    print(aprobados)

aprobadoBoolean = aprobadosBooleanos(notas)

Homework

Ejercicio 1

Descripcion

Una pelota de goma es arrojada desde una altura de 100 m y cada vez que toca el piso salta 3/5 de la altura desde la que cayó. Escribí un programa que imprima una tabla mostrando las alturas que alcanza en cada uno de sus primeros diez rebotes.

Solucion

h = 100
for i in range(10):
    h = round(h * 3/5, 4)
    print(h)

Ejercicio 2

Descripcion

Jeringoso simple. Usá una iteración sobre el string cadena para agregar la sílaba 'pa', 'pe', 'pi', 'po', o 'pu' según corresponda luego de cada vocal.

Solucion

palabra = input('Ingrese una palabra: ')
palabra = palabra.lower()
palabra_nueva = ''

for letra in palabra:
    palabra_nueva += letra
    if letra in "aeiouáéíóú":
        palabra_nueva += 'p' + letra
print(palabra_nueva)

Ejercicio 3

Descripcion

Meses y días. Crea un programa que pida un número de mes (por ejemplo, el 4) y diga cuántos días tiene (por ejemplo, 30) y el nombre del mes. Debes usar listas. Para simplificarlo vamos a suponer que febrero tiene 28 días.

Solucion

meses = [
    ['Enero', 31],
    ['Febrero', 28],
    ['Marzo', 31],
    ['Abril', 30],
    ['Mayo', 31],
    ['Junio', 30],
    ['Julio', 31],
    ['Agosto', 31],
    ['Septiembre', 30],
    ['Octubre', 31],
    ['Noviembre', 30],
    ['Diciembre', 31]
]

mes = int(input('Ingrese numero de mes: '))
mes -= 1

print(f'El mes {mes+1} es {meses[mes][0]} y tiene {meses[mes][1]} dias')

Ejercicio 4

Descripcion

Supongamos que la población del país A es del orden de 75000 habitantes con una tasa de crecimiento anual del 4% y la población del país B es de 230000 habitantes con una tasa de crecimiento del 1,2%. Haz un programa que calcule y escriba el número de años necesarios para que la población del país A supere o iguale a la población del país B, tasas de crecimiento mantenidas.

Solucion

poblacionA = 75000
poblacionB = 230000
tasaA = 4 / 100
tasaB = 1.2 / 100
years = 0


while(poblacionA < poblacionB):
    poblacionA += poblacionA * tasaA
    poblacionB += poblacionB * tasaB
    years+=1

print(f'La poblacion A tiene {round(poblacionA)} habitantes y la B {round(poblacionB)} \nTardo {years} años en superar o igualar la A a la B')

Ejercicio 5

Descripcion

Notas. Las notas obtenidas en por el alumno A durante su cursada fueron: 8, 7, 7, 6, 9, 10, 8, 9. El alumno B obtuvo las siguientes notas: 9, 8, 8, 9, 5, 8, 9, 7. Realizar un programa que calcule la nota media y que muestre quien sacó la nota mayor y quien sacó la nota menor.

Solucion

alumnoA = [8, 7, 7, 6, 9, 10, 8, 9]
alumnoB = [9, 8, 8, 9, 5, 8, 9, 7]

def promedio(notas):
    suma = 0
    i = 0
    for nota in notas:
        suma+=nota
        i+=1
    return suma/i

if(promedio(alumnoA) > promedio(alumnoB)):
    print(f'El alumno A tiene mayor nota con un promedio de {promedio(alumnoA)}\nEl alumno B tiene {promedio(alumnoB)} de promedio')
else:
    print(
        f'El alumno B tiene mayor nota con un promedio de {promedio(alumnoB)}\n El alumno A tiene {promedio(alumnoA)} de promedio')

Ejercicio 6

Descripcion

  1. Crea una lista con los números del 1 al 10.
  2. Imprime los elementos en las posiciones 3, 4 y 5 utilizando slices.
  3. Imprime los elementos en las posiciones 2, 4, 6 y 8 utilizando slices. !
  4. Crea una nueva lista que contenga los elementos de la lista original en orden inverso utilizando slices. !
  5. Reemplaza los elementos en las posiciones 2, 3 y 4 con los números 20, 30 y 40 utilizando slices.

Solucion

list = []
for i in range(1, 11):
    list.append(i)
print(list)

print(list[3:6])
#print(list[1:8])
print(sorted(list, reverse=True))
list[2:5] = [20,30,40]
print(list)

Ejercicio 7

Descripcion

Supongamos que tenemos una lista de números enteros, y queremos encontrar todas las subsecuencias de la lista que sumen un número objetivo dado. Para hacerlo, vamos a crear una función que tome como argumentos la lista de números y el número objetivo, y devuelva una lista con todas las subsecuencias que suman el número objetivo. Ayuda: Por ejemplo, si le damos a tu programa la lista de números [1, 2, 3, 4, 5] y queremos encontrar todas las subsecuencias que suman 7 (número objetivo dado), la función debería devolver las siguientes listas [2, 5], [3, 4], [1, 2, 4].

Solucion

numeros = [1, 2, 3, 4, 5]

def subsecuenciasSuma(lista, objetivo):
    subsecuencias = []
    leng = len(lista)
    print(leng)
    for num in lista:
        for i in range(num, leng+1):
            if (num + i) == objetivo:
                subsecuencias.append([num, i])
            elif (num + i) < objetivo:
                if(num + i + (i+1)) == objetivo:
                    subsecuencias.append([num, i, i+1])
    return subsecuencias

print(subsecuenciasSuma(numeros, 7))