Foro de elhacker.net

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
  1. '''Programa hecho para evitar
  2. confusiones en las mesas'''
  3. import os
  4. def limpiar():
  5.    os.system("cls")
  6. def menum1():
  7. print ("""MODO ADMINISTRACION PARCIAL ACTIVADO:
  8.       Ver MESA 1: vm1
  9.       Reiniciar: reinicio
  10.       Salir: salir
  11.       Continuar al registro de segunda mesa: r2m""")
  12. respuad = input("admin: ")
  13. limpiar()
  14. if respuad == ("r2m"):
  15. pass
  16. limpiar()
  17. if respuad == ("vm1"):
  18. print (nm1,ap1,"|",nm2,ap2)
  19. input("Presione enter: ")
  20. limpiar()
  21. menum1()
  22. if respuad == ("salir"):
  23. quit()
  24. if respuad == ("reinicio"):
  25. programa()
  26. def programa():
  27. print ()
  28. print ("|----------------|")
  29. print ("|Lista de ajedrez|")
  30. print ("|----------------|")
  31. print ()
  32. print ()
  33. input("PRESIONA ENTER PARA INICIAR EL REGISTRO DE PRIMERA MESA| ")                                 #NM = NOMBRE.
  34. limpiar()                                                                                          #AP = APELLIDO.
  35. nm1 = (input("MESA 1: Ingresa nombre de 1era persona: "))                             #MESA 1
  36. while (len(nm1)>20) or (not (nm1.isalpha()) or (len(nm1)<=2)):
  37.    nm1 = (input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: "))
  38. limpiar()
  39. ap1 = (input("MESA 1: Ingresa apellido de 1era persona: "))
  40. while (len(ap1)>20) or (not (ap1.isalpha())):
  41.    ap1 = (input("Demasiados car. (max 20) o car. invalido, ingrese otra vez: "))
  42. limpiar()
  43. nm2 = (input("MESA 1: Ingresa nombre de 2da persona: "))
  44. while (len(nm2)>20) or (not (nm2.isalpha()) or (len(nm2)<=2)):
  45.    nm2 = (input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: "))
  46. limpiar()
  47. ap2 = (input("MESA 1: Ingresa apellido de 2da persona: "))
  48. while (len(ap2)>20) or (not (ap2.isalpha())):
  49. ap2 = (input("Demasiados car. (max 20) o car. invalido, ingrese otra vez: "))
  50. limpiar()                                                                              #FIN MESA 1
  51. com = input("PRESIONE ENTER PARA INICIAR REGISTRO DE SEGUNDA MESA| ")
  52. if com == ("admin"):
  53. limpiar()
  54. menum1()
  55. limpiar()
  56. nm3 = (input("MESA 2: Ingresa nombre de 1era persona: "))
  57. while (len(nm3)>20) or (not (nm3.isalpha()) or (len(nm3)<=2)):
  58.    nm3 = (input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: "))
  59. limpiar()
  60. ap3 = (input("MESA 2: Ingresa apellido de 1era persona: "))
  61. while (len(ap3)>20) or (not (ap3.isalpha())):
  62.    ap3 = (input("Demasiados car. (max 20) o car. invalido, ingrese otra vez: "))
  63. limpiar()
  64. nm4 = (input("MESA 2: Ingresa nombre de 2da persona: "))
  65. while (len(nm4)>20) or (not (nm4.isalpha()) or (len(nm4)<=2)):
  66.    nm4 = (input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: "))
  67. limpiar()
  68. ap4 = (input("MESA 2: Ingresa apellido de 2da persona: "))
  69. while (len(ap4)>20) or (not (ap4.isalpha())):
  70. ap4 = (input("Demasiados car. (max 20) o car. invalido, ingrese otra vez: "))
  71. programa()

Me da error al entrar en modo de administacion parcial:
Código
  1. |----------------|
  2. |Lista de ajedrez|
  3. |----------------|
  4.  
  5.  
  6. PRESIONA ENTER PARA INICIAR EL REGISTRO DE PRIMERA MESA|
  7. MESA 1: Ingresa nombre de 1era persona: Big
  8. MESA 1: Ingresa apellido de 1era persona: Kaz
  9. MESA 1: Ingresa nombre de 2da persona: elhacker
  10. MESA 1: Ingresa apellido de 2da persona: net
  11. PRESIONE ENTER PARA INICIAR REGISTRO DE SEGUNDA MESA| admin
  12. MODO ADMINISTRACION PARCIAL ACTIVADO:
  13.                                      Ver MESA 1: vm1
  14.                                      Reiniciar: reinicio
  15.                                      Salir: salir
  16.                                      Continuar al registro de segunda mesa: r2m
  17. admin: vm1 #Aqui el error
  18. Traceback (most recent call last):
  19.  File "C:\Users\usuario\Desktop\AEN.py", line 71, in <module>
  20.    programa()
  21.  File "C:\Users\usuario\Desktop\AEN.py", line 54, in programa
  22.    menum1()
  23.  File "C:\Users\usuario\Desktop\AEN.py", line 18, in menum1
  24.    print (nm1,ap1,"|",nm2,ap2)
  25. 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!