SlideShare uma empresa Scribd logo
1 de 8
Baixar para ler offline
TECNOLOGÍA DE LA INFORMACIÓN           CURSO: 1 BACH




Python (Práctica 4)
Objetivo
Se trata de abordar un programa algo más serio, en el que las entradas del usuario in-
fluyen en el curso de la ejecución. Se usan, también, procedimientos de manipulación de
cadenas de texto.

Programa 6: Ahorcado
La cosa se complica. El siguiente es el clásico juego del ahorcado. Pero fíjate que un
buen programador debe escribir su código de forma que sea ampliable en el futuro. De
ahí el uso intensivo de las funciones.


# -*- coding: utf-8 -*-

import random

DIBUJOS = [’’’
    +------+
    |      |
    |      |
           |
           |
           |
           |
           |
           |
           |
           |
==============’’’, ’’’
    +------+
    |      |
    |      |
    O      |
           |
           |
           |
           |
           |
           |
           |
==============’’’, ’’’
    +------+
    |      |
    |      |
    O      |
    |      |
    |      |
    |      |
           |
           |
==============’’’, ’’’
    +------+
    |      |
    |      |
    O      |
   /|      |
  / |      |
    |      |
           |
TECNOLOGÍA DE LA INFORMACIÓN           CURSO: 1 BACH
             |
             |
             |
==============’’’, ’’’
      +------+
      |      |
      |      |
      O      |
    /|      |
  / |       |
      |      |
             |
             |
             |
             |
==============’’’, ’’’
      +------+
      |      |
      |      |
      O      |
    /|      |
  / |       |
      |      |
    /        |
  /          |
             |
             |
==============’’’, ’’’
      +------+
      |      |
      |      |
      O      |
    /|      |
  / |       |
      |      |
    /       |
  /         |
             |
             |
==============’’’]

palabras = ’hormiga perro canario oso abeja caballo camello gato tigre mofeta cobra ’ + 
’chica coyote ojo cuervo mano perro mono pato cuervo coche pez zorro rana pastel ’ + 
’bizcocho tomate iguana chacal koala leche agua mago burro amigo miel gorila rata ’ + 
’boca mula red fuerza lechuza tren metro loro pigmeo python camino conejo charco ’ + 
’buitre rinoceronte ballena medusa cordero ternera estrella nube nariz vientre ’ + 
’piedra pantano cisne trucha avispa caballero verdad inglaterra tortuga tortilla ’ + 
’placton huesca vampiro normando vikingo cebra’.split()

def palabraAleatoria(listaPalabras):
    # Esta función devuelve una palabra aleatoria entre un conjunto de palabras.
    cual = random.randint(0, len(listaPalabras) - 1)
    return listaPalabras[cual]

def mostrarAhorcado(DIBUJOS, letrasMalas, letrasBuenas, palabraSecreta):
    print DIBUJOS[len(letrasMalas)]
    print
    print ’Errores:’,
    for letra in letrasMalas:
        print letra,
    print
    huecos = ’_’ * len(palabraSecreta)
    for i in range(len(palabraSecreta)): # reemplazar huecos con letras acertadas
        if palabraSecreta[i] in letrasBuenas:
            huecos = huecos[:i] + palabraSecreta[i] + huecos[i+1:]
    for letra in huecos: # mostrar palabra secreta con huecos entre letras
        print letra,
    print

def intento(yaIntentado):
    # Devuelve la letra intentada. Se asegura que se introduce una letra y no otra cosa.

    while True:
TECNOLOGÍA DE LA INFORMACIÓN           CURSO: 1 BACH
        print ’Intenta con una letra.’
        candidata = raw_input()
        candidata = candidata.lower()
        if len(candidata) != 1:
            print ’Por favor, introduce sólo una letra.’
        elif candidata in yaIntentado:
            print ’Ya has intentado esa letra. Elige otra.’
        elif candidata not in ’abcdefghijklmnñopqrstuvwxyz’:
            print ’Por favor, introduce una LETRA.’
        else:
            return candidata

def jugarOtraVez():
    # Esta función devuelve True si el jugador quiere jugar otra vez.
    print ’¿Quieres jugar otra vez? (s ó n)’
    return raw_input().lower().startswith(’s’)

print ’A H O R C A D O’

letrasFalladas = ’’
letrasAcertadas = ’’
palabraSecreta = palabraAleatoria(palabras)
juegoTerminado = False

