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