Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Menú en Python

Estas en el tema de Menú en Python en el foro de Python en Foros del Web. Ante todo un saludo a todos y dar las gracias por molestaros en leer mi pregunta. Estoy intentando aprender python 3,x por mi cuenta y ...
  #1 (permalink)  
Antiguo 03/01/2016, 10:38
Avatar de PUAROT  
Fecha de Ingreso: octubre-2004
Ubicación: Sevilla
Mensajes: 34
Antigüedad: 20 años, 1 mes
Puntos: 1
Menú en Python

Ante todo un saludo a todos y dar las gracias por molestaros en leer mi pregunta.

Estoy intentando aprender python 3,x por mi cuenta y riesgo, y es muy frustrante no tener a nadie a quien ir preguntando las dudas y seguir chocando en los mismos errores.

Os cuento, intentando aprender haciendo una pequeña aplicación pero estoy atascado, mi problema puede parecer una chorrada, pero la idea es arreglar esa chorrada para aprender. No le doy mas vueltas....

Estoy haciendo un menú que me pregunta el tema a tratar para que me lea unos test que tengo en excel, después me pregunta cuantas preguntas quiero, y luego empieza las preguntas.

Quiero reutilizar código y ahí es donde empieza mi problema.

El código se ejecuta y pregunta tema, elijo la respuesta D por ejemplo y me dice que ha cargado el archivo correspondiente y hace una segunda ronda cambiando parámetros para que las opciones no sean temas si no numero de preguntas
Luego sale una frase que dice va a comenzar el tes de x preguntas sobre Y tema

Pues bien en esa frase, para poner el tema me utiliza el valor de la primera pasada de código .

Le podéis echar un vistazo y orientarme un poco ?

Muchas gracias de antemano !!

Código:
import openpyxl
import random

selecciona = ["Seleciona el Tema de los test :", "Cuantas preguntas quieres en el Test"]
temas = ["a) Conocimientos Generales ", "b) Derecho ", "c) Factores Humanos", "d) Meteorología", "e) Navegtacióbn", "f) Performances", "g) Principios Operacionales", "h) Principios de vuelo","q) Salir","a) 10", "b) 20","c) 30","d) 40","e) 50","f) 60","g) 70","h) 80"]
respuestas = ["a","A","b","B","c","C","d","D","e","E","f","F","g","G","h","H","q","Q"]
archivo = ['Test/CGA.xlsx','Test/DA.xlsx','Test/FH.xlsx','Test/ME.xlsx','Test/NV.xlsx','Test/PE.xlsx','Test/PO.xlsx','Test/PV.xlsx']
comienza = ["Comienza Test de","preguntas aleatorias de"]

class Selec_tema():
    def __init__(self,m,n,l):
        self.m = m
        self.n = n
        self.l = l
        print (selecciona[l])
        for tema in temas[self.m:self.n]:
            print (tema)
        self.elige()
        
    def elige(self):
        seleccion = input()
        while not (seleccion in respuestas[0:18]):
            print ("Seleción no valida")
            seleccion = input()
        self.comprueba(seleccion)

    def comprueba(self,seleccion):
        if seleccion in ("a","A"):
            self.accion(0)
        elif seleccion in ("b","B"):
            self.accion(1)
        elif seleccion in ("c","C"):
            self.accion(2)
        elif seleccion in ("d","D"):
            self.accion(3)
        elif seleccion in ("e","E"):
            self.accion(4)
        elif seleccion in ("f","F"):
            self.accion(5)
        elif seleccion in ("g","G"):
            self.accion(6)
        elif seleccion in ("h","H"):
            self.accion(7)
        elif seleccion in ("q","Q"):
            print ("Adios")

    def accion(self,pos):
        while self.l == 0: 
            self.carga(archivo[pos])
        self.limpia()
        numero_preguntas = (pos +1) * 10
        self.empieza(pos,numero_preguntas)
       
    def carga(self,str):
        print ("archivo cargado")
        cga = openpyxl.load_workbook(str)
        hoja_cga = cga.get_sheet_by_name('Hoja 1')
        p = Selec_tema(9,17,1)
        
    def empieza(self,pos,numero_preguntas):        
        print (comienza[0],numero_preguntas,comienza[1],"".join(temas[pos])[3:])
        r = Test(numero_preguntas)

    def limpia(self):
        for limpia in range(25):
            print ("")

class Test():
    def __init__(self,numero_preguntas):
        self.numero_preguntas = numero_preguntas
        print (numero_preguntas)
 #       self.mostrar_preguntas()

    def mostrar_preguntas(self):
        print ( p.hoja_cga["F2"].value)

    def mostrar_respuestas(self):
        pass

    def comprobar_respiuesta(self):
        pass

    def puntuacion(self):
        pass

    def run(self):
        pass

p = Selec_tema(0,9,0)
  #2 (permalink)  
Antiguo 04/01/2016, 12:55
Avatar de PUAROT  
Fecha de Ingreso: octubre-2004
Ubicación: Sevilla
Mensajes: 34
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Menú en Python

Me autorespondo (en parte), por si a alguien le sirve de algo.

Me he dado cuenta de que el problema es que no manejo bien las variables, despues de horas mirando el código y haciendo pruebas he comprendido que dentro de un método o función, no puedo crear una variable y utilizarla en otra función, mas o menos, que esto no funciona:
Código:
class Formulas():
    
    def suma(self,a,b):
        res1 = a + b + 1
    
    def resta(self,a,b):
        res2 = a - b - 1

    def multi(self):
        mul = res1 * res2
        print (mul)
Por lo que ahora viene la pregunta (esta vez mucho mas simple)

No hay forma de crear una variable dentro de una función, y poder utilizarla en el resto del código ?
Ya se que si la creo al principio, en la clase general, o dentro de una clase podré usarla, pero no puedo crearla dentro de una función?

La idea es no crear variables que dependiendo como se ejecuta el código lo mismo no se utilizan...

Gracias otra vez !
  #3 (permalink)  
Antiguo 05/01/2016, 06:00
Avatar de PUAROT  
Fecha de Ingreso: octubre-2004
Ubicación: Sevilla
Mensajes: 34
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Menú en Python

Me han contestado en otro foro que puedo declarar una variable como GLOBAL , ( por si a alguien le sirve este pos t en el futuro.... )

Otra prueba de lo verde que estoy ...

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:11.