Ejercicio 01
Escriba un programa que pida al usuario que escriba su nombre, y lo salude llamándolo por su nombre.
terminal
Ingrese su nombre: Python
Hola, Python
# Solicita al usuario que ingrese su nombre y lo almacena en la variable "nombre"
nombre = "Python"
# Imprime un saludo personalizado utilizando el nombre ingresado por el usuario
print(f"Hola, {nombre}!")
Hola, Python!
Ejercicio 02
Escriba un programa que reciba como entrada el radio de un círculo y entregue como salida su perímetro y su área:
terminal
Ingrese el radio: 5
Perimetro: 31.4
Área: 78.5
# Solicitar al usuario que ingrese el radio del círculo
radio = 5
# Definir la variable para el valor de Pi
pi = 3.14159265359
# Calcular el perímetro y el área del círculo
perimetro = 2 * pi * radio
area = pi * radio ** 2
# Imprimir el resultado con un formato más claro
print(f"Perímetro: {perimetro:.1f}")
print(f"Área: {area:.1f}")
Perímetro: 31.4 Área: 78.5
Ejercicio 03
Escriba un programa que calcule el promedio de 4 notas ingresadas por el usuario:
terminal
Primera nota: 55
Segunda nota: 71
Tercera nota: 46
Cuarta nota: 87
El promedio es: 64.75
# Solicitar al usuario que ingrese las 4 notas
nota1 = 55
nota2 = 71
nota3 = 46
nota4 = 87
# Calcular el promedio
promedio = (nota1 + nota2 + nota3 + nota4) / 4
# Imprimir el resultado
print(f"El promedio es: {promedio:.2f}")
El promedio es: 64.75
Ejercicio 04
Escriba un programa que convierta de centímetros a pulgadas. Una pulgada es igual a 2.54 centímetros.
terminal
Ingrese longitud: 45
45 cm = 17.7165 in
# Solicitar al usuario que ingrese la longitud en centímetros
longitud_cm = 45
# Realizar la conversión a pulgadas
longitud_in = longitud_cm / 2.54
# Imprimir el resultado
print(f"{longitud_cm} cm = {longitud_in:.4f} in")
45 cm = 17.7165 in
Ejercicio 05
Escriba un programa que reciba como entrada las longitudes de los dos catetos $a$ y $b$ de un triángulo rectángulo, y que entregue como salida el largo de la hipotenusa $c$ del triangulo, dado por el teorema de Pitágoras: $c^2=a^2+b^2$.
terminal
Ingrese cateto a: 7
Ingrese cateto b: 5
La hipotenusa es 8.6023252670426267
# Solicitar al usuario que ingrese la longitud de los catetos
cateto_a = 7
cateto_b = 5
# Calcular la hipotenusa utilizando el teorema de Pitágoras
hipotenusa = (cateto_a ** 2 + cateto_b ** 2) ** 0.5
# Imprimir el resultado
print(f"La hipotenusa es {hipotenusa}")
La hipotenusa es 8.602325267042627
Ejercicio 06
Escriba un programa que pregunte al usuario la hora actual $t$ del reloj y un número entero de horas $h$, que indique qué hora marcará el reloj dentro de $h$ horas:
terminal
Hora actual: 23
Cantidad de horas: 5
En 5 horas, el reloj marcara las 4
# Solicitar al usuario la hora actual y la cantidad de horas
hora_actual = 23
horas_pasadas = 5
# Calcular la nueva hora
nueva_hora = (hora_actual + horas_pasadas) % 24
# Imprimir el resultado
print(f"En {horas_pasadas} horas, el reloj marcará las {nueva_hora}")
En 5 horas, el reloj marcará las 4
Ejercicio 07
Un alumno desea saber que nota necesita en el tercer certamen para aprobar un ramo.
El promedio del ramo se calcula con la siguiente formula.
$$N_C=(C_1+C_2+C_3)/3$$ $$ N_F=N_C⋅0.7+N_L⋅0.3$$
Donde $N_C$ es el promedio de certámenes, $N_L$ el promedio de laboratorio y $N_F$ la nota final.
Escriba un programa que pregunte al usuario las notas de los dos primeros certamen y la nota de laboratorio, y muestre la nota que necesita el alumno para aprobar el ramo con nota final 60.
terminal
Ingrese nota certamen 1: 45
Ingrese nota certamen 2: 55
Ingrese nota laboratorio: 65
Necesita nota 74 en el certamen 3
# Solicitar al usuario las notas de los dos primeros certámenes y la nota de laboratorio
certamen1 = 45
certamen2 = 55
laboratorio = 65
# Calcular la nota necesaria en el tercer certamen para aprobar con nota final 60
nota_necesaria = 3*((60-0.3*laboratorio)/0.7)-certamen1-certamen2
# Imprimir la nota necesaria en el tercer certamen
print(f"Necesita nota {nota_necesaria:.0f} en el certamen 3")
Necesita nota 74 en el certamen 3
Ejercicio 08
Realice un programa que calcule el área de un triángulo a partir de las longitudes de sus lados.
Para calcularlo puede utilizar la fórmula de Herón:
$$ A = \sqrt{s\,(s-a)(s-b)(s-c)}, $$ donde $a$, $b$ y $c$ son las longitudes de cada lado y $s=\dfrac{a+b+c}{2}$ es el semiperímetro.
terminal
Ingrese longitud de lado 1: 3
Ingrese longitud de lado 2: 4
Ingrese longitud de lado 3: 5
El área del triángulo es 6.0
import math
# Solicitar al usuario las longitudes de los lados del triángulo
lado1 = 3
lado2 = 4
lado3 = 5
# Calcular el semiperímetro
s = (lado1 + lado2 + lado3) / 2
# Calcular el área utilizando la fórmula de Herón
area = math.sqrt(s * (s - lado1) * (s - lado2) * (s - lado3))
# Imprimir el resultado
print(f"El área del triángulo es {area:.1f}")
El área del triángulo es 6.0
Control de Flujo¶
if-elif-else¶
Ejercicio 01
Escriba un programa que determine si el número entero ingresado por el usuario es par o no.
terminal
Ingrese un número: 4
Su número es par
terminal
Ingrese un número: 3
Su número es impar
# Solicitar al usuario que ingrese un número entero
# Caso 01
numero = 4
# Caso 02
#numero = 3
# Verificar si el número es par o impar
if numero % 2 == 0:
print("Su número es par")
else:
print("Su número es impar")
Su número es par
Ejercicio 02
Escriba un programa que pida dos números enteros y que calcule la división, indicando si la división es exacta o no.
terminal
Dividendo: 14
Divisor: 5
La división no es exacta.
Cociente: 2
Resto: 4
Dividendo: 100
Divisor: 10
La división es exacta.
Cociente: 10
Resto: 0
# Solicitar al usuario que ingrese el dividendo y el divisor
# Caso 01
dividendo = 14
divisor = 5
# Caso 02
#dividendo = 100
#divisor = 10
# Calcular el cociente y el resto de la división
cociente = dividendo // divisor
resto = dividendo % divisor
# Verificar si la división es exacta
if resto == 0:
print("La división es exacta.")
else:
print("La división no es exacta.")
# Imprimir el cociente y el resto
print(f"Cociente: {cociente}")
print(f"Resto: {resto}")
La división no es exacta. Cociente: 2 Resto: 4
Ejercicio 03
Escriba un programa que pida al usuario dos palabras, y que indique cuál de ellas es la más larga y por cuántas letras lo es.
terminal
Palabra 1: edificio
Palabra 2: tren
La palabra edificio tiene 4 letras mas que tren.
terminal
Palabra 1: sol
Palabra 2: paralelepipedo
La palabra paralelepipedo tiene 11 letras mas que sol
terminal
Palabra 1: plancha
Palabra 2: lapices
Las dos palabras tienen el mismo largo
# Solicitar al usuario que ingrese las dos palabras
# Caso 01
palabra1 = 'edificio'
palabra2 = 'tren'
# Caso 02
#palabra1 = 'sol'
#palabra2 = 'paralelepipedo'
# Caso 03
#palabra1 = 'plancha'
#palabra2 = 'lapices'
# Calcular la diferencia en la longitud de las palabras
diferencia = abs(len(palabra1) - len(palabra2))
# Determinar cuál palabra es más larga y construir el mensaje
if len(palabra1) > len(palabra2):
mensaje = f"La palabra {palabra1} tiene {diferencia} letras más que {palabra2}."
elif len(palabra1) < len(palabra2):
mensaje = f"La palabra {palabra2} tiene {diferencia} letras más que {palabra1}."
else:
mensaje = "Las dos palabras tienen el mismo largo."
# Imprimir el resultado
print(mensaje)
La palabra edificio tiene 4 letras más que tren.
Ejercicio 04
Un año es bisiesto si es divisible por $4$, excepto si es divisible por $100$ y no por $400$.
Escriba un programa que reciba un año como entrada e indique True
si un año es bisiesto o False
si no lo es.
terminal
Ingrese un anno: 1988
1988 es bisiesto
terminal
Ingrese un anno: 2011
2011 no es bisiesto
terminal
Ingrese un anno: 1700
1700 no es bisiesto
terminal
Ingrese un anno: 2400
2400 es bisiesto
# Solicitar al usuario que ingrese un año
# Caso 01
anno = 1988
# Caso 02
#anno = 2011
# Caso 03
#anno = 1700
# Caso 04
#anno = 2400
# Verificar si el año es bisiesto
if (anno % 4 == 0 and anno % 100 != 0) or anno % 400 == 0:
print(f"{anno} es bisiesto")
else:
print(f"{anno} no es bisiesto")
1988 es bisiesto
Ejercicio 05
Los tres lados $a, b$ y $c$ de un triángulo deben satisfacer la desigualdad triangular: cada uno de los lados no puede ser más largo que la suma de los otros dos.
Escriba un programa que reciba como entrada los tres lados de un triángulo, e indique:
- si acaso el triángulo es inválido
- si el triángulo es válido, qué tipo de triángulo es.
terminal
Ingrese a: 3.9
Ingrese b: 6.0
Ingrese c: 1.2
No es un triangulo valido.
terminal
Ingrese a: 1.9
Ingrese b: 2
Ingrese c: 2
El triangulo es isoceles.
terminal
Ingrese a: 3.0
Ingrese b: 5.0
Ingrese c: 4.0
El triangulo es escaleno.
terminal
Ingrese a: 2
Ingrese b: 2
Ingrese c: 2
El triangulo es equilatero.
# Solicitar al usuario que ingrese los lados del triángulo
# Caso 01
a = 3.9
b = 6.0
c = 1.2
# Caso 02
#a = 1.9
#b = 1.9
#c = 2.0
# Caso 03
#a = 3.0
#b = 5.0
#c = 4.0
# Caso 04
#a = 2.0
#b = 2.0
#c = 2.0
# Verificar si es un triángulo válido
if a + b > c and a + c > b and b + c > a:
if a == b == c:
print("El triángulo es equilátero.")
elif a == b or a == c or b == c:
print("El triángulo es isósceles.")
else:
print("El triángulo es escaleno.")
else:
print("No es un triángulo válido.")
No es un triángulo válido.
Ejercicio 06
El riesgo de que una persona sufra enfermedades coronarias depende de su edad y su índice de masa corporal:
edad < 45 | edad ≥ 45 | |
---|---|---|
IMC < 22.0 | bajo | medio |
IMC ≥ 22.0 | medio | alto |
El índice de masa corporal es el cuociente entre el peso del individuo en kilos y el cuadrado de su estatura en metros ($IMC = \dfrac{peso}{estatura^2} $).
Escriba un programa que reciba como entrada la estatura, el peso y la edad de una persona, y le entregue su condición de riesgo.
ejemplos
- Si el usuario ingresa una estatura de 1.75 metros, un peso de 70 kilogramos y una edad de 30 años, el programa mostrará: "La condición de riesgo es: medio".
- Si el usuario ingresa una estatura de 1.65 metros, un peso de 90 kilogramos y una edad de 50 años, el programa mostrará: "La condición de riesgo es: alto".
# Solicitar al usuario que ingrese la estatura, peso y edad
estatura = 1.65
peso = 180
edad = 45
# Calcular el índice de masa corporal (IMC)
imc = peso / (estatura ** 2)
# Determinar la condición de riesgo
if edad < 45:
if imc < 22.0:
riesgo = "bajo"
else:
riesgo = "medio"
else:
if imc < 22.0:
riesgo = "medio"
else:
riesgo = "alto"
# Imprimir la condición de riesgo
print(f"La condición de riesgo es: {riesgo}")
La condición de riesgo es: alto
Ejercicio 07
Un número natural es un palíndromo si se lee igual de izquierda a derecha y de derecha a izquierda.
Por ejemplo, $14941$ es un palíndromo, mientras que $81924$ no lo es.
Escriba un programa que indique si el número ingresado es o no palíndromo:
terminal
Ingrese un numero: 14941
14941 es palindromo
terminal
Ingrese un numero: 81924
81924 no es palindromo
Hint: Para encontrar el inverso de un string en Python, puedes utilizar la técnica de
texto[::-1]
.
# Solicitar al usuario que ingrese un número
# Caso 01
numero = '14941'
# Caso 02
#numero = '81924'
# Obtener el número en su versión invertida
numero_invertido = numero[::-1]
# Verificar si el número y su versión invertida son iguales
if numero == numero_invertido:
print(f"{numero} es un palíndromo")
else:
print(f"{numero} no es un palíndromo")
14941 es un palíndromo
While¶
Ejercicio 01
Solicita al usuario un número y muestra un contador regresivo desde ese número hasta 1. Utiliza la declaración while
para resolver este problema.
Ingrese un número: 5
Contador regresivo desde 5 hasta 1:
5
4
3
2
1
# Solicitar al usuario que ingrese un número
numero = 5
# Mostrar un contador regresivo desde el número ingresado hasta 1
print("Contador regresivo desde", numero, "hasta 1:")
while numero >= 1:
print(numero)
numero -= 1
Contador regresivo desde 5 hasta 1: 5 4 3 2 1
Ejercicio 02
Solicita al usuario un número y calcula la suma de todos los números pares desde 2 hasta ese número. Utiliza la declaración while
para resolver este problema.
Ingrese un número: 10
La suma de números pares desde 2 hasta 10 es 30
# Solicitar al usuario que ingrese un número
numero = 10
# Inicializar la suma y el contador
suma = 0
contador = 2
# Calcular la suma de números pares desde 2 hasta el número ingresado
while contador <= numero:
suma += contador
contador += 2 # Avanzar al siguiente número par
# Imprimir el resultado
print(f"La suma de números pares desde 2 hasta {numero} es {suma}")
La suma de números pares desde 2 hasta 10 es 30
Ejercicio 03
Solicita al usuario un número entero y suma todos sus dígitos. Utiliza la declaración while
para resolver este problema.
Ingrese un número entero: 12345
La suma de los dígitos es 15
# Solicitar al usuario que ingrese un número entero
numero = 12345
# Inicializar la suma y el contador
suma_digitos = 0
# Calcular la suma de los dígitos
while numero > 0:
# Obtener el último dígito y sumarlo
digito = numero % 10
suma_digitos += digito
# Eliminar el último dígito
numero //= 10
# Imprimir el resultado
print(f"La suma de los dígitos es {suma_digitos}")
La suma de los dígitos es 15
Ejercicio 04
Pide al usuario un número y cuenta cuántos de sus dígitos son pares. Utiliza la declaración while
para resolver este problema.
Ingrese un número: 123456
El número tiene 3 dígitos pares.
# Solicitar al usuario que ingrese un número
numero = 123456
# Inicializar el contador de dígitos pares
contador_pares = 0
# Contar los dígitos pares
while numero > 0:
digito = numero % 10
if digito % 2 == 0:
contador_pares += 1
numero //= 10
# Imprimir el resultado
print(f"El número tiene {contador_pares} dígitos pares.")
El número tiene 3 dígitos pares.
Ejercicio 05
Solicita al usuario un número y cuenta cuántos números en el rango de 1 a ese número son divisibles por 7. Utiliza la declaración while
para resolver este problema.
Ingrese un número: 20
Hay 2 números divisibles por 7 en el rango de 1 a 20.
# Solicitar al usuario que ingrese un número
numero = 20
# Inicializar el contador de números divisibles por 7
contador_divisibles = 0
# Contar los números divisibles por 7 en el rango de 1 a numero
numero_actual = 1
while numero_actual <= numero:
if numero_actual % 7 == 0:
contador_divisibles += 1
numero_actual += 1
# Imprimir el resultado
print(f"Hay {contador_divisibles} números divisibles por 7 en el rango de 1 a {numero}.")
Hay 2 números divisibles por 7 en el rango de 1 a 20.
Ejercicio 06
Solicita al usuario un número y cuenta cuántos de sus dígitos son impares. Utiliza la declaración while
para resolver este problema.
Ingrese un número: 7654321
El número tiene 4 dígitos impares.
# Solicitar al usuario que ingrese un número
numero = 7654321
# Inicializar el contador de dígitos impares
contador_impares = 0
# Contar los dígitos impares
while numero > 0:
digito = numero % 10
if digito % 2 != 0:
contador_impares += 1
numero //= 10
# Imprimir el resultado
print(f"El número tiene {contador_impares} dígitos impares.")
El número tiene 4 dígitos impares.
Range¶
Ejercicio 01
Calcula la suma de todos los números pares desde 1 hasta un número dado ($n$). Utiliza la declaración range
para resolver este problema.
Ingrese un número: 10
La suma de números pares desde 1 hasta 10 es 30
# Solicitar al usuario que ingrese un número
n = 10
# Inicializar la suma
suma_pares = 0
# Calcular la suma de números pares desde 1 hasta n
for i in range(2, n + 1, 2):
suma_pares += i
# Imprimir el resultado
print(f"La suma de números pares desde 1 hasta {n} es {suma_pares}")
La suma de números pares desde 1 hasta 10 es 30
Ejercicio 02
Muestra un contador regresivo desde un número ($n$) dado hasta 1. Utiliza la declaración range
para resolver este problema.
Ingrese un número: 5
Contador regresivo desde 5 hasta 1:
5
4
3
2
1
# Solicitar al usuario que ingrese un número
n = 5
# Mostrar un contador regresivo desde n hasta 1
print(f"Contador regresivo desde {n} hasta 1:")
for i in range(n, 0, -1):
print(i)
Contador regresivo desde 5 hasta 1: 5 4 3 2 1
Ejercicio 03
Muestra la tabla de multiplicar de un número dado. Utiliza la declaración range
para resolver este problema.
Ingrese un número: 7
Tabla de multiplicar del 7:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
# Solicitar al usuario que ingrese un número
n = 7
# Mostrar la tabla de multiplicar de n
print(f"Tabla de multiplicar del {n}:")
for i in range(1, 11):
resultado = n * i
print(f"{n} x {i} = {resultado}")
Tabla de multiplicar del 7: 7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63 7 x 10 = 70
Ejercicio 04
Escribe un programa que solicite al usuario un número entero positivo y luego calcule la suma de los cuadrados de todos los números desde 1 hasta el número ingresado. Utiliza la declaración range
para generar los números en el rango y luego suma los cuadrados de esos números.
Ejemplos
Si el usuario ingresa el número 4, el programa calculará la suma de los cuadrados de los números desde 1 hasta 4 de la siguiente manera:
Suma = $1^2 + 2^2 + 3^2 + 4^2 = 1 + 4 + 9 + 16 = 30$
El programa mostrará: "La suma de los cuadrados de los números en el rango de 1 a 4 es 30."
# Solicitar al usuario que ingrese un número entero positivo
n = 4
# Inicializar la suma de cuadrados
suma_cuadrados = 0
# Calcular la suma de los cuadrados de los números en el rango de 1 a n
for numero in range(1, n + 1):
cuadrado = numero ** 2
suma_cuadrados += cuadrado
# Imprimir el resultado
print(f"La suma de los cuadrados de los números en el rango de 1 a {n} es {suma_cuadrados}")
La suma de los cuadrados de los números en el rango de 1 a 4 es 30
Break & Continue¶
Ejercicio 01
Solicita al usuario un número y cuenta cuántos de sus dígitos son pares. Utiliza la declaración continue
para omitir los dígitos impares.
Ingrese un número: 123456
El número tiene 3 dígitos pares.
# Solicitar al usuario que ingrese un número
numero = 123456
# Inicializar el contador de dígitos pares
contador_pares = 0
# Contar los dígitos pares
while numero > 0:
digito = numero % 10
if digito % 2 != 0:
# Si el dígito es impar, omitirlo
numero //= 10
continue
contador_pares += 1
numero //= 10
# Imprimir el resultado
print(f"El número tiene {contador_pares} dígitos pares.")
El número tiene 3 dígitos pares.
Ejercicio 02
Calcula la suma de los números en un rango dado (por ejemplo, de 1 a 10), pero omite los múltiplos de 3 utilizando la declaración continue
.
Ingrese un número: 10
La suma de los números no divisibles por 3 en el rango de 1 a 10 es 37
# Solicitar al usuario que ingrese un número
n = 10
# Inicializar la suma
suma = 0
# Calcular la suma de los números en el rango de 1 a n, omitiendo los múltiplos de 3
for numero in range(1, n + 1):
if numero % 3 == 0:
# Si es múltiplo de 3, omitirlo
continue
suma += numero
# Imprimir el resultado
print(f"La suma de los números no divisibles por 3 en el rango de 1 a {n} es {suma}")
La suma de los números no divisibles por 3 en el rango de 1 a 10 es 37
Ejercicio 03
Dada una lista de números enteros, solicita al usuario un número objetivo y busca si el número está en la lista. Utiliza un bucle con break
para detener la búsqueda una vez que encuentres el número o determines que no está en la lista.
# Lista de números
numeros = [12, 45, 23, 7, 18, 35, 9, 42]
# Solicitar al usuario un número objetivo
objetivo = 10
# Inicializar una variable para verificar si se encontró el número
encontrado = False
# Recorrer la lista de números
for numero in numeros:
if numero == objetivo:
encontrado = True
break # Detener la búsqueda una vez que se encuentra el número
# Comprobar si se encontró el número o no
if encontrado:
print(f"El número {objetivo} fue encontrado en la lista.")
else:
print(f"El número {objetivo} no se encontró en la lista.")
El número 10 no se encontró en la lista.
Ejercicio 04
Simula un juego en el que la computadora "piensa" en un número y el jugador intenta adivinarlo. Crea un bucle que permita al jugador hacer intentos para adivinar el número, y utiliza break
para salir del bucle si el jugador adivina el número o excede un número máximo de intentos.
import random
# Generar un número aleatorio entre 1 y 100
numero_secreto = random.randint(1, 100)
# Número máximo de intentos permitidos
intentos_maximos = 10
print("Bienvenido al juego de adivinar el número.")
print(f"Estoy pensando en un número entre 1 y 100. Adivina cuál es.")
print(f"Tienes un máximo de {intentos_maximos} intentos.")
# Bucle principal
for intento in range(1, intentos_maximos + 1):
# Solicitar al jugador que ingrese un número
intento_jugador = int(input(f"Intento {intento}: Ingresa un número: "))
# Comprobar si el jugador adivinó el número
if intento_jugador == numero_secreto:
print(f"¡Felicidades! Adivinaste el número {numero_secreto} en {intento} intentos.")
break # Salir del bucle, el juego ha terminado
# Comprobar si el intento es demasiado alto o bajo
if intento_jugador < numero_secreto:
print("El número es más alto. Inténtalo de nuevo.")
else:
print("El número es más bajo. Inténtalo de nuevo.")
# Si el jugador no adivinó después de los intentos máximos
else:
print(f"Agotaste tus {intentos_maximos} intentos. El número secreto era {numero_secreto}. ¡Mejor suerte la próxima vez!")
Bienvenido al juego de adivinar el número. Estoy pensando en un número entre 1 y 100. Adivina cuál es. Tienes un máximo de 10 intentos.
El número es más alto. Inténtalo de nuevo.
El número es más alto. Inténtalo de nuevo.
El número es más alto. Inténtalo de nuevo.
El número es más alto. Inténtalo de nuevo.
El número es más alto. Inténtalo de nuevo.
El número es más alto. Inténtalo de nuevo.
El número es más bajo. Inténtalo de nuevo.
¡Felicidades! Adivinaste el número 98 en 8 intentos.
Estructura de Datos¶
Listas¶
Ejercicio 01
Considere las siguientes listas:
a = [5, 1, 4, 9, 0]
b = range(3, 10) + range(20, 23)
c = [[1, 2], [3, 4, 5], [6, 7]]
d = ['perro', 'gato', 'jirafa', 'elefante']
e = ['a', a, 2 * a]
Sin usar el computador, indique cuál es el resultado y el tipo de las siguientes expresiones. A continuación, verifique sus respuestas en el computador.
a[2]
b[9]
c[1][2]
e[0] == e[1]
len(c)
len(c[0])
len(e)
c[-1]
c[-1][+1]
c[2:] + d[2:]
a[3:10]
a[3:10:2]
d.index('jirafa')
e[c[0][1]].count(5)
sorted(a)[2]
complex(b[0], b[1])
Respuestas y verificaciones en el computador para las expresiones dadas:
a[2]
: Resultado:4
, Tipo:int
a = [5, 1, 4, 9, 0]
a[2] # Resultado: 4
b[9]
: Resultado:29
, Tipo:int
b = list(range(3, 10)) + list(range(20, 23))
b[9] # Resultado: 29
c[1][2]
: Resultado:5
, Tipo:int
c = [[1, 2], [3, 4, 5], [6, 7]]
c[1][2] # Resultado: 5
e[0] == e[1]
: Resultado:False
, Tipo:bool
e = ['a', a, 2 * a]
e[0] == e[1] # Resultado: False
len(c)
: Resultado:3
, Tipo:int
len(c) # Resultado: 3
len(c[0])
: Resultado:2
, Tipo:int
len(c[0]) # Resultado: 2
len(e)
: Resultado:3
, Tipo:int
len(e) # Resultado: 3
c[-1]
: Resultado:[6, 7]
, Tipo:list
c[-1] # Resultado: [6, 7]
c[-1][+1]
: Resultado:7
, Tipo:int
c[-1][+1] # Resultado: 7
c[2:] + d[2:]
: Resultado:[[6, 7], 'jirafa', 'elefante']
, Tipo:list
c[2:] + d[2:] # Resultado: [[6, 7], 'jirafa', 'elefante']
a[3:10]
: Resultado:[9, 0]
, Tipo:list
a[3:10] # Resultado: [9, 0]
a[3:10:2]
: Resultado:[9]
, Tipo:list
a[3:10:2] # Resultado: [9]
d.index('jirafa')
: Resultado:2
, Tipo:int
d = ['perro', 'gato', 'jirafa', 'elefante']
d.index('jirafa') # Resultado: 2
e[c[0][1]].count(5)
: Resultado:0
, Tipo:int
e[c[0][1]].count(5) # Resultado: 0
sorted(a)[2]
: Resultado:4
, Tipo:int
sorted(a)[2] # Resultado: 4
complex(b[0], b[1])
: Resultado:(3+4j)
, Tipo:complex
complex(b[0], b[1]) # Resultado: (3+4j)
Ejercicio 02
Escriba una rutina que cuente cuántos valores en la lista valores son mayores que x
:
terminal
>>> numero = 5
>>> lista = [7, 3, 6, 0, 4, 5, 10]
Existen 3 numeros mayores que 5 en la lista.
# Número de referencia
x = 5
# Lista de valores
valores = [7, 3, 6, 0, 4, 5, 10]
# Contador para llevar el seguimiento de los valores mayores que x
contador = 0
# Iterar a través de la lista y contar los valores mayores que x
for valor in valores:
if valor > x:
contador += 1
# Imprimir el resultado
print(f"Existen {contador} números mayores que {x} en la lista.")
Existen 3 números mayores que 5 en la lista.
Ejercicio 03
El producto interno de dos listas de números es la suma de los productos de los términos correspondientes de ambas.
Por ejemplo, si:
a = [5, 1, 6]
b = [1, -2, 8]
entonces el producto interno entre $a$ y $b$ es:
(5 * 1) + (1 * -2) + (6 * 8)
Escriba una rutina que entregue el producto interno de
a
yb
:>>> a = [7, 1, 4, 9, 8] >>> b = range(5) El producto interno es 68
Dos listas de números son ortogonales si su producto interno es cero. Escriba una rutina que indique si
a
yb
son ortogonales:>>> a = [2, 1] >>> b = [-3, 6] Los vectores son ortonormales
producto interno
# Lista de números 'a'
a = [7, 1, 4, 9, 8]
# Lista de números 'b'
b = list(range(5))
# Inicializar la suma del producto interno
producto_interno = 0
# Calcular el producto interno
for i in range(len(a)):
producto_interno += a[i] * b[i]
# Imprimir el resultado
print(f"El producto interno es {producto_interno}")
El producto interno es 68
vectores ortonormales
# Lista de números 'a'
a = [2, 1]
# Lista de números 'b'
b = [-3, 6]
# Inicializar la suma del producto interno
producto_interno = 0
# Calcular el producto interno
for i in range(len(a)):
producto_interno += a[i] * b[i]
# Verificar si son ortogonales
if producto_interno == 0:
print("Los vectores son ortogonales")
else:
print("Los vectores no son ortogonales")
Los vectores son ortogonales
Tuplas¶
Ejercicio 01
Considere las siguientes asignaciones:
a = (2, 10, 1991)
b = (25, 12, 1990)
c = ('Donald', True, b)
x, y = ((27, 3), 9)
z, w = x
v = (x, a)
Sin usar el computador, indique cuál es el resultado y el tipo de las siguientes expresiones. A continuación, verifique sus respuestas en el computador.
a < b
y + w
x + a
len(v)
v[1][1]
c[0][0]
z, y
a + b[1:5]
(a + b)[1:5]
str(a[2]) + str(b[2])
str(a[2] + b[2])
str((a + b)[2])
str(a + b)[2]
Respuestas y verificaciones en el computador para las expresiones dadas:
a < b
: Resultado:True
, Tipo:bool
a = (2, 10, 1991)
b = (25, 12, 1990)
a < b # Resultado: True
y + w
: Resultado:12
, Tipo:int
x, y = ((27, 3), 9)
z, w = x
y + w # Resultado: 12
x + a
: Esto generará un error porque no se pueden sumar una tupla(x)
y una tupla(a)
.len(v)
: Resultado:2
, Tipo:int
v = (x, a)
len(v) # Resultado: 2
v[1][1]
: Esto generará un error porque estás tratando de acceder a un índice en una tupla(a)
que está dentro de otra tupla(v)
.c[0][0]
: Resultado:'D'
, Tipo:str
c = ('Donald', True, b)
c[0][0] # Resultado: 'D'
z, y
: Resultado:(27, 9)
, Tipo:tuple
x, y = ((27, 3), 9)
z, y # Resultado: (27, 9)
a + b[1:5]
: Resultado:(2, 10, 1991, 12, 1990)
, Tipo:tuple
a = (2, 10, 1991)
b = (25, 12, 1990)
a + b[1:5] # Resultado: (2, 10, 1991, 12, 1990)
(a + b)[1:5]
: Resultado:(10, 1991, 12, 1990)
, Tipo:tuple
a = (2, 10, 1991)
b = (25, 12, 1990)
(a + b)[1:5] # Resultado: (10, 1991, 12, 1990)
str(a[2]) + str(b[2])
: Resultado:'19911990'
, Tipo:str
a = (2, 10, 1991)
b = (25, 12, 1990)
str(a[2]) + str(b[2]) # Resultado: '19911990'
str(a[2] + b[2])
: Resultado:'3981'
, Tipo:str
a = (2, 10, 1991)
b = (25, 12, 1990)
str(a[2] + b[2]) # Resultado: '3981'
str((a + b)[2])
: Resultado:'1991'
, Tipo:str
a = (2, 10, 1991)
b = (25, 12, 1990)
str((a + b)[2]) # Resultado: '1991'
str(a + b)[2]
: Resultado:'('
, Tipo:str
a = (2, 10, 1991)
b = (25, 12, 1990)
str(a + b)[2] # Resultado: '('
Conjuntos¶
Ejercicio 01
Considere las siguientes asignaciones:
a = {5, 2, 3, 9, 4}
b = {3, 1}
c = {7, 5, 5, 1, 8, 6}
d = [6, 2, 4, 5, 5, 3, 1, 3, 7, 8]
e = {(2, 3), (3, 4), (4, 5)}
f = [{2, 3}, {3, 4}, {4, 5}]
Sin usar el computador, indique cuál es el resultado y el tipo de las siguientes expresiones. A continuación, verifique sus respuestas en el computador.
len(c)
len(set(d))
a & (b | c)
(a & b) | c
c - a
max(e)
f[0] < a
set(range(4)) & a
(set(range(4)) & a) in f
len(set('perro'))
len({'perro'})
Respuestas y verificaciones en el computador para las expresiones dadas:
len(c)
: Resultado:5
, Tipo:int
c = {7, 5, 5, 1, 8, 6}
len(c) # Resultado: 5
len(set(d))
: Resultado:6
, Tipo:int
d = [6, 2, 4, 5, 5, 3, 1, 3, 7, 8]
len(set(d)) # Resultado: 6
a & (b | c)
: Resultado:{1, 3, 5}
, Tipo:set
a = {5, 2, 3, 9, 4}
b = {3, 1}
c = {7, 5, 5, 1, 8, 6}
a & (b | c) # Resultado: {1, 3, 5}
(a & b) | c
: Resultado:{1, 2, 3, 4, 5, 6, 7, 8, 9}
, Tipo:set
(a & b) | c # Resultado: {1, 2, 3, 4, 5, 6, 7, 8, 9}
c - a
: Resultado:{1, 6, 8, 7}
, Tipo:set
c - a # Resultado: {1, 6, 8, 7}
max(e)
: Resultado:(4, 5)
, Tipo:tuple
e = {(2, 3), (3, 4), (4, 5)}
max(e) # Resultado: (4, 5)
f[0] < a
: Resultado:True
, Tipo:bool
f = [{2, 3}, {3, 4}, {4, 5}]
f[0] < a # Resultado: True
set(range(4)) & a
: Resultado:{2, 3}
, Tipo:set
set(range(4)) & a # Resultado: {2, 3}
(set(range(4)) & a) in f
: Resultado:True
, Tipo:bool
(set(range(4)) & a) in f # Resultado: True
len(set('perro'))
: Resultado:4
, Tipo:int
len(set('perro')) # Resultado: 4
len({'perro'})
: Resultado:1
, Tipo:int
len({'perro'}) # Resultado: 1
Diccionarios¶
Ejercicio 01
Considere las siguientes asignaciones:
a = {'a': 14, 'b': 23, 'c': 88}
b = {12: True, 55: False, -2: False}
c = dict()
d = {1: [2, 3, 4], 5: [6, 7, 8, 9], 10: [11]}
e = {2 + 3: 4, 5: 6 + 7, 8: 9, 10: 11 + 12}
Sin usar el computador, indique cuál es el resultado y el tipo de las siguientes expresiones. A continuación, verifique sus respuestas en el computador.
a['c']
a[23]
b[-2] or b[55]
23 in a
'a' in a
5 in d[5]
sum(b)
len(c)
len(d)
len(d[1])
len(b.values())
len(e)
sum(a.values())
max(list(e))
d[1] + d[5] + d[10]
Respuestas y verificaciones en el computador para las expresiones dadas:
Aquí tienes las respuestas y verificaciones en el computador para las expresiones dadas:
a['c']
: Resultado:88
, Tipo:int
a = {'a': 14, 'b': 23, 'c': 88}
a['c'] # Resultado: 88
a[23]
: Resultado:KeyError
, Tipo:Error
a[23] # Resultado: KeyError
b[-2] or b[55]
: Resultado:False
, Tipo:bool
b = {12: True, 55: False, -2: False}
b[-2] or b[55] # Resultado: False
23 in a
: Resultado:False
, Tipo:bool
23 in a # Resultado: False
'a' in a
: Resultado:True
, Tipo:bool
'a' in a # Resultado: True
5 in d[5]
: Resultado:True
, Tipo:bool
d = {1: [2, 3, 4], 5: [6, 7, 8, 9], 10: [11]}
5 in d[5] # Resultado: True
sum(b)
: Resultado:65
, Tipo:int
b = {12: True, 55: False, -2: False}
sum(b) # Resultado: 65
len(c)
: Resultado:0
, Tipo:int
c = dict()
len(c) # Resultado: 0
len(d)
: Resultado:3
, Tipo:int
d = {1: [2, 3, 4], 5: [6, 7, 8, 9], 10: [11]}
len(d) # Resultado: 3
len(d[1])
: Resultado:3
, Tipo:int
len(d[1]) # Resultado: 3
len(b.values())
: Resultado:3
, Tipo:int
len(b.values()) # Resultado: 3
len(e)
: Resultado:4
, Tipo:int
e = {2 + 3: 4, 5: 6 + 7, 8: 9, 10: 11 + 12}
len(e) # Resultado: 4
sum(a.values())
: Resultado:125
, Tipo:int
a = {'a': 14, 'b': 23, 'c': 88}
sum(a.values()) # Resultado: 125
max(list(e))
: Resultado:10
, Tipo:int
max(list(e)) # Resultado: 10
d[1] + d[5] + d[10]
: Resultado:[2, 3, 4, 6, 7, 8, 9, 11]
, Tipo:list
d[1] + d[5] + d[10] # Resultado: [2, 3, 4, 6, 7, 8, 9, 11]
Funciones¶
Ejercicio 01
Escriba una función que se llame saludar
que reciba como input un string s y devuelva como output "Hola + valor de s".
- Ejemplo: saludar("mundo") = "Hola mundo"
def saludar(s):
return "Hola " + s
mensaje = saludar("mundo")
print(mensaje)
Hola mundo
Ejercicio 02
Escriba una función que se llame es_par
que reciba como input un número entero n y devuelva como output True si el número es par, y False en otro caso.
- Ejemplo:
- es_par(4) = True
- es_par(3) = False
def es_par(n):
return n % 2 == 0
resultado1 = es_par(4)
resultado2 = es_par(3)
print(resultado1) # Esto imprimirá True
print(resultado2) # Esto imprimirá False
True False
Ejercicio 03
Escriba la función invertir_digitos(n)
que reciba un número entero n y entregue como resultado el número n
con los dígitos en el orden inverso:
terminal
>>> invertir_digitos(142)
241
A continuación, escriba un programa que indique si el número ingresado es palíndromo o no, usando la función invertir_digitos
:
terminal
Ingrese n: 81418
Es palíndromo
def invertir_digitos(n):
# Convertir el número a cadena para facilitar la inversión
str_n = str(n)
# Invertir la cadena
str_invertida = str_n[::-1]
# Convertir la cadena invertida nuevamente a un número entero
n_invertido = int(str_invertida)
return n_invertido
resultado1 = invertir_digitos(142)
print(resultado1)
241
def es_palindromo(n):
num_invertido = invertir_digitos(n)
if n == num_invertido:
return "Es palíndromo"
else:
return "No es palíndromo"
resultado1 = es_palindromo(81418)
print(resultado1)
Es palíndromo
Ejercicio 04
Muchos de estos programas sólo tenían pequeñas diferencias entre ellos, por lo que había que repetir mucho código al escribirlos. En este ejercicio, usted deberá implementar algunos de esos programas como funciones, reutilizando componentes para evitar escribir código repetido.
Ejercicio 041
Escriba la función es_divisible(n, d)
que indique si n
es divisible por d
:
>>> es_divisible(15, 5)
True
>>> es_divisible(15, 6)
False
def es_divisible(n, d):
return n % d == 0
# Ejemplos
print(es_divisible(15, 5)) # True
print(es_divisible(15, 6)) # False
True False
Ejercicio 042
Usando la función es_divisible, escriba una función es_primo(n)
que determine si un número es primo o no:
>>> es_primo(17)
True
>>> es_primo(221)
False
def es_primo(n):
if n <= 1:
return False # Los números menores o iguales a 1 no son primos
elif n <= 3:
return True # 2 y 3 son primos
elif n % 2 == 0:
return False # Los números pares mayores que 2 no son primos
else:
# Verificar divisibilidad hasta la raíz cuadrada de n
for i in range(3, int(n**0.5) + 1, 2):
if es_divisible(n, i):
return False
return True
# Ejemplos
print(es_primo(17)) # True (17 es un número primo)
print(es_primo(221)) # False (221 no es un número primo)
True False
Ejercicio 043
Usando la función es_primo
, escriba la función i_esimo_primo(i)
que entregue el i-ésimo número primo.
>>> i_esimo_primo(1)
2
>>> i_esimo_primo(20)
71
def i_esimo_primo(i):
if i <= 0:
return None # Números negativos o cero no tienen un i-ésimo número primo
count = 0
num = 2
while count < i:
if es_primo(num):
count += 1
if count < i:
num += 1
return num
# Ejemplos
print(i_esimo_primo(1)) # 2 (primer número primo)
print(i_esimo_primo(20)) # 71 (vigésimo número primo)
2 71
Ejercicio 044
Usando las funciones anteriores, escriba la función primeros_primos(m)
que entregue una lista de los primeros m números primos:
>>> primeros_primos(10)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
def primeros_primos(m):
if m <= 0:
return [] # Si m es cero o negativo, no hay primos que encontrar
primes = []
num = 2
while len(primes) < m:
if es_primo(num):
primes.append(num)
num += 1
return primes
# Ejemplo
print(primeros_primos(10)) # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
Ejercicio 045
Usando las funciones anteriores, escriba la función primos_hasta(m)
que entregue una lista de los primos menores o iguales que m
:
>>> primos_hasta(19)
[2, 3, 5, 7, 11, 13, 17, 19]
def primos_hasta(m):
if m < 2:
return [] # No hay primos menores o iguales a 1
primes = []
for num in range(2, m + 1):
if es_primo(num):
primes.append(num)
return primes
# Ejemplo
print(primos_hasta(19)) # [2, 3, 5, 7, 11, 13, 17, 19]
[2, 3, 5, 7, 11, 13, 17, 19]
Ejercicio 046
Un primo de Mersenne es un número primo de la forma $2p−1$. Una propiedad conocida de los primos de Mersenne es que $p$ debe ser también un número primo.
Escriba la función mersenne
que pregunte al usuario un número $n$, y muestre como salida los primeros n
primos de Mersenne:
>>> mersenne(5)
3
7
31
127
8191
def mersenne(n):
count = 0
candidate = 2
while count < n:
if es_primo(candidate):
mersenne_prime = 2 ** candidate - 1
if es_primo(mersenne_prime):
print(mersenne_prime)
count += 1
candidate += 1
# Ejemplo
mersenne(5)
3 7 31 127 8191
Ejercicio 05
La suma natural de los primeros n números naturales esta dado por: $$\displaystyle S = \sum_{k=1}^{n} k = 1 +2 +3 +...+n = \dfrac{n(n+1)}{2} $$
Escriba una función que se llame suma_numeros_naturales
que reciba como input un número entero n y devuelva como output la suma de los primeros n números naturales.
Para esto:
- a) Programe la función ocupando la fórmula manual: $S = 1+2+3+..+n$
- b) Programe la función ocupando la fórmula cerrada: $S =\dfrac{n(n+1)}{2} $
Ejemplo:
- suma_numeros_naturales(1) = 1
- suma_numeros_naturales(10) = 55
- suma_numeros_naturales(100) = 5050
# Usando la fórmula manual:
def suma_numeros_naturales_manual(n):
suma = 0
for i in range(1, n + 1):
suma += i
return suma
# Usando la fórmula cerrada:
def suma_numeros_naturales_cerrada(n):
suma = (n * (n + 1)) // 2
return suma
print("Usando la fórmula manual:")
print(suma_numeros_naturales_manual(1)) # Salida: 1
print(suma_numeros_naturales_manual(10)) # Salida: 55
print(suma_numeros_naturales_manual(100)) # Salida: 5050
print()
print("Usando la fórmula cerrada:")
print(suma_numeros_naturales_cerrada(1)) # Salida: 1
print(suma_numeros_naturales_cerrada(10)) # Salida: 55
print(suma_numeros_naturales_cerrada(100)) # Salida: 5050
Usando la fórmula manual: 1 55 5050 Usando la fórmula cerrada: 1 55 5050
Ejercicio 06
En los siglos XVII y XVIII, James Gregory y Gottfried Leibniz descubrieron una serie infinita que sirve para calcular $\pi$:
$$\displaystyle \pi = 4 \sum_{k=1}^{\infty}\dfrac{(-1)^{k+1}}{2k-1} = 4(1-\dfrac{1}{3}+\dfrac{1}{5}-\dfrac{1}{7} + ...) $$
Desarolle un programa para estimar el valor de $\pi$ ocupando el método de Leibniz, donde la entrada del programa debe ser un número entero $n$ que indique cuántos términos de la suma se utilizará.
- Ejemplo:
- calcular_pi(3) = 3.466666666666667
- calcular_pi(1000) = 3.140592653839794
def calcular_pi(n):
suma = 0
for k in range(1, n + 1):
termino = (-1) ** (k + 1) / (2 * k - 1)
suma += termino
pi_estimado = 4 * suma
return pi_estimado
# Ejemplos de uso
n1 = 3
pi1 = calcular_pi(n1)
print(f"Con {n1} términos, el valor estimado de π es {pi1}")
Con 3 términos, el valor estimado de π es 3.466666666666667
n2 = 1000
pi2 = calcular_pi(n2)
print(f"Con {n2} términos, el valor estimado de π es {pi2}")
Con 1000 términos, el valor estimado de π es 3.140592653839794
Ejercicio 07
Euler realizó varios aportes en relación a $e$, pero no fue hasta 1748 cuando publicó su Introductio in analysin infinitorum que dio un tratamiento definitivo a las ideas sobre $e$. Allí mostró que:
En los siglos XVII y XVIII, James Gregory y Gottfried Leibniz descubrieron una serie infinita que sirve para calcular π:
$$\displaystyle e = \sum_{k=0}^{\infty}\dfrac{1}{k!} = 1+\dfrac{1}{2!}+\dfrac{1}{3!}+\dfrac{1}{4!} + ... $$
Desarolle un programa para estimar el valor de $e$ ocupando el método de Euler, donde la entrada del programa debe ser un número entero $n$ que indique cuántos términos de la suma se utilizará.
Para esto:
a) Defina la función
factorial
, donde la entrada sea un número natural $n$ y la salida sea el factorial de dicho número.- Ejemplo: factorial(3) =3, factorial(5) = 120
b) Ocupe la función
factorial
dentro de la funcióncalcular_e
.- Ejemplo: calcular_e(3) = 2.6666666666666665, calcular_e(1000) = 2.7182818284590455
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
def calcular_e(n):
suma = 0
for k in range(n):
termino = 1 / factorial(k)
suma += termino
return suma
# Ejemplos de uso
n1 = 3
e1 = calcular_e(n1)
print(f"Con {n1} términos, el valor estimado de e es {e1}")
Con 3 términos, el valor estimado de e es 2.5
n2 = 1000
e2 = calcular_e(n2)
print(f"Con {n2} términos, el valor estimado de e es {e2}")
Con 1000 términos, el valor estimado de e es 2.7182818284590455
Ejercicio 08
Sea $\sigma(n)$ definido como la suma de los divisores propios de $n$ (números menores que n que se dividen en $n$).
Los números amigos son enteros positivos $n_1$ y $n_2$ tales que la suma de los divisores propios de uno es igual al otro número y viceversa, es decir, $\sigma(n_1)=\sigma(n_2)$ y $\sigma(n_2)=\sigma(n_1)$.
Por ejemplo, los números 220 y 284 son números amigos.
- los divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110; por lo tanto $\sigma(220) = 284$.
- los divisores propios de 284 son 1, 2, 4, 71 y 142; entonces $\sigma(284) = 220$.
Implemente una función llamada amigos
cuyo input sean dos números naturales $n_1$ y $n_2$, cuyo output sea verifique si los números son amigos o no.
Para esto:
a) Defina la función
divisores_propios
, donde la entrada sea un número natural $n$ y la salida sea una lista con los divisores propios de dicho número.- Ejemplo: divisores_propios(220) = [1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110], divisores_propios(284) = [1, 2, 4, 71 y 142]
b) Ocupe la función
divisores_propios
dentro de la funciónamigos
.- Ejemplo: amigos(220,284) = True, amigos(6,5) = False
def divisores_propios(n):
divisores = []
for i in range(1, n):
if n % i == 0:
divisores.append(i)
return divisores
# Ejemplos de uso
divisores_220 = divisores_propios(220)
divisores_284 = divisores_propios(284)
print(f"Divisores propios de 220: {divisores_220}")
print(f"Divisores propios de 284: {divisores_284}")
Divisores propios de 220: [1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110] Divisores propios de 284: [1, 2, 4, 71, 142]
def amigos(n1, n2):
suma_divisores_n1 = sum(divisores_propios(n1))
suma_divisores_n2 = sum(divisores_propios(n2))
return suma_divisores_n1 == n2 and suma_divisores_n2 == n1
# Ejemplos de uso
n1 = 220
n2 = 284
resultado1 = amigos(n1, n2)
print(f"¿{n1} y {n2} son amigos? {resultado1}")
n3 = 6
n4 = 5
resultado2 = amigos(n3, n4)
print(f"¿{n3} y {n4} son amigos? {resultado2}")
¿220 y 284 son amigos? True ¿6 y 5 son amigos? False
Ejercicio 09
La conjetura de Collatz, conocida también como conjetura $3n+1$ o conjetura de Ulam (entre otros nombres), fue enunciada por el matemático Lothar Collatz en 1937, y a la fecha no se ha resuelto.
Sea la siguiente operación, aplicable a cualquier número entero positivo:
- Si el número es par, se divide entre 2.
- Si el número es impar, se multiplica por 3 y se suma 1.
La conjetura dice que siempre alcanzaremos el 1 (y por tanto el ciclo 4, 2, 1) para cualquier número con el que comencemos.
Implemente una función llamada collatz
cuyo input sea un número natural positivo $N$ y como output devulva la secuencia de números hasta llegar a 1.
- Ejemplo: collatz(9) = [9, 28, 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
def collatz(n):
secuencia = [n]
while n != 1:
if n % 2 == 0:
n //= 2
else:
n = 3 * n + 1
secuencia.append(n)
return secuencia
# Ejemplo de uso
numero = 9
secuencia_collatz = collatz(numero)
print(secuencia_collatz)
[9, 28, 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
Ejercicio 10
La conjetura de Goldbach es uno de los problemas abiertos más antiguos en matemáticas. Concretamente, G.H. Hardy, en 1921, en su famoso discurso pronunciado en la Sociedad Matemática de Copenhague, comentó que probablemente la conjetura de Goldbach no es solo uno de los problemas no resueltos más difíciles de la teoría de números, sino de todas las matemáticas. Su enunciado es el siguiente:
Todo número par mayor que 2 puede escribirse como suma de dos números primos - Christian Goldbach (1742)
Implemente una función llamada goldbach
cuyo input sea un número natural positivo $n$ y como output devuelva la suma de dos primos ($n_1$ y $n_2$) tal que: $n_1+n_2=n$.
Para esto:
a) Defina la función
es_primo
, donde la entrada sea un número natural $n$ y la salida sea True si el número es primo y False en otro caso.- Ejemplo: es_primo(3) = True, es_primo(4) = False
b) Defina la función
lista_de_primos
, donde la entrada sea un número natural par $n$ mayor que dos y la salida sea una lista con todos los número primos entre 2 y $n$.- Ejemplo: lista_de_primos(4) = [2,3], lista_de_primos(6) = [2,3,5], lista_de_primos(8) = [2,3,5,7]
c) Ocupe la función
lista_de_primos
dentro de la funcióngoldbash
.Ejemplo: goldbash(4) = (2,2), goldbash(6) = (3,3) , goldbash(8) = (3,5)
# a) Función es_primo
def es_primo(n):
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return False
i += 6
return True
# Ejemplos de uso
print(es_primo(3)) # True
print(es_primo(4)) # False
True False
# b) Función lista_de_primos
def lista_de_primos(n):
primos = []
for num in range(2, n + 1):
if es_primo(num):
primos.append(num)
return primos
# Ejemplos de uso
print(lista_de_primos(4)) # [2, 3]
print(lista_de_primos(6)) # [2, 3, 5]
print(lista_de_primos(8)) # [2, 3, 5, 7]
[2, 3] [2, 3, 5] [2, 3, 5, 7]
# c) Función goldbach
def goldbach(n):
primos = lista_de_primos(n)
for primo in primos:
if n - primo in primos:
return (primo, n - primo)
# Ejemplos de uso
print(goldbach(4)) # (2, 2)
print(goldbach(6)) # (3, 3)
print(goldbach(8)) # (3, 5)
(2, 2) (3, 3) (3, 5)
Ejercicio 11
El producto interno de dos listas de números es la suma de los productos de los términos correspondientes de ambas.
Por ejemplo, si:
a = [5, 1, 6]
b = [1, -2, 8]
entonces el producto interno entre $a$ y $b$ es:
(5 * 1) + (1 * -2) + (6 * 8)
Escriba la función
producto_interno(a, b)
que entregue el producto interno dea
yb
:>>> a = [7, 1, 4, 9, 8] >>> b = range(5) >>> producto_interno(a, b) 68
Dos listas de números son ortogonales si su producto interno es cero. Escriba la función
son_ortogonales(a, b)
que indique sia
yb
son ortogonales:>>> son_ortogonales([2, 1], [-3, 6]) True
# 1. Función producto_interno
def producto_interno(a, b):
if len(a) != len(b):
return None # Las listas deben tener la misma longitud
return sum(a_i * b_i for a_i, b_i in zip(a, b))
# Ejemplo de uso
a = [7, 1, 4, 9, 8]
b = list(range(5))
resultado = producto_interno(a, b)
print(resultado) # Salida: 68
68
# 2. Función son_ortogonales
def son_ortogonales(a, b):
producto = producto_interno(a, b)
return producto == 0
# Ejemplo de uso
resultado = son_ortogonales([2, 1], [-3, 6])
print(resultado) # Salida: True
True
Ejercicio 12
Una fecha puede ser representada como una tupla (anno, mes, dia)
.
Escriba la función
dia_siguiente(f)
que reciba como parámetro una fechaf
y entegue cuál es la fecha siguiente:>>> dia_siguiente((2011, 4, 11)) (2011, 4, 12) >>> dia_siguiente((2011, 4, 30)) (2011, 5, 1) >>> dia_siguiente((2011, 12, 31)) (2012, 1, 1)
Como recomendación, dentro de su función use una lista con la cantidad de días que tiene cada mes:
dias_mes = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
Escriba la función
dias_entre(f1, f2)
que retorne la cantidad de días que han transcurrido entre las fechasf1
yf2
:>>> hoy = (2011, 4, 11) >>> navidad = (2011, 12, 25) >>> dias_entre(hoy, navidad) 258 >>> dias_entre(hoy, hoy) 0
# 1. Función dia_siguiente
def dia_siguiente(fecha):
anno, mes, dia = fecha
dias_mes = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# Comprobamos si es un año bisiesto
if (anno % 4 == 0 and anno % 100 != 0) or (anno % 400 == 0):
dias_mes[1] = 29
if dia < dias_mes[mes - 1]:
return (anno, mes, dia + 1)
elif mes < 12:
return (anno, mes + 1, 1)
else:
return (anno + 1, 1, 1)
# Ejemplos de uso
print(dia_siguiente((2011, 4, 11))) # Salida: (2011, 4, 12)
print(dia_siguiente((2011, 4, 30))) # Salida: (2011, 5, 1)
print(dia_siguiente((2011, 12, 31))) # Salida: (2012, 1, 1)
(2011, 4, 12) (2011, 5, 1) (2012, 1, 1)
# 2. Función dias_entre
def dias_entre(fecha1, fecha2):
from datetime import date
date1 = date(fecha1[0], fecha1[1], fecha1[2])
date2 = date(fecha2[0], fecha2[1], fecha2[2])
delta = date2 - date1
return delta.days
# Ejemplos de uso
hoy = (2011, 4, 11)
navidad = (2011, 12, 25)
print(dias_entre(hoy, navidad)) # Salida: 258
print(dias_entre(hoy, hoy)) # Salida: 0
258 0
Ejercicio 13
El conjunto potencia de un conjunto $S$ es el conjunto de todos los subconjuntos de $S$.
Por ejemplo, el conjunto potencia de $\{1,2,3\}$ es:
$$\{\emptyset,\{1\},\{2\},\{3\},\{1,2\},\{1,3\},\{2,3\},\{1,2,3\}\}$$
En Python, un conjunto no puede contener a otros conjuntos, ya que no puede tener elementos mutables, y los conjuntos lo son:
>>> a = set()
>>> a.add({1, 2}) # :(
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: unhashable type: 'set'
Lo que sí podemos crear es una lista de conjuntos:
>>> l = list()
>>> l.append({1, 2}) # :)
>>> l
[set([1, 2])]
Escriba la función conjunto_potencia(s)
que reciba como parámetro un conjunto cualquiera s
y retorne su «lista potencia» (la lista de todos sus subconjuntos):
>>> conjunto_potencia({6, 1, 4})
[set(), set([6]), set([1]), set([4]), set([6, 1]), set([6, 4]), set([1, 4]), set([6, 1, 4])]
def conjunto_potencia(s):
# Convierte el conjunto en una lista para poder iterar sobre sus elementos
elementos = list(s)
n = len(elementos)
potencia = []
for i in range(2**n):
subconjunto = set()
for j in range(n):
# Verifica si el j-ésimo bit de i está encendido
if (i >> j) & 1:
subconjunto.add(elementos[j])
potencia.append(subconjunto)
return potencia
# Ejemplo de uso
conjunto = {6, 1, 4}
resultado = conjunto_potencia(conjunto)
print(resultado)
[set(), {1}, {4}, {1, 4}, {6}, {1, 6}, {4, 6}, {1, 4, 6}]
Ejercicio 14
Para este ejercicio considere lo siguiente:
Para obtener la lista de palabras de la oración, puede usar el método split
de los strings:
>>> s = 'el gato y el pato'
>>> s.split()
['el', 'gato', 'y', 'el', 'pato']
Para obtener un string en minúsculas, puede usar el método lower:
>>> s = 'Venezuela'
>>> s.lower()
'venezuela'
Escriba la función
contar_letras(oracion)
que retorne un diccionario asociando a cada letra la cantidad de veces que aparece en la oracion:>>> contar_letras('El elefante avanza hacia Asia') {'a': 8, 'c': 1, 'e': 4, 'f': 1, 'h': 1, 'i': 2, 'l': 2, 'n': 2, 's': 1, 't': 1, 'v': 1, 'z': 1}
Cada valor del diccionario debe considerar tanto las apariciones en mayúscula como en minúscula de la letra correspondiente. Los espacios deben ser ignorados.
Escriba la función
contar_vocales(oracion)
que retorne un diccionario asociando a cada vocal la cantidad de veces que aparece en la oracion. Si una vocal no aparece en la oración, de todos modos debe estar en el diccionario asociada al valor 0:>>> contar_vocales('El elefante avanza hacia Asia') {'a': 8, 'e': 4, 'i': 2, 'o': 0, 'u': 0}
Escriba la función
contar_iniciales(oracion)
que retorne un diccionario asociando a cada letra la cantidad de veces que aparece al principio de una palabra:>>> contar_iniciales('El elefante avanza hacia Asia') {'e': 2, 'h': 1, 'a': 2} >>> contar_iniciales('Varias vacas vuelan sobre Venezuela') {'s': 1', 'v': 4}
Escriba la función
obtener_largo_palabras(oracion)
que retorne un diccionario asociando a cada palabra su cantidad de letras:>>> obtener_largo_palabras('el gato y el pato son amigos') {'el': 2, 'son': 3, 'gato': 4, 'y': 1, 'amigos': 6, 'pato': 4}
Escriba la función
contar_palabras(oracion)
que retorne un diccionario asociando a cada palabra la cantidad de veces que aparece en la oración:>>> contar_palabras('El sobre esta sobre el pupitre') {'sobre': 2, 'pupitre': 1, 'el': 2, 'esta': 1}
Escriba la función
palabras_repetidas(oracion)
que retorne una lista con las palabras que están repetidas:>>> palabras_repetidas('El partido termino cero a cero') ['cero'] >>> palabras_repetidas('El sobre esta sobre el mueble') ['el', 'sobre'] >>> palabras_repetidas('Ay, ahi no hay pan') []
# Función contar_letras:
def contar_letras(oracion):
oracion = oracion.lower()
letras = [letra for letra in oracion if letra.isalpha()]
contador = {}
for letra in letras:
if letra in contador:
contador[letra] += 1
else:
contador[letra] = 1
return contador
# Ejemplo de uso
oracion = 'El elefante avanza hacia Asia'
resultado = contar_letras(oracion)
print(resultado)
{'e': 4, 'l': 2, 'f': 1, 'a': 8, 'n': 2, 't': 1, 'v': 1, 'z': 1, 'h': 1, 'c': 1, 'i': 2, 's': 1}
# Función contar_vocales:
def contar_vocales(oracion):
oracion = oracion.lower()
vocales = 'aeiou'
contador = {vocal: 0 for vocal in vocales}
for letra in oracion:
if letra in contador:
contador[letra] += 1
return contador
# Ejemplo de uso
oracion = 'El elefante avanza hacia Asia'
resultado = contar_vocales(oracion)
print(resultado)
{'a': 8, 'e': 4, 'i': 2, 'o': 0, 'u': 0}
# Función contar_iniciales:
def contar_iniciales(oracion):
oracion = oracion.lower()
palabras = oracion.split()
contador = {}
for palabra in palabras:
if palabra:
inicial = palabra[0]
if inicial in contador:
contador[inicial] += 1
else:
contador[inicial] = 1
return contador
# Ejemplo de uso
oracion = 'El elefante avanza hacia Asia'
resultado = contar_iniciales(oracion)
print(resultado)
{'e': 2, 'a': 2, 'h': 1}
# Función obtener_largo_palabras:
def obtener_largo_palabras(oracion):
palabras = oracion.split()
contador = {}
for palabra in palabras:
contador[palabra] = len(palabra)
return contador
# Ejemplo de uso
oracion = 'el gato y el pato son amigos'
resultado = obtener_largo_palabras(oracion)
print(resultado)
{'el': 2, 'gato': 4, 'y': 1, 'pato': 4, 'son': 3, 'amigos': 6}
# Función contar_palabras:
def contar_palabras(oracion):
oracion = oracion.lower()
palabras = oracion.split()
contador = {}
for palabra in palabras:
if palabra in contador:
contador[palabra] += 1
else:
contador[palabra] = 1
return contador
# Ejemplo de uso
oracion = 'El sobre esta sobre el pupitre'
resultado = contar_palabras(oracion)
print(resultado)
{'el': 2, 'sobre': 2, 'esta': 1, 'pupitre': 1}
# Función palabras_repetidas:
def palabras_repetidas(oracion):
oracion = oracion.lower()
palabras = oracion.split()
contador = {}
repetidas = []
for palabra in palabras:
if palabra in contador:
contador[palabra] += 1
else:
contador[palabra] = 1
for palabra, cantidad in contador.items():
if cantidad > 1:
repetidas.append(palabra)
return repetidas
# Ejemplo de uso
oracion = 'El sobre esta sobre el mueble'
resultado = palabras_repetidas(oracion)
print(resultado)
['el', 'sobre']