(Python 3.5) No comprendo porque no funciona mi programa

Iniciado por BigKaz, 7 Diciembre 2016, 16:04 PM

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

BigKaz

Hola, estoy haciendo un programa para gestionar las personas que se registran en las mesas de mi colegio pero me da error al hacer algunas cosas que detallare mas abajo.
Código (python) [Seleccionar]

'''Programa hecho para evitar
confusiones en las mesas'''
import os
def limpiar():
   os.system("cls")
def menum1():
print ("""MODO ADMINISTRACION PARCIAL ACTIVADO:
      Ver MESA 1: vm1
      Reiniciar: reinicio
      Salir: salir
      Continuar al registro de segunda mesa: r2m""")
respuad = input("admin: ")
limpiar()
if respuad == ("r2m"):
pass
limpiar()
if respuad == ("vm1"):
print (nm1,ap1,"|",nm2,ap2)
input("Presione enter: ")
limpiar()
menum1()
if respuad == ("salir"):
quit()
if respuad == ("reinicio"):
programa()
def programa():
print ()
print ("|----------------|")
print ("|Lista de ajedrez|")
print ("|----------------|")
print ()
print ()
input("PRESIONA ENTER PARA INICIAR EL REGISTRO DE PRIMERA MESA| ")                                 #NM = NOMBRE.
limpiar()                                                                                          #AP = APELLIDO.
nm1 = (input("MESA 1: Ingresa nombre de 1era persona: "))                             #MESA 1
while (len(nm1)>20) or (not (nm1.isalpha()) or (len(nm1)<=2)):
   nm1 = (input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: "))
limpiar()
ap1 = (input("MESA 1: Ingresa apellido de 1era persona: "))
while (len(ap1)>20) or (not (ap1.isalpha())):
   ap1 = (input("Demasiados car. (max 20) o car. invalido, ingrese otra vez: "))
limpiar()
nm2 = (input("MESA 1: Ingresa nombre de 2da persona: "))
while (len(nm2)>20) or (not (nm2.isalpha()) or (len(nm2)<=2)):
   nm2 = (input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: "))
limpiar()
ap2 = (input("MESA 1: Ingresa apellido de 2da persona: "))
while (len(ap2)>20) or (not (ap2.isalpha())):
ap2 = (input("Demasiados car. (max 20) o car. invalido, ingrese otra vez: "))
limpiar()                                                                              #FIN MESA 1
com = input("PRESIONE ENTER PARA INICIAR REGISTRO DE SEGUNDA MESA| ")
if com == ("admin"):
limpiar()
menum1()
limpiar()
nm3 = (input("MESA 2: Ingresa nombre de 1era persona: "))
while (len(nm3)>20) or (not (nm3.isalpha()) or (len(nm3)<=2)):
   nm3 = (input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: "))
limpiar()
ap3 = (input("MESA 2: Ingresa apellido de 1era persona: "))
while (len(ap3)>20) or (not (ap3.isalpha())):
   ap3 = (input("Demasiados car. (max 20) o car. invalido, ingrese otra vez: "))
limpiar()
nm4 = (input("MESA 2: Ingresa nombre de 2da persona: "))
while (len(nm4)>20) or (not (nm4.isalpha()) or (len(nm4)<=2)):
   nm4 = (input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: "))
limpiar()
ap4 = (input("MESA 2: Ingresa apellido de 2da persona: "))
while (len(ap4)>20) or (not (ap4.isalpha())):
ap4 = (input("Demasiados car. (max 20) o car. invalido, ingrese otra vez: "))
programa()


Me da error al entrar en modo de administacion parcial:
Código (python) [Seleccionar]
|----------------|
|Lista de ajedrez|
|----------------|


PRESIONA ENTER PARA INICIAR EL REGISTRO DE PRIMERA MESA|
MESA 1: Ingresa nombre de 1era persona: Big
MESA 1: Ingresa apellido de 1era persona: Kaz
MESA 1: Ingresa nombre de 2da persona: elhacker
MESA 1: Ingresa apellido de 2da persona: net
PRESIONE ENTER PARA INICIAR REGISTRO DE SEGUNDA MESA| admin
MODO ADMINISTRACION PARCIAL ACTIVADO:
                                     Ver MESA 1: vm1
                                     Reiniciar: reinicio
                                     Salir: salir
                                     Continuar al registro de segunda mesa: r2m
admin: vm1 #Aqui el error
Traceback (most recent call last):
 File "C:\Users\usuario\Desktop\AEN.py", line 71, in <module>
   programa()
 File "C:\Users\usuario\Desktop\AEN.py", line 54, in programa
   menum1()
 File "C:\Users\usuario\Desktop\AEN.py", line 18, in menum1
   print (nm1,ap1,"|",nm2,ap2)
NameError: name 'nm1' is not defined


Alguien sabe cual es el error y como lo soluciono?

PD: La sección en la que puse el error esta en Geshi, esta bien o solo tengo que poner geshi en el codigo?

Gracias.
Bigkaz

MCKSys Argentina

La variable nm1 no xiste en el entorno de la función menuml. La usas (defines) en programa, por lo cual es local a dicha función.

Para poder usarla en ambas funciones, define la variable en forma global (en este caso, seguido al import que tienes)

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."