Tarea 1¶
Enunciado¶
Se debe desarrollar un programa en Python que simule el sistema de conteo de votos para una elección estudiantil con 5 candidatos.
El programa debe gestionar dos listas predefinidas: una con los nombres de los candidatos y otra con sus votos iniciales. A partir de estas listas, el usuario podrá interactuar con el sistema a través de un menú de opciones.
Datos iniciales¶
El programa debe iniciar con los siguientes datos predefinidos:
| Candidato | Votos iniciales |
|---|---|
| Valeria | 45 |
| Andrés | 38 |
| Camila | 52 |
| Diego | 29 |
| Fernanda | 41 |
Menú principal¶
Al iniciar, el programa debe mostrar el siguiente menú:
=== Sistema de Votación Estudiantil ===
1. Consultar votos de un candidato
2. Registrar votos a un candidato
3. Ver estadísticas generales
4. Ver candidato ganador
El usuario elige una opción digitando su número. Si digita una opción inválida, el programa debe mostrar un mensaje de error.
Descripción¶
Opción 1 — Consultar votos de un candidato¶
- Solicitar el nombre del candidato a consultar.
- Si el candidato existe, mostrar su nombre, la cantidad de votos y una clasificación según el siguiente criterio:
- 50 votos o más:
Candidato destacado - Entre 35 y 49 votos:
Candidato competitivo - Menos de 35 votos:
Candidato con pocos votos - Si el candidato no existe, mostrar un mensaje indicándolo.
Opción 2 — Registrar votos a un candidato¶
- Solicitar el nombre del candidato.
- Si el candidato existe, solicitar la cantidad de votos a agregar.
- Los votos ingresados deben sumarse a los votos actuales del candidato.
- Mostrar un mensaje de confirmación con el nuevo total.
- Si el candidato no existe, mostrar un mensaje indicándolo.
Votos válidos
La cantidad de votos a registrar debe ser un número entero mayor a cero. Si se ingresa un valor inválido, mostrar un mensaje de error.
Opción 3 — Ver estadísticas generales¶
Mostrar las siguientes estadísticas calculadas a partir de la lista de votos:
- Total de votos registrados
- Promedio de votos por candidato
- Candidato con más votos
- Candidato con menos votos
Opción 4 — Ver candidato ganador¶
- Determinar quién es el candidato con mayor cantidad de votos.
- Mostrar su nombre y su cantidad de votos.
- Opcional (+5 pts): Si hay empate en el primer lugar, mostrar ambos nombres.
Requisitos técnicos¶
- Utilizar dos listas paralelas: una para nombres y otra para votos.
- Utilizar el operador
inpara verificar si un candidato existe. - Utilizar
index()para relacionar ambas listas. - Utilizar
sum(),min(),max()ylen()para las estadísticas. - Utilizar f-strings para todos los mensajes de salida.
- Normalizar la entrada del usuario con
.strip()y.title().
Ejemplos de ejecución esperada¶
=== Sistema de Votación Estudiantil ===
1. Consultar votos de un candidato
2. Registrar votos a un candidato
3. Ver estadísticas generales
4. Ver candidato ganador
Elija una opción: 2
Digite el nombre del candidato: diego
Digite la cantidad de votos a agregar: 10
Votos registrados correctamente.
Diego ahora tiene 39 votos.
=== Sistema de Votación Estudiantil ===
1. Consultar votos de un candidato
2. Registrar votos a un candidato
3. Ver estadísticas generales
4. Ver candidato ganador
Elija una opción: 3
--- Estadísticas generales ---
Total de votos: 205
Promedio por candidato: 41.0
Candidato con más votos: Camila (52)
Candidato con menos votos: Diego (29)
Rúbrica de evaluación¶
| Criterio | Puntos |
|---|---|
| Listas declaradas correctamente con datos predefinidos | 10 |
| Menú funcional con manejo de opción inválida | 15 |
| Opción 1: consulta y clasificación correcta | 20 |
| Opción 2: registro y actualización de votos | 20 |
| Opción 3: estadísticas calculadas correctamente | 20 |
| Opción 4: candidato ganador identificado correctamente | 15 |
| Total | 100 |
Solución¶
candidatos = ["Valeria", "Andrés", "Camila", "Diego", "Fernanda"]
votos = [45, 38, 52, 29, 41]
print("=== Sistema de Votación Estudiantil ===")
print("1. Consultar votos de un candidato")
print("2. Registrar votos a un candidato")
print("3. Ver estadísticas generales")
print("4. Ver candidato ganador")
opcion = input("\nElija una opción: ").strip()
if opcion == "1":
nombre = input("Digite el nombre del candidato: ").strip().title()
if nombre in candidatos:
indice = candidatos.index(nombre)
votos_candidato = votos[indice]
if votos_candidato >= 50:
clasificacion = "Candidato destacado"
elif votos_candidato >= 35:
clasificacion = "Candidato competitivo"
else:
clasificacion = "Candidato con pocos votos"
print(f"\nCandidato: {nombre}")
print(f"Votos: {votos_candidato}")
print(f"Clasificación: {clasificacion}")
else:
print(f"\nEl candidato '{nombre}' no está registrado.")
elif opcion == "2":
nombre = input("Digite el nombre del candidato: ").strip().title()
if nombre in candidatos:
try:
nuevos_votos = int(input("Digite la cantidad de votos a agregar: "))
if nuevos_votos <= 0:
print("Error: la cantidad de votos debe ser mayor a cero.")
else:
indice = candidatos.index(nombre)
votos[indice] += nuevos_votos
print(f"\nVotos registrados correctamente.")
print(f"{nombre} ahora tiene {votos[indice]} votos.")
except ValueError:
print("Error: debe ingresar un número entero válido.")
else:
print(f"\nEl candidato '{nombre}' no está registrado.")
elif opcion == "3":
total = sum(votos)
promedio = total / len(votos)
indice_max = votos.index(max(votos))
indice_min = votos.index(min(votos))
print("\n--- Estadísticas generales ---")
print(f"Total de votos: {total}")
print(f"Promedio por candidato: {promedio:.1f}")
print(f"Candidato con más votos: {candidatos[indice_max]} ({votos[indice_max]})")
print(f"Candidato con menos votos: {candidatos[indice_min]} ({votos[indice_min]})")
elif opcion == "4":
max_votos = max(votos)
ganadores = []
for i in range(len(candidatos)):
if votos[i] == max_votos:
ganadores.append(candidatos[i])
if len(ganadores) == 1:
print(f"\nEl candidato ganador es: {ganadores[0]} con {max_votos} votos.")
else:
print(f"\nHay empate con {max_votos} votos entre:")
for ganador in ganadores:
print(f" - {ganador}")
else:
print("\nOpción inválida. Debe digitar un número del 1 al 4.")