10  💡 Solución Ejercicios

10.1 Nomenclatura

Ejercicio 01

Escriba un programa que pida al usuario que escriba su nombre, y lo salude llamándolo por su nombre.

Ingrese su nombre: Python
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:

Ingrese el radio: 5
Perimetro: 31.4
Área: 78.5

Ejercicio 03

Escriba un programa que calcule el promedio de 4 notas ingresadas por el usuario:

Primera nota: 55
Segunda nota: 71
Tercera nota: 46
Cuarta nota: 87
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.

Ingrese longitud: 45
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\).

Ingrese cateto a: 7
Ingrese cateto b: 5
La hipotenusa es 8.6023252670426267

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:

Hora actual: 23
Cantidad de horas: 5
En 5 horas, el reloj marcara 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.

Ingrese nota certamen 1: 45
Ingrese nota certamen 2: 55
Ingrese nota laboratorio: 65
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.

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

10.2 Control de Flujo

10.2.1 if-elif-else

Ejercicio 01

Escriba un programa que determine si el número entero ingresado por el usuario es par o no.

Ingrese un número: 4
Su número es par
Ingrese un número: 3
Su número es impar

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.

Dividendo: 14
Divisor: 5

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.

Palabra 1: edificio
Palabra 2: tren
La palabra edificio tiene 4 letras mas que tren.
Palabra 1: sol
Palabra 2: paralelepipedo
La palabra paralelepipedo tiene 11 letras mas que sol
Palabra 1: plancha
Palabra 2: lapices
Las dos palabras tienen el mismo largo

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.

Ingrese un anno: 1988
1988 es bisiesto
Ingrese un anno: 2011
2011 no es bisiesto
Ingrese un anno: 1700
1700 no es bisiesto
Ingrese un anno: 2400
2400 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.
Ingrese a: 3.9
Ingrese b: 6.0
Ingrese c: 1.2
No es un triangulo valido.
Ingrese a: 1.9
Ingrese b: 2
Ingrese c: 2
El triangulo es isoceles.
Ingrese a: 3.0
Ingrese b: 5.0
Ingrese c: 4.0
El triangulo es escaleno.
Ingrese a: 2
Ingrese b: 2
Ingrese c: 2
El triangulo es equilatero.

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 = $).

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”.

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:

Ingrese un numero: 14941
14941 es palindromo
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].

10.2.2 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

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

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

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.

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.

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.

10.2.3 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

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

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

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

  1. 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.”

10.2.4 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.

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

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.

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.

10.3 Estructura de Datos

10.3.1 Listas

Ejercicio 01

Considere las siguientes listas:

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.

Respuestas y verificaciones en el computador para las expresiones dadas:

  1. a[2]: Resultado: 4, Tipo: int
  1. b[9]: Resultado: 29, Tipo: int
  1. c[1][2]: Resultado: 5, Tipo: int
  1. e[0] == e[1]: Resultado: False, Tipo: bool
  1. len(c): Resultado: 3, Tipo: int
  1. len(c[0]): Resultado: 2, Tipo: int
  1. len(e): Resultado: 3, Tipo: int
  1. c[-1]: Resultado: [6, 7], Tipo: list
  1. c[-1][+1]: Resultado: 7, Tipo: int
  1. c[2:] + d[2:]: Resultado: [[6, 7], 'jirafa', 'elefante'], Tipo: list
  1. a[3:10]: Resultado: [9, 0], Tipo: list
  1. a[3:10:2]: Resultado: [9], Tipo: list
  1. d.index('jirafa'): Resultado: 2, Tipo: int
  1. e[c[0][1]].count(5): Resultado: 0, Tipo: int
  1. sorted(a)[2]: Resultado: 4, Tipo: int
  1. complex(b[0], b[1]): Resultado: (3+4j), Tipo: complex

Ejercicio 02

Escriba una rutina que cuente cuántos valores en la lista valores son mayores que x:

>>> numero = 5
>>> lista = [7, 3, 6, 0, 4, 5, 10]
Existen 3 numeros 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)
  1. Escriba una rutina que entregue el producto interno de a y b:

    >>> a = [7, 1, 4, 9, 8]
    >>> b = range(5)
    El producto interno es 68
  2. Dos listas de números son ortogonales si su producto interno es cero. Escriba una rutina que indique si a y b son ortogonales:

    >>> a = [2, 1]
    >>> b =  [-3, 6]
    Los vectores son ortonormales

producto interno

vectores ortonormales

10.3.2 Tuplas

Ejercicio 01

Considere las siguientes asignaciones:

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.

