Python - Generadores de Números & Caracteres
################################################################
#26 ejemplos de generadores en Python que devuelven números o caracteres.
#1. Generador que devuelve números pares:
def pares(n):
for i in range(n):
if i % 2 == 0:
yield i
for num in pares(10):
print(num)
#2. Generador que devuelve números impares:
def impares(n):
for i in range(n):
if i % 2 != 0:
yield i
for num in impares(10):
print(num)
#3. Generador que devuelve números primos:
def es_primo(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def primos(n):
i = 2
while True:
if es_primo(i):
yield i
i += 1
if i > n:
break
for num in primos(20):
print(num)
#4. Genere una lista de números primos hasta un número dado:
def primes_up_to(n):
primes = []
for i in range(2, n+1):
if is_prime(i):
primes.append(i)
return primes
#5. Generador que devuelve números aleatorios:
import random
def aleatorios(n):
for i in range(n):
yield random.randint(1, 100)
for num in aleatorios(10):
print(num)
#6. Generador que devuelve números en orden inverso:
def inverso(n):
for i in range(n, 0, -1):
yield i
for num in inverso(10):
print(num)
#7. Generador que devuelve números de Fibonacci:
def fibonacci(n):
a, b = 0, 1
for i in range(n):
yield a
a, b = b, a + b
for num in fibonacci(10):
print(num)
#8. Generador que devuelve números triangulares:
def triangulares(n):
for i in range(1, n + 1):
yield i * (i + 1) // 2
for num in triangulares(10):
print(num)
#9. Generador que devuelve números cuadrados:
def cuadrados(n):
for i in range(1, n + 1):
yield i ** 2
for num in cuadrados(10):
print(num)
#10. Generador que devuelve números cúbicos:
def cubicos(n):
for i in range(1, n + 1):
yield i ** 3
for num in cubicos(10):
print(num)
#11. Generador que devuelve números hexadecimales:
def hexadecimales(n):
for i in range(n):
yield hex(i)
for num in hexadecimales(10):
print(num)
#12. Generador que devuelve números romanos:
def romanos(n):
romanos = {1: 'I', 4: 'IV', 5: 'V', 9: 'IX', 10: 'X', 40: 'XL', 50: 'L', 90: 'XC', 100: 'C', 400: 'CD', 500: 'D', 900: 'CM', 1000: 'M'}
for i in sorted(romanos.keys(), reverse=True):
while n >= i:
yield romanos[i]
n -= i
for num in romanos(10):
print(num)
#13. Generador que devuelve letras del alfabeto:
def alfabeto(n):
for i in range(n):
yield chr(i + 65)
for letra in alfabeto(10):
print(letra)
#14. Generador que devuelve letras minúsculas del alfabeto:
def alfabeto_min(n):
for i in range(n):
yield chr(i + 97)
for letra in alfabeto_min(10):
print(letra)
#15. Generador que devuelve letras aleatorias:
import random
def letras_aleatorias(n):
for i in range(n):
yield chr(random.randint(65, 90))
for letra in letras_aleatorias(10):
print(letra)
#16. Generador que devuelve palabras aleatorias:
import random
def palabras_aleatorias(n):
palabras = ['hola', 'adios', 'bienvenido', 'chau', 'hasta luego', 'hasta pronto']
for in range(n):
yield random.choice(palabras)
for palabra in palabras_aleatorias(10):
print(palabra)
#17. Generador que devuelve nombres aleatorios:
import random
nombres = ['Juan', 'Pedro', 'María', 'Ana', 'Luis', 'Carlos', 'Lucía', 'Sofía', 'Miguel', 'Jorge']
def nombres_aleatorios(n):
for i in range(n):
yield random.choice(nombres)
for nombre in nombres_aleatorios(10):
print(nombre)
#18. Generador que devuelve apellidos aleatorios:
import random
apellidos = ['García', 'Martínez', 'López', 'González', 'Rodríguez', 'Pérez', 'Sánchez', 'Romero', 'Fernández', 'Ruiz']
def apellidos_aleatorios(n):
for i in range(n):
yield random.choice(apellidos)
for apellido in apellidos_aleatorios(10):
print(apellido)
#19. Generador que devuelve fechas aleatorias:
import random
import datetime
def fechas_aleatorias(n):
for i in range(n):
year = random.randint(1900, 2023)
month = random.randint(1, 12)
day = random.randint(1, 28)
fecha = datetime.date(year, month, day)
yield fecha.strftime('%d/%m/%Y')
for fecha in fechas_aleatorias(10):
print(fecha)
#20. Generador que devuelve horas aleatorias:
import random
import datetime
def horas_aleatorias(n):
for i in range(n):
hour = random.randint(0, 23)
minute = random.randint(0, 59)
second = random.randint(0, 59)
hora = datetime.time(hour, minute, second)
yield hora.strftime('%H:%M:%S')
for hora in horas_aleatorias(10):
print(hora)
#21. Generador que devuelve direcciones aleatorias:
import random
calles = ['Av. Siempreviva', 'Calle Falsa', 'Av. Corrientes', 'Av. Santa Fe', 'Calle Florida', 'Av. 9 de Julio']
numeros = [100, 200, 300, 400, 500, 600, 700, 800, 900]
ciudades = ['Buenos Aires', 'Córdoba', 'Rosario', 'Mendoza', 'La Plata', 'Mar del Plata']
def direcciones_aleatorias(n):
for i in range(n):
calle = random.choice(calles)
numero = random.choice(numeros)
ciudad = random.choice(ciudades)
direccion = f'{calle} {numero}, {ciudad}'
yield direccion
for direccion in direcciones_aleatorias(10):
print(direccion)
#22. Generador que devuelve números de teléfono aleatorios:
import random
def telefonos_aleatorios(n):
for i in range(n):
telefono = f'({random.randint(11, 99)}) {random.randint(1000, 9999)}-{random.randint(1000, 9999)}'
yield telefono
for telefono in telefonos_aleatorios(10):
print(telefono)
#23. Generador que devuelve correos electrónicos aleatorios:
import random
nombres = ['juan', 'pedro', 'maria', 'ana', 'luis', 'carlos', 'lucia', 'sofia', 'miguel', 'jorge']
apellidos = ['garcia', 'martinez', 'lopez', 'gonzalez', 'rodriguez', 'perez', 'sanchez', 'romero', 'fernandez', 'ruiz']
dominios = ['gmail.com', 'hotmail.com', 'yahoo.com', 'outlook.com', 'live.com']
def correos_aleatorios(n):
for i in range(n):
nombre = random.choice(nombres)
apellido = random.choice(apellidos)
dominio = random.choice(dominios)
correo = f'{nombre}.{apellido}@{dominio}'
yield correo
for correo in correos_aleatorios(10):
print(correo)
#24. Generador que devuelve contrasenas aleatorias:
import random
import string
def contrasenas_aleatorias(n, longitud):
for i in range(n):
caracteres = string.ascii_letters + string.digits + string.punctuation
contrasena = ''.join(random.choice(caracteres) for i in range(longitud))
yield contrasena
for contraseña in contrasenas_aleatorias(10, 8):
print(contrasena)
#25. Generador Lineal
def generador(start=0, step=1, stop=10):
n = start
while n <= stop:
yield n
n += step
for x in generador(10, 2.5, 20):
print(x)
#26. Generador Cuadrado
generador = (x ** 2 for x in range(4))
for x in generador:
print(x)