INSIGHT

インサイト

2014年310

CheckIO Pythonの文字列操作の基本

CheckIO 第三問 パスワードの強度をチェックするモジュールを書け!

ポイントとしては以下の通りでしょうか。 (1) 文字数 (2) 文字列に特定の文字集合の文字が含まれるか

(1)ですが、最初ドキュメントみて、countメソッドだと早とちりしましたが、エラーがでたので再度調べたところ、len関数のようです。不思議。

(2)findメソッドで検索できますが、in演算子のほうがおすすめのようです。

大文字、小文字、数値をメソッドを使って判定しようかと思いハードコードにしようと思いましたが、定数があるようでしたので、そちらを利用します。

ざっくり適当に書いてみました。今回は、ループが2重なのがダメなコードですね。1回のループですませたいところです。

def checkio(data):
    if len(data) < 10:
        return False
    if not contains(data,string.ascii_uppercase):
        return False
    if not contains(data,string.ascii_lowercase):
        return False        
    if not contains(data,string.digits):
        return False
    return True
def contains(original,letters):
    for letter in letters:
        if letter in original:
            return True
    return False

ということで、ループ回数を減らすためにダサイコード(笑)にしてみました。

def checkio(data):
    if len(data) < 10:
        return False
    hasUpper = False
    hasLower = False
    hasDigit = False
    for letter in data:
        hasUpper = hasUpper or letter.isupper()
        hasLower = hasLower or letter.islower()
        hasDigit = hasDigit or letter.isdigit()
    return hasUpper and hasLower and hasDigit