Respuestas y verificaciones en el computador para las expresiones dadas:

  1. a < b: Resultado: True, Tipo: bool
  1. y + w: Resultado: 12, Tipo: int
  1. x + a: Esto generará un error porque no se pueden sumar una tupla (x) y una tupla (a).

  2. len(v): Resultado: 2, Tipo: int

  1. 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).

  2. c[0][0]: Resultado: 'D', Tipo: str

  1. z, y: Resultado: (27, 9), Tipo: tuple
  1. a + b[1:5]: Resultado: (2, 10, 1991, 12, 1990), Tipo: tuple
  1. (a + b)[1:5]: Resultado: (10, 1991, 12, 1990), Tipo: tuple
  1. str(a[2]) + str(b[2]): Resultado: '19911990', Tipo: str
  1. str(a[2] + b[2]): Resultado: '3981', Tipo: str
  1. str((a + b)[2]): Resultado: '1991', Tipo: str
  1. str(a + b)[2]: Resultado: '(', Tipo: str

10.3.3 Conjuntos

Ejercicio 01

Considere las siguientes asignaciones:

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.

Respuestas y verificaciones en el computador para las expresiones dadas:

  1. len(c): Resultado: 5, Tipo: int
  1. len(set(d)): Resultado: 6, Tipo: int
  1. a & (b | c): Resultado: {1, 3, 5}, Tipo: set
  1. (a & b) | c: Resultado: {1, 2, 3, 4, 5, 6, 7, 8, 9}, Tipo: set
  1. c - a: Resultado: {1, 6, 8, 7}, Tipo: set
  1. max(e): Resultado: (4, 5), Tipo: tuple
  1. f[0] < a: Resultado: True, Tipo: bool
  1. set(range(4)) & a: Resultado: {2, 3}, Tipo: set
  1. (set(range(4)) & a) in f: Resultado: True, Tipo: bool
  1. len(set('perro')): Resultado: 4, Tipo: int
  1. len({'perro'}): Resultado: 1, Tipo: int

10.3.4 Diccionarios

Ejercicio 01

Considere las siguientes asignaciones:

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.

Respuestas y verificaciones en el computador para las expresiones dadas:

Aquí tienes las respuestas y verificaciones en el computador para las expresiones dadas:

  1. a['c']: Resultado: 88, Tipo: int
  1. a[23]: Resultado: KeyError, Tipo: Error
  1. b[-2] or b[55]: Resultado: False, Tipo: bool
  1. 23 in a: Resultado: False, Tipo: bool
  1. 'a' in a: Resultado: True, Tipo: bool
  1. 5 in d[5]: Resultado: True, Tipo: bool
  1. sum(b): Resultado: 65, Tipo: int
  1. len(c): Resultado: 0, Tipo: int
  1. len(d): Resultado: 3, Tipo: int
  1. len(d[1]): Resultado: 3, Tipo: int
  1. len(b.values()): Resultado: 3, Tipo: int
  1. len(e): Resultado: 4, Tipo: int
  1. sum(a.values()): Resultado: 125, Tipo: int
  1. max(list(e)): Resultado: 10, Tipo: int
  1. d[1] + d[5] + d[10]: Resultado: [2, 3, 4, 6, 7, 8, 9, 11], Tipo: list

10.4 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”

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

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:

 >>> 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:

Ingrese n: 81418
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

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

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

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]

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]

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

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:

    1. Programe la función ocupando la fórmula manual: \(S = 1+2+3+..+n\)
    1. Programe la función ocupando la fórmula cerrada: $S = $

Ejemplo: * suma_numeros_naturales(1) = 1 * suma_numeros_naturales(10) = 55 * suma_numeros_naturales(100) = 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

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:

    1. 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
    1. Ocupe la función factorial dentro de la función calcular_e.
    • Ejemplo: calcular_e(3) = 2.6666666666666665, calcular_e(1000) = 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:

    1. 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]
    1. Ocupe la función divisores_propios dentro de la función amigos.
    • Ejemplo: amigos(220,284) = True, amigos(6,5) = 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]

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:

    1. 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
    1. 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]
    1. Ocupe la función lista_de_primos dentro de la función goldbash.
  • Ejemplo: goldbash(4) = (2,2), goldbash(6) = (3,3) , goldbash(8) = (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)
  1. Escriba la función producto_interno(a, b) que entregue el producto interno de a y b:

    >>> a = [7, 1, 4, 9, 8]
    >>> b = range(5)
    >>> producto_interno(a, b)
    68
  2. Dos listas de números son ortogonales si su producto interno es cero. Escriba la función son_ortogonales(a, b) que indique si a y b son ortogonales:

    >>> son_ortogonales([2, 1], [-3, 6])
    True

Ejercicio 12

Una fecha puede ser representada como una tupla (anno, mes, dia).

  1. Escriba la función dia_siguiente(f) que reciba como parámetro una fecha f 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]
  2. Escriba la función dias_entre(f1, f2) que retorne la cantidad de días que han transcurrido entre las fechas f1 y f2:

    >>> hoy = (2011, 4, 11)
    >>> navidad = (2011, 12, 25)
    >>> dias_entre(hoy, navidad)
    258
    >>> dias_entre(hoy, hoy)
    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:

Lo que sí podemos crear es una lista de conjuntos:

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):

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:

Para obtener un string en minúsculas, puede usar el método lower:

  1. 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.

  2. 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}
  3. 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}
  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}
  5. 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}
  6. 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')
    []