Está en la página 1de 10

examen-python-mcp2022

November 10, 2021

0.1 Preguntas teóricas:


0.1.1 Pregunta #1
• Programa: Es un conjunto de instrucciones precisas, escritas en un determinado lenguaje
“entendible” por la computadora. ()
• Programación: En términos de computación: es el proceso mediante el cual se construye de
un programa
• Programar: Acción de construir un programa
• Programador: Persona que crea programas

0.1.2 Pregunta #2
En lenguage de bajo nivel, las instrucciones ejercen un control directo sobre el hardware y están
condicionados por la estructura física de las computadoras que lo ejecutarán. En un Lenguaje de alto
nivel, las instrucciones se aproximan más al lenguaje natural humano, haciendo mas comprensible
nuestro programa.

0.1.3 Pregunta #3
Un diagrama de flujo es un grafico que representa la secuencia de ejecusión de un programa.
Un pseudocódigo es un conjunto de sentencias en un lenguage coloquial (cercano a un lenguaje
de programación) que permite representar por pasos la solución a un problema o algoritmo, de la
forma más detallada posible
Un código es un texto, escrito en un lenguaje de programación determinado que debe ser compilado
o interpretado para ejecutarse en una computadora.

0.1.4 Pregunta #4
Tipos de datos: - Numéricos: - Byte: representa un número de 8 bit - Enteros: representan datos
del conjunto de los números enteros (existen enteros de 16bit, 32bit, 64bit) - Floats: representan
datos del conjunto de los números reales
> Existen otros números (complejos, hexagesimales) pero su soporte varia segun el lenguaje
• Cadenas:
– Char: representan caracteres alfanumericos: letras, signos, digitos
– String: representa un conjunto de caracteres
• Booleanas: representan valores de SI o NO
• Arreglo: colección de elementos de un mismo tipo de dato

1
• Lista: al igual que el array, es una colección de elementos aunque los elementos pueden ser
de diferente tipo.
• Diccionarios: Son colecciones de objetos que se acceden mediante una llave (key)
• Tuplas: es una lista INMUTABLE de elementos
• Sets: Representan conjuntos de elementos
• Clases y Objetos > Muchos de estos tipos de datos se solapan en algunos lenguages de
programación, especialmente en los que no son fuertemente tipados

0.1.5 Pregunta #5
Tanto los arreglo como las listas y las tuplas representan estructuras 1-dimensionales (aunque
podamos representar estructuras n-dimensionales con ellas). En el caso de las tuplas su diferencia
con estructuras similares es la inmutabilidad pues sus valores son fijos y si queremos modificarlos
debemos crear una nueva tupla
Los dataframe representa datos tabulares y sus datos se organizan en filas y columnas.
Las matrices representan estructuras N-Dimensionales

0.2 Preguntas prácticas


0.2.1 Pregunta 1

[37]: def pedir_numero(label):


return int(input(f'Entre el valor de {label} (entero)'))

a = pedir_numero('A')
b = pedir_numero('B')

print(f'{a} + {b} = {a+b}')


print(f'{a} - {b} = {a-b}')
print(f'{a} * {b} = {a*b}')
print(f'{a} / {b} = {a/b}')
print(f'{a} % {b} = {a%b}')
print(f'{a} // {b} = {a//b}')
print(f'{a}^{b} = {a**b}')

10 + 2 = 12
10 - 2 = 8
10 * 2 = 20
10 / 2 = 5.0
10 % 2 = 0
10 // 2 = 5
10^2 = 100

2
0.2.2 Prergunta 2

[32]: import numpy as np

def es_primo(numero:int) -> bool:


if numero <= 0:
return False
if numero <= 3:
return True
else:
contador = 2
divisores = 0
while contador <= int(numero / 2):
if numero % contador == 0:
divisores += 1
contador += 1
return divisores == 0

