0% encontró este documento útil (0 votos)
18 vistas7 páginas

Ejercicios Resueltos de Python y Archivos

Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
18 vistas7 páginas

Ejercicios Resueltos de Python y Archivos

Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Universidad – Soluciones: Módulo 4 (Misceláneos)

60 ejercicios resueltos (10 por sección) con explicación línea por línea.

Sección 1 – Generadores, iteradores y cierres


1) Generador de pares hasta un límite
def pares_hasta(n):
for x in range(0, n + 1, 2): # avanza de 2 en 2
yield x # produce cada par

2) Primeros n múltiplos de 3
def multiplos3(n):
for i in range(1, n + 1):
yield 3 * i

3) Fibonacci con yield hasta un máximo


def fibonacci_hasta(m):
a, b = 0, 1 # semillas
while a <= m: # corta por máximo
yield a # entrega el siguiente
a, b = b, a + b # avanza la pareja

4) Generador de letras de una palabra


def letras(palabra):
for ch in palabra:
yield ch

5) Comprensión: cuadrados de impares (1..20)


cuadrados_impares = [x*x for x in range(1, 21) if x % 2]

6) lambda + map: doble


doble = lambda x: x * 2
resultado = list(map(doble, [1,2,3,4]))

7) filter + lambda: múltiplos de 5


multiplos5 = list(filter(lambda x: x % 5 == 0, range(1,51)))

8) Palabras > 4 letras


frase = "programar en python es divertido y potente"
palabras_largas = [p for p in [Link]() if len(p) > 4]

9) Closure contador
def contador():
c = 0
def inc():
nonlocal c
c += 1
return c
return inc

10) Closure de interés compuesto


def tasa_interes(tasa_inicial=0.05):
tasa = tasa_inicial
def calc(monto, años):
return monto * (1 + tasa) ** años
def set_tasa(nueva):
nonlocal tasa
tasa = nueva
return calc, set_tasa
Sección 2 – Archivos (flujos, procesamiento, diagnóstico)
1) Contar líneas
with open("[Link]", "r", encoding="utf-8") as f:
lineas = sum(1 for _ in f)
print(lineas)

2) Filtrar líneas con 'Python'


with open("[Link]", encoding="utf-8") as f:
for linea in f:
if "Python" in linea:
print([Link]())

3) Copiar archivo (binario)


with open("[Link]", "rb") as a, open("[Link]", "wb") as b:
[Link]([Link]())

4) Verificar existencia
from pathlib import Path
p = Path("[Link]")
print("Existe:", [Link]())

5) CSV: primera columna


import csv
with open("[Link]", newline="", encoding="utf-8") as f:
for fila in [Link](f):
print(fila[0])

6) Escribir 1..100
with open("[Link]", "w", encoding="utf-8") as f:
for i in range(1, 101):
[Link](f"{i}\n")

7) Contar caracteres distintos


from collections import Counter
with open("[Link]", encoding="utf-8") as f:
c = Counter([Link]())
print(len(c))

8) Manejar FileNotFoundError
try:
open("no_existe.txt").read()
except FileNotFoundError as e:
open("[Link]","a").write(str(e)+"\n")

9) Tamaño archivo binario


data = open("[Link]","rb").read()
print("Bytes:", len(data))

10) Logging de excepciones


import logging
[Link](filename="[Link]", level=[Link])
try:
1/0
except Exception:
[Link]("Error calculando")
Sección 3 – Trabajando con archivos reales
1) Total de ventas (CSV 'monto')
import csv, decimal
total = [Link]("0")
with open("[Link]", newline="", encoding="utf-8") as f:
for fila in [Link](f):
total += [Link](fila["monto"])
print(total)

2) Aprobados >= 51
import csv
with open("[Link]", newline="", encoding="utf-8") as f:
for fila in [Link](f):
if int(fila["nota"]) >= 51:
print(fila["nombre"])

3) Quitar líneas en blanco


with open("[Link]", encoding="utf-8") as f, open("[Link]","w",encoding="utf-8") as g:
for linea in f:
if [Link]():
[Link](linea)

4) Texto a mayúsculas
open("[Link]","w",encoding="utf-8").write(open("[Link]",encoding="utf-8").read().upper())

5) Productos con stock < 10


import csv
with open("[Link]", newline="", encoding="utf-8") as f:
for fila in [Link](f):
if int(fila["stock"]) < 10:
print(fila["nombre"], fila["stock"])

6) Ordenar líneas alfabéticamente


with open("[Link]", encoding="utf-8") as f:
lineas = sorted([Link]() for l in f if [Link]())
open("[Link]","w",encoding="utf-8").write("\n".join(lineas))

7) JSON: mostrar claves


