Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: BigKaz en 19 Diciembre 2016, 21:55 pm



Título: (Python 3.5) Problema con variables globales y funciones
Publicado por: BigKaz en 19 Diciembre 2016, 21:55 pm
Código
  1. def preg(nm,ap,m,j):
  2. nm = input(m,": Ingresa nombre de,",j,": ")                          
  3. while len(nm)>20 or not nm.isalpha() or len(nm)<=2:
  4. nm = input(m,"Demasiados car. (min 3 y max 20) o car. invalido,",j,"ingrese otra vez el nombre: ")
  5. limpiar()
  6. ap = input(m,": Ingresa apellido de 1er jugador: ")
  7. while len(ap)>20 or not ap.isalpha() or len(ap)<=2:
  8. ap = input(m,"Demasiados car. (min 3 y max 20) o car. invalido,",j,"ingrese otra vez el apellido: ")
  9. def programa(): #Definir el programa para poder hacer la funcion reinicio
  10. global nm1,nm2,nm3,nm4,ap1,ap2,ap3,ap4
  11. print ()
  12. print ("|----------------|")
  13. print ("|Lista de ajedrez|")
  14. print ("|----------------|")
  15. print ()
  16. print ()
  17. input("PRESIONA ENTER PARA INICIAR EL REGISTRO DE PRIMERA MESA| ") #Inicio primera mesa                                
  18. limpiar()
  19. global nm1,ap1,nm2,ap2,nm3,ap3,nm4,ap4  #Define a las variables mencionadas a globales                                                                                        
  20. preg(nm1,ap1,"MESA 1","JUGADOR 1")
  21. limpiar()
  22. preg(nm2,ap2,"MESA 1","JUGADOR 2")
  23. limpiar()                                    
Tengo un problema con este codigo, al parecer es por el estado de las variables.
Error:
Código
  1. |----------------|
  2. |Lista de ajedrez|
  3. |----------------|
  4.  
  5.  
  6. PRESIONA ENTER PARA INICIAR EL REGISTRO DE PRIMERA MESA|
  7. Traceback (most recent call last):
  8.  File "CAJ_optimizado.py", line 199, in <module>
  9.    programa()
  10.  File "CAJ_optimizado.py", line 169, in programa
  11.    preg(nm1,ap1,"MESA 1","JUGADOR 1")
  12. NameError: name 'nm1' is not defined
  13.  
Hice la funcion preg() para optimizar mi codigo y asignar las variables con los parametros. Pero tengo un global en TODAS mis funciones y aun asi no me sirve, como soluciono esto?


Título: Re: (Python 3.5) Problema con variables globales y funciones
Publicado por: Once en 20 Diciembre 2016, 05:41 am
También tienes que hacer global las variables dentro de la función preg

Saludos!


Título: Re: (Python 3.5) Problema con variables globales y funciones
Publicado por: engel lex en 20 Diciembre 2016, 13:59 pm
Global más que las variables a scope global, es como si las sacara de un contenedor especial (y si no existe las crea) así como estas no cambian del scope donde fueron llamadas, debes llamarlas al entrar en otro... es decir llamarlas cada vez que entras a una función donde serán usadas