Programación Unidad 4 Hernán

Unidad 4

Mayo 7 , 2025

Programa 1:

#intermezzo 

li=[(x,y) for x in [1,2,3,4] for y in [3,1,4] if x!=y]

print(li)

# Imprime una lista de tuplas, donde cada tupla está conformada por un valor "x" y un valor de "y"

# Solo se incluye la tupla (x, y) si "x" es diferente de "y"

# Por cada valor de "x", evalúa todos los valores posibles de "y"

Programa 2:

#funciones lambda

# Python lamdas are only shorthand notation if you're

#too lazy to define a function


def suma(a,b):

return a+b


#lambda a,b:a+b esto es lo mismo que la función anterior

#son intermezzos(solo una linea)


s= lambda a,b:a+b

print(s(2,3))#mostrará la suma entre 2 y 3

print(( lambda a,b:a+b)(6,7))#con "," macará error y es una sintaxis incorrecta


Programa 3:

# Se define una función que recibe otra función como argumento

def otro(lambda_func):

return lambda_func(2,4)


# Es ejecutada la función recibida con los argumentos 2 y 4

# Y es llamada la función 'otro' pasándole una función lambda que suma dos números

print(otro(lambda a,b: a+b))#función lambda recursiva


Programa 4:

#En este programa dentro de una función es pedido
#el apellido paterno, el apellido materno, y nombre
#al ser pedidos son convertidos en minúsculas con .lower()
#hay una condición en la que deben ser haber solo letras en cada 
#nombre/apellido 
#en una lista previamente declarada, son colocados los nombres/apellidos
#y mediante listas individuales son extraidos 
#asi también estarán en el return y serán globales
#use dos métodos diferentes para el histograma
todo=[]
def nombres():
while True:
try:
paterno=input("dame el apellido paterno: ").lower()
materno=input("dame el apellido materno: ").lower()
nombre=input("dame un nombre: ").lower()
if paterno.isalpha() and materno.isalpha() and nombre.isalpha():
todo=[paterno,materno,nombre]
print(todo)
p=[todo[0]]
m=[todo[1]]
n=[todo[2]]
print(p)
print(m)
print(n)
break
else:
print("Deben ser letras")
except:
print("algo salio mal")
return p,m,n,todo

p,m,n,todo=nombres()

#primer método
#fui extrayendo en variables individuales de las vocales
#la cantidad de veces que esa vocal esta en ese nombre
#usando .count
#y las múltiplique por asteriscos

a=p[0].count("a")+m[0].count("a")+n[0].count("a")
print(a)

asteriscoa='*'*a

e=p[0].count("e")+m[0].count("e")+n[0].count("e")
print(e)

asteriscoe='*'*e

i=p[0].count("i")+m[0].count("i")+n[0].count("i")
print(i)

asteriscoi='*'*i

o=p[0].count("o")+m[0].count("o")+n[0].count("o")
print(o)

asteriscoo='*'*o

u=p[0].count("u")+m[0].count("u")+n[0].count("u")
print(u)

asteriscou='*'*u
#el histograma lo imprimí usando .format
histograma="""
a = {}
e = {}
i = {}
o = {}
u = {}
""".format(asteriscoa,asteriscoe,asteriscoi,asteriscoo,asteriscou)

print(histograma)

#segundo método

#uní todos los elementos de la lista con el nombre/apellidos 
#usando .join
todojunto=''.join(todo)
print(todojunto)

#usando un for que recorre cada elemento del nombre/apellidos
#incrementará en variables individuales correspondientes a cada vocal
#1 si esa vocal esta en la cadena

i1=0
for i in todo:
if i=='a':
a+=1
elif i=='e':
e+=1
elif i=='i':
i1+=1
elif i=='o':
o+=1
elif i=='u':
u+=1

#Múltiplique la cantidad de veces que se repite  cada vocal en variables individuales
#por asteriscos
a1='*'*a
e1='*'*e
i2='*'*i1
o1='*'*o
u1='*'*u

#Por último imprimí el histograma mediante un .format
histograma="""
a = {}
e = {}
i = {}
o = {}
u = {}
""".format(a1,e1,i2,o1,u1)

print(histograma)

Programa 5:
# Este programa obtiene la hora actual del sistema y la muestra en formato "hora:minuto:segundo"
import time

hora=time.time()# Obtiene el tiempo actual en segundos
local=time.localtime(hora) #Convierte ese tiempo en una estructura con fecha y hora local
h=local.tm_hour# Extrae la hora actual
m=local.tm_min# Extrae los minutos actuales
s=local.tm_sec # Extrae los segundos actuales

print(f"{h}:{m}:{s}")# Imprime la hora en formato "hora:minutos:segundos"
print(h,":",m,":",s)#hace lo mismo pero es un método diferente, y deja espacios

Programa 6:


archivo=open("prueba.txt","r")# Abre el archivo "prueba.txt" en modo lectura
contiene=archivo.read() #lee todo el documento y guarda el contenido en contiene
print(contiene)#imprime el contendido del archivo
archivo.close()#cierra el archivo

