这段代码使用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")
答案 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))