def resolver_ecuación(coeficientes):
p = np.poly1d(coeficientes)
root_of_poly = p.r
return root_of_poly.tolist()

def pedir_coeficiente(mensaje):
return float(input(f'Introduzca el valor de {mensaje}: '))

a = pedir_coeficiente('a')
b = pedir_coeficiente('b')
c = pedir_coeficiente('c')

(x1, x2) = resolver_ecuación([a, b, c])


suma = x1 + x2

print(f'X1 = {x1}, X2 = {x2}')


if es_primo(x1) and es_primo(x2) and es_primo(suma):
print(f'X1 = {x2}, X2 = {x2} son números primos y su suma = {suma} también␣
,→es un número primo')

X1 = 5.0, X2 = 2.0
X1 = 2.0, X2 = 2.0 son números primos y su suma = 7.0 también es un número primo

0.2.3 Pregunta 3
[33]: def fibonacci(n: int) -> int:
if n == 0:
return 0
elif n == 1:
return 1

3
else:
return fibonacci(n - 1) + fibonacci(n - 2)

print(' '.join([f'{fibonacci(x)}' for x in range(11)]))

0 1 1 2 3 5 8 13 21 34 55

0.2.4 Pregunta 4
[34]: import math

def calcular_media(distribucion:list) -> float:


suma = 0
for dato in distribucion:
suma += dato
return suma / len(distribucion)

def calcular_rango(distribucion:list) -> list:


c = distribucion.copy()
c.sort()
return [c[0], c[len(distribucion) - 1]]

def calcular_mediana(distribucion:list) -> float:


c = distribucion.copy()
c.sort()
tamano = len(distribucion)
if tamano % 2 != 0:
return c[(tamano -1) // 2]
else:
valor = c[tamano // 2 - 1]
valor1 = c[tamano // 2]
return (valor + valor1)/2

def transformar_valor(value:float, usar_parte_entera):


if usar_parte_entera:
return int(value)
return value

def calcular_moda(distribucion:list, usar_enteros=False ) -> list:


repeticiones = 0
c = [transformar_valor(x, usar_enteros) for x in distribucion]
for i in c:
n = c.count(i)
if n > repeticiones:
repeticiones = n
moda = []
for i in c:

4
n = c.count(i)
if n == repeticiones and i not in moda:
moda.append(i)
return moda

def calcular_varianza(distribucion:list) -> float:


suma_cuadrados = 0
media = calcular_media(distribucion)
for valor in [(x - media)**2 for x in distribucion]:
suma_cuadrados += valor
return suma_cuadrados / len(distribucion)

def calcular_desviacion_estandar(distribucion:list) -> float:


return math.sqrt(calcular_varianza(distribucion))

datos = [18.71, 21.41, 20.72, 21.81, 19.29, 22.43, 20.17, 23.71, 19.44, 20.50,␣
,→18.92, 20.33, 23.00, 22.85, 19.25, 21.77, 22.11, 19.77, 18.04, 21.12]

tamano = len(datos)

media = calcular_media(datos)
rango = calcular_rango(datos)
mediana = calcular_mediana(datos)
moda = calcular_moda(datos)
moda1 = calcular_moda(datos, usar_enteros=True)
varianza = calcular_varianza(datos)
desviacion_estandar = calcular_desviacion_estandar(datos)

## output
print(f'Datos = {datos}')
print(f'N = {tamano}')
print(f'media = {media:.2f}')
print(f'mediana = {mediana:.2f}')
print(f'rango = {rango}')
print(f'moda = {moda}')
print(f'moda (usando solo parte entera) = {moda1}')
print(f'varianza = {varianza:.2f}')
print(f'desviación estándar = {desviacion_estandar:.2f}')

Datos = [18.71, 21.41, 20.72, 21.81, 19.29, 22.43, 20.17, 23.71, 19.44, 20.5,
18.92, 20.33, 23.0, 22.85, 19.25, 21.77, 22.11, 19.77, 18.04, 21.12]
N = 20
media = 20.77
mediana = 20.61
rango = [18.04, 23.71]
moda = [18.71, 21.41, 20.72, 21.81, 19.29, 22.43, 20.17, 23.71, 19.44, 20.5,
18.92, 20.33, 23.0, 22.85, 19.25, 21.77, 22.11, 19.77, 18.04, 21.12]
moda (usando solo parte entera) = [21, 20, 19]

5
varianza = 2.41
desviación estándar = 1.55

0.2.5 Pregunta 5

[35]: import numpy as np

A = np.matrix([[3, -5, 4], [9, 8, -7], [-6, 4, 2]])


B = np.matrix([[-2, -1, 1], [5, -7, 6], [9, 3, 2]])

print(f'A + B = {A+B}')
print(f'A - B = {A-B}')
print(f'A\' + B\' = {A.T+B.T}')
print(f'A^-1 = {A.I}')
print(f'A * B = {A*B}')
print(f'B * A = {B*A}')

A + B = [[ 1 -6 5]
[14 1 -1]
[ 3 7 4]]
A - B = [[ 5 -4 3]
[ 4 15 -13]
[-15 1 0]]
A' + B' = [[ 1 14 3]
[-6 1 7]
[ 5 -1 4]]
A^-1 = [[0.12643678 0.07471264 0.00862069]
[0.06896552 0.0862069 0.1637931 ]
[0.24137931 0.05172414 0.19827586]]
A * B = [[ 5 44 -19]
[-41 -86 43]
[ 50 -16 22]]
B * A = [[-21 6 1]
[-84 -57 81]
[ 42 -13 19]]

0.2.6 Pregunta 6
[36]: import random

def generate_temperature_for_day(day:int, minValue:float, maxValue:float,␣


,→distribution='normal'):

if day >= 31:


return None
if distribution == None:
return random.uniform(minValue,maxValue)
median = (maxValue + minValue) / 2
spread = 5

6
return random.normalvariate(median, spread)

def create_temperatures_matrix(rows:int, columns:int, minValue:float, maxValue:␣


,→float):

return [[generate_temperature_for_day(week * columns +␣


,→day_of_week,minValue,maxValue,distribution=None) for day_of_week in␣

,→range(columns)] for week in range(rows)]

def create_temperatures_matrix_normal(rows:int, columns:int, minValue:float,␣


,→maxValue: float):

return [[generate_temperature_for_day(week * columns +␣


,→day_of_week,minValue,maxValue) for day_of_week in range(columns)] for week␣

,→in range(rows)]

def get_printable_value(day, value):


if value == None:
return f'{"-":^10}'
return f'{value:^10.2f}'

def print_data(data):
header = '|'.join([f'{letter:^10}' for letter in 'LMMJVSD'])
print(f'|{header}|')
split_char = '-'
divider = '|'.join([f'{split_char*10}' for letter in 'LMMJVSD'])
print(f'|{divider}|')
for week, row in enumerate(data):
data_row = '|'.join([get_printable_value(week * len(row) + day_of_week,␣
,→value) for day_of_week, value in enumerate(row)])

print(f'|{data_row}|')

def calculate_media(data:list):
result = 0
for fila in data:
for column in fila:
if column != None:
result += column
return result / 31

def max_temperature_week(data:list, week:int) -> dict:


week_data = data[week]
day_of_week = 0
max_temperature = week_data[0]
for index in range(1, len(week_data)):
value = week_data[index]
if value != None and value > max_temperature:
day_of_week = index

7
max_temperature = value
date = week * 7 + int(day_of_week) + 1
return { 'temperature': max_temperature, 'day': int(day_of_week), 'date':␣
,→date % 31 }

def min_temperature_week(data:list, week:int) -> dict:


week_data = data[week]
day_of_week = 0
min_temperature = week_data[0]
for index in range(1, len(week_data)):
value = week_data[index]
if value != None and value < min_temperature:
day_of_week = index
min_temperature = value
date = week * 7 + int(day_of_week) + 1
return { 'temperature': min_temperature, 'day': int(day_of_week), 'date':␣
,→date % 31 }

def average_temperature_week(data:list, week:int) -> float:


week_data = data[week]
resultado = 0
for value in week_data:
if value != None:
resultado += value
return resultado / 31

def max_temperature_month(data:list) -> list:


day_of_week = 0
date = 1
max_temperature = 0
for week_index in range(len(data)):
results = max_temperature_week(data, week_index)
if max_temperature < results['temperature']:
max_temperature = results['temperature']
day_of_week = results['day']
date = week_index * 7 + int(day_of_week) + 1
return { 'temperature': max_temperature, 'day': int(day_of_week), 'date':␣
,→date % 31 }

days = ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado',␣


,→'domingo']

weeks = ['primera', 'segunda', 'tercera', 'cuarta', 'última']

matrix = create_temperatures_matrix_normal(rows=5, columns=7, minValue=7,␣


,→maxValue=38)

print_data(matrix)

8
print()
print(f'Media = {calculate_media(matrix):.2f}')
print()

for week in range(5):


min_temperature = min_temperature_week(matrix, week)
max_temperature = max_temperature_week(matrix, week)
avg_temperature = average_temperature_week(matrix, week)

min_value = min_temperature['temperature']
min_day = days[min_temperature['day']]
max_value = max_temperature['temperature']
max_day = days[max_temperature['day']]

print(f'En la {weeks[week]} semana:')


print(f'- La temperatura promedio fue de {avg_temperature:.2f}')
print(f'- La temperatura mínima fue de {min_value:.2f} y se produjo el␣
,→{min_day}')

print(f'- La temperatura máxima fue de {max_value:.2f} y se produjo el␣


,→{max_day}')

print()

max_temperature = max_temperature_month(matrix)
max_value = max_temperature['temperature']
day = days[max_temperature['day']]
date = max_temperature['date']
print(f'La temperatura más alta del mes fue de {max_value:.2f} y ocurrió el␣
,→{day} {date}')

print()

| L | M | M | J | V | S | D |
|----------|----------|----------|----------|----------|----------|----------|
| 22.23 | 19.18 | 24.85 | 17.97 | 27.35 | 24.73 | 29.80 |
| 22.54 | 28.41 | 27.73 | 15.56 | 21.42 | 30.47 | 18.97 |
| 26.50 | 16.80 | 30.14 | 22.01 | 22.54 | 28.22 | 23.43 |
| 19.86 | 20.27 | 31.36 | 24.91 | 18.63 | 18.05 | 18.29 |
| 18.06 | 26.07 | 20.28 | - | - | - | - |

Media = 23.12

En la primera semana:
- La temperatura promedio fue de 5.36
- La temperatura mínima fue de 17.97 y se produjo el jueves
- La temperatura máxima fue de 29.80 y se produjo el domingo

En la segunda semana:
- La temperatura promedio fue de 5.33

9
- La temperatura mínima fue de 15.56 y se produjo el jueves
- La temperatura máxima fue de 30.47 y se produjo el sábado

En la tercera semana:
- La temperatura promedio fue de 5.47
- La temperatura mínima fue de 16.80 y se produjo el martes
- La temperatura máxima fue de 30.14 y se produjo el miércoles

En la cuarta semana:
- La temperatura promedio fue de 4.88
- La temperatura mínima fue de 18.05 y se produjo el sábado
- La temperatura máxima fue de 31.36 y se produjo el miércoles

En la última semana:
- La temperatura promedio fue de 2.08
- La temperatura mínima fue de 18.06 y se produjo el lunes
- La temperatura máxima fue de 26.07 y se produjo el martes

La temperatura más alta del mes fue de 31.36 y ocurrió el miércoles 24

10

También podría gustarte