【Python】これで英語の文法でも勉強しとけ | 英文の並び替え問題を作る

2025年8月16日土曜日

Python wxPython wxPythonサンプル

t f B! P L
 投稿してない期間が続いてしまい申し訳ないです。
今回は久しぶりに、テスト期間に地味に役に立った自作ソフトを紹介します。


このように、並び替え問題を自動で作成してくれます。
また、間違えた問題だった場合、「次週に再表示」を押すことで、2週目に突入し、全問正解するまで繰り返し練習できます。


このプログラムを作成するにあたって必要なのは「プログラム」と「文ファイル」です。
まず、プログラムは以下の通りです。
import wx
import random

class MyFrame(wx.Frame):
    def Next(self, event=None):
        tmp = self.english[self.num].replace("\n","").replace(".","").split()
        random.shuffle(tmp)
        for t in tmp:
            self.now = self.now + "/" + t
        self.label_english.SetLabel(self.now)
        self.now = ""
        self.label_japanese.SetLabel(self.japanese[self.num])

    def onButton(self, event=None):
        if self.jotai == 0:
            self.jotai = 1
            self.button.SetLabel("次へ")
            self.button1.Enable()
            self.label_english.SetLabel(self.english[self.num])
        elif self.jotai == 1:
            self.jotai = 0
            self.num += 1
            if self.num >= len(self.japanese):
                self.label_english.SetLabel("ご苦労様でした。")
                self.label_japanese.SetLabel("このレッスンは終了しました。")
                self.button.SetLabel("終了")
                self.button1.Disable()
                self.jotai = 2
            else:
                self.button.SetLabel("答え表示")
                self.button1.Disable()
                self.Next()
        elif self.jotai == 2:
            self.num = 0
            self.now = ""
            self.jotai = 0
            self.Destroy()
    
    def onReButton(self, event = 0):
        self.english.append(self.english[self.num])
        self.japanese.append(self.japanese[self.num])
        self.button1.Disable()

    def __init__(self):
        self.japanese = []
        self.english = []
        self.num = 0
        self.now = ""
        self.jotai = 0
        wx.Frame.__init__(self, None, -1, "English", size=(650, 300))
        panel = wx.Panel(self, -1)
        file = open("sentence.dat","r", encoding="UTF-8")
        data = file.readlines()
        file.close()
        i = 0
        for t in data:
            if i % 2 == 0:
                self.japanese.append(t)
            else:
                self.english.append(t)
            i += 1
        self.label_english = wx.TextCtrl(panel, -1, "", pos=(10, 10),size = (600, 60), style=wx.TE_READONLY)
        self.label_japanese = wx.StaticText(panel, -1, "",pos=(10, 80))
        font = wx.Font(12, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, underline=False, faceName="メイリオ", encoding=wx.FONTENCODING_DEFAULT)
        self.label_english.SetFont(font)
        self.label_japanese.SetFont(font)
        self.button = wx.Button(panel, -1, "答え表示", pos = (10, 130), size=(200, 40))
        self.button.Bind(wx.EVT_BUTTON, self.onButton)
        self.button.SetFont(font)
        self.button1 = wx.Button(panel, -1, "次週に再表示", pos = (220,130), size=(200, 40))
        self.button1.Bind(wx.EVT_BUTTON, self.onReButton)
        self.button1.SetFont(font)
        self.button1.Disable()
        self.Next()

if __name__ == "__main__":
    app = wx.App(False)
    MyFrame().Show()
    app.MainLoop()

かなり変数名などでセンスの無さを感じるでしょうが、私のクオリティなので許してください。

続いて文ファイルです。
ここはご自身で書いていただく必要がでてきます。今回はサンプルとして、以下を提供します。ファイル名は「sentence.dat」にして保存してください。

群馬県は東北地方の一部です。
Gunma is part of the Tohoku area.
山形県民は常にさくらんぼを食べています。
Yamagata residents are always eating cherries.
静岡県ではお茶以外に飲むものがありません。
In Shizuoka, there is nothing else to drink tea.
青森県民はりんごに飽きています。
Aomori residents are tired of apples.
福井県は日本人に認知されていますか?
Is Fukui well known among Japanese people?

必ず同じフォルダに保存してください。

以上、実行するとスタートできます。
一応、英文についてはCpilotさんに確認してもらいましたが、結構指摘をくらいました。


ここで書いた5つの都道府県について指摘をいただきましたが、文法的にはまちがっていないはずなので、大丈夫です。

このブログを検索

要望について

ブログのレイアウトやテーマについての提案をいただきました。現在qooqテーマを適応中です。 語尾を自動でつけるプログラムを作りたいという要望をいただきました。是非紹介したいですがどの言語でどのようなプログラムかなど、お問い合わせフォームで詳しく教えてください!

最近の出来事

最近の出来事
寿司打お勧め75位♪(練習モードだけど)

アンケート

Welcome!

「プログラミング独学ブログ」へようこそ。 Yakinyといいます。幅広い範囲で投稿していますので、ぜひ過去の記事も見てみてください!!コメントも大歓迎です!更新がとまってしまって申し訳ございません

お問い合わせ

名前

メール *

メッセージ *

QooQ