Saltar a contenido

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

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 in para verificar si un candidato existe.
  • Utilizar index() para relacionar ambas listas.
  • Utilizar sum(), min(), max() y len() 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: 1
Digite el nombre del candidato: camila

Candidato: Camila
Votos: 52
Clasificación: Candidato destacado
=== 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)
=== 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: 4

El candidato ganador es: Camila con 52 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: 7

Opción inválida. Debe digitar un número del 1 al 4.

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

solucion.py
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.")