Saludos y ayuda con código Python

Iniciado por PUAROT, 3 Enero 2016, 17:48 PM

0 Miembros y 1 Visitante están viendo este tema.

PUAROT

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.Estoy 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.
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 !!

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)

PUAROT

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:
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 !

tincopasan

podés declarar una variable como global!

PUAROT

Cita de: tincopasan en  5 Enero 2016, 00:19 AM
podés declarar una variable como global!
He aquí otra prueba de lo verde que estoy ... no conocía esa función ... he buscado por internet y lo he encontrado Muchas gracias !!!

Seguiré investigando, practicando y por supuesto preguntando :-D