4

Pregunta de noob.

Me da un fallo al crear el juego del ahorcado en python. Aquí está el código.

He seguido un tutorial de youtube.

import random    
import os

palabras = ["AZUCAR", 'CHOCOLATE', 'COCODRILO']

palabra = random.choice(palabras)

#Fallos

fallo0 = '''
 ___________
|          |
|          
|
|
|
|
-------------
'''

fallo1 = '''
 ___________
|          |
|          0
|
|
|
|
-------------

'''
fallo2 = '''
 ___________
|          |
|          0
|          |
|          |
|
|
-------------

'''

fallo3 = '''
 ___________
|          |
|          0
|       ---|
|          |
|
|
-------------

'''

fallo4 = '''
 ___________
|          |
|          0
|       ---|---
|          |
|
|
-------------

'''

fallo5 = '''
 ___________
|          |
|          0
|       ---|---
|          |
|         /
|
-------------

'''

fallo6 = '''
 ___________
|          |
|          0
|       ---|---
|          |
|         / \
|
-------------

'''
letras_correctas = ""
letras_todas = ""
fallos = 0


while True: 

    os.system("clear")

    print ('++++++++++JUEGO DEL AHORCADO+++++++++++')
    print ('++++++++++JUEGO DEL AHORCADO+++++++++++')
    print ('++++++++++JUEGO DEL AHORCADO+++++++++++')

    if fallos == 0:
        print (fallo0)
    elif fallos == 1:
        print (fallos1)
    elif fallos == 2:
        print (fallo2)
    elif fallos == 3:
        print (fallo3)
    elif fallos == 4:
        print (fallo4)
    elif fallos == 5:
        print (fallo5)
    elif fallos == 6:
        print (fallo6)


    #Palabras acertadas y palabras no acertadas

    resultado = ''

    for letra in palabra:
        if letra in letras_correctas:
            resultado += letra
        else:
            resultado += "_"

    print ('        {}'.format(resultado))

    print("")
    print("")

#Comprobamos si se ha acertado la palabra (si el resultado es igual a palabra)

    if resultado == palabra:
        print ("+++++++++++++++ HAS GANADO +++++++++++++++++")
    break

    if fallos > 5:
        print ("La palabra era: ", palabra)
        print ("+++++++++++ HAS PERDIDO ++++++++++++++")
    break

#Bucle INPUT

while True: 

    letra_introducida = input("Escribe una letra para comenzar el juego: ")
    letra_usuario = letra_introducida.upper()

    if len (letra_usuario) < 1 or len (letra_usuario) > 1:
        print ("Introduzca una sola letra: ")
    elif letra_usuario in letras_todas:
        print ("Ya has dicho esa letra")
    elif not letra_usuario.isalpha():
        print ("Escriba una letra")
    else:
        letras_todas += letra_usuario
        break

#Comprobando si la letra introducida esta en la palabra elegida

    if letra_usuario not in palabra: 
        fallos += 1
    else:
        letras_correctas += letra_usuario

Cuando lo ejecuto y escribo una letra me aparece el error ""letra" is not defined"

Error:

Traceback (most recent call last):
  File "ahorcado.py", line 150, in <module>
    letra_introducida = input("Escribe una letra para comenzar el juego: ")
  File "<string>", line 1, in <module>
NameError: name 'c' is not defined

Cuál es el problema???

"En este video llevamos a cabo la codificación del juego del ahorcado. Y lo hacemos utilizando cadenas de caracteres como el tipo de datos donde guardamos las palabras y las letras que dice el usuario."

"RETO PARA RESOLVER:

Volver a llevar a cabo la codificación del juego del ahorcado, pero esta vez utilizar listas como tipo de datos donde guardar la palabra y las letras, en vez de cadenas de caracteres"

  • 1
    No pongas enlace al código, copialo como texto en la pregunta. – JDev Jul 25 '19 at 13:27
  • 2
    Hola Diego, bienvenido a [es.so], te recomiendo pasarte por [tour] y [ask] para conocer por encima el sitio y cómo realizar buenas preguntas. Como comenta JDev, agrega el código a la pregunta directamente. Para ello solo tienes que pegarlo, luego lo seleccionas todo y pulsas `Ctrl` + `k` o el botón `{}` del editor para que quede formateado como código. Por otro lado agrega la traza completa del error, tiene información importante como la linea que lo causa. Para modificar tu pregunta usa el enlace [`editar`](https://es.stackoverflow.com/posts/281519/edit) que hay debajo de ella. Un saludo. – FJSevilla Jul 25 '19 at 13:39
  • 1
    Sin entrar en detalles de como realizar una pregunta **correctamente** que de eso ya se han encargado otros compañeros. No creo que hayas adjuntado el código completo ya que o te faltan lineas o ni tu mismo has probado la aplicación ya que a mi no me hace nada – Capt.Teach Jul 25 '19 at 13:43
  • El código está completo. – Diego Sánchez Jul 25 '19 at 14:02
  • 3
    **Estás usando Python 2 para ejecutar ese código** y en Python 2 `input` no se debe usar jamás para entradas de usuario (debes usar `raw_input`). `input` en Py2 no retorna una cadena, evalúa lo ingresado como si código Python válido se tratara. Mirate [Diferencia ente input y raw_input](https://es.stackoverflow.com/questions/38288/diferencia-entre-input-y-raw-input/38303#38303). No obstante si no tienes una razón de peso para usar Python 2, olvidate de él y pasate a Python 3, a Python 2 le quedan 5 meses de soporte oficial... Si usa Python 3 tu error desaparece. – FJSevilla Jul 25 '19 at 14:28

1 Answers1

5

Veo que tu código tiene varios problemas, sin embargo para que puedas continuar revisandolo simplemente tienes que cambiar en la línea +150

letra_introducida = input("Escribe una letra para comenzar el juego: ")

Por esto:

letra_introducida = raw_input("Escribe una letra para comenzar el juego: ")

Adicional es importante destacar que el break que tienes en la línea 161 también puede afectar el desarrollo del juego, lo puedes comentar de esta manera y continuar resolviendo:

#break

Espero te sea de ayuda!

jsdnlb
  • 2,479
  • 12
  • 34