ひるあんどんブログ

色々なことに手を出してみるブログ

House password

StephanとSophiaはセキュリティを忘れて何にでも単純なパスワードを使います。 パスワードのセキュリティ検査モジュールを開発してNikolaを助けます。 十分強いと考えられるパスワードは長さが10文字以上です。 少なくとも一つ以上の数字、一つ以上の大文字、一つの以上の小文字を含みます。 パスワードはASCIIの英文字または数字のみを含んでいます。

入力: パスワード、文字列 (Unicode for Python 2.7)

出力: パスワードが安全かどうか、ブール値もしくはブール値に変換できるかブール値として処理できる任意のデータ型。 結果として変換された結果を見るでしょう。

Example:

checkio('A1213pokl') == False

checkio('bAse730onE') == True

checkio('asasasasasasasaas') == False

checkio('QWERTYqwerty') == False

checkio('123456123456') == False

checkio('QwErTy911poqqqq') == True




どのように使われるか: あなたのアプリケーションやサービスのセキュリティを気にするなら、あなたのユーザーのパスワードの複雑さを検査できます。 あなたは、あなたのユーザのパスワードがより多くの条件(記号やunicode)に合致するようにこれらのスキルを使うことがでます。

事前条件:
re.match("[a-zA-Z0-9]+", password)
0 < len(password) ≤ 64

def checkio(data):
    length = len(data)
    if length < 10:
        return False
    
    flag_digit = False
    flag_lower = False
    flag_upper = False
    
    for x in data:
        if x.isdigit(): flag_digit = True
        elif x.isupper(): flag_upper = True
        elif x.islower(): flag_lower = True
        
    if flag_digit and flag_upper and flag_lower: return True
    #replace this for solution
    return False

素直に、まず文字列の長さを調べて短過ぎたらFalseを返した。

あとは、今回初めて知ったけど数字があるかどうか、大文字か、小文字かを調べる便利なメソッドpythonにはあるので(それぞれisdigit,isupper,islower)これを素直に使ってこれをすべて満たせばTrueを返してそうでなければFalseを返した。

他の人の答えはあとからみようっと。