Python - Juego de preguntas random

 
Vista:
sin imagen de perfil
Val: 31
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Juego de preguntas random

Publicado por Fernando (9 intervenciones) el 27/10/2019 00:39:33
Buenas tardes para todos.
Estoy tratando de hacer un juego de preguntas, el cual consta de una pregunta, su respectiva respuesta y un dato curioso respecto al tema. He trabajado en el código pero tengo dos dilemas: 1) No entiendo porqué me dice que "faciles" no está definido y creo que ya lo está y 2) intenté comparar la respuesta ingresada con la de la pregunta pero no logré hacerlo. Me aparece un error y siendo sincero, no sé cómo arreglarlo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import random
a=int(random.randrange(1,4))
def preguntas(correctas):
    faciles= {
            1: ["¿Cuándo se libró la Batalla de Boyacá?","7 de agosto de 1819","Sabías que…",],
            2: ["¿Cuál fue la primer ciudad del país en liberarse de la Corona Española?","Cali","Sabías que…"],
            3: ["¿A qué suceso histórico del país hace referencia Gabriel García Márquez en su obra 'Cien años de soledad'?","Masacre de las Bananeras","Sabías que…"],
            4: ["¿En qué año se separó Panamá de Colombia?","1903","Sabías que…"]
            }
def Formato(Cadena):
    for Vocal1,Vocal2 in [("á","a"),("é","e"),("í","i"),("ó","o"),("ú","u")]:
        Cadena=Cadena.replace(Vocal1,Vocal2)
    return Cadena.upper()
def Respuesta(mayuscula):
    for D,C in faciles.items():
        if Formato(D)==Formato(mayuscula):
            return C
elemento=faciles.get([a[1]])
for i,c in faciles.itmes:
    if elemento==faciles.get(a[1]):
        return c
print("Respuesta: ", Respuesta(input()), "Sabías que... ", elemento)
Les agradezco mucho su ayuda.
Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
sin imagen de perfil
Val: 9
Ha disminuido su posición en 7 puestos en Python (en relación al último mes)
Gráfica de Python

Juego de preguntas random

Publicado por Armando (1 intervención) el 27/10/2019 09:02:32
Hola Fernando. Y hola a todos; esta es mi primera intervención en el foro. Respecto a la pregunta, fíjate que el diccionario
"faciles" lo definiste dentro de la función "preguntas", la cual además queda definida, pero no veo que la ejecutes nunca.

Una característica de la POO (Programación Orientada a Objetos), es la capacidad de ENCAPSULADO, en virtud de la cual una variable definida dentro del espacio nominal de un objeto, no es visible desde "fuera" del mismo. Al definir la variable "faciles", un objeto de tipo "dict", dentro de "preguntas", objeto de tipo "function" (Recordemos que TODO en Python es un objeto) lo has encapsulado al espacio nominal de la función, y solo puedes accederlo desde dentro de la misma. Lo que necesitas hacer es retornar el diccionario:

1
2
3
def preguntas(correctas):
    faciles = {1:.....}
    return faciles

Y capturarlo en una variable global:

1
PREGS_FACS = preguntas("foo")

De este modo, el valor de la variable "PREGS_FACS" es tu diccionario "faciles", ahora accesible desde cualquier parte del programa.

Un par de comentarios más: No termino de entender el propósito del parámetro "correctas", que he satisfecho con el argumento "foo", pero no veo que se le utilice en la función, y como nunca la llamas, no puedo ver como pensabas utilizarlo. Pero creo que eso ya reclamará tu atención en su momento. También, por si tu IDE no te alerta, en la línea 19 escribiste "itmes" en lugar de "items"; y así no va a funcionar ... ;) Espero haber podido ayudar...SUERTE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 31
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Juego de preguntas random

Publicado por Fernando (7 intervenciones) el 27/10/2019 16:13:55
Muchas gracias Armando por contestar. Tengo unas dudas que surgieron a partir de tu comentario:

1) ¿Será que si excluyo "faciles" de la función podría ser más práctico?
Así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import random
 
faciles = {
            1: ["¿Cuándo se libró la Batalla de Boyacá?","7 de agosto de 1819","Sabías que…",],
            2: ["¿Cuál fue la primer ciudad del país en liberarse de la Corona Española?","Cali","Sabías que…"],
            3: ["¿A qué suceso histórico del país hace referencia Gabriel García Márquez en su obra 'Cien años de soledad'?","Masacre de las Bananeras","Sabías que…"],
            4: ["¿En qué año se separó Panamá de Colombia?","1903","Sabías que…"]
            }
a=int(random.randrange(1,4) in faciles)
def Formato(Cadena):
    for Vocal1,Vocal2 in [("á","a"),("é","e"),("í","i"),("ó","o"),("ú","u")]:
        Cadena=Cadena.replace(Vocal1,Vocal2)
    return Cadena.upper()
def Respuesta(mayuscula):
    for D,C in faciles.items():
        if Formato(D)==Formato(mayuscula):
            return C
def elemento(mayuscula):
    for C in faciles.items:
        if mayuscula(C)==faciles.get([a][1]):
            return C
sabias=faciles.get([a][2])
print(("Sabías que... ", sabias),"Respuesta: ", Respuesta(input()))

Lo intenté así como dijiste pero me seguía diciendo que "faciles" no estaba definido

2) No sé cómo hacer para comparar el segundo elemento de la lista con la respeusta de la entrada para que en la salida aparezca el tercer elemento de la lista: "Sabías que...". Así como lo tengo me dice "list index out of range" (y en otras modificaciones me dice que "unhashable type: 'list' "y "'int' object is not subscriptable")

3) ¿el comando que selecciona un número entre el rango definido en la lista esta bien definido?

4) ¿Por qué me aparece "'return' outside function"?

Agradezco los aportes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar