啓子さんに脳トレ問題を提供するためにウェブサイトを検索して、下記のような文字並び替えクイズをプリントアウトしている。しかし検索に時間がかかるし、一品一葉の問題を印刷する時間もばかにならないので、オリジナルの単語を入力して、自動で文字並び替えクイズが作成できるプログラムを作成した。
文字並び替えプログラム(anagram_excel.py)
Pythonで作成。
・オリジナルの言葉を、moji.csvに入力
・これを以下のPythonプログラムに読み込ませる。
・文字並び替えクイズがEXCEL形式で出力される
# coding: utf-8
# coding: cp932
# coding: euc-jp
# anagram_excel.py
import random
import pandas as pd
import openpyxl
import xlrd
def create_anagram(input_string):
"""
与えられた文字列のアナグラムを作成。
"""
characters = list(input_string) # 文字列を文字のリストに変換
random.shuffle(characters) # 文字列のリストをランダムにシャッフル
anagram_string = "".join(characters) # シャッフルされたリストを結合して文字列にする
if anagram_string == input_string:
random.shuffle(characters) # 文字列のリストをランダムにシャッフル
anagram_string = "".join(characters) # シャッフルされたリストを結合して文字列にする
return anagram_string
# 並び替え文字読み込み
title = ['input']
df=pd.read_csv("moji.csv",header=None, names=title)
original=df['input']
# 問題データ作成
data=[]
num=len(original)
for i in range(num):
original_word = original[i]
anagram = create_anagram(original_word)
data.append([i+1, anagram, '-->', '', '', original_word])
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, Border, Side
# 新しいExcelファイルを作成
wb = Workbook()
ws = wb.active
ws.title = "クイズ"
# フォント設定(サイズ24)
font = Font(size=24)
# セル中央揃え
align_center = Alignment(horizontal="center", vertical="center")
# 罫線(細い線)
thin_border = Border(
left=Side(style="thin"),
right=Side(style="thin"),
top=Side(style="thin"),
bottom=Side(style="thin")
)
# 行の高さ設定(1〜7行まで例として設定)
for row in range(1, num+3):
ws.row_dimensions[row].height = 60
# 列幅設定
ws.column_dimensions['A'].width = 10
ws.column_dimensions['B'].width = 30
ws.column_dimensions['C'].width = 15
ws.column_dimensions['D'].width = 30
ws.column_dimensions['E'].width = 15
ws.column_dimensions['F'].width = 30
# タイトル行(A1:D1を結合)
ws.merge_cells("A1:C1")
cell = ws["A1"]
cell.value = "文字並び替えクイズ"
cell.font = font
cell.alignment = align_center
# 見出し
headers = ["番号", "問題", "", "並び替え","","original"]
for col_idx, header in enumerate(headers, start=1):
cell = ws.cell(row=2, column=col_idx, value=header)
cell.font = font
cell.alignment = align_center
cell.border = thin_border
# データ書き込み
for row_idx, row_data in enumerate(data, start=3):
for col_idx, value in enumerate(row_data, start=1):
cell = ws.cell(row=row_idx, column=col_idx, value=value)
cell.font = font
cell.alignment = align_center
cell.border = thin_border
# 編集したいシートを選択する
sheet = wb.active
# 1行目から2行目をタイトル行にする
sheet.print_title_rows = '1:2' # 1行目と2行目を繰り返す
# Excelファイル保存
wb.save("anagram_quiz.xlsx")
例:
入力ファイル moji.csv
うんどうじょう
ほけんしつ
たいいくかん
こくばん
じょうぎ
えんぴつ
けいさんき
ふでばこ
とけいだい
こうてい
出力結果: 1ページに10問掲載
与えられた文字列のアナグラムを作成するコードは、ChatGPTに依頼して作成した。
文字列のリストをランダムにシャッフルする命令をネットで探すより、ChatGPTに作成をお願いするほうが効率的。定型作業は細かなプロセスに分けて、そのプロセスごとにをChaGPTでコードを作成すると、プログラムを容易に仕上げることができる。
コメント