即使有数字,为什么islower总是返回true?

时间:2017-12-26 15:35:42

标签: python python-3.x

这段代码使用isdigit()islower()来检查字符串是仅包含数字(isdigit)还是仅包含小写字母(islower)。

如果通过密码给出的字符串仅包含数字或小写字母,则该值应返回true,如果字符串仅包含数字,则打印仅数字,如果字符串仅包含字母它只包含字母。

但是,如果密码包含数字和字母,例如"12345qwerty",则应返回值false,然后转到elif语句,检查是否包含数字或字母,以表示添加5分,如果仍然没有,那么它会说再试一次,但事实并非如此。它仍然返回值为True并打印if语句参数,这是没有意义的,因为密码"12345qwerty"包含字母和数字,应该返回false。

import re
password = input("")
if password.isdigit():
    print("only numbers ")
elif re.search("[1-9]", password):
    print("thats 5 points")
else:
    print("try again")

if password.islower():
   print("only letters ")
elif re.search("[a-z]", password):
   print("thats 5 points")
else:
   print("try again")

2 个答案:

答案 0 :(得分:4)

当字符串中没有大写字母且至少有一个小写字母时,

str.islower()返回true 。这与所有字符都是字母不一样。

如果所有字母都是小写的,那么字母和数字混合的字符串也会生成True:

>>> 'a42b'.islower()
True
>>> 'a42B'.islower()
False

这显然是documented

  

如果字符串中的所有外壳字符[4]都是小写且至少有一个外壳字符,则返回true,否则返回false。

     

[4]套装字符是具有一般类别属性的字符,其中一个是“Lu”(字母,大写),“Ll”(字母,小写)或“Lt”(字母,标题)。

如果您想测试是否只有字母,请使用str.isalpha()

>>> 'a42B'.isalpha()
False
>>> 'aB'.isalpha()
True

您可以将其与str.islower()结合使用,以测试是否只有小写字母:

if password.isalpha() and password.islower():
    # only lowercase letters, nothing else.

答案 1 :(得分:0)

您可以使用any来确定字符串是否包含展位号和字母,并根据该函数构建案例:

s = "12345qwerty"
def get_val(s):
  return not (any(i.isdigit() for i in s) and any(i.islower() for i in s))
print(get_val(s))