はじめに
高専生の皆さん、微積の単位は取れていますか?
過去問を解くだけじゃ演習量が足りないし、市販の問題集は高い...。
しかも「答えを覚えてしまう」ことってありますよね。
「なら、無限に問題が出るアプリを作ればいいじゃない」
ということで、Pythonを使って**「起動するたびに数式がランダム生成される微積ドリル」**を自作しました。
留年回避のための執念のプロダクトです。
作ったもの
♾️ Kosen Math Drill (Infinite Calculus)
SymPyで数式を生成し、TkinterでGUIを作ったデスクトップアプリです。
こだわりポイント
- 完全ランダム生成: 係数や関数が毎回変わるため、答えを暗記できません。一生新しい問題が出ます。
- 高難易度対応: テストで狙われやすい「商の微分」「合成関数」「部分積分」「逆三角関数」も完全網羅。
- 没入型UI: 集中力を高めるダークモード(Cyberpunk Style)を採用。
- 解説機能: 間違えた場合、数式を綺麗にレンダリングして正解を表示します。
技術スタック
- 言語: Python 3.10
- 数式処理: SymPy
- GUI: Tkinter (標準ライブラリ)
- グラフ描画: Matplotlib
- 配布: PyInstaller でexe化
どうやって「無限生成」しているか?
一番の肝は SymPy を使ったランダム生成ロジックです。
単にランダムな数字を出すのではなく、**「数式の部品」**をランダムに組み合わせています。
import sympy
import random
x = sympy.Symbol('x')
def get_random_func():
# 1. 基本的な部品を用意(多項式、三角関数、指数関数...)
parts = [
x ** random.randint(1, 3),
sympy.sin(x),
sympy.cos(x),
sympy.exp(x),
sympy.log(x)
]
# 2. ランダムに2つ選んで掛け合わせたり、合成したりする
func = random.choice(parts) * random.choice(parts)
# 3. 係数をランダムにつける
coeff = random.randint(2, 9)
return coeff * func
# これを微分・積分問題として出題する
problem = get_random_func()
answer = sympy.diff(problem, x)
このように、部品を定義してガチャのように組み合わせることで、**「人間が解けるギリギリのライン」**の複雑な数式を生み出しています。
ダウンロード(GitHub)
ソースコードと、Windowsですぐに動くexeファイルをGitHubで公開しています。
テスト前の学生も、Python初学者の方も、ぜひ遊んでみてください!
👉 ダウンロードはこちら (GitHub Releases)
おわりに
「欲しいものがなければ自分で作る」。これがエンジニアの醍醐味ですね。
今回はPythonで作りましたが、次はWebブラウザ上で動く**「C言語ポインタ学習シミュレーター」**を作る予定です。
もし気に入ったら、GitHubの Star(⭐️) や、Qiitaの いいね(LGTM) をもらえると開発の励みになります!

