2016-12-06 4 views
-1

Dies ist Teil einer Funktion, mit der überprüft wird, ob ein Passwort 9 Zeichen lang, alphanumerisch und mindestens 1 Ziffer enthält. Idealerweise sollte ich die erste if-Anweisung verwenden können, aber seltsamerweise läuft sie nicht. Ich kann nicht herausfinden, warum test1.isalpha in der if-Anweisung als 'True' läuft, aber als 'False' ausgibt..isalpha druckt als False, aber wenn aktiviert, ist True

test1 = 'abcd12345' 

if len(test1) == 9 and test1.isalnum and not(test1.isalpha) 
    print('This should work.') 



if len(test1) == 9 and test1.isalnum: 
    if (test1.isalpha): 
     print('test1 is', test1.isalpha()) 

>>>('test1 is', False)   
+1

Sie verpassen '()' nach einigen Methodenaufrufen. – khelwood

Antwort

0

Sie haben if test1.isalpha() zu tun, statt if test1.isalpha

test1.isalpha ist eine Methode, Und test1.isalpha() wird ein Ergebnis True oder False zurückzukehren. Wenn Sie mit if überprüfen, wird die Bedingung immer erfüllt sein. Und anderes hängt vom Ergebnis ab.

Schauen Sie die Zurückhaltung.

In [13]: if test1.isalpha: 
    print 'test' 
else: 
    print 'in else' 
    ....:  
test 

In [14]: if test1.isalpha(): 
    print 'test' 
else: 
    print 'in else' 
    ....:  
in else 
1

In Ihrem if (if (test1.isalpha):) die Methode Instanz testen und nicht das Ergebnis dieser Methode.

Sie haben if (test1.isalpha()): (Klammern) wie folgt

0

Wie wäre es etwas zu benutzen?

  • len(test1)==9 eine Länge von 9
  • hasNumbers(inputString) Funktion, um sicherzustellen, zurückzukehren char.isdigit() auf jeder Ziffer in der Zeichenfolge
  • re.match("^[A-Za-z0-9]*$", test1) um sicherzustellen, dass es nur Alpha und Ziffer mit python re/regular expression

import re test1 = 'abcd12345' def hasNumbers(inputString): return any(char.isdigit() for char in inputString) if re.match("^[A-Za-z0-9]*$", test1) and hasNumbers(test1) and len(test1) == 9: print('Huzzah!')

Verwandte Themen