SlideShare una empresa de Scribd logo
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!

Más contenido relacionado

La actualidad más candente

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ásico
CodeSyntax
 
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 C
Denisse 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
Diego Andrés Alvarez Marín
 
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
Denisse 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.
Uriel Cambrón Hernández
 
Python02
Python02Python02
Python02
Victor Pando
 
Introducción a Python
Introducción a PythonIntroducción a Python
Introducción a Python
KOKOA - Comunidad de Software Libre
 
Python04
Python04Python04
Python04
Victor Pando
 
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
 
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
Guillermo 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ón
Edison López Díaz
 
Php Lab03
Php Lab03Php Lab03
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
 
Guía de Python
Guía de Python Guía de Python
Guía de Python
Lennys Camargo
 
Qué es un algoritmo
Qué es un algoritmoQué es un algoritmo
Qué es un algoritmo
Abrirllave
 
Generacion codigomaquina
Generacion codigomaquinaGeneracion codigomaquina
Generacion codigomaquina
tre_na_gil
 

La actualidad más candente (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
 

Destacado

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
Fernando 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ísica
Fernando Salamero
 
Iniciación a python
Iniciación a pythonIniciación a python
Iniciación a python
Fernando 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
 

Destacado (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)
 

Similar a Python (práctica 4)

Python_Slides.pptx
Python_Slides.pptxPython_Slides.pptx
Python_Slides.pptx
LauraMelisaCaonGmez1
 
IntroducciónPHP.pptx
IntroducciónPHP.pptxIntroducciónPHP.pptx
IntroducciónPHP.pptx
Edilfredo Pieneda Florez
 
Clase 6
Clase 6Clase 6
01 el lenguaje Python
01 el lenguaje Python01 el lenguaje Python
01 el lenguaje Python
Juan Rodríguez
 
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
 
Ruby
RubyRuby
Ruby
ThirdWay
 
Python boloñesa
Python boloñesa Python boloñesa
Python boloñesa
Álvaro León Santiago
 
Ejercicios con Python parte 3
Ejercicios con Python parte 3Ejercicios con Python parte 3
Ejercicios con Python parte 3
Facultad de Ciencias y Sistemas
 
Ruby Latin Developer20012010
Ruby Latin Developer20012010Ruby Latin Developer20012010
Ruby Latin Developer20012010
Miguel Rodriguez
 
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
Edward Ropero
 
Python05
Python05Python05
Python05
Victor Pando
 
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
 
Tipos basicos
Tipos basicosTipos basicos
Tipos basicos
Enric Cecilla Real
 
Taller listasyeasygui
Taller listasyeasyguiTaller listasyeasygui
Taller listasyeasygui
Albert Page
 
Idiomatic Ruby
Idiomatic RubyIdiomatic Ruby
Idiomatic Ruby
Rubén Medellín
 
if-while-for.ppsx
if-while-for.ppsxif-while-for.ppsx
if-while-for.ppsx
MULTISERVICIOS INFORMATICOS
 
Python Tercera Sesion de Clases
Python Tercera Sesion de ClasesPython Tercera Sesion de Clases
Python Tercera Sesion de Clases
Carlos Cardenas Fernandez
 
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
Marxx4
 
curso_programacion_python3.pdf
curso_programacion_python3.pdfcurso_programacion_python3.pdf
curso_programacion_python3.pdf
MaurioLuisCondorZana
 

Similar 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
 

Más 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 propone
Fernando 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 propone
Fernando 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ísica
Fernando 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ísica
Fernando Salamero
 
Jovenes físicos
Jovenes físicosJovenes físicos
Jovenes físicos
Fernando Salamero
 
Programación con Pygame VII
Programación con Pygame VIIProgramación con Pygame VII
Programación con Pygame VII
Fernando Salamero
 
Programación con Pygame IX
Programación con Pygame IXProgramación con Pygame IX
Programación con Pygame IX
Fernando Salamero
 
Programación con Pygame VIII
Programación con Pygame VIIIProgramación con Pygame VIII
Programación con Pygame VIII
Fernando Salamero
 
Aventura
AventuraAventura
Programación con Pygame V
Programación con Pygame VProgramación con Pygame V
Programación con Pygame V
Fernando Salamero
 
Programación con Pygame VI
Programación con Pygame VIProgramación con Pygame VI
Programación con Pygame VI
Fernando Salamero
 
Programación con Pygame IV
Programación con Pygame IVProgramación con Pygame IV
Programación con Pygame IV
Fernando Salamero
 

Más 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

Matriz de relación mixta Fortalezas - Amenazas
Matriz de relación mixta Fortalezas - AmenazasMatriz de relación mixta Fortalezas - Amenazas
Matriz de relación mixta Fortalezas - Amenazas
JonathanCovena1
 
Aplicaciones móviles de grabación (2 de julio de 2024)
Aplicaciones móviles de grabación (2 de julio de 2024)Aplicaciones móviles de grabación (2 de julio de 2024)
Aplicaciones móviles de grabación (2 de julio de 2024)
Cátedra Banco Santander
 
Introducción a las herramientas de Google Apps (3 de julio de 2024)
Introducción a las herramientas de Google Apps (3 de julio de 2024)Introducción a las herramientas de Google Apps (3 de julio de 2024)
Introducción a las herramientas de Google Apps (3 de julio de 2024)
Cátedra Banco Santander
 
Cultura Organizacional con Responsabilidad Social Empresarial.pdf
Cultura Organizacional con Responsabilidad Social Empresarial.pdfCultura Organizacional con Responsabilidad Social Empresarial.pdf
Cultura Organizacional con Responsabilidad Social Empresarial.pdf
JonathanCovena1
 
TOMO I - HISTORIA primer exsamen 2025 de la unsa arequipa
TOMO I - HISTORIA primer exsamen 2025 de la unsa arequipaTOMO I - HISTORIA primer exsamen 2025 de la unsa arequipa
TOMO I - HISTORIA primer exsamen 2025 de la unsa arequipa
alexandrachura18255
 
Transformando la Evaluacion con Inteligencia Artificial Ccesa007.pdf
Transformando la Evaluacion con Inteligencia Artificial  Ccesa007.pdfTransformando la Evaluacion con Inteligencia Artificial  Ccesa007.pdf
Transformando la Evaluacion con Inteligencia Artificial Ccesa007.pdf
Demetrio Ccesa Rayme
 
Tu, Tu Hijo y la Escuela Ken Robinson Ccesa007.pdf
Tu,  Tu Hijo y la  Escuela  Ken Robinson  Ccesa007.pdfTu,  Tu Hijo y la  Escuela  Ken Robinson  Ccesa007.pdf
Tu, Tu Hijo y la Escuela Ken Robinson Ccesa007.pdf
Demetrio Ccesa Rayme
 
Sesión de clase: El comienzo del evangelio
Sesión de clase: El comienzo del evangelioSesión de clase: El comienzo del evangelio
Sesión de clase: El comienzo del evangelio
https://gramadal.wordpress.com/
 
Crear infografías: Iniciación a Canva (1 de julio de 2024)
Crear infografías: Iniciación a Canva (1 de julio de 2024)Crear infografías: Iniciación a Canva (1 de julio de 2024)
Crear infografías: Iniciación a Canva (1 de julio de 2024)
Cátedra Banco Santander
 
Ponencia 4 AT DIRECTIVOS Día del Logro 02 JULIO 2024.pptx
Ponencia 4 AT DIRECTIVOS Día del Logro 02 JULIO 2024.pptxPonencia 4 AT DIRECTIVOS Día del Logro 02 JULIO 2024.pptx
Ponencia 4 AT DIRECTIVOS Día del Logro 02 JULIO 2024.pptx
yaduli
 
2. LA ENERGIA Y TIPOSGRADO SEXTO.SANTA TERESApptx
2. LA ENERGIA Y TIPOSGRADO SEXTO.SANTA TERESApptx2. LA ENERGIA Y TIPOSGRADO SEXTO.SANTA TERESApptx
2. LA ENERGIA Y TIPOSGRADO SEXTO.SANTA TERESApptx
nelsontobontrujillo
 
Lengua y literatura mandioca para aprend
Lengua y literatura mandioca para aprendLengua y literatura mandioca para aprend
Lengua y literatura mandioca para aprend
RaqelBenitez
 
Curación de contenidos (1 de julio de 2024)
Curación de contenidos (1 de julio de 2024)Curación de contenidos (1 de julio de 2024)
Curación de contenidos (1 de julio de 2024)
Cátedra Banco Santander
 
La Gatera de la Villa nº 52. Historia y patrimonio de Madrid.
La Gatera de la Villa nº 52. Historia y patrimonio de Madrid.La Gatera de la Villa nº 52. Historia y patrimonio de Madrid.
La Gatera de la Villa nº 52. Historia y patrimonio de Madrid.
La Gatera de la Villa
 
Productos-CTE-Junio-contestado para la ocatava sesion
Productos-CTE-Junio-contestado para la ocatava sesionProductos-CTE-Junio-contestado para la ocatava sesion
Productos-CTE-Junio-contestado para la ocatava sesion
JosueSalas32
 
Productos contestados de la Octava Sesión Ordinaria de CTE y TIFC para Direct...
Productos contestados de la Octava Sesión Ordinaria de CTE y TIFC para Direct...Productos contestados de la Octava Sesión Ordinaria de CTE y TIFC para Direct...
Productos contestados de la Octava Sesión Ordinaria de CTE y TIFC para Direct...
justinomorales8
 
Discurso de Ceremonia de Graduación da la Generación 2021-2024.docx
Discurso de Ceremonia de Graduación da la Generación 2021-2024.docxDiscurso de Ceremonia de Graduación da la Generación 2021-2024.docx
Discurso de Ceremonia de Graduación da la Generación 2021-2024.docx
Centro de Bachillerato Tecnológico industrial y de servicios No. 209
 
Evaluacion Formativa en el Aula ECH1 Ccesa007.pdf
Evaluacion Formativa en el Aula   ECH1  Ccesa007.pdfEvaluacion Formativa en el Aula   ECH1  Ccesa007.pdf
Evaluacion Formativa en el Aula ECH1 Ccesa007.pdf
Demetrio Ccesa Rayme
 
ROMPECABEZAS DE LA DEFINICIÓN DE LOS JUEGOS OLÍMPICOS EN 100 LETRAS. Por JAVI...
ROMPECABEZAS DE LA DEFINICIÓN DE LOS JUEGOS OLÍMPICOS EN 100 LETRAS. Por JAVI...ROMPECABEZAS DE LA DEFINICIÓN DE LOS JUEGOS OLÍMPICOS EN 100 LETRAS. Por JAVI...
ROMPECABEZAS DE LA DEFINICIÓN DE LOS JUEGOS OLÍMPICOS EN 100 LETRAS. Por JAVI...
JAVIER SOLIS NOYOLA
 
Introducción a los Sistemas Integrados de Gestión
Introducción a los Sistemas Integrados de GestiónIntroducción a los Sistemas Integrados de Gestión
Introducción a los Sistemas Integrados de Gestión
JonathanCovena1
 

Último (20)

Matriz de relación mixta Fortalezas - Amenazas
Matriz de relación mixta Fortalezas - AmenazasMatriz de relación mixta Fortalezas - Amenazas
Matriz de relación mixta Fortalezas - Amenazas
 
Aplicaciones móviles de grabación (2 de julio de 2024)
Aplicaciones móviles de grabación (2 de julio de 2024)Aplicaciones móviles de grabación (2 de julio de 2024)
Aplicaciones móviles de grabación (2 de julio de 2024)
 
Introducción a las herramientas de Google Apps (3 de julio de 2024)
Introducción a las herramientas de Google Apps (3 de julio de 2024)Introducción a las herramientas de Google Apps (3 de julio de 2024)
Introducción a las herramientas de Google Apps (3 de julio de 2024)
 
Cultura Organizacional con Responsabilidad Social Empresarial.pdf
Cultura Organizacional con Responsabilidad Social Empresarial.pdfCultura Organizacional con Responsabilidad Social Empresarial.pdf
Cultura Organizacional con Responsabilidad Social Empresarial.pdf
 
TOMO I - HISTORIA primer exsamen 2025 de la unsa arequipa
TOMO I - HISTORIA primer exsamen 2025 de la unsa arequipaTOMO I - HISTORIA primer exsamen 2025 de la unsa arequipa
TOMO I - HISTORIA primer exsamen 2025 de la unsa arequipa
 
Transformando la Evaluacion con Inteligencia Artificial Ccesa007.pdf
Transformando la Evaluacion con Inteligencia Artificial  Ccesa007.pdfTransformando la Evaluacion con Inteligencia Artificial  Ccesa007.pdf
Transformando la Evaluacion con Inteligencia Artificial Ccesa007.pdf
 
Tu, Tu Hijo y la Escuela Ken Robinson Ccesa007.pdf
Tu,  Tu Hijo y la  Escuela  Ken Robinson  Ccesa007.pdfTu,  Tu Hijo y la  Escuela  Ken Robinson  Ccesa007.pdf
Tu, Tu Hijo y la Escuela Ken Robinson Ccesa007.pdf
 
Sesión de clase: El comienzo del evangelio
Sesión de clase: El comienzo del evangelioSesión de clase: El comienzo del evangelio
Sesión de clase: El comienzo del evangelio
 
Crear infografías: Iniciación a Canva (1 de julio de 2024)
Crear infografías: Iniciación a Canva (1 de julio de 2024)Crear infografías: Iniciación a Canva (1 de julio de 2024)
Crear infografías: Iniciación a Canva (1 de julio de 2024)
 
Ponencia 4 AT DIRECTIVOS Día del Logro 02 JULIO 2024.pptx
Ponencia 4 AT DIRECTIVOS Día del Logro 02 JULIO 2024.pptxPonencia 4 AT DIRECTIVOS Día del Logro 02 JULIO 2024.pptx
Ponencia 4 AT DIRECTIVOS Día del Logro 02 JULIO 2024.pptx
 
2. LA ENERGIA Y TIPOSGRADO SEXTO.SANTA TERESApptx
2. LA ENERGIA Y TIPOSGRADO SEXTO.SANTA TERESApptx2. LA ENERGIA Y TIPOSGRADO SEXTO.SANTA TERESApptx
2. LA ENERGIA Y TIPOSGRADO SEXTO.SANTA TERESApptx
 
Lengua y literatura mandioca para aprend
Lengua y literatura mandioca para aprendLengua y literatura mandioca para aprend
Lengua y literatura mandioca para aprend
 
Curación de contenidos (1 de julio de 2024)
Curación de contenidos (1 de julio de 2024)Curación de contenidos (1 de julio de 2024)
Curación de contenidos (1 de julio de 2024)
 
La Gatera de la Villa nº 52. Historia y patrimonio de Madrid.
La Gatera de la Villa nº 52. Historia y patrimonio de Madrid.La Gatera de la Villa nº 52. Historia y patrimonio de Madrid.
La Gatera de la Villa nº 52. Historia y patrimonio de Madrid.
 
Productos-CTE-Junio-contestado para la ocatava sesion
Productos-CTE-Junio-contestado para la ocatava sesionProductos-CTE-Junio-contestado para la ocatava sesion
Productos-CTE-Junio-contestado para la ocatava sesion
 
Productos contestados de la Octava Sesión Ordinaria de CTE y TIFC para Direct...
Productos contestados de la Octava Sesión Ordinaria de CTE y TIFC para Direct...Productos contestados de la Octava Sesión Ordinaria de CTE y TIFC para Direct...
Productos contestados de la Octava Sesión Ordinaria de CTE y TIFC para Direct...
 
Discurso de Ceremonia de Graduación da la Generación 2021-2024.docx
Discurso de Ceremonia de Graduación da la Generación 2021-2024.docxDiscurso de Ceremonia de Graduación da la Generación 2021-2024.docx
Discurso de Ceremonia de Graduación da la Generación 2021-2024.docx
 
Evaluacion Formativa en el Aula ECH1 Ccesa007.pdf
Evaluacion Formativa en el Aula   ECH1  Ccesa007.pdfEvaluacion Formativa en el Aula   ECH1  Ccesa007.pdf
Evaluacion Formativa en el Aula ECH1 Ccesa007.pdf
 
ROMPECABEZAS DE LA DEFINICIÓN DE LOS JUEGOS OLÍMPICOS EN 100 LETRAS. Por JAVI...
ROMPECABEZAS DE LA DEFINICIÓN DE LOS JUEGOS OLÍMPICOS EN 100 LETRAS. Por JAVI...ROMPECABEZAS DE LA DEFINICIÓN DE LOS JUEGOS OLÍMPICOS EN 100 LETRAS. Por JAVI...
ROMPECABEZAS DE LA DEFINICIÓN DE LOS JUEGOS OLÍMPICOS EN 100 LETRAS. Por JAVI...
 
Introducción a los Sistemas Integrados de Gestión
Introducción a los Sistemas Integrados de GestiónIntroducción a los Sistemas Integrados de Gestión
Introducción a los Sistemas Integrados de Gestión
 

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!