SlideShare une entreprise Scribd logo
1  sur  8
Télécharger pour lire hors ligne
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!

Contenu connexe

Tendances

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)Fernando Salamero
 
Python básico
Python básicoPython básico
Python básicoCodeSyntax
 
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)Richard Eliseo Mendoza Gafaro
 
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 CDenisse 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 cDenisse C
 
Programación en c++
Programación en c++Programación en c++
Programación en c++vic-97
 
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)Richard Eliseo Mendoza Gafaro
 
Ejercicios de programacion if - switch-case
Ejercicios de programacion   if  -   switch-caseEjercicios de programacion   if  -   switch-case
Ejercicios de programacion if - switch-caseGuillermo Viaje
 
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ónEdison López Díaz
 
Introduccion a Python por Facundo Batista
Introduccion a Python por Facundo BatistaIntroduccion a Python por Facundo Batista
Introduccion a Python por Facundo BatistaRoberto Allende
 
Qué es un algoritmo
Qué es un algoritmoQué es un algoritmo
Qué es un algoritmoAbrirllave
 
Generacion codigomaquina
Generacion codigomaquinaGeneracion codigomaquina
Generacion codigomaquinatre_na_gil
 

Tendances (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
 

En vedette

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 2014Fernando Salamero
 
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)Fernando Salamero
 
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)Fernando Salamero
 
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)Fernando Salamero
 
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)Fernando Salamero
 
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)Fernando Salamero
 
(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ísicaFernando Salamero
 
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
 

En vedette (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)
 

Similaire à Python (práctica 4)

Similaire à 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
 

Plus de Fernando Salamero

(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 proponeFernando Salamero
 
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 proponeFernando Salamero
 
(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ísicaFernando Salamero
 
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ísicaFernando Salamero
 
Programación con Pygame VII
Programación con Pygame VIIProgramación con Pygame VII
Programación con Pygame VIIFernando Salamero
 
Programación con Pygame VIII
Programación con Pygame VIIIProgramación con Pygame VIII
Programación con Pygame VIIIFernando Salamero
 

Plus 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
 

Dernier

CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñotapirjackluis
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Juan Martín Martín
 
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOBRIGIDATELLOLEONARDO
 
Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosJonathanCovena1
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfNancyLoaa
 
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdfMiNeyi1
 
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Ángel Encinas
 
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 -.docRodneyFrankCUADROSMI
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...JAVIER SOLIS NOYOLA
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfFrancisco158360
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfMercedes Gonzalez
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Alejandrino Halire Ccahuana
 
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).pptAlberto Rubio
 

Dernier (20)

Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
 
Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficios
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
 
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
 
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
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
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
 

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!