Test Foro de elhacker.net SMF 2.1

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 (python) [Seleccionar]
def login():
   sesion = input("Nombre de usuario:  ")
   seguir = True
   while seguir:
       if sesion.lower()=="invitado":
           print("Has iniciado sesion como invitado.")
           seguir = False # Termina el while externo
       elif sesion.lower()=="patata":
           seguir = False
           seguir2 = True
           while seguir2: #bucle infinito hasta que password == "100azul100".
               password = input("Contrasena:  ")
               if password=="777":
                   print("Has iniciado sesion como administrador.")
                   seguir2 = False # Termina el while interno
                   start.admin = True
                   continue
       elif sesion.lower()!="patata"or" invitado":
           login()

login()
while start.admin: # me marca que no existe el start.admin
  print()
  print("1-Añadir o eliminar usuarios")
  #...


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 (python) [Seleccionar]
    if password=="777":
                   print("Has iniciado sesion como administrador.")
                   seguir2 = False # Termina el while interno
                   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 (python) [Seleccionar]
variable1 = true;
while variable1:
    variable2 = false
    variable1=variable2 #esto si funciona porque variable1 está en un scope más externo
print(variable1)
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 (python) [Seleccionar]

def login():
global startetc
startetc=lo que  quieras


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  :-[