【Python】正規表現を利用していつ・どこで・だれが・何をしたゲーム
目的
・正規表現を学んだのでとりあえず楽しく使ってみる
環境
- Visual Studio Code
- Python
手順
すべてひとつのファイル(practice.py)に書きました。
①正規表現のための標準ライブラリであるreモジュールをインポート
practice.py
import re
②質問を用意
practice.py
question = "いつ?どこで?だれが?何をした?"
③関数four_ws_gameを定義
practice.py
def four_ws_game(sentence):
words = re.findall(".*??", sentence)
i = 0
while i < len(words):
answer = input(f"{words[i]}:").strip()
if answer == "":
print("真面目にやってください")
else:
sentence = sentence.replace(words[i], answer)
i += 1
print(sentence)
- Visual Studio Code
- Python
手順
すべてひとつのファイル(practice.py)に書きました。
①正規表現のための標準ライブラリであるreモジュールをインポート
practice.py
import re
②質問を用意
practice.py
question = "いつ?どこで?だれが?何をした?"
③関数four_ws_gameを定義
practice.py
def four_ws_game(sentence):
words = re.findall(".*??", sentence)
i = 0
while i < len(words):
answer = input(f"{words[i]}:").strip()
if answer == "":
print("真面目にやってください")
else:
sentence = sentence.replace(words[i], answer)
i += 1
print(sentence)
practice.py
import re
practice.py
question = "いつ?どこで?だれが?何をした?"
practice.py
def four_ws_game(sentence):
words = re.findall(".*??", sentence)
i = 0
while i < len(words):
answer = input(f"{words[i]}:").strip()
if answer == "":
print("真面目にやってください")
else:
sentence = sentence.replace(words[i], answer)
i += 1
print(sentence)
わかりづらいので分解して見てみましょう。
3-1. reモジュールのfindall関数を利用
- findall関数は文章(sentence)の中で一致した部分をリストにして変数wordsに渡します
- 正規表現における. (ピリオド)は任意の一文字を意味する
- * (アスタリスク)は繰り返しを意味する
practice.py
words = re.findall(".*??", sentence)
つまりこのプログラムは、文章(sentense)の中から末尾に?(全角クエスチョン)が付く任意の文字数の単語探し出し、リスト化します。
-
?(半角クエスチョン)は上記の単語を一つ一つ分けて取り出すために必要です
- ?(半角クエスチョン)の有無でリストの中身がどう変わるのか見てみましょう
有
practice.py
words = re.findall(".*??", sentence)
print(words)
実行結果
['いつ?', 'どこで?', 'だれが?', '何をした?']
無
practice.py
words = re.findall(".*?", sentence)
print(words)
実行結果
['いつ?どこで?だれが?何をした?']
3-2. 文章(sentence)の中身を入力値に書き換えてプリント
practice.py
i = 0
while i < len(words):
answer = input(f"{words[i]}:").strip()
if answer == "":
print("真面目にやってください")
else:
sentence = sentence.replace(words[i], answer)
i += 1
print(sentence)
④sentenceを最初に用意した質問(question)にして実行
practice.py
four_ws_game(question)
コード全体
practice.py
import re
question = "いつ?どこで?だれが?何をした?"
def four_ws_game(sentence):
words = re.findall(".*??", sentence)
i = 0
while i < len(words):
answer = input(f"{words[i]}:").strip()
if answer == "":
print("真面目にやってください")
else:
sentence = sentence.replace(words[i], answer)
i += 1
print("何があったの?:" + sentence)
four_ws_game(question)
- 実行結果
いつ?:きのう
どこで?:家で
だれが?:ねこが
何をした?:ねころんだ
何があったの?:きのう家でねこがねころんだ
- 空欄にしようとすると怒られます
いつ?:きのう
どこで?:
真面目にやってください
どこで?:家で
だれが?:ねこが
何をした?:
真面目にやってください
何をした?:犬になった
何があったの?:きのう家でねこが犬になった
practice.py
import re
question = "いつ?どこで?だれが?何をした?"
def four_ws_game(sentence):
words = re.findall(".*??", sentence)
i = 0
while i < len(words):
answer = input(f"{words[i]}:").strip()
if answer == "":
print("真面目にやってください")
else:
sentence = sentence.replace(words[i], answer)
i += 1
print("何があったの?:" + sentence)
four_ws_game(question)
いつ?:きのう
どこで?:家で
だれが?:ねこが
何をした?:ねころんだ
何があったの?:きのう家でねこがねころんだ
いつ?:きのう
どこで?:
真面目にやってください
どこで?:家で
だれが?:ねこが
何をした?:
真面目にやってください
何をした?:犬になった
何があったの?:きのう家でねこが犬になった
Author And Source
この問題について(【Python】正規表現を利用していつ・どこで・だれが・何をしたゲーム), 我々は、より多くの情報をここで見つけました https://qiita.com/chiiirotty/items/d5a30d75ecb797bd5e00著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .