























Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Este documento es un solucionario de ejercicios integradores de programación en Python, que abarca desde conceptos básicos hasta técnicas avanzadas de programación. Presenta 60 ejercicios organizados en categorías progresivas, comenzando con fundamentos como manejo de listas, diccionarios y archivos, pasando por algoritmos de ordenamiento, validación de datos y estructuras complejas, hasta llegar a sistemas distribuidos, algoritmos genéticos y machine learning básico. Cada ejercicio incluye un enunciado detallado con los temas aplicados (como recursividad, manejo de excepciones o procesamiento paralelo) y soluciones implementadas con código Python. Incluye proyectos como sistemas de gestión bibliotecaria, simuladores financieros, juegos interactivos, traductores Morse, compresores de texto, entre otros. Es ideal para estudiantes que buscan profundizar en técnicas avanzadas de Python, ofreciendo ejemplos listos para implementar y adaptar a necesidades específicas.
Tipo: Exámenes
1 / 31
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!
























Ejercicios 11-
Ejercicios 31-
Ejercicios 41-
1 import json 2 3 biblioteca = [] 4 5 def agregar_libro ( titulo , autor , a o ) : 6 libro = { 7 " titulo " : titulo , 8 " autor " : autor , 9 " a o " : a o , 10 " disponible " : True 11 } 12 biblioteca. append ( libro ) 13 guardar_libros () 14 15 def buscar_por_autor ( autor ) : 16 return [ libro for libro in biblioteca if libro [ " autor " ] == autor ] 17 18 def guardar_libros () : 19 with open ( " biblioteca. json " , " w " ) as f : 20 json. dump ( biblioteca , f ) 21 22 def cargar_libros () : 23 try : 24 with open ( " biblioteca. json " , " r " ) as f : 25 return json. load ( f ) 26 except FileNotFoundError : 27 return [] 28 29 biblioteca = cargar_libros ()
1 def analizar_texto ( archivo_entrada , archivo_salida ) : 2 try : 3 with open ( archivo_entrada , ’r ’) as f : 4 contenido = f. read () 5 6 lineas = contenido. split ( ’\ n ’) 7 palabras = contenido. split () 8 9 estadisticas = { 10 " palabras " : len ( palabras ) , 11 " lineas " : len ( lineas ) ,
11 12 if intento < numero : 13 print ( " Mayor " ) 14 elif intento > numero : 15 print ( " Menor " ) 16 else : 17 guardar_record ( intentos ) 18 print ( f " Correcto! Intentos : { intentos } " ) 19 break 20 21 def guardar_record ( intentos ) : 22 try : 23 with open ( " records. json " , " r " ) as f : 24 records = json. load ( f ) 25 except FileNotFoundError : 26 records = [] 27 28 records. append ( intentos ) 29 30 with open ( " records. json " , " w " ) as f : 31 json. dump ( records , f )
1 def factorial ( n ) : 2 if not isinstance (n , int ) or n < 0: 3 raise ValueError ( " Debe ser un entero positivo " ) 4 return 1 if n <= 1 else n * factorial (n -1)
1 import random 2 import logging 3 4 logging. basicConfig ( filename = ’ errores. log ’ , level = logging. ERROR ) 5 6 def buscar_en_matriz ( matriz , valor ) : 7 for i in range ( len ( matriz ) ) : 8 for j in range ( len ( matriz [0]) ) : 9 if matriz [ i ][ j ] == valor : 10 return (i , j ) 11 logging. error ( f " Valor { valor } no encontrado " ) 12 return None 13 14 matriz = [[ random. randint (1 , 50) for _ in range (5) ] for _ in range (5) ]
1 import json 2 3 def cargar_agenda () : 4 try : 5 with open ( " agenda. json " , " r " ) as f : 6 return json. load ( f ) 7 except ( FileNotFoundError , json. JSONDecodeError ) : 8 return {} 9 10 def guardar_agenda ( agenda ) : 11 with open ( " agenda. json " , " w " ) as f : 12 json. dump ( agenda , f ) 13 14 agenda = cargar_agenda ()
1 def cifrar_cesar ( texto , desplazamiento ) : 2 resultado = " " 3 for char in texto : 4 if char. isalpha () : 5 mayus = char. isupper () 6 char = char. lower () 7 codigo = ord ( char ) - ord ( ’a ’) 8 nuevo_codigo = ( codigo + desplazamiento ) % 26 9 char = chr ( nuevo_codigo + ord ( ’a ’) ) 10 if mayus : 11 char = char. upper () 12 resultado += char 13 return resultado
1 from operator import itemgetter 2 3 def ordenar_ventas ( ventas ) : 4 for i in range ( len ( ventas ) ) : 5 min_idx = i 6 for j in range ( i +1 , len ( ventas ) ) : 7 if ventas [ j ][ " ventas " ] < ventas [ min_idx ][ " ventas " ]: 8 min_idx = j 9 ventas [ i ] , ventas [ min_idx ] = ventas [ min_idx ] , ventas [ i ] 10 return ventas 11 12 ventas = [{ " mes " : " Enero " , " ventas " : 1500} , { " mes " : " Febrero " , " ventas " : 2000}]
Soluciones 11-
1 import csv 2 3 def calcular_promedio ( estudiante ) : 4 return sum ( estudiante [ " notas " ]) / len ( estudiante [ " notas " ]) 5 6 def guardar_notas ( estudiantes , archivo ) : 7 with open ( archivo , ’w ’ , newline = ’ ’) as f : 8 writer = csv. writer ( f ) 9 writer. writerow ([ " Nombre " , " Asignatura " , " Notas " ]) 10 for est in estudiantes : 11 writer. writerow ([ est [ " nombre " ] , est [ " asignatura " ] , " ; ". join ( map ( str , est [ " notas " ]) ) ])
1 def km_a_millas ( km ) : 2 return km * 0. 3 4 def guardar_historial ( conversion ) : 5 with open ( " historial. txt " , " a " ) as f : 6 f. write ( f " { conversion }\ n " )
3 4 def guardar_matriz ( matriz , archivo ) : 5 with open ( archivo , ’w ’) as f : 6 for fila in matriz : 7 f. write ( " ,". join ( map ( str , fila ) ) + " \ n " )
1 def clasificar_edades ( personas ) : 2 categorias = { 3 " n i o " : [ p for p in personas if p [ " edad " ] < 13] , 4 " adolescente " : [ p for p in personas if 13 <= p [ " edad " ] < 18] , 5 " adulto " : [ p for p in personas if p [ " edad " ] >= 18] 6 } 7 return categorias
1 def buscar_patron ( archivo , patron ) : 2 with open ( archivo , ’r ’) as f : 3 texto = f. read () 4 return [ i for i in range ( len ( texto ) ) if texto. startswith ( patron , i ) ]
Soluciones 21-
1 import pickle 2 3 def buscar_producto ( id , productos ) : 4 low , high = 0 , len ( productos ) - 1 5 while low <= high : 6 mid = ( low + high ) // 2 7 if productos [ mid ][ ’ id ’] == id : 8 return productos [ mid ] 9 elif productos [ mid ][ ’ id ’] < id : 10 low = mid + 1 11 else : 12 high = mid - 1 13 return None 14 15 def actualizar_stock ( id , cantidad , productos ) : 16 producto = buscar_producto ( id , productos ) 17 if producto and producto [ ’ stock ’] + cantidad >= 0: 18 producto [ ’ stock ’] += cantidad 19 with open ( ’ inventario. dat ’ , ’ wb ’) as f : 20 pickle. dump ( productos , f ) 21 return True 22 return False
1 import random 2 import string 3 import hashlib 4 5 def g e n e r a r _ c o n t r a s e a () : 6 caracteres = string. ascii_letters + string. digits + string. punctuation 7 while True : 8 c o n t r a s e a = ’ ’. join ( random. choice ( caracteres ) for _ in range (12) )
9 if ( any ( c. isupper () for c in c o n t r a s e a ) and
10 any ( c. islower () for c in c o n t r a s e a ) and
11 any ( c. isdigit () for c in c o n t r a s e a ) : 12 return c o n t r a s e a 13 14 def g u a r d a r _ c o n t r a s e a ( c o n t r a s e a , archivo ) : 15 with open ( archivo , ’ ab ’) as f : 16 f. write ( hashlib. sha256 ( c o n t r a s e a. encode () ). digest () )
1 import json 2 import statistics 3 4 def calcular_estadisticas ( archivo_entrada ) : 5 with open ( archivo_entrada , ’r ’) as f : 6 numeros = [ float ( line. strip () ) for line in f ] 7 8 resultados = { 9 ’ media ’: statistics. mean ( numeros ) , 10 ’ mediana ’: statistics. median ( numeros ) , 11 ’ moda ’: statistics. mode ( numeros ) , 12 ’ numeros_ordenados ’: sorted ( numeros ) 13 } 14 15 with open ( ’ estadisticas. json ’ , ’w ’) as f : 16 json. dump ( resultados , f )
1 import random 2 3 def inicializar_tablero () : 4 return [[ ’ ’ for _ in range (3) ] for _ in range (3) ] 5 6 def guardar_partida ( tablero , jugador , archivo ) : 7 with open ( archivo , ’a ’) as f : 8 f. write ( f " Jugador : { jugador }\ n " ) 9 for fila in tablero : 10 f. write ( ’| ’. join ( fila ) + ’\ n ’) 11 f. write ( ’\ n ’) 12 13 def hay_ganador ( tablero ) : 14 # Verifica filas , columnas y diagonales 15 lineas = tablero + list ( zip (* tablero ) ) +
16 [[ tablero [ i ][ i ] for i in range (3) ]] +
17 [[ tablero [ i ][2 - i ] for i in range (3) ]] 18 return any ( all ( cell == ’X ’ for cell in linea ) or 19 all ( cell == ’O ’ for cell in linea ) for linea in lineas )
1 import csv 2 3 def cargar_diccionario ( archivo ) : 4 with open ( archivo , mode = ’r ’) as f : 5 return { row [ ’ e s p a o l ’ ]: row [ ’ ingles ’] for row in csv. DictReader ( f ) } 6 7 def traducir_frase ( frase , diccionario ) : 8 palabras = frase. lower (). split () 9 return ’ ’. join ( diccionario. get ( palabra , ’ ??? ’) for palabra in palabras )
3 positivas = sum (1 for palabra in palabras if palabra in palabras_positivas ) 4 negativas = sum (1 for palabra in palabras if palabra in palabras_negativas ) 5 total = len ( palabras ) 6 return { 7 ’ positivas ’: positivas , 8 ’ negativas ’: negativas , 9 ’ porcentaje_positivo ’: ( positivas / total ) * 100 if total > 0 else 0 10 }
Soluciones 31-
1 import json 2 import random 3 4 def recomendar_pelicula ( genero , peliculas ) : 5 return random. choice ( peliculas. get ( genero , []) ) 6 7 def guardar_recomendacion ( usuario , pelicula , archivo ) : 8 try : 9 with open ( archivo , ’r ’) as f : 10 historial = json. load ( f ) 11 except FileNotFoundError : 12 historial = {} 13 14 if usuario not in historial : 15 historial [ usuario ] = [] 16 historial [ usuario ]. append ( pelicula ) 17 18 with open ( archivo , ’w ’) as f : 19 json. dump ( historial , f )
1 def estimar_complejidad (n , operaciones ) : 2 resultados = { 3 ’O (1) ’: 1 , 4 ’O ( log n ) ’: math. log ( n ) if n > 0 else 0 , 5 ’O ( n ) ’: n , 6 ’O ( n log n ) ’: n * math. log ( n ) if n > 0 else 0 , 7 ’O ( n ^2) ’: n 2 , 8 ’O (2^ n ) ’: 2 n 9 } 10 with open ( ’ complejidad. txt ’ , ’w ’) as f : 11 for key , value in resultados. items () : 12 f. write ( f " { key }: { value } operaciones \ n " )
1 def generar_laberinto ( filas , columnas ) : 2 laberinto = [[1 for _ in range ( columnas ) ] for _ in range ( filas ) ] 3 # Algoritmo b s i c o para crear caminos 4 for i in range (1 , filas -1) : 5 for j in range (1 , columnas -1) : 6 if random. random () > 0.7: 7 laberinto [ i ][ j ] = 0 8 return laberinto
9 10 def guardar_laberinto ( laberinto , archivo ) : 11 with open ( archivo , ’w ’) as f : 12 for fila in laberinto : 13 f. write ( ’ ’. join ([ ’# ’ if cell == 1 else ’ ’ for cell in fila ]) + ’
n ’)
1 def evaluar_expresion ( expresion ) : 2 try : 3 return eval ( expresion ) 4 except : 5 raise ValueError ( " E x p r e s i n no v l i d a " ) 6 7 def parentesis_balanceados ( expresion ) : 8 pila = [] 9 for char in expresion : 10 if char == ’( ’: 11 pila. append ( char ) 12 elif char == ’) ’: 13 if not pila : 14 return False 15 pila. pop () 16 return len ( pila ) == 0
1 from collections import defaultdict 2 3 def contar_votos ( votos ) : 4 conteo = defaultdict ( int ) 5 for voto in votos : 6 conteo [ voto ] += 1 7 return sorted ( conteo. items () , key = lambda x : x [1] , reverse = True ) 8 9 def guardar_resultados ( resultados , archivo ) : 10 with open ( archivo , ’w ’ , newline = ’ ’) as f : 11 writer = csv. writer ( f ) 12 writer. writerow ([ ’ Candidato ’ , ’ Votos ’ ]) 13 writer. writerows ( resultados )
1 from collections import deque 2 3 def simular_fifo ( procesos ) : 4 cola = deque ( procesos ) 5 tiempo_total = 0 6 resultados = [] 7 while cola : 8 proceso = cola. popleft () 9 tiempo_total += proceso [ ’ tiempo ’] 10 resultados. append ({** proceso , ’ tiempo_final ’: tiempo_total }) 11 return resultados
4 # Diccionario completo ...
Soluciones 41-
1 import csv 2 from datetime import datetime 3 4 def generar_factura ( cliente , items , archivo ) : 5 subtotal = sum ( item [ ’ precio ’] * item [ ’ cantidad ’] for item in items ) 6 iva = subtotal * 0. 7 total = subtotal + iva 8 9 nombre_archivo = f " { archivo } _ { datetime. now (). strftime (’ %Y %m %d %H %M %S ’) }. csv " 10 11 with open ( nombre_archivo , ’w ’ , newline = ’ ’) as f : 12 writer = csv. writer ( f ) 13 writer. writerow ([ ’ Factura para : ’ , cliente ]) 14 writer. writerow ([ ’ Producto ’ , ’ Cantidad ’ , ’ Precio Unitario ’ , ’ Total ’ ]) 15 for item in items : 16 writer. writerow ([ 17 item [ ’ producto ’] , 18 item [ ’ cantidad ’] , 19 f " $ { item [ ’ precio ’]:.2 f } " , 20 f " $ { item [ ’ precio ’] * item [ ’ cantidad ’]:.2 f } " 21 ]) 22 writer. writerow ([ ’ Subtotal : ’ , ’ ’ , ’ ’ , f " $ { subtotal :.2 f } " ]) 23 writer. writerow ([ ’ IVA (16 %) : ’ , ’ ’ , ’ ’ , f " $ { iva :.2 f } " ]) 24 writer. writerow ([ ’ Total : ’ , ’ ’ , ’ ’ , f " $ { total :.2 f } " ])
1 def buscar_secuencia_adn ( archivo , secuencia ) : 2 with open ( archivo , ’r ’) as f : 3 adn = f. read (). replace ( ’\ n ’ , ’ ’) 4 5 posiciones = [] 6 n = len ( secuencia ) 7 for i in range ( len ( adn ) - n + 1) : 8 if adn [ i : i + n ] == secuencia : 9 posiciones. append ( i ) 10 11 resultados = { 12 ’ secuencia ’: secuencia , 13 ’ ocurrencias ’: len ( posiciones ) , 14 ’ posiciones ’: posiciones 15 } 16 17 with open ( ’ resultados_adn. json ’ , ’w ’) as f : 18 import json 19 json. dump ( resultados , f ) 20 21 return resultados
1 import os 2 import shutil 3 from datetime import datetime 4 5 def organizar_archivos_por_fecha ( directorio ) : 6 for nombre_archivo in os. listdir ( directorio ) : 7 ruta_completa = os. path. join ( directorio , nombre_archivo )
8 9 if os. path. isfile ( ruta_completa ) : 10 fecha_modificacion = datetime. fromtimestamp ( 11 os. path. getmtime ( ruta_completa ) 12 carpeta_destino = fecha_modificacion. strftime ( " %Y- %m- %d " ) 13 14 os. makedirs ( carpeta_destino , exist_ok = True ) 15 16 shutil. move ( 17 ruta_completa , 18 os. path. join ( carpeta_destino , nombre_archivo ) 19 ) 20 21 with open ( ’ organizacion. log ’ , ’w ’) as log : 22 log. write ( f " O r g a n i z a c i n completada el { datetime. now () } " )
1 import random 2 import csv 3 4 def simular_epidemia ( poblacion , dias , probabilidad_contagio , archivo_salida ) : 5 salud = [ ’ Sano ’] * poblacion 6 salud [0] = ’ Infectado ’ # Paciente cero 7 8 resultados = [] 9 10 for dia in range ( dias ) : 11 nuevos_infectados = 0 12 13 for i in range ( poblacion ) : 14 if salud [ i ] == ’ Infectado ’: 15 for j in range ( poblacion ) : 16 if salud [ j ] == ’ Sano ’ and random. random () < probabilidad_contagio : 17 salud [ j ] = ’ Infectado ’ 18 nuevos_infectados += 1 19 20 infectados = salud. count ( ’ Infectado ’) 21 resultados. append ({ 22 ’ dia ’: dia + 1 , 23 ’ infectados ’: infectados , 24 ’ nuevos ’: nuevos_infectados , 25 ’ sanos ’: poblacion - infectados 26 }) 27 28 with open ( archivo_salida , ’w ’ , newline = ’ ’) as f : 29 writer = csv. DictWriter (f , fieldnames = resultados [0]. keys () ) 30 writer. writeheader () 31 writer. writerows ( resultados )
1 import itertools 2 3 def generar_tabla_verdad ( variables , expresion ) : 4 combinaciones = list ( itertools. product ([ False , True ] , repeat = len ( variables ) ) ) 5 6 tabla = [] 7 for combinacion in combinaciones : 8 contexto = dict ( zip ( variables , combinacion ) )