TP6 - Trabajo Práctico 6

Completar el trabajo práctico en GitHub Classroom

Link al TP 6

TP6 - Trabajo Práctico 6

Temas evaluados

Bucles for y while, range(), enumerate(), bucles anidados, break, recorrido e iteración de listas, acumuladores, búsqueda lineal, modificación de listas, composición de funciones con bucles.


Ejercicios

Ejercicio 1 — sum_range.py

Archivo de test: test_tp6_sum_range.py

Conceptos: Bucle for, range(), acumuladores.

Consigna: Implementar tres funciones que usen bucles for con range() para realizar cálculos con acumuladores.

def sum_to_n(n):
    """Retorna la suma de todos los enteros desde 1 hasta n (inclusive). Si n <= 0, retorna 0."""

def sum_evens(n):
    """Retorna la suma de todos los números pares desde 1 hasta n (inclusive). Si n <= 0, retorna 0."""

def factorial(n):
    """Retorna el factorial de n (n!). Si n <= 0, retorna 1."""

Ejemplos:


Ejercicio 2 — powers.py

Archivo de test: test_tp6_powers.py

Conceptos: Bucle for, range(), acumulador multiplicativo, composición de funciones.

Consigna: Implementar una función que calcule la potencia usando un bucle, y otra que use la primera para sumar potencias.

def power(base, exp):
    """Retorna base elevado a exp usando un bucle for. exp >= 0."""

def sum_of_powers(base, max_exp):
    """Retorna base^0 + base^1 + ... + base^max_exp. Debe USAR power."""

Ejemplos:


Ejercicio 3 — enumerate_list.py

Archivo de test: test_tp6_enumerate_list.py

Conceptos: Bucle for, iteración de listas, strings, listas nuevas, índices consecutivos.

Consigna: Implementar dos funciones que recorran una lista de strings y generen una nueva lista enumerada. Los strings vacíos deben saltearse y el índice debe ser consecutivo (no el original).

def enumerate_list(lst):
    """Dada una lista de strings, retorna una nueva lista con formato "indice. valor". Saltea strings vacíos."""

def enumerate_backwards(lst):
    """Igual que enumerate_list pero cada palabra está escrita al revés. Saltea strings vacíos."""

Ejemplos:


Ejercicio 4 — search.py

Archivo de test: test_tp6_search.py

Conceptos: Bucle for, búsqueda lineal, range(), retorno temprano.

Consigna: Implementar tres funciones de búsqueda sobre listas de strings. Todas deben retornar -1 si no encuentran lo buscado.

def index_of(target, lst):
    """Retorna el índice de la primera ocurrencia de target en lst, o -1."""

def index_of_by_index(target, lst, start):
    """Retorna el índice de la primera ocurrencia de target a partir de start (inclusive), o -1."""

def index_of_empty(lst):
    """Retorna el índice del primer string vacío en lst, o -1."""

Ejemplos:


Ejercicio 5 — list_modify.py

Archivo de test: test_tp6_list_modify.py

Conceptos: Bucle for, modificación de listas, búsqueda lineal.

Consigna: Implementar dos funciones que modifiquen una lista de strings. Las funciones modifican la lista original (no crean una nueva).

def put(value, lst):
    """Coloca value en el primer lugar vacío ("") de lst. Retorna el índice o -1."""

def remove(value, lst):
    """Reemplaza todas las ocurrencias de value por "". Retorna cantidad de eliminaciones."""

Ejemplos:


Ejercicio 6 — while_basics.py

Archivo de test: test_tp6_while_basics.py

Conceptos: Bucle while, listas, condición de terminación.

Consigna: Implementar dos funciones que usen bucles while para generar secuencias de números.

def countdown(n):
    """Retorna una lista con la cuenta regresiva desde n hasta 0. Si n < 0, retorna []."""

def double_until(limit):
    """Comenzando desde 1, duplica el valor y lo agrega a una lista mientras sea <= limit. Si limit < 1, retorna []."""

Ejemplos:


Ejercicio 7 — collatz.py

Archivo de test: test_tp6_collatz.py

Conceptos: Bucle while, condición de terminación desconocida, listas.

Consigna: La conjetura de Collatz dice que para cualquier número entero positivo, si aplicamos repetidamente las reglas: si es par dividir por 2, si es impar multiplicar por 3 y sumar 1, eventualmente llegamos a 1.

def collatz_steps(n):
    """Retorna la cantidad de pasos para llegar de n a 1. Si n es 1, retorna 0."""

def collatz_sequence(n):
    """Retorna la secuencia completa de Collatz como lista, desde n hasta 1."""

Ejemplos:


Ejercicio 8 — nested_loops.py

Archivo de test: test_tp6_nested_loops.py

Conceptos: Bucles for anidados, listas de listas (matrices), range().

Consigna: Implementar tres funciones que operen sobre matrices (listas de listas de números) usando bucles anidados.

def flatten(matrix):
    """Dada una lista de listas, retorna una única lista con todos los elementos."""

def row_sums(matrix):
    """Retorna una lista con la suma de cada fila."""

def col_sums(matrix):
    """Retorna una lista con la suma de cada columna. Todas las filas tienen la misma longitud."""

Ejemplos:


Ejercicio 9 — find_extremes.py

Archivo de test: test_tp6_find_extremes.py

Conceptos: Bucle for, recorrido de listas, acumuladores, comparación.

Consigna: Implementar tres funciones que recorran una lista de números para encontrar valores extremos y contar elementos.

def find_min(numbers):
    """Dada una lista de números (no vacía), retorna el menor valor."""

def find_max(numbers):
    """Dada una lista de números (no vacía), retorna el mayor valor."""

def count_negatives(numbers):
    """Retorna la cantidad de números negativos en la lista. Si está vacía, retorna 0."""

Ejemplos:


Ejercicio 10 — list_stats.py

Archivo de test: test_tp6_list_stats.py

Conceptos: Composición de funciones, bucles for, acumuladores, funciones provistas.

Consigna: Se proveen dos funciones ya implementadas: find_min(numbers) y find_max(numbers). El alumno debe usar estas funciones (no reimplementar la lógica) para implementar range_of, average y describe.

Las funciones provistas son:

def find_min(numbers):
    """Dada una lista de números, retorna el menor valor."""

def find_max(numbers):
    """Dada una lista de números, retorna el mayor valor."""

Las funciones a implementar:

def range_of(numbers):
    """Retorna max - min. Debe USAR find_min y find_max."""

def average(numbers):
    """Retorna el promedio redondeado a 1 decimal. Si la lista está vacía, retorna 0.0."""

def describe(numbers):
    """Retorna "Min:{min} Max:{max} Range:{range} Avg:{avg}". Si la lista está vacía, retorna "Empty list"."""

Ejemplos: