Saltar a contenido

Ejercicios

Inicial

Construya un programa que realice lo siguiente:

  • Construir y ordenar de mayor a menor una lista con valores ingresados del teclado
  • Recorrer la lista y contamos cuántos números pares y cuántos impares hay, con while y con for
  • Usar range para generar los índices de una lista
Solución
N = int(input("Ingrese N: ")) # Numero de elementos a guardar
lista = [] # Lista para guardar los valores
i = 0 # Contador para controlar los elementos
while i < N:
    # Entrada de valores
    n = int(input("Ingrese valor: ")) 
    lista.append(n) # Se agregan a la lista
    i += 1

# Ordenar lista
lista.sort() 
print(lista)

# Contar pares/impares con while
i = 0
n_pares = 0 # Contador de pares
n_impares = 0 # Contador de impares
while i < len(lista):
    if lista[i] % 2 == 0:
        n_pares += 1
    else:
        n_impares += 1
    i += 1
# Mostrar resultado
print("Pares:", n_pares)
print("Impares:", n_impares)

# Contar pares/impares con for 1
n_pares = 0 # Contador de pares
n_impares = 0 # Contador de impares
for valor in lista:
    if valor % 2 == 0:
        n_pares += 1
    else:
        n_impares += 1
    i += 1
# Mostrar resultado
print("Pares:", n_pares)
print("Impares:", n_impares)

# Contar pares/impares con for 2
n_pares = 0 # Contador de pares
n_impares = 0 # Contador de impares
for i in range(len(lista)):
    if lista[i] % 2 == 0:
        n_pares += 1
    else:
        n_impares += 1
    i += 1
# Mostrar resultado
print("Pares:", n_pares)
print("Impares:", n_impares)

Pares/impares

De una lista de números generar dos listas, una con los pares y otra con los impares

Solución
from random import choice, randint
# Creacion de lista 
lista = list(range(randint(20, 50)))
# Estructuras para guardar los valores
pares = []
impares = []
# Se recorre la lista
for valor in lista:
    # Verificamos si el valor es para o impar y lo guardamos en la lista correspondiente
    if valor % 2 == 0:
        pares.append(valor)
    else:
        impares.append(valor)
# Mostrar los valores
print("Pares:", pares)
print("Impares:", impares)

Palabras

De una lista de palabras, encontrar la más larga

Solución
def palabra_mas_larga(palabras):
    # Consideramos un string vacio como la palabra mas larga
    max_pal = ""
    # Recorremos la lista
    for palabra in palabras:
        # Comparamos los largos de palabra
        if len(palabra) > len(max_pal):
            max_pal = palabra # Asignamos la palabra mas larga que encontremos
    return max_pal

palabras = ["murcielago", "hola", "chao", "paralelepipedo", "perro", "gato", "elefante"] # Lista de ejemplo
print("Palabra mas larga:", palabra_mas_larga(palabras)) # Resultado

Repetidos

Escribir una función que, dada una lista de números enteros entregada como parámetro, retorne una nueva lista que mantenga el orden de la lista original pero no tenga repetidos.

Solución
def sin_repetidos(lista):
    nueva = [] # Lista a retornar
    for val in lista: # Recorremos la lista original
        if val not in nueva: # Si no encontramos el valor en la que retornaremos
            nueva.append(val) # Agregamos el elemento
    return nueva 

lista = [1, 2, 2, 1, 4, 6, 2, 3, 4, 4, 1]
print("Lista original:", lista)
print("Sin repetidos:", sin_repetidos(lista))

Puntos

De una lista de puntos: [ [x0,y0], [x1,y1], ..., [xn,yn] ] encontrar el que está más lejos del origen.

Solución
def distancia_origen(x, y):
    return (x ** 2 + y ** 2) ** 0.5

def mas_lejano(puntos):
    # Utilizamos el patron para buscar un maximo
    max_dist = -1 
    max_punto = []
    # Recorremos el arreglo
    for punto in puntos:
        # Calculamos la distancia al origen
        d = distancia_origen(punto[0], punto[1])
        if d > max_dist: # Guardamos la informacion del punto mas lejano 
            max_punto = punto
            max_dist = d
    return max_punto

# Puntos de ejemplo
puntos = [[0, 1], [1, 1.1], [2, 1], [0.4, 5]]
punto = mas_lejano(puntos)
print("Punto mas lejano:", punto)

Desafío: Ordenar la lista desde el punto más cercano al más lejano del origen

Solución
def distancia_origen(x, y):
    return (x ** 2 + y ** 2) ** 0.5

def mas_lejano(puntos):
    # Utilizamos el patron para buscar un maximo
    max_dist = -1 
    max_punto = []
    # Recorremos el arreglo
    for punto in puntos:
        # Calculamos la distancia al origen
        d = distancia_origen(punto[0], punto[1])
        if d > max_dist: # Guardamos la informacion del punto mas lejano 
            max_punto = punto
            max_dist = d
    return max_punto

def orden(puntos):
    # Creamos una lista donde guardaremos los puntos de manera "descendente"
    orden = [] 
    # Calcularemos el punto mas lejano y lo removeremos de la lista
    # Recorremos la lista de puntos mientras existan
    while len(puntos) > 0: 
        lejano = mas_lejano(puntos) # Obtenemos el punto mas lejano
        orden.append(lejano) # Lo agregamos a nuestra lista
        puntos.remove(lejano) # Lo removemos de los puntos
    orden.reverse() # Como agregamos los puntos en orden descendente, invertimos la lista
    return orden

# Puntos de ejemplo
puntos = [[0, 1], [-1, 1], [-10, 10], [2.3, 0.1], [1, 1.1], [2, 1], [0.4, 5]]
ordenado = orden(puntos) # Ordenamiento
print(ordenado) # Salida