Skip to content

Commit 231322f

Browse files
authored
Merge pull request mouredev#7741 from davidrguez98/main
mouredev#38 - Python
2 parents 1e4aedd + a5070ba commit 231322f

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
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

Comments
 (0)