Python学習にCheckioのすすめ

#話すこと
この間、仕事先の先輩から聞いたCheckioというものを試してみて、ハマった~~(卒論締め切り間近に面白くて時間が溶けた)~~ので紹介したいと思う。

#Checkioとは
pythonとJavaScriptについて、問題を解きながら学習を進めていくというもの。
問題に正解すると次の問題が解けるようになっていくので、完全にゲーム感覚で進めていける。~~(これが時間を溶かす原因)~~

#Checkioの良いところ
pythonの学習については[Progate](https://prog-8.com/languages/python)なんかが有名だと思うけれど、これはレッスンが進むとお金がかかってしまう...
もちろんお金をかけた分だけ良いレッスンが受けれるので、お金をかけるのも当然ありだと思う。
###ただ、タダより良いものはないというのが人の性だと思います！
####そして、こう書いているのでCheckioは無料でできるんです!

また、Checkioはweb上で問題を解いていくのでハマりがちなPythonの環境構築をしなくて良いのも魅力の１つだと思います。

さらに、Checkioは書いたコードを投稿できて、見た人からコメントをもらえる上に、自分が正解した問題については、他人の投稿したコードを見ることができます！
これを見るだけでも相当良い勉強になるんじゃないかなと思います！

難しい問題にはヒントもついているものもあり、そのヒントをもとに解いていくこともできるので、初めてPythonやる人にもおすすめできます。

#Checkioの今一歩の点
これに関しては完全に個人的な意見なのですが、問題文等々が英語なので、そこだけ少し苦労します...~~(英語勉強すれば良い話)~~
これ読んだ人が始めてくれて、日本人でやってる人の人口増えたら、日本語版リリースされないかなという淡い期待を持ちつつこの記事書いてます...

#Checkioの始め方
[Checkio](https://py.checkio.org/)ここから、ページに飛んで、Githubアカウント、Facebookアカウント、Googleアカウントのどれかでログインできます。

#例題
ログインする前にどんな問題があるのか知りたいという人もいると思うので、例題として、実際にCheckioに出されている問題を載せます。
あんまり例題載せると楽しみなくなるので、1問だけにします。

> 問題
> 長さが10文字以上で、大文字、小文字、数字を全て含むパスワードであるかどうかを判別してください。

```python
def checkio(data):
# この部分に回答となる巻数書いていきます。
    if len(data) < 10:
    # 長さが10未満のものを排除
        return False
    elif data.isalpha():
    # 全てアルファベットのものを排除
        return False
    elif data.islower():
    # 全て小文字のものを排除
        return False
    elif data.isupper():
    # 全て大文字のものを排除
        return False
    elif data.isdigit():
    # 全て数字のものを排除
        return False
    else:
    # 残ったものが良いパスワード
        return True
        
        

#Some hints
#Just check all conditions


if __name__ == '__main__':
    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert checkio('A1213pokl') == False, "1st example"
    assert checkio('bAse730onE4') == True, "2nd example"
    assert checkio('asasasasasasasaas') == False, "3rd example"
    assert checkio('QWERTYqwerty') == False, "4th example"
    assert checkio('123456123456') == False, "5th example"
    assert checkio('QwErTy911poqqqq') == True, "6th example"
    print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
```
上記のは私の回答です。
ちなみに投稿された中で1番ランキングが高かったコードは以下の感じ

```python
import re

DIGIT_RE = re.compile('\d')
UPPER_CASE_RE = re.compile('[A-Z]')
LOWER_CASE_RE = re.compile('[a-z]')

def checkio(data):
    """
    Return True if password strong and False if not
    
    A password is strong if it contains at least 10 symbols,
    and one digit, one upper case and one lower case letter.
    """
    if len(data) < 10:
        return False
    
    if not DIGIT_RE.search(data):
        return False

    if not UPPER_CASE_RE.search(data):
        return False

    if not LOWER_CASE_RE.search(data):
        return False
        
    return True

if __name__ == '__main__':
    assert checkio('A1213pokl')==False, 'First'
    assert checkio('bAse730onE4')==True, 'Second'
    assert checkio('asasasasasasasaas')==False, 'Third'
    assert checkio('QWERTYqwerty')==False, 'Fourth'
    assert checkio('123456123456')==False, 'Fifth'
    assert checkio('QwErTy911poqqqq')==True, 'Sixth'
    print('All ok')
```
正規表現使ってますね。
確かにこっちの方がパッと見で何してるかわかりやすいかもしれないです。

と、まぁ、こんな風に他の人の書いたコード見れるのはやっぱり勉強になるかなと思います。

#まとめ
ここまで、Checkioについて紹介してきました。
少しでも興味持ってくれた人とかいたら是非やってみてください！~~(無料なので笑)~~
やってみて良いと感じたら、他の人にも是非おすすめしてみたください！
最後にもう一度だけ、リンク貼っておきます。
[Checkio](https://py.checkio.org/)