1+ """ /*
2+ * EJERCICIO:
3+ * He presentado mi proyecto más importante del año: mouredev pro.
4+ * Un campus para la comunidad, que lanzaré en octubre, donde estudiar
5+ * programación de una manera diferente.
6+ * Cualquier persona suscrita a la newsletter de https://mouredev.pro
7+ * accederá a sorteos mensuales de suscripciones, regalos y descuentos.
8+ *
9+ * Desarrolla un programa que lea los registros de un fichero .csv y
10+ * seleccione de manera aleatoria diferentes ganadores.
11+ * Requisitos:
12+ * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo"
13+ * o "inactivo" (y datos ficticios).
14+ * Ejemplo: 1 | [email protected] | activo 15+ * 2 | [email protected] | inactivo 16+ * (El .csv no debe subirse como parte de la corrección)
17+ * 2. Recupera los datos desde el programa y selecciona email aleatorios.
18+ * Acciones:
19+ * 1. Accede al fichero .csv y selecciona de manera aleatoria un email
20+ * ganador de una suscripción, otro ganador de un descuento y un último
21+ * ganador de un libro (sólo si tiene status "activo" y no está repetido).
22+ * 2. Muestra los emails ganadores y su id.
23+ * 3. Ten en cuenta que la primera fila (con el nombre de las columnas)
24+ * no debe tenerse en cuenta.
25+ */ """
26+
27+ #EJERCICIO
28+
29+ import os
30+ import csv
31+ import random
32+
33+ def read_csv_data () -> list :
34+
35+ file_dir = os .path .dirname (os .path .abspath (__file__ ))
36+ csv_file = f"{ file_dir } /sub.csv"
37+
38+ data = []
39+
40+ with open (csv_file , "r" ) as file :
41+ reader = csv .DictReader (file )
42+ for row in reader :
43+ if row ["status" ] == "activo" :
44+ data .append (row )
45+ return data
46+
47+ def select_winners (data : list ) -> list :
48+
49+ if len (data ) < 3 :
50+ raise ValueError ("El número de elementos debe de ser mínimo 3." )
51+
52+ return random .sample (data , 3 )
53+
54+ def display_winners (winners ):
55+ prizes = ["Suscripción" , "Descuento" , "Libro" ]
56+ for winner , prizes in zip (winners , prizes ):
57+ print (f"{ prizes } : { winner ["email" ]} (ID: { winner ["id" ]} )" )
58+
59+ try :
60+ data = read_csv_data ()
61+ winners = select_winners (data )
62+ display_winners (winners )
63+ except Exception as e :
64+ print (e )
0 commit comments