(Python 3.5) Problema con variables globales y funciones

Iniciado por BigKaz, 19 Diciembre 2016, 21:55 PM

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

BigKaz

Código (python) [Seleccionar]
def preg(nm,ap,m,j):
nm = input(m,": Ingresa nombre de,",j,": ")                         
while len(nm)>20 or not nm.isalpha() or len(nm)<=2:
nm = input(m,"Demasiados car. (min 3 y max 20) o car. invalido,",j,"ingrese otra vez el nombre: ")
limpiar()
ap = input(m,": Ingresa apellido de 1er jugador: ")
while len(ap)>20 or not ap.isalpha() or len(ap)<=2:
ap = input(m,"Demasiados car. (min 3 y max 20) o car. invalido,",j,"ingrese otra vez el apellido: ")
def programa(): #Definir el programa para poder hacer la funcion reinicio
global nm1,nm2,nm3,nm4,ap1,ap2,ap3,ap4
print ()
print ("|----------------|")
print ("|Lista de ajedrez|")
print ("|----------------|")
print ()
print ()
input("PRESIONA ENTER PARA INICIAR EL REGISTRO DE PRIMERA MESA| ") #Inicio primera mesa                               
limpiar()
global nm1,ap1,nm2,ap2,nm3,ap3,nm4,ap4  #Define a las variables mencionadas a globales                                                                                       
preg(nm1,ap1,"MESA 1","JUGADOR 1")
limpiar()
preg(nm2,ap2,"MESA 1","JUGADOR 2")
limpiar()                                     

Tengo un problema con este codigo, al parecer es por el estado de las variables.
Error:
Código (python) [Seleccionar]
|----------------|
|Lista de ajedrez|
|----------------|


PRESIONA ENTER PARA INICIAR EL REGISTRO DE PRIMERA MESA|
Traceback (most recent call last):
  File "CAJ_optimizado.py", line 199, in <module>
    programa()
  File "CAJ_optimizado.py", line 169, in programa
    preg(nm1,ap1,"MESA 1","JUGADOR 1")
NameError: name 'nm1' is not defined

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?

Once

También tienes que hacer global las variables dentro de la función preg

Saludos!

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.