while True:
    mostrarAhorcado(DIBUJOS, letrasFalladas, letrasAcertadas, palabraSecreta)

    # Pedir al jugador que introduzca una letra.
    pruebaLetra = intento(letrasFalladas + letrasAcertadas)

    if pruebaLetra in palabraSecreta:
        letrasAcertadas = letrasAcertadas + pruebaLetra
        # Mirar si el jugador ha ganado
        encontradasTodas = True
        for i in range(len(palabraSecreta)):
            if palabraSecreta[i] not in letrasAcertadas:
                encontradasTodas = False
                break
        if encontradasTodas:
            print ’¡Sí! ¡La palabra secreta es "’ + palabraSecreta + ’"! ¡Has ganado!’
            juegoTerminado = True
    else:
        letrasFalladas = letrasFalladas + pruebaLetra
        # Mirar si son demasiados intentos y el jugador pierde
        if len(letrasFalladas) == len(DIBUJOS) - 1:
            mostrarAhorcado(DIBUJOS, letrasFalladas, letrasAcertadas, palabraSecreta)
            print ’¡Demasiados intentos!nDespués de ’ + str(len(letrasFalladas)) + 
            ’ intentos fallidos y ’ + str(len(letrasAcertadas)) + 
            ’ intentos correctos, la palabra era "’ + palabraSecreta + ’"’
            juegoTerminado = True

    # Preguntar al jugador si quiere jugar otra vez (pero sólo si se ha terminado).
    if juegoTerminado:
        if jugarOtraVez():
            letrasFalladas = ’’
            letrasAcertadas = ’’
            juegoTerminado = False
            palabraSecreta = palabraAleatoria(palabras)
        else:
            break


Como viene siendo habitual, una vez que compruebes que funciona, modifica el programa
y mejóralo (incluso puedes cambiarlo por completo). Envía tu nuevo programa por correo
electrónico con el nombre de ahorcado.py junto con su diagrama de flujo y el resultado
de su ejecución. Pero...


                                       ¡¡Detente!!
TECNOLOGÍA DE LA INFORMACIÓN            CURSO: 1 BACH



La complejidad de este guión es mucho mayor, así que muy probablemente necesitarás
un poco de orientación para comprenderlo:



Comprendiendo el juego del Ahorcado

En este juego empleamos multitud de elementos del lenguaje Python. Es interesante que
analices el código con detenimiento antes de seguir. Responde para ello al siguiente
cuestionario; te ayudará a progresar como programador o programadora... Hazlo en un
documento de Google Docs (identifícalo con tu nick y Cuestinario Python Práctica 4) y
compártelo con tu profesor.




 1
En primer lugar, el código del juego está dividido en dos partes claramente diferenciadas.
La primera se encarga de realizar las definiciones necesarias y, en ella, Python no hace
nada en concreto, sólo toma nota de variables y definiciones.
Indica de qué tipo son los siguientes objetos y de qué se encargan:


• DIBUJOS
• palabras
• palabraAleatoria()
• mostrarAhorcado()
• intento()
• jugarOtraVez()




 2
La segunda parte es la acción de verdad y comienza después de todas las definiciones de
las funciones. El código implicado es, fundamentalmente, el siguiente:
TECNOLOGÍA DE LA INFORMACIÓN           CURSO: 1 BACH
....

print ’A H O R C A D O’

letrasFalladas = ’’
letrasAcertadas = ’’
palabraSecreta = palabraAleatoria(palabras)
juegoTerminado = False

while True:
    ...


¿Para qué sirve cada una de esas cuatro variables que se definen? Por cierto, la
condición del bucle while es siempre verdadera. ¿Cómo se las arregla entonces el
juego para terminar?




 3
Explica cómo trabaja (es decir, qué argumentos toma, qué hace con ellos y qué de-
vuelve) la función palabraAleatoria().


def palabraAleatoria(listaPalabras):
    # Esta función devuelve una palabra aleatoria entre un conjunto de palabras.
    cual = random.randint(0, len(listaPalabras) - 1)
    return listaPalabras[cual]


Sugerencia: Observa cada linea, pregúntate y apúntate qué hace cada instrucción y para
qué. Una vez que comprendas todas las líneas del cuerpo de la función, será fácil com-
prender el conjunto. Puedes incluso hacerte un mini-diagrama de flujo para ayudarte.
Hazte preguntas, al mismo tiempo, del estilo de ¿qué tipo de dato es listaPalabras? ¿qué
hace len()?...




 4

