Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: BigKaz en 7 Diciembre 2016, 16:04 PM

Título: (Python 3.5) No comprendo porque no funciona mi programa
Publicado por: BigKaz en 7 Diciembre 2016, 16:04 PM
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
Título: Re: (Python 3.5) No comprendo porque no funciona mi programa
Publicado por: MCKSys Argentina en 7 Diciembre 2016, 16:19 PM
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!