Saltar al contenido principal

Bloque 107. Programas con control de flujo

Contenidos

Aquí no hay contenido teórico nuevo: se busca combinar lo aprendido (condicionales, bucles y funciones) en programas completos.

Estos son programas completos de principio a fin, no ejercicios sueltos. Organiza cada uno en funciones. Evita todo el programa dentro de un único bloque de código.

Ejercicio 1. Adivina los dígitos

Programa una versión numérica del juego clásico del Ahorcado: en vez de una palabra, un número secreto de 4 cifras fijo en el código (por ejemplo, numero_secreto = 4271).

  • El jugador dispone de 6 intentos para ir adivinando, uno a uno, cada uno de los 4 dígitos (por ejemplo: "dígito 1 (millares): ¿cuál es?").
  • Para extraer cada dígito del número secreto usa aritmética con // y % (por ejemplo, (numero // 1000) % 10 te da el dígito de millares).
  • Tras cada intento, muestra el mensaje:
    • "¡Correcto! Llevas <n> dígitos acertados." si el dígito propuesto es correcto.
    • "Incorrecto. Te quedan <n> intentos." si no lo es.
  • El juego termina:
    • En victoria (los 4 dígitos acertados), mostrando el mensaje "¡Has ganado!".
    • En derrota (6 fallos), mostrando el mensaje "Has perdido. El número secreto era <numero_secreto>.".

💾 Haz un commit al terminar el ejercicio.

Ejercicio 2. Piedra, papel, tijera a mejor de 5

Programa una partida de piedra, papel o tijera contra la máquina que se juega a mejor de 5 rondas (gana quien primero llegue a 3 victorias). Muestra el marcador tras cada ronda y, al terminar, el mensaje "Has ganado la partida" o "Ha ganado la máquina", según corresponda.

Usa random para la jugada de la máquina.

💾 Haz un commit al terminar el ejercicio.

Ejercicio 3. Adivina el número con pistas

Programa el clásico "adivina el número": genera un número secreto aleatorio entre 1 y 100 y deja que el jugador vaya proponiendo números, indicando tras cada intento si el número secreto es "más alto" o "más bajo", hasta que acierte.

Al final, muestra cuántos intentos ha necesitado. Extrae la generación del número y la comprobación de cada intento a funciones propias.

💾 Haz un commit al terminar el ejercicio.

Ejercicio 4. Combate por turnos

Programa un combate simplificado entre dos personajes, jugador y enemigo, cada uno con 20 puntos de vida. En cada turno, el jugador ataca primero (resta al enemigo un daño aleatorio entre 3 y 8) y, si el enemigo sigue con vida, contraataca (resta al jugador un daño aleatorio entre 2 y 6).

Muestra la vida de ambos tras cada turno y repite hasta que uno de los dos llegue a 0 o menos, mostrando entonces el mensaje "Ha ganado el jugador" o "Ha ganado el enemigo", según corresponda.

Extrae el ataque a una función atacar(dano_min, dano_max) que devuelva el daño causado para no repetir la misma lógica dos veces.

💾 Haz un commit al terminar el ejercicio.

Ejercicio 5. Concurso de preguntas

Programa un concurso con 3 preguntas de cultura general fijas en el código (cada una con su respuesta correcta guardada aparte, por ejemplo respuesta_1 = "Santiago").

Para cada pregunta, muéstrala indicando que se responda en minúsculas, lee la respuesta del usuario y compárala con la correcta. Lleva la cuenta de aciertos con una variable acumuladora y, al final, muestra el mensaje:

  • "Sigue practicando" para 0 aciertos.
  • "Flojo, pero algo es algo" para 1 acierto.
  • "Nada mal" para 2 aciertos.
  • "¡Perfecto!" para 3 aciertos.

💾 Haz un commit al terminar el ejercicio.

Ejercicio 6. Simulador de caja de supermercado

Programa un simulador de caja con un menú en bucle con tres opciones:

a) Añadir producto
c) Cerrar ticket
s) Salir

Las opciones:

  • Añadir un producto debe pedir nombre y precio. A continuación, debe sumar el precio al ticket actual, mostrando el total acumulado y el número de artículos.
  • Cerrar el ticket debe mostrar el total final y reiniciar los acumuladores a cero.
  • Salir termina el programa.

Organiza el código, por lo menos, en las funciones anadir_producto y cerrar_ticket. Con las herramientas que tienes hasta ahora te bastan variables acumuladoras (total y número de artículos). Cuando veamos listas más adelante, podrás ampliarlo para recordar también el nombre de cada producto del ticket.

💾 Haz un commit al terminar el ejercicio.

Repaso

Al terminar los ejercicios, debes tener claro los siguientes conceptos (todos ya vistos en bloques anteriores):

  • Condicionales (if/elif/else)
  • Bucles (for, while) y sentencias de salto (break, continue)
  • Definición y llamada de funciones, parámetros y return
  • Módulo random (random.randint(), random.choice())
  • Diseño de un programa dividiéndolo en funciones antes de escribir código