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