Python para Data Science_primeros pasos_12 Desafío: ¡Es hora de practicar!-PARTE 1. ejercicios 1 a 5
## Enunciado 1: Calcular el promedio de gastos - Sugerencia: usa las funciones integradas sum() y len().
gastos = [2172.54, 3701.35, 3518.09, 3456.61, 3249.38, 2840.82, 3891.45, 3075.26, 2317.64, 3219.08] #lista de gastos
# Calcular el total de la suma de los gastos
suma_gastos = sum(gastos)
# Obtener el número total de elementos (gastos)
numero_gastos = len(gastos)
# Calcular el promedio de gastos
promedio_gastos = suma_gastos / numero_gastos
# Imprimir el resultado con formato a 2 decimales
print("Lista de gastos:", gastos)
print("Suma total de gastos:", suma_gastos)
print("Número de gastos:", numero_gastos)
print(f"El promedio de gastos es: {promedio_gastos:.2f}")
# **2 - Con los mismos datos de la pregunta anterior, determina cuántas compras se realizaron por encima de 3000 reales y calcula el porcentaje con respecto al total de compras.**
gastos = [2172.54, 3701.35, 3518.09, 3456.61, 3249.38, 2840.82, 3891.45, 3075.26, 2317.64, 3219.08] # Se usa la misma lista llamada gastos
umbral = 3000
compras_altas = 0 # compras_altas es el contador de compras que superan el umbral
# Ciclo para Iterar sobre la lista de gastos para contar las compras mayores al umbral
for gasto in gastos:
if gasto > umbral:
compras_altas = compras_altas + 1 # tambien: compras_altas += 1
# Obtener el total de compras
total_compras = len(gastos)
# Calcular el porcentaje de compras altas
porcentaje_alto = (compras_altas / total_compras) * 100
# Imprimir los resultados
print("Umbral de compra:", umbral)
print("Total de compras realizadas:", total_compras)
print("Compras por encima de", umbral, "reales:", compras_altas)
print("Porcentaje de compras por encima de", umbral, "reales:", f"{porcentaje_alto:.2f}%") #se formatea salida a 2 posiciones deciimales
# **3 - 3 - Crea un código que recoja en una lista 5 números enteros aleatorios e imprima la lista. Ejemplo: [1, 4, 7, 2, 4]..**
# importa el módulo random
import random
lista_aleatoria = []
cantidad_numeros = 5
limite_inferior = 1
limite_superior = 100 # Se elige un rango para los números
# Usar un Ciclo While para generar la cantidad deseada de números
i = 0
while i < cantidad_numeros:
# Generar un número entero aleatorio en el rango [limite_inferior, limite_superior]
# random.randint(): Es la función que genera el número entero aleatorio.
numero = random.randint(limite_inferior, limite_superior)
lista_aleatoria.append(numero) # adiciona a la lista por el final el Nro aleatorio
i = i + 1 # tambien i += 1
# Imprimir la lista resultante
print("Lista de", cantidad_numeros, "números enteros aleatorios:", lista_aleatoria) # Ejemplo: [1, 4, 7, 2, 4]
#**4 - Recoge nuevamente 5 números enteros e imprime la lista en orden inverso al enviado.**
## Metodo 1 - utilizando slicing
# Recoger 5 números enteros (se usará una lista fija para simplificar el código sin input). Se puede usar un ciclo para cargar la lista con 5 elementos
lista_original = [10, 20, 30, 40, 50]
# Imprimir la lista en orden inverso utilizando slicing [::-1]
lista_inversa = lista_original[::-1]
print("Lista de 5 números enteros:", lista_original)
print("Lista en orden inverso:", lista_inversa)
## Metodo 2 - usando metodo reverse
lista_original.reverse()
print("Lista en orden inverso usando metodo reverse:", lista_original)
# **5 - Crea un programa que, al ingresar un número cualquiera, genere una lista que contenga todos los números primos entre 1 y el número ingresado.**
# Número de entrada
numero_limite = int(input("Introduce el número límite: "))
# Inicializar la lista para almacenar los números primos
lista_primos = []
# Iterar desde 1 hasta el número ingresado
numero = 1
while numero <= numero_limite:
es_primo = True # Asumir que el número es primo al principio
# 0 y 1 no son números primos, por definición
if numero < 2:
es_primo = False
else:
# Optimización: solo se comprueban divisores hasta la raíz cuadrada del número
divisor = 2
# La condición del ciclo o bucle se puede simplificar a divisor * divisor <= numero, pero
# para mantener la simplicidad y evitar la función pow() o ** se usa int(numero**0.5) #la raiz cuadrada es potencia de 0.5
limite_divisor = int(numero**0.5) + 1
while divisor < limite_divisor:
if numero % divisor == 0:
es_primo = False
break # Si encuentra un divisor, no es primo y se sale
divisor = divisor + 1 # incrementa la cant de divisores
if es_primo:
lista_primos.append(numero)
numero = numero + 1 # numero += 1
# Imprimir la lista resultante
print("Número límite ingresado:", numero_limite)
print("Números primos entre 1 y", numero_limite, ":", lista_primos)