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

Soluciones Python Modulo4

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)
51 vistas7 páginas

Soluciones Python Modulo4

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 frase.split() 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("datos.txt", "r", encoding="utf-8") as f:
lineas = sum(1 for _ in f)
print(lineas)

2) Filtrar líneas con 'Python'


with open("datos.txt", encoding="utf-8") as f:
for linea in f:
if "Python" in linea:
print(linea.rstrip())

3) Copiar archivo (binario)


with open("origen.txt", "rb") as a, open("copia.txt", "wb") as b:
b.write(a.read())

4) Verificar existencia
from pathlib import Path
p = Path("datos.txt")
print("Existe:", p.exists())

5) CSV: primera columna


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

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

7) Contar caracteres distintos


from collections import Counter
with open("datos.txt", encoding="utf-8") as f:
c = Counter(f.read())
print(len(c))

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

9) Tamaño archivo binario


data = open("imagen.bin","rb").read()
print("Bytes:", len(data))

10) Logging de excepciones


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

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

3) Quitar líneas en blanco


with open("entrada.txt", encoding="utf-8") as f, open("salida.txt","w",encoding="utf-8") as g:
for linea in f:
if linea.strip():
g.write(linea)

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

5) Productos con stock < 10


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

6) Ordenar líneas alfabéticamente


with open("texto.txt", encoding="utf-8") as f:
lineas = sorted(l.strip() for l in f if l.strip())
open("ordenado.txt","w",encoding="utf-8").write("\n".join(lineas))

7) JSON: mostrar claves


import json
datos = json.load(open("datos.json", encoding="utf-8"))
print(list(datos.keys()))

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

9) Promedio de números
nums = [float(x) for x in open("numeros.txt") if x.strip()]
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 glob.glob("partes/*.txt")]
open("todo.txt","w",encoding="utf-8").write("\n".join(contenido))
Sección 4 – Módulo os
1) Directorio actual
import os
print(os.getcwd())

2) Listar contenidos
import os
for nombre in os.listdir("."):
print(nombre)

3) Crear carpeta backup


import os
os.makedirs("backup", exist_ok=True)

4) Ruta absoluta y existencia


import os
ruta = "datos.txt"
print(os.path.exists(ruta), os.path.abspath(ruta))

5) Borrar archivo indicado


import os
ruta = input("Archivo a borrar: ")
if os.path.isfile(ruta):
os.remove(ruta)

6) Renombrar .txt a .bak


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

7) Tamaños de archivos
import os, glob
for r in glob.glob("*"):
if os.path.isfile(r):
print(r, os.path.getsize(r))

8) ¿Archivo o directorio?
import os
ruta = input("Ruta: ")
print("Archivo:", os.path.isfile(ruta), "Directorio:", os.path.isdir(ruta))

9) Estructura año/mes/día
import os
estructura = os.path.join("2025","09","19")
os.makedirs(estructura, exist_ok=True)

10) Ejecutar comando


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

2) Días a Año Nuevo


from datetime import datetime
hoy = datetime.now()
fin = datetime(hoy.year + 1, 1, 1)
print((fin - hoy).days)

3) Texto ISO a datetime


from datetime import datetime
print(datetime.fromisoformat("2025-09-19"))

4) Edad desde nacimiento


from datetime import date
nac = date(1990, 8, 1)
hoy = date.today()
edad = hoy.year - nac.year - ((hoy.month, hoy.day) < (nac.month, nac.day))
print(edad)

5) Día de la semana de una fecha


from datetime import datetime
d = datetime(2025, 9, 19)
print(d.strftime("%A"))

6) Sumar 30 días
from datetime import datetime, timedelta
print(datetime.now() + 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(datetime.now().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 d.month == mes:
print(d)
d += timedelta(days=1)

10) Validar fecha


from datetime import datetime
def valida(txt):
try:
datetime.strptime(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(calendar.TextCalendar().formatyear(datetime.datetime.now().year))

2) Calendario mensual
import calendar
print(calendar.month(2025, 9))

3) Día de tu cumple en 2000


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

4) Año bisiesto
import calendar
print(calendar.isleap(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 calendar.monthcalendar(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 calendar.monthcalendar(año, mes):
if semana[calendar.FRIDAY] != 0:
print(año, mes, semana[calendar.FRIDAY]); 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[calendar.weekday(año, mes, dia)])

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

10) Navidad próximos 10 años


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

También podría gustarte