import json
datos = [Link](open("[Link]", encoding="utf-8"))
print(list([Link]()))

8) Fechas a DD/MM/YYYY
from datetime import datetime
salida = []
for linea in open("[Link]"):
d = [Link]([Link]())
[Link]([Link]("%d/%m/%Y"))
open("fechas_fmt.txt","w").write("\n".join(salida))

9) Promedio de números
nums = [float(x) for x in open("[Link]") if [Link]()]
prom = sum(nums)/len(nums) if nums else 0
print(prom)

10) Combinar archivos *.txt de carpeta


import glob
contenido = [open(r,encoding="utf-8").read() for r in [Link]("partes/*.txt")]
open("[Link]","w",encoding="utf-8").write("\n".join(contenido))
Sección 4 – Módulo os
1) Directorio actual
import os
print([Link]())

2) Listar contenidos
import os
for nombre in [Link]("."):
print(nombre)

3) Crear carpeta backup


import os
[Link]("backup", exist_ok=True)

4) Ruta absoluta y existencia


import os
ruta = "[Link]"
print([Link](ruta), [Link](ruta))

5) Borrar archivo indicado


import os
ruta = input("Archivo a borrar: ")
if [Link](ruta):
[Link](ruta)

6) Renombrar .txt a .bak


import os, glob
for r in [Link]("*.txt"):
[Link](r, r[:-4] + ".bak")

7) Tamaños de archivos
import os, glob
for r in [Link]("*"):
if [Link](r):
print(r, [Link](r))

8) ¿Archivo o directorio?
import os
ruta = input("Ruta: ")
print("Archivo:", [Link](ruta), "Directorio:", [Link](ruta))

9) Estructura año/mes/día
import os
estructura = [Link]("2025","09","19")
[Link](estructura, exist_ok=True)

10) Ejecutar comando


import os
print([Link]("echo Hola").read())
Sección 5 – Módulo datetime
1) Ahora
from datetime import datetime
print([Link]())

2) Días a Año Nuevo


from datetime import datetime
hoy = [Link]()
fin = datetime([Link] + 1, 1, 1)
print((fin - hoy).days)

3) Texto ISO a datetime


from datetime import datetime
print([Link]("2025-09-19"))

4) Edad desde nacimiento


from datetime import date
nac = date(1990, 8, 1)
hoy = [Link]()
edad = [Link] - [Link] - (([Link], [Link]) < ([Link], [Link]))
print(edad)

5) Día de la semana de una fecha


from datetime import datetime
d = datetime(2025, 9, 19)
print([Link]("%A"))

6) Sumar 30 días
from datetime import datetime, timedelta
print([Link]() + timedelta(days=30))

7) Diferencia en días
from datetime import date
a = date(2025,1,1); b = date(2025,9,19)
print((b - a).days)

8) Formato DD/MM/YYYY HH:MM


from datetime import datetime
print([Link]().strftime("%d/%m/%Y %H:%M"))

9) Listar todas las fechas de un mes


from datetime import date, timedelta
año, mes = 2025, 9
d = date(año, mes, 1)
while [Link] == mes:
print(d)
d += timedelta(days=1)

10) Validar fecha


from datetime import datetime
def valida(txt):
try:
[Link](txt, "%d/%m/%Y"); return True
except ValueError:
return False
print(valida("31/02/2025"))
Sección 6 – Módulo calendar
1) Calendario del año actual
import calendar, datetime
print([Link]().formatyear([Link]().year))

2) Calendario mensual
import calendar
print([Link](2025, 9))

3) Día de tu cumple en 2000


import calendar
# ejemplo: 1 de agosto
print([Link](2000, 8, 1)) # 0=Lunes ... 6=Domingo

4) Año bisiesto
import calendar
print([Link](2024))

5) Contar lunes en un año


import calendar
año = 2025
lunes = sum(1 for m in range(1,13) for w in [Link](año,m) if w[0]!=0)
print(lunes)

6) Primer viernes de cada mes


import calendar
año = 2025
for mes in range(1,13):
for semana in [Link](año, mes):
if semana[[Link]] != 0:
print(año, mes, semana[[Link]]); break

7) Festivos (lista fija)


festivos = {"01/01", "01/05", "25/12"}
print(", ".join(sorted(festivos)))

8) Día de la semana de una fecha


import calendar
año, mes, dia = 2025, 9, 19
print(calendar.day_name[[Link](año, mes, dia)])

9) Domingos de un mes
import calendar
año, mes = 2025, 9
for semana in [Link](año, mes):
d = semana[[Link]]
if d != 0: print(d)

10) Navidad próximos 10 años


import calendar
for a in range(2025, 2025+10):
w = [Link](a, 12, 25)
print(a, calendar.day_name[w])

También podría gustarte