<kaggle_start><code>from learntools.core import binder

binder.bind(globals())
from learntools.python.ex6 import *

print("Setup complete.")

# まずはウォーミングアップとして、文字列の長さを予想してみましょう。。
# 以下の5つの文字列のそれぞれについて、その文字列を `len()` に入れると何が返ってくるかを予測してください。変数 `length` を使ってそこに答えを入力し、セルを実行して予想が正しいかどうかを確認してください。
# # 0a.
a = ""
length = ____
q0.a.check()

# # 0b.
b = "it's ok"
length = ____
q0.b.check()

# # 0c.
c = "it's ok"
length = ____
q0.c.check()

# # 0d.
d = """hey"""
length = ____
q0.d.check()

# # 0e.
e = "\n"
length = ____
q0.e.check()


# # 1.
# "データサイエンティストは、80%の時間をデータのクリーニングに費やし、20%の時間をデータのクリーニングについての不満に費やす "という言葉があります。アメリカの郵便番号データを綺麗にするするための関数を書けるかどうか試してみましょう。文字列が与えられると、その文字列が有効な郵便番号であるかどうかを返す必要があります。ここでは、有効な郵便番号とは、正確に5桁の数字で構成される文字列のことです。
# ヒント: `str` には、実は隠された機能があります。(string型の後ろにくっつけるもの。c言語系をやった時に結構使いました）。その機能を見るには、`help(str)`を使ってください。
def is_valid_zip(zip_code):
    """Returns whether the input string is a valid (5 digit) zip code"""
    pass


# 答え合わせをする
q1.check()
# q1.hint()
# q1.solution()


# # 2.
# ある研究者が何千ものニュース記事を集めました。しかし、彼女は特定の単語を含む記事に注目したいと考えています。彼女が記事のリストをフィルタリングできるように、以下の条件を満たす関数を作ってください！
# - キーワードの文字列が、より大きな単語の一部としてのみ表示される文書は含めません。例えば、彼女が "closed "というキーワードを探していた場合、"enclosed "という文字列は含めないようにします。
# - 大文字と小文字は区別する必要はありません。つまり、キーワードが "closed "の場合、"Closed the case. "というフレーズが含まれます。
# - ピリオドやカンマがマッチする内容に影響しないようにします。キーワードが "closed "の場合は、"It is closed. "も含まれます。しかし、他の種類の句読点はないと考えてよいでしょう。
#
def word_search(doc_list, keyword):
    """
    ドキュメントのリスト(各ドキュメントは文字列)と検索するキーワードを受け取ります。 キーワードを含むドキュメントのインデックスの値のリスト（すべて）を返します。
    例:
    doc_list = ["The Learn Python Challenge Casino.", "They bought a car", "Casinoville"]
    >>> word_search(doc_list, 'casino')
    >>> [0]
    """
    pass


# 答え合わせをする
q2.check()
# q2.hint()
# q2.solution()


# # 3.
# 今、研究者は、さっきとは違い、複数のキーワードを検索したいと考えています。先ほどのものに加え、検索キーワードを複数入力可能な関数を作成してください。
# (この関数を実装する際には、先ほど書いた `word_search` 関数を使うことをお勧めします。このようにコードを再利用することで、プログラムがより強固で読みやすくなり、タイピングの手間も省けます！)
def multi_word_search(doc_list, keywords):
    """
     doc_list（各ドキュメントは文字列）とkeywords(検索キーワードのリスト)を受け取ります。
    それぞれのキーワードで、検索結果として得られたインデックスのリスト（doc_listから）である辞書型の配列を返します。
    >>> doc_list = ["The Learn Python Challenge Casino.", "They bought a car and a casino", "Casinoville"]
    >>> keywords = ['casino', 'they']
    >>> multi_word_search(doc_list, keywords)
    {'casino': [0, 1], 'they': [1]}
    """
    pass


# Check your answer
q3.check()
# q3.solution()
<|endoftext|>
[{"Id": 70782082, "ScriptId": 19340424, "ParentScriptVersionId": NaN, "ScriptLanguageId": 9, "AuthorUserId": 5973981, "CreationDate": "08/09/2021 02:54:34", "VersionNumber": 3.0, "Title": "(\u65e5\u672c\u8a9e\u8a33) Exercise: Strings and Dictionaries", "EvaluationDate": "08/09/2021", "IsChange": false, "TotalLines": 129.0, "LinesInsertedFromPrevious": 0.0, "LinesChangedFromPrevious": 0.0, "LinesUnchangedFromPrevious": 129.0, "LinesInsertedFromFork": 25.0, "LinesDeletedFromFork": 26.0, "LinesChangedFromFork": 0.0, "LinesUnchangedFromFork": 104.0, "TotalVotes": 7}]
from learntools.core import binder

