2017-12-26 2 views
-2

이 코드는 isdigit()islower()을 사용합니다.이 문자열은 문자열에 숫자 (isdigit) 또는 소문자 (islower) 만 포함되어 있는지 확인합니다. 숫자가있는 경우에도 islower가 항상 true를 반환하는 이유는 무엇입니까?

암호를 통해 주어진 문자열이 값이 true를 반환하고, 문자열이 수행되는 문자 만 포함 된 경우 문자열이 숫자 만 또는 문자 만이 포함 된 경우 숫자 만에게를 인쇄해야합니다 숫자 만 또는 소문자가 포함 된 경우

.

그러나 암호는 숫자와 문자 그것이 5 점를 추가 말할 포함 된 숫자 또는 문자가 있는지 확인하기 위해 elif 문에 값 false를 반환하고, 가야 예를 "12345qwerty"에 대한, 그리고 아직도 경우를 포함하는 경우 그렇지 않다면 다시 시도하십시오 시도하지만 그렇지 않습니다. 값은 여전히 ​​True로 반환되고 "12345qwerty"에는 문자와 숫자가 모두 포함되어 false로 반환되어야하므로 if 문장 인수는 의미가 없습니다. 문자열에는 대문자가없는 적어도 하나의 소문자이 사실

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") 

답변

4

str.islower() 돌아갑니다. 그것은 과 같지 않습니다. 모두 문자가 글자입니다.

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

이 명확 documented입니다 :

사실뿐만 아니라 문자와 숫자 생산의 믹스와 함께하는 문자열의 모든 문자는 소문자 제공

반환 true의 경우 모든 맡았다 문자 [4 ]는 소문자이고 적어도 하나의 케이스 문자가 있으며, 그렇지 않으면 false입니다.

[4] 대문자로 된 문자는 "Lu"(Letter, 대문자), "Ll"(Letter, 소문자) 또는 "Lt"(Letter, 제목 사례) 중 하나 인 일반 범주 속성을 가진 문자입니다.

당신은 문자가 있다면, 테스트 사용하고자하는 경우 str.isalpha() :

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

당신은 소문자가있는 경우 str.islower()으로 테스트하는 것을 결합 할 수 있습니다 :

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

오, 감사합니다. 남자 – Zohir

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)) 
+0

그것을 유지하는 것이 가능하지 않습니까, 그렇지 않은 이유는 작동하지 않습니다. 괜찮 으면, 기꺼이 코드를 사용해 보겠습니다. 감사합니다. – Zohir

관련 문제