ホームページをリニューアルしました。旧HPはこちら
歳時記 ソフト・ハードウェア Python

2025-08-30 文字並び替クイズ作成自動化

啓子さんに脳トレ問題を提供するためにウェブサイトを検索して、下記のような文字並び替えクイズをプリントアウトしている。しかし検索に時間がかかるし、一品一葉の問題を印刷する時間もばかにならないので、オリジナルの単語を入力して、自動で文字並び替えクイズが作成できるプログラムを作成した。

文字並び替えプログラム(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でコードを作成すると、プログラムを容易に仕上げることができる。

 

コメント

タイトルとURLをコピーしました