Explica, de la misma forma, cómo trabaja la función mostrarAhorcado().
TECNOLOGÍA DE LA INFORMACIÓN           CURSO: 1 BACH
def mostrarAhorcado(DIBUJOS, letrasMalas, letrasBuenas, palabraSecreta):
    print DIBUJOS[len(letrasMalas)]
    print
    print ’Errores:’,
    for letra in letrasMalas:
        print letra,
    print
    huecos = ’_’ * len(palabraSecreta)
    for i in range(len(palabraSecreta)): # reemplazar huecos con letras acertadas
        if palabraSecreta[i] in letrasBuenas:
            huecos = huecos[:i] + palabraSecreta[i] + huecos[i+1:]
    for letra in huecos: # mostrar palabra secreta con huecos entre letras
        print letra,
    print




 5

Y, análogamente, ¿cómo trabaja la función intento()?


def intento(yaIntentado):
    # Devuelve la letra intentada. Se asegura que se introduce una letra y no otra cosa.

    while True:
        print ’Intenta con una letra.’
        candidata = raw_input()
        candidata = candidata.lower()
        if len(candidata) != 1:
            print ’Por favor, introduce sólo una letra.’
        elif candidata in yaIntentado:
            print ’Ya has intentado esa letra. Elige otra.’
        elif candidata not in ’abcdefghijklmnñopqrstuvwxyz’:
            print ’Por favor, introduce una LETRA.’
        else:
            return candidata




 6
Para acabar con las funciones, explica la última, jugarOtraVez().


def jugarOtraVez():
    # Esta función devuelve True si el jugador quiere jugar otra vez.
    print ’¿Quieres jugar otra vez? (s ó n)’
    return raw_input().lower().startswith(’s’)
TECNOLOGÍA DE LA INFORMACIÓN            CURSO: 1 BACH




  7
Fijémonos ahora en el bucle while, que se encarga del ensamblar todas las partes y hacer
que el juego funcione:


while True:
    mostrarAhorcado(DIBUJOS, letrasFalladas, letrasAcertadas, palabraSecreta)

    # Pedir al jugador que introduzca una letra.
    pruebaLetra = intento(letrasFalladas + letrasAcertadas)

    if pruebaLetra in palabraSecreta:
        letrasAcertadas = letrasAcertadas + pruebaLetra
        # Mirar si el jugador ha ganado
        encontradasTodas = True
        for i in range(len(palabraSecreta)):
            if palabraSecreta[i] not in letrasAcertadas:
                encontradasTodas = False
                break
        if encontradasTodas:
            print ’¡Sí! ¡La palabra secreta es "’ + palabraSecreta + ’"! ¡Has ganado!’
            juegoTerminado = True
    else:
        letrasFalladas = letrasFalladas + pruebaLetra
        # Mirar si son demasiados intentos y el jugador pierde
        if len(letrasFalladas) == len(DIBUJOS) - 1:
            mostrarAhorcado(DIBUJOS, letrasFalladas, letrasAcertadas, palabraSecreta)
            print ’¡Demasiados intentos!nDespués de ’ + str(len(letrasFalladas)) + 
            ’ intentos fallidos y ’ + str(len(letrasAcertadas)) + 
            ’ intentos correctos, la palabra era "’ + palabraSecreta + ’"’
            juegoTerminado = True

    # Preguntar al jugador si quiere jugar otra vez (pero sólo si se ha terminado).
    if juegoTerminado:
        if jugarOtraVez():
            letrasFalladas = ’’
            letrasAcertadas = ’’
            juegoTerminado = False
            palabraSecreta = palabraAleatoria(palabras)
        else:
            break




El bucle realiza tareas que pueden dividirse en cuatro partes. Escribe el código de cada
una de ellas y explica cómo funciona (desglosando cada una de sus líneas):


• Dibujar el ahorcado
• Pedir al jugador que introduzca una letra
• Mirar si esa letra es correcta o no
• Comprobar si el juego ha de finalizarse
TECNOLOGÍA DE LA INFORMACIÓN           CURSO: 1 BACH




                                   Recapitulación

Independientemente del cuestionario anterior y como hemos hecho en cada práctica, aquí
tienes un listado de algunas de las nuevas características de Python que han aparecido o
están relacionadas:


