![見出し画像](https://assets.st-note.com/production/uploads/images/42251821/rectangle_large_type_2_174aff4af6b286b3ceddb56cc72bffb0.png?width=1200)
python#2.2 文字種クイズ制作用ツール
今年の箱根駅伝はかなり実力が拮抗していて面白いですね。周りに他の選手がいる場面が多くなって、実力の限界を突破する走りを見せてくれる選手の登場に期待が高まります。
文字種クイズ
文字種クイズは、端的に言えば「334ナンテ言うのはNo!」を「000アアア漢あああAa!」と表記し、後者から前者を導かせるような問題です。
Quizknockさんのこの動画で一躍有名になったジャンルです(たぶん)。https://youtu.be/1GybUrTg8Zo
クイズアプリ・みんなで早押しクイズ(みんはや)で文字種クイズを出題されている方がいらっしゃったので、自分でも制作したいと思いプログラムを組みました。
ソースコード
import re
import regex
import tkinter as tk
import tkinter.filedialog
# 文字種 (英語小文字, 大文字, 数字, ひらがな, カタカナ, 漢字, その他) を判別するメソッド
pEng = re.compile('[a-z]+')
pENG = re.compile('[A-Z]+')
pNum = re.compile('[0-9]+')
pHira = regex.compile(r'\p{Script=Hiragana}+')
pKata = regex.compile(r'\p{Script=Katakana}+')
pKanji = regex.compile(r'\p{Script=Han}+')
# 文字列sの各文字について、その文字種に応じて代表値に変換
def conv():
with open(filename,'a') as f:
while True:
s = input('変換前の文字列を入力してください:')
# 変換値を順にリストに格納
conv = []
for i in range(len(s)):
if pEng.match(s[i]):
conv.append('a')
elif pENG.match(s[i]):
conv.append('A')
elif pNum.match(s[i]):
conv.append('0')
elif pHira.match(s[i]):
conv.append('あ')
elif pKata.match(s[i]):
conv.append('ア')
elif pKanji.match(s[i]):
conv.append('漢')
else:
conv.append(s[i])
# リストから文字列にまとめ直す
s_conv = ''.join(conv)
print(s_conv)
f.write(s + '\t' + s_conv + '\n')
# ここからメインプログラム
if __name__ == '__main__':
# ファイルに書き込んで、データとして保存しておく
# filedialogを利用して書き出し用のファイル名を得る
root = tk.Tk()
root.withdraw()
filename = tkinter.filedialog.asksaveasfilename()
root.destroy()
if filename:
pass
else:
print('No file specified')
# ファイルを開く
try:
conv()
# ファイルを開く時のエラー対応
except IOError:
print('ファイルを開くことができません')
+ tkinter はファイルを開くために使用しているだけです。別に tkinter を使わなくてもファイルへの書き込みは可能です。
+ regex は標準モジュールではないので、pip / conda install regex で落としてくる必要があります。ちなみに僕の mac は Anaconda 環境です。
+ 書き出し形式をタブ区切り形式にしているのは、文字種に変換したい題材にカンマが含まれる場合があるためです。タブが入っているような題材はほぼないはずなので。txt 形式で保存して、それから Excel で開くのが手っ取り早いと思います。
参考記事
・漢字をひらがなに変換するライブラリ「pykakasi」→見たけれど結局使用せず
https://qiita.com/Qiitaman/items/d19da03d04805b92cc6c
・正規表現で文字種を判定, 抽出, カウントする方法
https://note.nkmk.me/python-re-regex-character-type/
・正規表現モジュール「re」
https://note.nkmk.me/python-re-match-search-findall-etc/
・公式ドキュメント「re」
https://docs.python.org/ja/3/library/re.html#module-re
・raw文字列
https://www.javadrive.jp/python/string/index4.html
・リストを文字列に変換する (join)
https://www.delftstack.com/ja/howto/python/how-to-convert-a-list-to-string/
・文字列にもリストのようにインデックスが適用できる
https://www.irohabook.com/python-string-each
・エスケープシーケンス→タブの改行文字を調べただけ
https://www.javadrive.jp/python/string/index2.html
この記事が気に入ったらサポートをしてみませんか?