Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Biodude9456 en 2 Marzo 2016, 19:43 pm



Título: [SOLUCIONADO] Python - ¿Por qué este error? No consigo entenderlo :(
Publicado por: Biodude9456 en 2 Marzo 2016, 19:43 pm
Código
  1. def login():
  2.    sesion = input("Nombre de usuario:  ")
  3.    seguir = True
  4.    while seguir:
  5.        if sesion.lower()=="invitado":
  6.            print("Has iniciado sesion como invitado.")
  7.            seguir = False # Termina el while externo
  8.        elif sesion.lower()=="patata":
  9.            seguir = False
  10.            seguir2 = True
  11.            while seguir2: #bucle infinito hasta que password == "100azul100".
  12.                password = input("Contrasena:  ")
  13.                if password=="777":
  14.                    print("Has iniciado sesion como administrador.")
  15.                    seguir2 = False # Termina el while interno
  16.                    start.admin = True
  17.                    continue
  18.        elif sesion.lower()!="patata"or" invitado":
  19.            login()
  20.  
  21. login()
  22. while start.admin: # me marca que no existe el start.admin
  23.   print()
  24.   print("1-Añadir o eliminar usuarios")
  25.   #...

Nombre de usuario:  patata
Contrasena:  777
Has iniciado sesion como administrador.
Traceback (most recent call last):
  File "/storage/emulated/0/com.hipipal.qpyplus/scripts3/.last_tmp.py", line 21, in <module>
    login()
  File "/storage/emulated/0/com.hipipal.qpyplus/scripts3/.last_tmp.py", line 16, in login
    start.admin = True
NameError: global name 'start' is not defined

 
No entiendo, por qué no está definido :(


Título: Re: Python - ¿Por qué este error? No consigo entenderlo :(
Publicado por: engel lex en 2 Marzo 2016, 19:44 pm
donde definiste el objeto start?


Título: Re: Python - ¿Por qué este error? No consigo entenderlo :(
Publicado por: Biodude9456 en 2 Marzo 2016, 19:56 pm
Código
  1.     if password=="777":
  2.                    print("Has iniciado sesion como administrador.")
  3.                    seguir2 = False # Termina el while interno
  4.                    start.admin = True

Ahí


Edito: ese" ." de start.admin era un "_"


Título: Re: Python - ¿Por qué este error? No consigo entenderlo :(
Publicado por: engel lex en 2 Marzo 2016, 20:08 pm
si lo pones con un punto, estás tratando de acceder a la propiedad admin del objeto start...

la cosa es que en programacion existen lo que se llaman "scopes" que son los alcances de las variables... si  declaras una variable dentro de un scope (una sangria) no existe fuera de ella... es decir


Código
  1. variable1 = true;
  2. while variable1:
  3.    variable2 = false
  4.    variable1=variable2 #esto si funciona porque variable1 está en un scope más externo
  5. print(variable1)
  6. print(variable2)#aqui da un error porque variable2 solo existe en el scope del while


Título: Re: Python - ¿Por qué este error? No consigo entenderlo :(
Publicado por: Biodude9456 en 2 Marzo 2016, 20:38 pm
Entonces cómo crees que podría hacerlo ? :/


Título: Re: Python - ¿Por qué este error? No consigo entenderlo :(
Publicado por: engel lex en 2 Marzo 2016, 20:42 pm
en la linea 1 declara start, en su defecto, puedes hacer return true para que la funcion retorne verdadero cuando deba


Título: Re: Python - ¿Por qué este error? No consigo entenderlo :(
Publicado por: Biodude9456 en 2 Marzo 2016, 21:14 pm
Perdona la ignorancia, pero no lo consigo   :-X


Título: Re: Python - ¿Por qué este error? No consigo entenderlo :(
Publicado por: tincopasan en 2 Marzo 2016, 21:41 pm
estás haciendo dos cosas mal:
1)usando la variable fuera de la función en la cual la definiste, para hacerlo debes declararla como global dentro de la función:
Código
  1. def login():
  2. global startetc
  3. startetc=lo que  quieras
  4.  

2)no uses variables con punto, se interpreta como una propiedad de objeto, en todo caso usa _
start_etc


Título: Re: Python - ¿Por qué este error? No consigo entenderlo :(
Publicado por: Biodude9456 en 2 Marzo 2016, 22:29 pm
Eso es lo que necesitaba! Gracias :) aún estoy aprendiendo  :-[