• ¿Qué diferencias hay entre las listas y las tuplas? ¿Para qué sirven?
• ¿De qué formas pueden extraerse los elementos de las listas y las tuplas?
• ¿Qué son los diccionarios en Python? ¿Cómo se usan?
• Las funciones split() y len().
• ¿Qué son los métodos? ¿Qué diferencia hay con las funciones?
• ¿Qué son los atributos? ¿Qué diferencia hay entre una clase y un objeto?
• Otras operaciones con cadenas de texto. ¿Funcionan, también, como listas?
• El bloque for . ¿Qué son los iterables?
• ¿Qué son los argumentos o parámetros de una función?
• ¿Para qué sirve el else en un if ? ¿Cuál es su forma general?
• El operador in ¿dónde puede usarse? ¿Qué otros tipos de operadores conoces?


     Documéntate y pregunta todo lo que necesites... ¡No te quedes con dudas!

Mais conteúdo relacionado

Mais procurados

Introduccion a Python por Facundo Batista
Introduccion a Python por Facundo BatistaIntroduccion a Python por Facundo Batista
Introduccion a Python por Facundo Batista
Roberto Allende
 

Mais procurados (20)

Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)
 
Python básico
Python básicoPython básico
Python básico
 
Semana 3 Fundamentos de Python(Funciones y Métodos)
Semana 3   Fundamentos de Python(Funciones y Métodos)Semana 3   Fundamentos de Python(Funciones y Métodos)
Semana 3 Fundamentos de Python(Funciones y Métodos)
 
Operaciones entre cadenas y valores numéricos en lenguaje C
Operaciones entre cadenas y valores numéricos en lenguaje COperaciones entre cadenas y valores numéricos en lenguaje C
Operaciones entre cadenas y valores numéricos en lenguaje C
 
03 - Entrada y salida en lenguaje C
03 - Entrada y salida en lenguaje C03 - Entrada y salida en lenguaje C
03 - Entrada y salida en lenguaje C
 
Entrada y salida de datos en c
Entrada y salida de datos en cEntrada y salida de datos en c
Entrada y salida de datos en c
 
ITSCH Taller Python by Uriel C.H.
ITSCH Taller Python by Uriel C.H.ITSCH Taller Python by Uriel C.H.
ITSCH Taller Python by Uriel C.H.
 
Python02
Python02Python02
Python02
 
Introducción a Python
Introducción a PythonIntroducción a Python
Introducción a Python
 
Python04
Python04Python04
Python04
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
 
Python}
Python}Python}
Python}
 
Ejercicios de programacion if - switch-case
Ejercicios de programacion   if  -   switch-caseEjercicios de programacion   if  -   switch-case
Ejercicios de programacion if - switch-case
 
Conceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programaciónConceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programación
 
Php Lab03
Php Lab03Php Lab03
Php Lab03
 
Introduccion a Python por Facundo Batista
Introduccion a Python por Facundo BatistaIntroduccion a Python por Facundo Batista
Introduccion a Python por Facundo Batista
 
Guía de Python
Guía de Python Guía de Python
Guía de Python
 
Qué es un algoritmo
Qué es un algoritmoQué es un algoritmo
Qué es un algoritmo
 
Generacion codigomaquina
Generacion codigomaquinaGeneracion codigomaquina
Generacion codigomaquina
 

Destaque

Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)
Fernando Salamero
 

Destaque (9)

Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
 
Programación de Videojuegos con Python y Pilas (IX)
Programación de Videojuegos con Python y Pilas (IX)Programación de Videojuegos con Python y Pilas (IX)
Programación de Videojuegos con Python y Pilas (IX)
 
Programación de Videojuegos con Python y Pilas (X)
Programación de Videojuegos con Python y Pilas (X)Programación de Videojuegos con Python y Pilas (X)
Programación de Videojuegos con Python y Pilas (X)
 
Programación de Videojuegos con Python y Pilas (VII)
Programación de Videojuegos con Python y Pilas (VII)Programación de Videojuegos con Python y Pilas (VII)
Programación de Videojuegos con Python y Pilas (VII)
 
Programación de Videojuegos con Python y Pilas (VIII)
Programación de Videojuegos con Python y Pilas (VIII)Programación de Videojuegos con Python y Pilas (VIII)
Programación de Videojuegos con Python y Pilas (VIII)
 
Programación de Videojuegos con Python y Pilas (V)
Programación de Videojuegos con Python y Pilas (V)Programación de Videojuegos con Python y Pilas (V)
Programación de Videojuegos con Python y Pilas (V)
 
(Sin anotaciones) - En busca de la Física
(Sin anotaciones) - En busca de la Física(Sin anotaciones) - En busca de la Física
(Sin anotaciones) - En busca de la Física
 
Iniciación a python
Iniciación a pythonIniciación a python
Iniciación a python
 
Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)
 

Semelhante a Python (práctica 4)