Programa 7


b=True
while (b):
nom=input("Dame el nombre: ")
if nom.isalpha():#si el nombre dado es .isalpha() ser termina el ciclo 
b=False#y sigue el programa

noma=nom+".txt"#es creado el nombre del archivo
print(noma)
archivo=open(noma,"a+")#es creado el archivo,a+ es agregar y leer
contenido=archivo.read()#lee todo el documento y guarda el contenido en contiene
final=archivo.tell()#tell retoma la posición actual del apuntador
print("Tell",final)
archivo.write('\n **** linea y ya ****')
archivo.seek(final)#mueve el apuntador hacia el byte indicado
nuevo=archivo.read()
print(nuevo)#imprime lo que se agregara al archivo
archivo.close()#cierra el archivo


Programa 8:

# Este programa es similar al anterior.
# La diferencia es que pregunta cuántas líneas serán escritas
# dentro de un ciclo while.
# Luego solicita al usuario el contenido de cada línea.
# Si ya se escribieron todas las líneas que el usuario indicó,
# el programa preguntará si está seguro de que desea salir.
# Si el usuario escribe "si": moverá el cursor a la posición original,
# mostrará lo que hay en el archivo y lo cerrará.
# Si el usuario escribe "no": el programa volverá a preguntar cuántas líneas desea escribir
# y se repetirá el proceso de ingresar líneas al archivo.



nom="Datos"
noma=nom+".txt"
print(noma)
archivo=open(noma,"a+")
contenido=archivo.read()
final=archivo.tell()
print("Tell",final)
c=1
while c:
try:
lineas=int(input("cuantas lineas quieres escribir"))
for i in range(lineas):
print("linea ",i+1)
archivo.write(input()+" "+"\n")
print(" ")
print("i",i)#guia o depurador
print("lineas",lineas)#guia o depurador
if i==lineas-1:
while True:
c=input("estas seguro que quieres salir?")
if c=="si":
print("poema:"+"\n")
archivo.seek(final)
nuevo=archivo.read()
print(nuevo)
archivo.close()
c=0
elif c=="no":
break
else:
print("es si o no")
except:
print("debes darme un numero")







Programa 9:

arch=open("U4p4.py","r+")#abre el programa U4p4.py como leer y escribir
cont=arch.read()#lee todo el contenido del archivo
nom=arch.name#arch es la instancia, nom sera igual al nombre del archivo
modo=arch.mode#mode es r+(r+ es para leer en binario)
enc=arch.encoding#encoding es el tipo de codificación
print(nom)
print("modo: ",modo)
print("contenido: ",cont)
print("codificación: ",enc)
arch.close()#es cerrado el archivo
if arch.closed:#si el archivo fue cerrado ejecutará lo que esta dentro del if
#.closed es una propiedad,close() es un método
print("cerrado correcto")
else:#de lo contrario ejecutará lo que esta dentro del else
print("sigue abierto")

Programa 10:


with open("U4p9.py","r") as archivo:  # Abre el archivo "U4p9.py" en modo lectura
con=archivo.read()#lee el contenido del archivo y lo guarda en con
print(con)#es impreso el contenido del archivo
print(archivo.closed)#devolvera True si se cerró el archivo

Programa 11:

import glob#glob es una libreria que alguien hizo para poder ver los directorios
import os# es una libreríapara interactuar con el sistema operativo (directorios, rutas, etc.)
lista=glob.glob("*.py")#el asterisco es un comodin,busca todos los archivos que terminen en .py en el directorio actual
for i in lista:
print(i)#imprimirá todos los programas .py

ar=os.listdir('C:\\Users\\hp\\Desktop\\Cuarto semestre')

print(os.getcwd())# Imprime el directorio de trabajo actual 
print(os.curdir)#imprime . refiriendose a que se esta en el directorio actual


Programa 12:


import os
ar=os.listdir('C:/Users/hp/Desktop/Cuarto semestre/Programas python')
print(os.getcwd())#muestra el directorio actual
print(os.curdir)#imprime . refiriendose a que se esta en el directorio actual




Programa 13:


#Este programa contiene una lista de siete elementos
#es creada una variable llamada tam que será igual al tamaño de la lista
#mediante una variable llamada alias será igual al nombre de archivo asignado en modo escribir
#mediante un for escribirá en el archivo cada elemento de la lista hasta escribir 6
#al terminarse el for se cerrará el archivo
#y mediante una variable llamada ali abirirá el archivo en modo leer
#Una variable llamada c será igual a leer el contenido del archivo
#y al ser impresa c, será mostrado lo que hay en el archivo
#finalmente será cerrado ali

lista=['lunes','martes','miercoles','jueves','viernes','sabado','domingo']

tam=len(lista)
alias=open('holaa2.txt','w')
for linea in range(tam):
print(linea)
if(linea==6):
alias.write(lista[linea])
else:
alias.write(lista[linea]+"\n")
alias.close()