binder.bind(globals())
from learntools.python.ex6 import *

print("Setup complete.")

# まずはウォーミングアップとして、文字列の長さを予想してみましょう。。
# 以下の5つの文字列のそれぞれについて、その文字列を `len()` に入れると何が返ってくるかを予測してください。変数 `length` を使ってそこに答えを入力し、セルを実行して予想が正しいかどうかを確認してください。
# # 0a.
a = ""
length = ____
q0.a.check()

# # 0b.
b = "it's ok"
length = ____
q0.b.check()

# # 0c.
c = "it's ok"
length = ____
q0.c.check()

# # 0d.
d = """hey"""
length = ____
q0.d.check()

# # 0e.
e = "\n"
length = ____
q0.e.check()


# # 1.
# "データサイエンティストは、80%の時間をデータのクリーニングに費やし、20%の時間をデータのクリーニングについての不満に費やす "という言葉があります。アメリカの郵便番号データを綺麗にするするための関数を書けるかどうか試してみましょう。文字列が与えられると、その文字列が有効な郵便番号であるかどうかを返す必要があります。ここでは、有効な郵便番号とは、正確に5桁の数字で構成される文字列のことです。
# ヒント: `str` には、実は隠された機能があります。(string型の後ろにくっつけるもの。c言語系をやった時に結構使いました）。その機能を見るには、`help(str)`を使ってください。
def is_valid_zip(zip_code):
    """Returns whether the input string is a valid (5 digit) zip code"""
    pass


# 答え合わせをする
q1.check()
# q1.hint()
# q1.solution()


# # 2.
# ある研究者が何千ものニュース記事を集めました。しかし、彼女は特定の単語を含む記事に注目したいと考えています。彼女が記事のリストをフィルタリングできるように、以下の条件を満たす関数を作ってください！
# - キーワードの文字列が、より大きな単語の一部としてのみ表示される文書は含めません。例えば、彼女が "closed "というキーワードを探していた場合、"enclosed "という文字列は含めないようにします。
# - 大文字と小文字は区別する必要はありません。つまり、キーワードが "closed "の場合、"Closed the case. "というフレーズが含まれます。
# - ピリオドやカンマがマッチする内容に影響しないようにします。キーワードが "closed "の場合は、"It is closed. "も含まれます。しかし、他の種類の句読点はないと考えてよいでしょう。
#
def word_search(doc_list, keyword):
    """
    ドキュメントのリスト(各ドキュメントは文字列)と検索するキーワードを受け取ります。 キーワードを含むドキュメントのインデックスの値のリスト（すべて）を返します。
    例:
    doc_list = ["The Learn Python Challenge Casino.", "They bought a car", "Casinoville"]
    >>> word_search(doc_list, 'casino')
    >>> [0]
    """
    pass


# 答え合わせをする
q2.check()
# q2.hint()
# q2.solution()


# # 3.
# 今、研究者は、さっきとは違い、複数のキーワードを検索したいと考えています。先ほどのものに加え、検索キーワードを複数入力可能な関数を作成してください。
# (この関数を実装する際には、先ほど書いた `word_search` 関数を使うことをお勧めします。このようにコードを再利用することで、プログラムがより強固で読みやすくなり、タイピングの手間も省けます！)
def multi_word_search(doc_list, keywords):
    """
     doc_list（各ドキュメントは文字列）とkeywords(検索キーワードのリスト)を受け取ります。
    それぞれのキーワードで、検索結果として得られたインデックスのリスト（doc_listから）である辞書型の配列を返します。
    >>> doc_list = ["The Learn Python Challenge Casino.", "They bought a car and a casino", "Casinoville"]
    >>> keywords = ['casino', 'they']
    >>> multi_word_search(doc_list, keywords)
    {'casino': [0, 1], 'they': [1]}
    """
    pass


# Check your answer
q3.check()
# q3.solution()