Ejercicios Python - con soluciones.pdf
Ejercicios Python - con soluciones.pdfEjercicios Python - con soluciones.pdf
Ejercicios Python - con soluciones.pdf
CriszehroReviewer
 
Hacer un programa que lea un año y que el mismo determine si el año es bisiesto
Hacer un programa que lea un año y que el mismo determine si el año es bisiestoHacer un programa que lea un año y que el mismo determine si el año es bisiesto
Hacer un programa que lea un año y que el mismo determine si el año es bisiesto
yordanch
 
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Agile Spain
 

Semelhante a Python (práctica 4) (20)

Python_Slides.pptx
Python_Slides.pptxPython_Slides.pptx
Python_Slides.pptx
 
IntroducciónPHP.pptx
IntroducciónPHP.pptxIntroducciónPHP.pptx
IntroducciónPHP.pptx
 
Clase 6
Clase 6Clase 6
Clase 6
 
01 el lenguaje Python
01 el lenguaje Python01 el lenguaje Python
01 el lenguaje Python
 
Ejercicios Python - con soluciones.pdf
Ejercicios Python - con soluciones.pdfEjercicios Python - con soluciones.pdf
Ejercicios Python - con soluciones.pdf
 
Hacer un programa que lea un año y que el mismo determine si el año es bisiesto
Hacer un programa que lea un año y que el mismo determine si el año es bisiestoHacer un programa que lea un año y que el mismo determine si el año es bisiesto
Hacer un programa que lea un año y que el mismo determine si el año es bisiesto
 
Ruby
RubyRuby
Ruby
 
Python boloñesa
Python boloñesa Python boloñesa
Python boloñesa
 
Ejercicios con Python parte 3
Ejercicios con Python parte 3Ejercicios con Python parte 3
Ejercicios con Python parte 3
 
Ruby Latin Developer20012010
Ruby Latin Developer20012010Ruby Latin Developer20012010
Ruby Latin Developer20012010
 
Fundamentos de programación 1. diseño de algoritmos
Fundamentos de programación 1. diseño de algoritmosFundamentos de programación 1. diseño de algoritmos
Fundamentos de programación 1. diseño de algoritmos
 
Python05
Python05Python05
Python05
 
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
 
Tipos basicos
Tipos basicosTipos basicos
Tipos basicos
 
Taller listasyeasygui
Taller listasyeasyguiTaller listasyeasygui
Taller listasyeasygui
 
Idiomatic Ruby
Idiomatic RubyIdiomatic Ruby
Idiomatic Ruby
 
if-while-for.ppsx
if-while-for.ppsxif-while-for.ppsx
if-while-for.ppsx
 
Python Tercera Sesion de Clases
Python Tercera Sesion de ClasesPython Tercera Sesion de Clases
Python Tercera Sesion de Clases
 
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdfSesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
 
curso_programacion_python3.pdf
curso_programacion_python3.pdfcurso_programacion_python3.pdf
curso_programacion_python3.pdf
 

Mais de Fernando Salamero

Mais de Fernando Salamero (12)

(Anotaciones) Ciencia (Cuestiones) que la tiza no propone
(Anotaciones) Ciencia (Cuestiones) que la tiza no propone(Anotaciones) Ciencia (Cuestiones) que la tiza no propone
(Anotaciones) Ciencia (Cuestiones) que la tiza no propone
 
Ciencia (Cuestiones) que la tiza no propone
Ciencia (Cuestiones) que la tiza no proponeCiencia (Cuestiones) que la tiza no propone
Ciencia (Cuestiones) que la tiza no propone
 
(Con anotaciones) En busca de la Física
(Con anotaciones) En busca de la Física(Con anotaciones) En busca de la Física
(Con anotaciones) En busca de la Física
 
Timeline - En busca de la Física
Timeline - En busca de la FísicaTimeline - En busca de la Física
Timeline - En busca de la Física
 
Jovenes físicos
Jovenes físicosJovenes físicos
Jovenes físicos
 
Programación con Pygame VII
Programación con Pygame VIIProgramación con Pygame VII
Programación con Pygame VII
 
Programación con Pygame IX
Programación con Pygame IXProgramación con Pygame IX
Programación con Pygame IX
 
Programación con Pygame VIII
Programación con Pygame VIIIProgramación con Pygame VIII
Programación con Pygame VIII
 
Aventura
AventuraAventura
Aventura
 
Programación con Pygame V
Programación con Pygame VProgramación con Pygame V
Programación con Pygame V
 
