2

暗算ドリルの問題を生成する Python スクリプトを作成しています。足し算と掛け算の問題は簡単でしたが、引き算の問題を公平に生成しようとして困っています。

被減数 (最初の数値) の最小値と最大値を指定できるようにしたいと考えています。たとえば、2 桁の減算の場合は 20 から 99 の間である必要があります。減数には範囲オプション (11-99) も必要です。 、 いう)。この状況では、答えは正である必要があり、できれば最小値、たとえば 10 に制限されている必要があります。

そう:

  • 20 < 被減数 < 99
  • 11 < 減算 < 99
  • 答え = 被減数 - 減数
  • 答え >= 10

もちろん、すべての数値は変数として使用する必要があります。

これらの条件を次のように満たしています。

ansMin, ansMax = 10, 99
subtrahendMin, minuendMax = 11,99
# the other max and min did not seem to be necessary here,
# and two ranges was the way I had the program set up

answer = randint(ansMin, ansMax)
subtrahend = randint(subtrahendMin, minuendMax - answer)
minuend = answer + subtrahend # rearranged subtraction equation

ここでの問題は、答えと減数が最初に生成され、一緒に加算され、範囲の下位 25% にあったそれらのセクションのみが 50 未満の結果を取得するため、被減数の値がほぼ 50 を超えることになります。 %。(編集: 厳密にはそうではありません。たとえば、下位 1% と下位 49% を足すとうまくいきます。パーセンテージで表すのは適切ではありませんが、考え方は明確だと思います。)

また、minuend と subtrahend の両方の値を完全にランダムに生成し、基準に一致しない場合は答えを破棄することも検討しました (つまり、minuend が、少なくとも answerMin よりも大きい値だけ減数よりも大きく、それらがどちらも上記の基準内にあります) が、同様のバイアスが生じると考えました。

完全に均等であることは気にしませんが、これはあまりにもかけ離れています。被減数の値が許容範囲内で完全にランダムになり、減算値が被減数で許容される範囲全体でランダムになるようにしたいと思います (正しいと考えている場合、これは低い値を優先してバイアスされます)。回答の分布についてはあまり気にしていないと思います (途方もなく偏っていない限り)。これを計算するより良い方法はありますか?

4

3 に答える 3