ali=open('holaa2.txt','r')
c=ali.read()
print(c)
ali.close()


Programa 14:
#actividad
#este programa es similar al pasado
#Pedí el nombre del archivo
#mediante una función pedí la cantidad de elementos de la lista
#con un for pedí cada elemento de la lista
#y el siguiente for escribe en el archivo cada elemento de la lista
#si los termina de escribir habrá un salto de linea
#y por ultimo es abierto el archivo como lectura en una variable
#para sea mostrado el contenido del archivo
#y es cerrado el archivo
nombrearhivo=input("dame el nombre del archivo: ")
def totlista():
c=1
while c:
try:
plista=int(input("cuantos elementos tendra la lista "))
c=0
except:
print("algo no funciona")
return plista

mlista=totlista()
lista=list(range(mlista))#convertir en lista en un rango

for i in lista:
print("elemento de la lista ",lista[i]+1,",",end=" ")#letrero
lista[i]=input("Dame el elemento: ")

print(lista)


tam=len(lista)
alias=open(nombrearhivo,'w')
for linea in range(tam):
print(linea)
if(linea==(tam)):
alias.write(lista[linea])
else:
alias.write(lista[linea]+"\n")
alias.close()

ali=open(nombrearhivo,'r')
c=ali.read()
print(c)
ali.close()


Programa 15:

#En este programa 
#es pedido el nombre del archivo
#mediante una función pedí la cantidad de elementos de la lista
#con un for pedí cada elemento de la lista
#y el siguiente for escribe en el archivo cada elemento de la lista
#si los termina de escribir habrá un salto de linea
#y por ultimo es abierto el archivo como lectura en una variable
#para sea mostrado el contenido del archivo
#y es cerrado el archivo




nombrearhivo=input("dame el nombre del archivo: ")
def totlista():
c=1
while c:
try:
plista=int(input("cuantos elementos tendra la lista "))
c=0
except:
print("algo no funciona")
return plista#al ser impresa la función mostrará el numero de llaves

mlista=totlista()
lista=list(range(mlista))#convertir en lista en un rango

for i in lista:#este for pide los elementos de la lista
try:#mediante el try-except son solo aceptados numeros en la lista
print("elemento de la lista ",lista[i]+1,",",end=" ")#letrero
lista[i]=int(input("Dame el elemento: "))
except:
print("solo da números")
print(lista)
suma=0
for i in lista:#con este for se realiza una suma de los elementos de la lista
suma+=i

print("la suma de los elementos es: ", suma)#y es impresa la suma


tam=len(lista)
alias=open(nombrearhivo,'w')
for linea in range(tam):
print(linea)
if(linea==(tam-1)):
alias.write(str(lista[linea]))
else:
alias.write((str(lista[linea]))+"\n")
alias.close()

ali=open(nombrearhivo,'r')
c=ali.read()
print(c)
ali.close()

Programa 16:


#En este programa es importada la biblioteca pyplot del módulo matplotlib y le da el alias 'plt'
from matplotlib import pyplot as plt
# Es creada una gráfica
#[1,2,3] representa el eje X
# [4,5,6] representa el eje Y
# Es decir, se grafican los puntos: (1,4), (2,5) y (3,6)
plt.plot([1,2,3],[4,5,6])
plt.show()#muestra la gráfica


Programa 17:

# Es importada la biblioteca numpy con el alias np
# Numpy se utiliza para trabajar con arreglos y funciones matemáticas
import numpy as np


# Es importada la biblioteca matplotlib.pyplot con el alias plt
# Esta biblioteca se usa para crear gráficos
import matplotlib.pyplot as plt 



# Es creada una variable 'a' con 50 números entre -1 y 1
# Estes es el eje x de la gráfica
x=np.linspace(-1,1,50)

y1=2*x
y2=2*(x)**2+1
y3=2*(x)**3-2

plt.figure(num="Grafico de funciones lineales")
plt.plot(x,y1)
plt.plot(x,y2)
plt.plot(x,y3)


#Es mostrada la gráfica
plt.show()

Programa 18:

#Proyecto Unidad 4
#Programa 18
#en este programa inicialmente mediante una función
#fue pedida la cantidad de materias con un try-except
#dentro de un while que se rompía despues de haber sido dado
#un número de materias
#la función regresa el número de materias

#después mediante una variable llamada mlista es mandada a llamar la función
#después fue declarada una lista llamada lista
#que seriá igual al rango del numero de materias dado por el usuario



def materias():
c = 1
while c:
try:
pmaterias = int(input("¿Cuántas materias? "))
c = 0
except:
print("Algo no funciona. Intenta de nuevo.")
return pmaterias

mlista = materias()
lista = list(range(mlista))

#este for es útil para asignar  el nombre a cada materia por el usuario
#los nombres asignados por el usuario serán guardados en la lista creada 

# Pide nombres de materias
for i in lista:
print("Materia", lista[i] + 1, ",", end=" ")  # letrero
lista[i] = input("Dame el nombre de la materia: ")