Programación con Pygame VI
Programación con Pygame VIProgramación con Pygame VI
Programación con Pygame VI
 
Programación con Pygame IV
Programación con Pygame IVProgramación con Pygame IV
Programación con Pygame IV
 

Último

NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
UPTAIDELTACHIRA
 

Último (20)

OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptFUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
Diapositivas de animales reptiles secundaria
Diapositivas de animales reptiles secundariaDiapositivas de animales reptiles secundaria
Diapositivas de animales reptiles secundaria
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
La Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración AmbientalLa Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración Ambiental
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptxEL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
 
semana 4 9NO Estudios sociales.pptxnnnn
semana 4  9NO Estudios sociales.pptxnnnnsemana 4  9NO Estudios sociales.pptxnnnn
semana 4 9NO Estudios sociales.pptxnnnn
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
 

Python (práctica 4)

  • 1. TECNOLOGÍA DE LA INFORMACIÓN CURSO: 1 BACH Python (Práctica 4) Objetivo Se trata de abordar un programa algo más serio, en el que las entradas del usuario in- fluyen en el curso de la ejecución. Se usan, también, procedimientos de manipulación de cadenas de texto. Programa 6: Ahorcado La cosa se complica. El siguiente es el clásico juego del ahorcado. Pero fíjate que un buen programador debe escribir su código de forma que sea ampliable en el futuro. De ahí el uso intensivo de las funciones. # -*- coding: utf-8 -*- import random DIBUJOS = [’’’ +------+ | | | | | | | | | | | | ==============’’’, ’’’ +------+ | | | | O | | | | | | | | ==============’’’, ’’’ +------+ | | | | O | | | | | | | | | ==============’’’, ’’’ +------+ | | | | O | /| | / | | | | |
  • 2. TECNOLOGÍA DE LA INFORMACIÓN CURSO: 1 BACH | | | ==============’’’, ’’’ +------+ | | | | O | /| | / | | | | | | | | ==============’’’, ’’’ +------+ | | | | O | /| | / | | | | / | / | | | ==============’’’, ’’’ +------+ | | | | O | /| | / | | | | / | / | | | ==============’’’] palabras = ’hormiga perro canario oso abeja caballo camello gato tigre mofeta cobra ’ + ’chica coyote ojo cuervo mano perro mono pato cuervo coche pez zorro rana pastel ’ + ’bizcocho tomate iguana chacal koala leche agua mago burro amigo miel gorila rata ’ + ’boca mula red fuerza lechuza tren metro loro pigmeo python camino conejo charco ’ + ’buitre rinoceronte ballena medusa cordero ternera estrella nube nariz vientre ’ + ’piedra pantano cisne trucha avispa caballero verdad inglaterra tortuga tortilla ’ + ’placton huesca vampiro normando vikingo cebra’.split() def palabraAleatoria(listaPalabras): # Esta función devuelve una palabra aleatoria entre un conjunto de palabras. cual = random.randint(0, len(listaPalabras) - 1) return listaPalabras[cual] def mostrarAhorcado(DIBUJOS, letrasMalas, letrasBuenas, palabraSecreta): print DIBUJOS[len(letrasMalas)] print print ’Errores:’, for letra in letrasMalas: print letra, print huecos = ’_’ * len(palabraSecreta) for i in range(len(palabraSecreta)): # reemplazar huecos con letras acertadas if palabraSecreta[i] in letrasBuenas: huecos = huecos[:i] + palabraSecreta[i] + huecos[i+1:] for letra in huecos: # mostrar palabra secreta con huecos entre letras print letra, print def intento(yaIntentado): # Devuelve la letra intentada. Se asegura que se introduce una letra y no otra cosa. while True:
  • 3. TECNOLOGÍA DE LA INFORMACIÓN CURSO: 1 BACH print ’Intenta con una letra.’ candidata = raw_input() candidata = candidata.lower() if len(candidata) != 1: print ’Por favor, introduce sólo una letra.’ elif candidata in yaIntentado: print ’Ya has intentado esa letra. Elige otra.’ elif candidata not in ’abcdefghijklmnñopqrstuvwxyz’: print ’Por favor, introduce una LETRA.’ else: return candidata def jugarOtraVez(): # Esta función devuelve True si el jugador quiere jugar otra vez. print ’¿Quieres jugar otra vez? (s ó n)’ return raw_input().lower().startswith(’s’) print ’A H O R C A D O’ letrasFalladas = ’’ letrasAcertadas = ’’ palabraSecreta = palabraAleatoria(palabras) juegoTerminado = False while True: mostrarAhorcado(DIBUJOS, letrasFalladas, letrasAcertadas, palabraSecreta) # Pedir al jugador que introduzca una letra. pruebaLetra = intento(letrasFalladas + letrasAcertadas) if pruebaLetra in palabraSecreta: letrasAcertadas = letrasAcertadas + pruebaLetra # Mirar si el jugador ha ganado encontradasTodas = True for i in range(len(palabraSecreta)): if palabraSecreta[i] not in letrasAcertadas: encontradasTodas = False break if encontradasTodas: print ’¡Sí! ¡La palabra secreta es "’ + palabraSecreta + ’"! ¡Has ganado!’ juegoTerminado = True else: letrasFalladas = letrasFalladas + pruebaLetra # Mirar si son demasiados intentos y el jugador pierde if len(letrasFalladas) == len(DIBUJOS) - 1: mostrarAhorcado(DIBUJOS, letrasFalladas, letrasAcertadas, palabraSecreta) print ’¡Demasiados intentos!nDespués de ’ + str(len(letrasFalladas)) + ’ intentos fallidos y ’ + str(len(letrasAcertadas)) + ’ intentos correctos, la palabra era "’ + palabraSecreta + ’"’ juegoTerminado = True # Preguntar al jugador si quiere jugar otra vez (pero sólo si se ha terminado). if juegoTerminado: if jugarOtraVez(): letrasFalladas = ’’ letrasAcertadas = ’’ juegoTerminado = False palabraSecreta = palabraAleatoria(palabras) else: break Como viene siendo habitual, una vez que compruebes que funciona, modifica el programa y mejóralo (incluso puedes cambiarlo por completo). Envía tu nuevo programa por correo electrónico con el nombre de ahorcado.py junto con su diagrama de flujo y el resultado de su ejecución. Pero... ¡¡Detente!!
  • 4. TECNOLOGÍA DE LA INFORMACIÓN CURSO: 1 BACH La complejidad de este guión es mucho mayor, así que muy probablemente necesitarás un poco de orientación para comprenderlo: Comprendiendo el juego del Ahorcado En este juego empleamos multitud de elementos del lenguaje Python. Es interesante que analices el código con detenimiento antes de seguir. Responde para ello al siguiente cuestionario; te ayudará a progresar como programador o programadora... Hazlo en un documento de Google Docs (identifícalo con tu nick y Cuestinario Python Práctica 4) y compártelo con tu profesor. 1 En primer lugar, el código del juego está dividido en dos partes claramente diferenciadas. La primera se encarga de realizar las definiciones necesarias y, en ella, Python no hace nada en concreto, sólo toma nota de variables y definiciones. Indica de qué tipo son los siguientes objetos y de qué se encargan: • DIBUJOS • palabras • palabraAleatoria() • mostrarAhorcado() • intento() • jugarOtraVez() 2 La segunda parte es la acción de verdad y comienza después de todas las definiciones de las funciones. El código implicado es, fundamentalmente, el siguiente:
  • 5. TECNOLOGÍA DE LA INFORMACIÓN CURSO: 1 BACH .... print ’A H O R C A D O’ letrasFalladas = ’’ letrasAcertadas = ’’ palabraSecreta = palabraAleatoria(palabras) juegoTerminado = False while True: ... ¿Para qué sirve cada una de esas cuatro variables que se definen? Por cierto, la condición del bucle while es siempre verdadera. ¿Cómo se las arregla entonces el juego para terminar? 3 Explica cómo trabaja (es decir, qué argumentos toma, qué hace con ellos y qué de- vuelve) la función palabraAleatoria(). def palabraAleatoria(listaPalabras): # Esta función devuelve una palabra aleatoria entre un conjunto de palabras. cual = random.randint(0, len(listaPalabras) - 1) return listaPalabras[cual] Sugerencia: Observa cada linea, pregúntate y apúntate qué hace cada instrucción y para qué. Una vez que comprendas todas las líneas del cuerpo de la función, será fácil com- prender el conjunto. Puedes incluso hacerte un mini-diagrama de flujo para ayudarte. Hazte preguntas, al mismo tiempo, del estilo de ¿qué tipo de dato es listaPalabras? ¿qué hace len()?... 4 Explica, de la misma forma, cómo trabaja la función mostrarAhorcado().
  • 6. TECNOLOGÍA DE LA INFORMACIÓN CURSO: 1 BACH def mostrarAhorcado(DIBUJOS, letrasMalas, letrasBuenas, palabraSecreta): print DIBUJOS[len(letrasMalas)] print print ’Errores:’, for letra in letrasMalas: print letra, print huecos = ’_’ * len(palabraSecreta) for i in range(len(palabraSecreta)): # reemplazar huecos con letras acertadas if palabraSecreta[i] in letrasBuenas: huecos = huecos[:i] + palabraSecreta[i] + huecos[i+1:] for letra in huecos: # mostrar palabra secreta con huecos entre letras print letra, print 5 Y, análogamente, ¿cómo trabaja la función intento()? def intento(yaIntentado): # Devuelve la letra intentada. Se asegura que se introduce una letra y no otra cosa. while True: print ’Intenta con una letra.’ candidata = raw_input() candidata = candidata.lower() if len(candidata) != 1: print ’Por favor, introduce sólo una letra.’ elif candidata in yaIntentado: print ’Ya has intentado esa letra. Elige otra.’ elif candidata not in ’abcdefghijklmnñopqrstuvwxyz’: print ’Por favor, introduce una LETRA.’ else: return candidata 6 Para acabar con las funciones, explica la última, jugarOtraVez(). def jugarOtraVez(): # Esta función devuelve True si el jugador quiere jugar otra vez. print ’¿Quieres jugar otra vez? (s ó n)’ return raw_input().lower().startswith(’s’)
  • 7. TECNOLOGÍA DE LA INFORMACIÓN CURSO: 1 BACH 7 Fijémonos ahora en el bucle while, que se encarga del ensamblar todas las partes y hacer que el juego funcione: while True: mostrarAhorcado(DIBUJOS, letrasFalladas, letrasAcertadas, palabraSecreta) # Pedir al jugador que introduzca una letra. pruebaLetra = intento(letrasFalladas + letrasAcertadas) if pruebaLetra in palabraSecreta: letrasAcertadas = letrasAcertadas + pruebaLetra # Mirar si el jugador ha ganado encontradasTodas = True for i in range(len(palabraSecreta)): if palabraSecreta[i] not in letrasAcertadas: encontradasTodas = False break if encontradasTodas: print ’¡Sí! ¡La palabra secreta es "’ + palabraSecreta + ’"! ¡Has ganado!’ juegoTerminado = True else: letrasFalladas = letrasFalladas + pruebaLetra # Mirar si son demasiados intentos y el jugador pierde if len(letrasFalladas) == len(DIBUJOS) - 1: mostrarAhorcado(DIBUJOS, letrasFalladas, letrasAcertadas, palabraSecreta) print ’¡Demasiados intentos!nDespués de ’ + str(len(letrasFalladas)) + ’ intentos fallidos y ’ + str(len(letrasAcertadas)) + ’ intentos correctos, la palabra era "’ + palabraSecreta + ’"’ juegoTerminado = True # Preguntar al jugador si quiere jugar otra vez (pero sólo si se ha terminado). if juegoTerminado: if jugarOtraVez(): letrasFalladas = ’’ letrasAcertadas = ’’ juegoTerminado = False palabraSecreta = palabraAleatoria(palabras) else: break El bucle realiza tareas que pueden dividirse en cuatro partes. Escribe el código de cada una de ellas y explica cómo funciona (desglosando cada una de sus líneas): • Dibujar el ahorcado • Pedir al jugador que introduzca una letra • Mirar si esa letra es correcta o no • Comprobar si el juego ha de finalizarse
  • 8. TECNOLOGÍA DE LA INFORMACIÓN CURSO: 1 BACH Recapitulación Independientemente del cuestionario anterior y como hemos hecho en cada práctica, aquí tienes un listado de algunas de las nuevas características de Python que han aparecido o están relacionadas: • ¿Qué diferencias hay entre las listas y las tuplas? ¿Para qué sirven? • ¿De qué formas pueden extraerse los elementos de las listas y las tuplas? • ¿Qué son los diccionarios en Python? ¿Cómo se usan? • Las funciones split() y len(). • ¿Qué son los métodos? ¿Qué diferencia hay con las funciones? • ¿Qué son los atributos? ¿Qué diferencia hay entre una clase y un objeto? • Otras operaciones con cadenas de texto. ¿Funcionan, también, como listas? • El bloque for . ¿Qué son los iterables? • ¿Qué son los argumentos o parámetros de una función? • ¿Para qué sirve el else en un if ? ¿Cuál es su forma general? • El operador in ¿dónde puede usarse? ¿Qué otros tipos de operadores conoces? Documéntate y pregunta todo lo que necesites... ¡No te quedes con dudas!