2017-12-26 4 views
-2

このコードでは、文字列に数字(isdigit)または小文字(islower)のみが含まれているかどうかを確認するisdigit()およびislower()が使用されます。数字がある場合でも、なぜislowerは常にtrueを返しますか?

パスワードによって与えられた文字列は、文字列はそれがないだけ文字が含まれている場合、文字列が数字のみか文字だけが含まれている場合、値がtrueと印刷数字だけを返すべき数字または小文字のみが含まれている場合。

しかしパスワードを例"12345qwerty"のために数字と文字が含まれている場合、それは偽の値を返し、それは数字または文字を5ポイントを追加言い含まれているかどうかを確認するためにelif文の上に移動し、まだそれならばなければなりませんしないでくださいもう一度試してくださいしかしそれはありません。パスワード"12345qwerty"には文字と数字の両方が含まれており、falseとして返されるため、値はTrueとして返され、意味のない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 ]は小文字で、少なくとも1つのケース文字があり、それ以外の場合はfalseです。

[4]大文字と小文字が区別されるのは、一般的なカテゴリプロパティが "Lu"(レター、大文字)、 "L1"(レター、小文字)、または "Lt"(レター、タイトルケース)のいずれかです。

あなただけの文字があったかどうかをテストしたい場合は、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

関連する問題