#este for inicial recorrerá cada elemento de la lista
#a cada elemento en una variable le asignará el .txt en su nombre
#por cada materia se crea un archivo de texto para guardar datos
#se escribe el nombre de la materia al inicio del archivo
#la lista calificacionesmateria será útil para guardar todas las
#calificaciones de todos los estudiantes dentro de una materia
#y será reiniciada al principio del ciclo for cuando el índice 
#este en la siguiente materia
#temp2 será util para guardar la suma de todas las calificaciones
#dentro de una materia (será útil esta suma para la media o promedio por materia)
#y será reiniciada al principio del ciclo for cuando el índice 
#este en la siguiente materia
#la variable totalunidades será útil para contar la cantidad de unidades
#por materia entre todos los estudiantes dentro de una materia
#será útil para el promedio o media por materia
#esta variable será reiniciada cada que el ciclo este en su índice en la siguiente
#materia

#convertir materias a archivos mediante un for
for materia in lista:
nombre_archivo = materia + ".txt"#nombra como archivos las materias
archivo = open(nombre_archivo, "w") #crea el archivo y escribe en el
archivo.write("Materia: " + materia+"\n")
calificacionesmateria=[]
temp2=0
totalunidades=0
#mediante este try-except es pedido en entero cuantos estudiantes habrá en la 
#materia actual
try:
num_estudiantes = int(input("\n¿Cuántos estudiantes hay en " + materia + "? "))
except:
print("Deben ser números")
#mediante este for recorrerá en un rango el total de estudiantes en la materia actual
#este for es útil para asignar un nombre a cada estudiante 
#y escribir el nombre de cada estudiante en el archivo creado de la materia actual
#mediante un try-except dentro de este for será pedido el número de unidades por estudiante
#en entero, el ciclo se repetirá según el total de estudiantes en la materia actual
#despues es creada dentro de este for una lista vacia llamada calificacionesunidad
#será reiniciada cada que el índice del for pase al siguiente estudiante
#en la materia, esta lista será util para almacenar las calificaciones por estudiante
#y será útil esta lista para la media/promedio,mediana y moda
#la variable temp será útil para acumular la suma de calificaciones del estudiante actual 
#para calcular su promedio personal, se reiniciará cada que el índice
#del for este en el siguiente estudiante
for estudiantes in range(num_estudiantes):
nombre_estudiante = input("\nNombre del estudiante " + str(estudiantes + 1) + ": ")
archivo.write("\nEstudiante " + str(estudiantes+1) + ": "+ nombre_estudiante+"\n")
try:
num_unidades = int(input("¿Cuántas unidades tiene " + nombre_estudiante + "? "))
except:
print("Deben ser numeros")
calificacionesunidad=[]
temp=0
#en este for recorrerá cada unidad por estudiante en la materia actual
#según el total dado
#mediante la variable calificación sera pedida cada calificación por unidad
#y cada calificación será escrita en el archivo
#por cada unidad que recorre el for por estudiante en la materia actual:
#temp acomulará la suma de todas las calificaciones por estudiante
#para el promedio/media, mediana y moda por estudiante
#temp2 acomulará la suma de todas las calificaciones por materia
#para el promedio/media, mediana y moda por materia
#a total unidades se le será incrementado 1, esta variable servirá para el promedio
#por materia
#serán agregadas cada calificación en las listas calificacionesunidad
#y calificacionesmateria, estas listas serán útiles para la mediana y moda
#por estudiante y materoa
for unidad in range(num_unidades):
calificacion  =input("Calificación de la unidad #" + str(unidad + 1) + ": ")
archivo.write("Unidad " + str(unidad + 1) + ": " + calificacion + "\n")
temp+=int(calificacion)
promedio=temp/ num_unidades#calculo de promedio por estudiante
temp2+=int(calificacion)
totalunidades+=1
calificacionesunidad.append(int(calificacion))
calificacionesmateria.append(int(calificacion))
#.sort() lo investigue en internet, sirve para ordenar de menor a mayor una lista
#me resulto util para reducir código y no haber tenido que haber utilizado 
#un for para ordenar las listas(lo que hubiera hecho mas largo el programa)
calificacionesunidad.sort()
calificacionesmateria.sort()
#cálculo moda por estudiante:
#primero fue declarado un diccionario vacio llamado moda
moda={}
#despues mediante un for que recorre la lista de las calificaciones por
#estudiante en la materia actual
#si la calificación actual que recorre el for ya estaba en el diccionario
#su value se le incrementará 1, sino se quedará en 1
#moda mayor se inicializara en 0 y se reiniciara por cada estudiante
#moda mayor sera igual al value maximo en el diccionario
#aqui utilizamos la herramienta max para reducir código y sirvió para
#saber que value en el diccionario moda era el mayoe
for i in calificacionesunidad:
if i in moda:
moda[i]+=1
else:
moda[i]=1
#print(moda)
modamayor=0
modamayor=max(moda.values())
#print(modamayor)
modas=[]
#mediante este for si el valor de modamayor es valor de una llave del diccionario
#sera agregado a una lista previamente creada llamada modas
#en esta lista se almacenará la moda o modas(en caso de haber mas de 1) 
for j in moda:
if moda[j]==modamayor:
modas.append(j)
#cálculo de mediana por estudiante:
#fue declarada una variable n que seria igual a la longitud
#de la lista que contiene la calificación por estudiante
#si es impar la cantidad de calificaciones
#la mediana será igual al elemento que esta en la posición:
#de la longitud de la lista calificacionesunidad 
#dividida en división entera entre 2
#si es par la cantidad de calficaciones
#la mediana será igual al elemento que esta en la posición:
#de la suma entre la división entera entre 2 menos 1 de la longitud
#de la lista calificacionesunidad mas la división entera entre 2
#de la lista calificacionesunidad
n=len(calificacionesunidad)
if n%2 ==1:
mediana=calificacionesunidad[n//2]
else:
mediana=(calificacionesunidad[n//2-1]+calificacionesunidad[n//2])/2
#cálculo de mediana por materia:
#es declarada una variable "X" que será igual a la longitud
#de la lista que almacena las calificaciones por materia
#el procedimiento es el mismo que el calculo de mediana por
#estudiante, solo las variables cambian
x=len(calificacionesmateria)
if x%2 ==1:#si es impar la cantidad de calificaciones
medianamateria=calificacionesmateria[x//2]
else:#si es par la cantidad de calficaciones
medianamateria=(calificacionesmateria[x//2-1]+calificacionesmateria[x//2])/2
#Impresión del promedio por estudiante en la materia actual
#es escrito tambien en el archivo de la materia:
#el promedio por estudiante en la materia actual
print("Promedio de ",nombre_estudiante," en ", materia,":",promedio)
archivo.write("Promedio de "+ nombre_estudiante+": " + str(promedio)+"\n")
#Impresión de la mediana por estudiante en la materia actual
#es escrito también en el archivo de la materia:
#la mediana por estudiante en la materia actual
print("La mediana entre las calificaciones de ",nombre_estudiante,"en la materia ", materia, "es: ",mediana)
archivo.write("Mediana de "+nombre_estudiante+" en la materia "+materia+" es: "+str(mediana)+"\n")
#imprimir moda/modas y escribirlas en el archivo
#el for sirve para que si son mas de 1 moda se escriba una coma entre ellas
print("Moda de ",nombre_estudiante," en ",materia,":",end=" ")
for k in range(len(modas)):
if k<(len(modas)-1):
print(modas[k],end=",")
else:
print(modas[k])
archivo.write("Moda de "+nombre_estudiante+" en "+materia+": ")
for k in range(len(modas)):
if k<(len(modas)-1):
archivo.write(str(modas[k])+",")
else:
archivo.write(str(modas[k])+"\n")
#cálculo de moda por materia:
#este proceso es el mismo que el que
#fue realizado para el cálculo de la moda por estudiante
#solo cambia el nombre de las variables
modamat={}
for i in calificacionesmateria:
if i in modamat:
modamat[i]+=1
else:
modamat[i]=1
modamatmayor=0
modamatmayor=max(modamat.values())
modasmat=[]
for j in modamat:
if modamat[j]==modamatmayor:
modasmat.append(j)
#en esta sección estas variables son reiniciadas
#estas variables son utiles para cálculos solo para estudiantes
#y no para materias completas
calificacionesunidad=[]
temp=0
promedio=0
#en la siguiente sección hay sólo cálculos y impresiones
#de operaciones/datos correspondientes a lo que corresponde
#a materias completas y no a estudiantes individuales en materias
if totalunidades>0:
#cálculo de promedio por materia:
promediomateria=temp2/totalunidades
#imprimir promedio por materia y escribirlo en el archivo:
archivo.write("\nPromedio de la materia "+materia+" es: "+ str(promediomateria))
print("\nPromedio de la materia", materia, ":",promediomateria)
#imprimir mediana por materia y escribirla en el archivo
print("La mediana en la materia ", materia, "es: ",medianamateria)
archivo.write("\nMediana  en la materia "+materia+" es: "+str(medianamateria))
#imprimir moda por materia y escribirla en el archivo
#el for es para que si hay mas de una moda imprima y escriba
#una coma entre ellas
print("La moda en la materia ",materia," es: ",end=" ")
for k in range(len(modasmat)):
if k<(len(modasmat)-1):
print(modasmat[k],end=",")
else:
print(modasmat[k])
#escribir en archivo moda/modas por materia
archivo.write("\nLa moda en la materia "+materia+" es: ")
for k in range(len(modasmat)):
if k<(len(modasmat)-1):
archivo.write(str(modasmat[k])+",")
else:
archivo.write(str(modasmat[k])+"\n")
#lo siguiente cierra el archivo de la materia actual
archivo.close()  

#la primer libreria permite las gráficas
#la segunda para realizar operaciones matemáticas
import matplotlib.pyplot as plt 
import numpy as np


# Gráfica 1, de un alumno específico 
#Primero fue definida una función llamada grafica_alumno que no recibe parámetros
#esta función será útil para  graficar las calificaciones de un alumno específico en una materia
#su media,mediana y moda
#dentro de esta función primero:
#solicita al usuario el nombre del alumno y el de la materia para poder buscar sus datos

def grafica_alumno():
nombre_alumno = input("\nIngresa el nombre del alumno a graficar: ")
materia_grafica = input("Ingresa el nombre de la materia: ")
#mediante un try-except intenta abrir el archivo de la materia 
#si no existe ejecutará el except y con el return sale de la función
try:
with open(materia_grafica + ".txt", "r") as archivo:
lineas = archivo.readlines()
except:
print("algo salio mal o no existe")
return
# Buscar las calificaciones del alumno
#la lista calificaciones servirá para guardar las calificaciones del alumno
#la variable encontrado para saber si fue encontrado
calificaciones = []
encontrado = False
#en este ciclo while:
#el índice i inicia en 0
#este bucle recorre cada linea del archivo, mientras el índice sea
#menor que el número total de lineas
#así también extraé la linea actual del archivo en la posición del índice
#y la guarda en linea
i=0
while i< len(lineas):
linea= lineas[i]
#en este if si la linea actual contiene la palabra "Estudiante
#y el nombre del alumno dado previamente al que se quiere obtener su gráfica
#encontrado será igual a True (es decir que si fue encontrado)
#el índice se incrementará 1 (es decir avanzará al siguiente renglón,
#que será la primera calificación del alumno en la primer unidad)
if "Estudiante" in linea and nombre_alumno in linea:
encontrado= True
i+=1
#en este while: 
#mientras no este el índice en el final del archivo
#y la linea actual contenga la palabra "Unidad"
#seguirá leyendo calificaciones
while i < len(lineas) and "Unidad" in lineas[i]:
#la siguiente linea:
#separa los dos elementos que separa ":" mediante .split
#mediante [i] toma la calificación
#.strip quita espacios
#por ejemplo: "Unidad 1: 90"
#tomará 90 y lo convierte a entero
calificacion = int(lineas[i].split(": ")[1].strip())
#la siguiente linea
#agrega la calificación extraída a la lista calificaciones
#para la media,mediana y moda
calificaciones.append(calificacion)
#el índice es aumentado 1 para cambiar de unidad 
i+=1
#si el while se deja de cumplir se romperá el previo también
break
#este else sirve por si la linea no contiene al alumno buscado para
#pasar a la siguiente linea hasta que la linea contenga al alumno
#deseado
else:
i+=1
#si no se encontró el alumno o no tiene calificaciones 
#se imprime "no existe"
#y ocasiona salida de la función con el return
if not encontrado or not calificaciones:
print("no existe")
return
# Cálculo de estadísticas
#mediante la libreria numpy se obtuvo la media y la mediana 
#de una forma mas reducida que al usar varios ciclos for
media = np.mean(calificaciones)
mediana = np.median(calificaciones)
#la moda para la gráfica la obtuvimos por el mismo método
#que usamos para la moda por estudiante y por materia
modagraf={}
for m in calificaciones:
if m in modagraf:
modagraf[m]+=1
else:
modagraf[m]=1
maxmodagraf=max(modagraf.values())
modasgraf=[]
for n in modagraf:
if modagraf[n]==maxmodagraf:
modasgraf.append(n)
# Gráfica de barras (unidades con calificaciones)
#el eje X que es la variable unidades esta definido en el rango
#de 1 a la longitud de las calificaciones + 1
#si hay 3 unidades, unidades será igual a 1,2,3
#y la figura que tendrá las subgráficas será de 12x5 pulgadas
unidades = range(1, len(calificaciones) + 1)
plt.figure(figsize=(12, 5))
#se crea la primer subgráfica dentro de la figura 1
#que tendrá 1 fila y 2 columnas
plt.subplot(1, 2, 1)  # Subgráfica 1: Calificaciones por unidad
#en la siguiente linea se dibuja la gráfica de barras
#donde el eje X son las unidades y el Y las calificaciones
plt.bar(unidades, calificaciones, color='blue', alpha=0.7)
#la siguientes lineas son el titulo y las etiquetas para el eje X y Y
plt.title(f"Calificaciones de {nombre_alumno} en {materia_grafica}")
plt.xlabel("Unidad")
plt.ylabel("Calificación")
#establece el rango del eje Y
plt.ylim(0, 100)
#se selecciona 1 fila, 2 columnas y la 2da gráfica
plt.subplot(1, 2, 2)  # Subgráfica 2: Estadísticas
#despues es creada una lista llamada estadisticas que contiene la media,
#mediana y moda/modas
estadisticas = [media, mediana] + modasgraf
#lo siguiente son etiquetas
etiquetas = ['Media', 'Mediana']+ ["Moda" + str(i+1) for i in range(len(modasgraf))]
plt.bar(etiquetas, estadisticas, color=['red', 'green']+['purple']*len(modasgraf))
plt.title("Estadísticas del alumno")
plt.ylabel("Cálculos")
plt.ylim(0, 100)
#ajusta el espaciado entre las subgráficas para que no se sobrepongan
plt.tight_layout()
#muestra la gráfica
plt.show()

#Gráfica 2, de una materia:
#Fue definida una función llamada grafica_materia que no recibe parámetros
#esta función será útil para  graficar las calificaciones de una materia
#su media,mediana y moda
#dentro de esta función primero:
#solicita al usuario el nombre de la materia a graficar

def grafica_materia():
materia_grafica = input("\nIngresa el nombre de la materia a graficar: ")
#mediante un try-except intenta abrir el archivo de la materia 
#si no existe ejecutará el except y con el return sale de la función
try:
with open(materia_grafica + ".txt", "r") as archivo:
lineas = archivo.readlines()
except:
print("la materia no existe o algo salió mal")
return
# Listas para datos de todos los alumnos
#servirán para almacenar los nombres
#y la otra lista para el promedio final
alumnos = []
calificacionestotales = []
#en este ciclo while:
#el índice i inicia en 0
#este bucle recorre cada linea del archivo, mientras el índice sea
#menor que el número total de lineas
i = 0
while i < len(lineas):
#si se encuentra una linea con estudiante en el indice actual del archivo
#se extraerá su nombre y se guarda en la lista alumnos
if "Estudiante" in lineas[i]:
nombre_alumno = lineas[i].split(": ")[1].strip()
alumnos.append(nombre_alumno)
#j se incrementa para que empieze a leer el índice
#las calificaciones 
j = i + 1
califalumno = []
#en este while se procesan las lineas que sean menor a 
# la longitud del archivo y contengan la palabra 
#"Unidad" a partir de la linea después despues del nombre del
#estudiante, aqui se extraén las calificaciones y se guardan
#en califalumno
while j < len(lineas) and "Unidad" in lineas[j]:
calif = int(lineas[j].split(": ")[1].strip())
califalumno.append(calif)
j += 1
#al terminar el índice con un alumno se guardan sus calificaciones
#en calificacionestotales
#i se actualiza para continuar en el siguiente alumno
calificacionestotales.append(califalumno)
i = j
else:
i += 1
#si no hay alumnos habrá salida de la función
if not alumnos:
print("no hay alumnos en esta materia, o algo salió mal")
return
# Cálculo de estadísticas de la materia
#califestad servirá para guardar todas las calificaciones en total
califestad = []
#mediante este for se agregarán todas las calificaciones a 
#una sola lista (califestad)
for alumno in calificacionestotales:
for calif in alumno:
califestad.append(calif)
#asi como en la función pasada usamos la libreria numpy para
#calcular la media y la mediana mas cortamente
media = np.mean(califestad)
mediana = np.median(califestad)
#y usamos el metodo que hemos utilizado durante el todo programa
#para obtener la moda/modas
modagrafmat={}
for n in califestad:
if n in modagrafmat:
modagrafmat[n]+=1
else:
modagrafmat[n]=1
maxmodagrafmat=max(modagrafmat.values())
modasgrafmat=[]
for o in modagrafmat:
if modagrafmat[o]==maxmodagrafmat:
modasgrafmat.append(o)
# Gráfica de barras (alumnos con cálculos)
#la figura tendra 14x6 pulgadas
plt.figure(figsize=(14, 6))
# Subgráfica 1: Calificaciones por alumno
#se define la gráfica 1 de 1 fila y 2 columnas
plt.subplot(1, 2, 1)
etiquetas=[]#lista para nombres
valores=[]#listas para calificaciones
colores=[]#lista para color de barra
posiciones=[]#guardar´z las posiciones
coloresunidades=['red','green','blue']#colores según la unidad
posicion = 0#irá aumentando para el eje X
indicealumno=0
espacio=0.5#separación entre grupos de alumnos
#este ciclo while recorre todos los alumnos que hay en la lista alumnos
#se ejecutará mientras indicealumno sea menor a la cantidad de alumnos
#servirá para la construcción de la subgráfica 1
while indicealumno < len(alumnos):
indiceunidad=0
#el siguiente while recorre las calificaciones en el alumno actual
#agregará la calificación de la unidad actual en valores
#crea la etiqueta que irá en cada unidad en el eje X
#asigna un color diferente a cada unidad, % servirá para repetir los colores
#de forma cíclica
#posiciones es para guardar en que lugar horizontal debe ir cada barra
#en el eje X
#asi tambien se incrementará una posición
#y una unidad
#si se el índice terminó con las unidades de un alumno incrementara 0.5 a 
#la posición y pasará al siguiente alumno
while indiceunidad < len(calificacionestotales[indicealumno]):
valores.append(calificacionestotales[indicealumno][indiceunidad])
etiquetas.append("U"+str(indiceunidad+1)+"-"+alumnos[indicealumno])
colores.append(coloresunidades[indiceunidad % len(coloresunidades)])
posiciones.append(posicion)
posicion +=1
indiceunidad+=1
posicion += espacio
indicealumno+=1
#posiciones es la ubicación horizontal
#valores es la altura 
#color los colores de cada barra
#alpha la transparencia de la barra
plt.bar(posiciones,valores,color=colores,alpha=0.7)
#la siguiente linea indica donde ira cada etiqueta en el eje x
#y las establece
#con su rotación
#y ha es la alineación
plt.xticks(posiciones,etiquetas,rotation=45,ha="right")
#lo siguiente son  títulos
plt.title("Calificaciones en " +materia_grafica)
plt.xlabel("Unidad - Alumno")
plt.ylabel("Calificación")
plt.ylim(0, 100)#limite del eje y
# Subgráfica 2: Estadísticas de la materia
#la segunda subgráfica tendrá una fila y 2 columnas en su espacio
#es decir en las etiquetas
plt.subplot(1, 2, 2) 
#etiquetas del eje X
estadisticas = [media, mediana]
etiquetasest = ['Media', 'Mediana']
#el siguiente for es por si hay mas de 1 moda
for f in range(len(modasgrafmat)):
estadisticas.append(modasgrafmat[f])
etiquetasest.append("Moda "+ str(f + 1))
#etiquetasest son los nombres en el eje X
#estadisticas su valor
#color los colores
plt.bar(etiquetasest, estadisticas, color=['red', 'green']+ ['purple']*len(modasgrafmat))
#lo siguiente corresponde a los títulos y al limite en el eje Y
plt.title("Estadísticas de la materia")
plt.ylabel("Cálculos")
plt.ylim(0, 100)
#ajusta espacios
plt.tight_layout()
#muestra la gráfica
plt.show()

#el siguiente menú mostrará la gráfica que el usuario desee ver según las
#funciones hechas
#Menú para elegir gráficas
def menu_graficas():
while True:
print("\n--- MENÚ DE GRÁFICAS ---")
print("1. Gráfica de un alumno")
print("2. Gráfica de una materia")
print("3. Salir")
opcion = input("Elige una opción (1-3): ")
if opcion == "1":
grafica_alumno()
elif opcion == "2":
grafica_materia()
elif opcion == "3":
break
else:
print("Opción inválida. Intenta de nuevo.")

# Ejecutar el menú después de guardar los datos
menu_graficas()



Programa 19:


# Es importada la biblioteca matplotlib.pyplot con el alias plt
# Esta biblioteca se usa para crear gráficos
import matplotlib.pyplot as plt 

# Es importada la biblioteca numpy con el alias np
# Numpy se utiliza para trabajar con arreglos y funciones matemáticas
import numpy as np

# Es creada una variable 'a' con 50 números entre 0 y 20
# Estes es el eje x de la gráfica
a=np.linspace(0,20,50)

# Es calculado el seno de cada valor en a
# El resultado es un nuevo se guarda en b con los valores del eje y
b=np.sin(a)

# Son graficados los datos de 'a' (eje x) contra 'b' (eje y)
# '--k' significa línea discontinua  y color negro
# linewidth=2 especifica que la línea tendrá un grosor de 2
plt.plot(a,b,'--k',linewidth=2)

#Es mostrada la gráfica
plt.show()


Programa 20:


# Este programa solicita al usuario que ingrese 12 datos (3 filas x 4 columnas)
# Organiza esos datos en una lista de listas (matriz 3x4).
# Convierte los datos a enteros
# Grafica los datos como barras agrupadas usando matplotlib
# Cada grupo de 4 barras representa las columnas "A", "B", "C", "Algo"
# Cada color representa una fila diferente

import numpy as np
import matplotlib.pyplot as plt 
li=[]
subli=[]
dato=0
#li[[23,56,78],[67,89,98],[56,89,78]]
try:
for x in range(3):
for i in range(4):
dato=input("dame dato: ")
subli.append(dato)
li.append(subli)
subli=[]
print(li)
tmp=0
stmp=[]
ltmp=[]
for a in range(3):
for b in range(4):
tmp=int(li[a][b])
print("tmp",tmp,type(tmp))
stmp.append(tmp)
ltmp.append(stmp)
stmp=[]
print(ltmp)
X=np.arange(4)
plt.bar(X+  0.00, ltmp[0], color = "b",width= 0.25)
plt.bar(X+  0.25, ltmp[1], color= "g",width= 0.25)
plt.bar(X+  0.50, ltmp[2], color="r",width=0.25)
plt.xticks(X+ 0.38,["uno","dos","tres","algo"])
plt.show()
except:
print("ups")


Programa 21:
#En este programa es pedido un numero que es una cadena
#después es creada una variable num que convierte la cadena en entero

dato=input("Dame un numero: ")
print(dato,type(dato))
num=int(dato)
print(num,type(num))



Comentarios

Entradas más populares de este blog

Programación Unidad 5 Hernán

Unidad 3 Hernán Programación