Duda sobre and en script Python

Iniciado por Sergiolocuelo, 13 Agosto 2018, 19:10 PM

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

Sergiolocuelo

Hola, tengo un script el cual es este:

contador=0
Email=input("Introduce tu email: ")

for a in Email:

if(a=="@" or a=="."):
contador=contador+1

if contador==2:
print("Email correcto")
else:
print("Email incorrecto")


El caso es que en el if del bucle for puse un "and" y cuando introducía el valor de Email, añadía un gmail con @ y el punto: hola@gmail.com

Me tendría que decir el programa que el gmail estaba bien con el "and", pero no fue así. Cambié el "and" por un "or" y al final me dijo que estaba bien.

Se supone que con el "and" me tendría que decir que el email estaba bien, ya que con "and" declaro que si "a" tiene "@" y "." se suma 1 al contador; y con "or" declaro que si "a" tiene "@" o "." sume 1. Yo quiero que el email tenga "@" y "." Y no quiero que email tenga "@" o "."

Lo raro es que en el if el "or" hace la función del "and", porque si introduzco un email con "@" y no con "." el IF con "or" me dice que el email es incorrecto cuando tendría que decirque que está bien porque el "or" significa que debe de tener un @ o un punto   :rolleyes:

Serapis

#1
Entiendes la lógica buleana, pero fallas en lo elemental...

'a' solo puede ser a la vez (esto es en un ciclo del bucle) una única cosa "@" por ejemplo, ó "p", ó "x", ó "."
Con 'and', exiges que sea: "@" y al mismo tiempo ".", pero eso no puede ser... 'a' solo contiene un carácter... no puede ser los dos a la vez. ...luego falla tu lógica.

...por si te quedan dudas... pongamos que tengo una sola moneda en la mano, será de valor 1 ó 2 ó 5... pero no de 1 y 2, o de 1 y 5 o de 2 y 5... guardo la moneda barajo y saco otra... ahora podrá ser otra (o la misma de antes), pero al ser una sola moneda, no podrás ser dos distintas al mismo tiempo.

Si necesitas verificar que se den ambos, debe ser en diferente ciclo, en tal caso debes marcar la presencia de cada uno de forma independiente...


bucle ...
    Si 'a' = "@"
        prueba = prueba or 1
    sino
        si 'a' = "."
            prueba = prueba or 2
        sino
            ....
        fin si
    fin si
fin bucle


Tras el bucle podrás sabes si aparece '@', '.' o ambos...

Sergiolocuelo

Muchisimas gracias, lo e comprendido  :)

tincopasan

1) Debería estar en scripting
2) con el for recorres caracter a caracter por lo tanto no puede tener dos valores: A = A y no puede A = B
3)¿para qué el for?¿y lo de contador?
4)algo más simple y que use and:
Código (python) [Seleccionar]

Email=input("Introduce tu email: ")

if "@" and "." in Email: #si ambos caracteres están en la cadena(completa)
    print("Email correcto")
else:
    print("Email incorrecto")

Sergiolocuelo

#4
Soy novato en Python y estoy aprendiendo con un curso de Python en Youtube y el "Profesor" estaba dando el tema de bucles, solo eso  ;)

También me gustaría mejorar el script, ya que en un correo se pueden añadir más de un punto y no se pueden añadir otros caracteres, ¿Como podría hacer para que por ejemplo negase caractéres que no se pueden añadir y para que no de error al poner más de un punto?

tincopasan

bueno, como has entendido que hace el for y el while crea ciclos para comprobar que valores no quieres que se ingresen comparandolos con tu grupo que no quieres incluir y de igual forma ahora creas un contador y si tiene más de 2 es que hay algo mal. Una vez que entiendes que se consigue con cada sentencia o funciones o declaraciones o lo que sea, solo es cuestión de lógica, que ahí ya es personal, cada cual aplica la propia y no por ser distintas indica que alguna este mal.
Hay muchos que saben mucho en este foro y te ayudarán con gusto, pero no esperes que desarrollen todo tu código. Consejo: has scripts (aunque no funcionen) y prengunta en base a ellos y obtendrás más de una respuesta y tu conocimiento aumentará exponencialmente.
Saludos.

Sergiolocuelo

Muchas gracias por vuestros comentarios, me habéis ayudado mucho  :D