2016-12-06 6 views
-1

Это часть функции, используемой для проверки того, что пароль имеет длину 9 символов, буквенно-числовое значение и содержит не менее 1 номера. В идеале я должен иметь возможность использовать первый оператор if, но, как ни странно, он не запускается. Я не могу понять, почему test1.isalpha работает как «True» в выражении if, но печатает как «False».. Isisalpha печатает как False, но при проверке является 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

У вас отсутствует '()' после некоторых вызовов вашего метода. – khelwood

ответ

0

Вы должны сделать if test1.isalpha() вместо if test1.isalpha

test1.isalpha является метод, и test1.isalpha() будет возвращать результат True или False. Когда вы проверяете, будет ли всегда удовлетворять метод условия. И другое зависит от результата.

Посмотрите на неуверенность.

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

В вашей, если (if (test1.isalpha):) вы тестируете экземпляр метода, а не результат этого метода.

Вы должны использовать if (test1.isalpha()): (круглые скобки)

0

Как о чем-то вроде этого?

  • len(test1)==9 обеспечить длину 9
  • hasNumbers(inputString) функции для возврата char.isdigit() на любую цифру в строке
  • re.match("^[A-Za-z0-9]*$", test1), чтобы убедиться, что есть только альфа и цифры с помощью 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!')