はじめに
Pythonの勉強はもっぱらpaizaのコードガールこれくしょんないしはスキルチェックを利用していたのですが、今日は大昔に全然意味がわからなくて挫折したcheckioの課題に挑戦しました。
ちなみにコードガールこれくしょんはクッソ簡単な構文を早打ちするだけのゲームなので、Python触ったことない人の第一歩としてはともかく、ある程度慣れた人がやるとただの作業になります。
あと、この記事以降もですが、断りが無ければ基本的にPython3のことを扱います。
文字列検索(matchとsearch)
他にもあるのは知っていますが、基本的にここに書く記事では自分が触ったことを書きます。
(網羅的に知りたい人は以下の公式ドキュメントか、他の詳しい方の記事を参照願います)
文法のおさらい
| メソッド | 説明 | 構文 |
|---|---|---|
| match | 文字列の__先頭__に検索文字が含まれるか探す | match("検索文字","文字列") |
| search | 文字列の__中__に検索文字が含まれるか探す | search("検索文字","文字列") |
正規表現で検索文字を複数指定する
「とある文字列に英字大文字・小文字・数字が一文字以上含まれる」というのをやりたかったで色々調べました。
(参照リンク)
https://docs.python.jp/3/howto/regex.html#compiling-regular-expressions
https://qiita.com/wanwanland/items/ce272419dde2f95cdabc
結論から言うとできなかったので、条件文を三つ繋げるクソダサコードを書きました。
正規表現については、時間があったら(機会があったら)また調べるかもしれません。
調べる過程でわかったこと
- 英字小文字・英字大文字・数字が一文字以上順番に並んでいること
re.search("[a-z][A-Z][0-9]+", password)
- 英字小文字・英字大文字・数字のどれかが一文字以上含まれていること
re.search("[a-z]|[A-Z]|[0-9]+", password)
最終的に書いたコード
def checkio(data: str) -> bool:
import re
passwd = data
# 文字数チェック
if int(len(passwd)) < 10:
return False
# 文字列チェック
if bool(re.search("[a-z]+", passwd)) and bool(re.search("[A-Z]+", passwd)) and bool(re.search("[0-9]+", passwd)):
return True
else:
return False